diff options
Diffstat (limited to 'src/arm/macro-assembler-arm.h')
-rw-r--r-- | src/arm/macro-assembler-arm.h | 127 |
1 files changed, 21 insertions, 106 deletions
diff --git a/src/arm/macro-assembler-arm.h b/src/arm/macro-assembler-arm.h index 4f0ee82c..bcba0144 100644 --- a/src/arm/macro-assembler-arm.h +++ b/src/arm/macro-assembler-arm.h @@ -184,6 +184,10 @@ class MacroAssembler: public Assembler { } void Move(SwVfpRegister dst, SwVfpRegister src, Condition cond = al); void Move(DwVfpRegister dst, DwVfpRegister src, Condition cond = al); + void Move(QwNeonRegister dst, QwNeonRegister src); + // Register swap. + void Swap(DwVfpRegister srcdst0, DwVfpRegister srcdst1); + void Swap(QwNeonRegister srcdst0, QwNeonRegister srcdst1); void Load(Register dst, const MemOperand& src, Representation r); void Store(Register src, const MemOperand& dst, Representation r); @@ -557,6 +561,16 @@ class MacroAssembler: public Assembler { void VmovExtended(int dst_code, const MemOperand& src, Register scratch); void VmovExtended(const MemOperand& dst, int src_code, Register scratch); + void ExtractLane(Register dst, QwNeonRegister src, NeonDataType dt, int lane); + void ExtractLane(SwVfpRegister dst, QwNeonRegister src, Register scratch, + int lane); + void ReplaceLane(QwNeonRegister dst, QwNeonRegister src, Register src_lane, + NeonDataType dt, int lane); + void ReplaceLane(QwNeonRegister dst, QwNeonRegister src, + SwVfpRegister src_lane, Register scratch, int lane); + void Swizzle(QwNeonRegister dst, QwNeonRegister src, Register scratch, + NeonSize size, uint32_t lanes); + void LslPair(Register dst_low, Register dst_high, Register src_low, Register src_high, Register scratch, Register shift); void LslPair(Register dst_low, Register dst_high, Register src_low, @@ -635,17 +649,6 @@ class MacroAssembler: public Assembler { LoadNativeContextSlot(Context::GLOBAL_PROXY_INDEX, dst); } - // Conditionally load the cached Array transitioned map of type - // transitioned_kind from the native context if the map in register - // map_in_out is the cached Array map in the native context of - // expected_kind. - void LoadTransitionedArrayMapConditional( - ElementsKind expected_kind, - ElementsKind transitioned_kind, - Register map_in_out, - Register scratch, - Label* no_map_match); - void LoadNativeContextSlot(int index, Register dst); // Load the initial map from the global function. The registers @@ -678,9 +681,10 @@ class MacroAssembler: public Assembler { const ParameterCount& actual, InvokeFlag flag, const CallWrapper& call_wrapper); - void FloodFunctionIfStepping(Register fun, Register new_target, - const ParameterCount& expected, - const ParameterCount& actual); + // On function call, call into the debugger if necessary. + void CheckDebugHook(Register fun, Register new_target, + const ParameterCount& expected, + const ParameterCount& actual); // Invoke the JavaScript function in the given register. Changes the // current context to the context in the function before invoking. @@ -710,12 +714,9 @@ class MacroAssembler: public Assembler { Register scratch, Label* fail); - // --------------------------------------------------------------------------- - // Debugger Support - - void DebugBreak(); + // Frame restart support + void MaybeDropFrames(); - // --------------------------------------------------------------------------- // Exception handling // Push a new stack handler and link into stack handler chain. @@ -794,32 +795,6 @@ class MacroAssembler: public Assembler { void FastAllocate(Register object_size, Register result, Register result_end, Register scratch, AllocationFlags flags); - void AllocateTwoByteString(Register result, - Register length, - Register scratch1, - Register scratch2, - Register scratch3, - Label* gc_required); - void AllocateOneByteString(Register result, Register length, - Register scratch1, Register scratch2, - Register scratch3, Label* gc_required); - void AllocateTwoByteConsString(Register result, - Register length, - Register scratch1, - Register scratch2, - Label* gc_required); - void AllocateOneByteConsString(Register result, Register length, - Register scratch1, Register scratch2, - Label* gc_required); - void AllocateTwoByteSlicedString(Register result, - Register length, - Register scratch1, - Register scratch2, - Label* gc_required); - void AllocateOneByteSlicedString(Register result, Register length, - Register scratch1, Register scratch2, - Label* gc_required); - // Allocates a heap number or jumps to the gc_required label if the young // space is full and a scavenge is needed. All registers are clobbered also // when control continues at the gc_required label. @@ -856,14 +831,6 @@ class MacroAssembler: public Assembler { void GetMapConstructor(Register result, Register map, Register temp, Register temp2); - // Try to get function prototype of a function and puts the value in - // the result register. Checks that the function really is a - // function and jumps to the miss label if the fast checks fail. The - // function register will be untouched; the other registers may be - // clobbered. - void TryGetFunctionPrototype(Register function, Register result, - Register scratch, Label* miss); - // Compare object type for heap object. heap_object contains a non-Smi // whose object type should be compared with the given type. This both // sets the flags and leaves the object type in the type_reg register. @@ -884,29 +851,6 @@ class MacroAssembler: public Assembler { Register type_reg, InstanceType type); - // Check if a map for a JSObject indicates that the object can have both smi - // and HeapObject elements. Jump to the specified label if it does not. - void CheckFastObjectElements(Register map, - Register scratch, - Label* fail); - - // Check if a map for a JSObject indicates that the object has fast smi only - // elements. Jump to the specified label if it does not. - void CheckFastSmiElements(Register map, - Register scratch, - Label* fail); - - // Check to see if maybe_number can be stored as a double in - // FastDoubleElements. If it can, store it at the index specified by key in - // the FastDoubleElements array elements. Otherwise jump to fail. - void StoreNumberToDoubleElements(Register value_reg, - Register key_reg, - Register elements_reg, - Register scratch1, - LowDwVfpRegister double_scratch, - Label* fail, - int elements_offset = 0); - // Compare an object's map with the specified map and its transitioned // elements maps if mode is ALLOW_ELEMENT_TRANSITION_MAPS. Condition flags are // set with result of map compare. If multiple map compares are required, the @@ -1287,10 +1231,6 @@ class MacroAssembler: public Assembler { // Souce and destination can be the same register. void UntagAndJumpIfSmi(Register dst, Register src, Label* smi_case); - // Untag the source value into destination and jump if source is not a smi. - // Souce and destination can be the same register. - void UntagAndJumpIfNotSmi(Register dst, Register src, Label* non_smi_case); - // Test if the register contains a smi (Z == 0 (eq) if true). inline void SmiTst(Register value) { tst(value, Operand(kSmiTagMask)); @@ -1380,11 +1320,6 @@ class MacroAssembler: public Assembler { Register first_object_instance_type, Register second_object_instance_type, Register scratch1, Register scratch2, Label* failure); - // Check if instance type is sequential one-byte string and jump to label if - // it is not. - void JumpIfInstanceTypeIsNotSequentialOneByte(Register type, Register scratch, - Label* failure); - void JumpIfNotUniqueNameInstanceType(Register reg, Label* not_unique_name); void EmitSeqStringSetCharCheck(Register string, @@ -1439,7 +1374,7 @@ class MacroAssembler: public Assembler { } // Load the type feedback vector from a JavaScript frame. - void EmitLoadTypeFeedbackVector(Register vector); + void EmitLoadFeedbackVector(Register vector); // Activation support. void EnterFrame(StackFrame::Type type, @@ -1464,20 +1399,6 @@ class MacroAssembler: public Assembler { Register scratch_reg, Label* no_memento_found); - void JumpIfJSArrayHasAllocationMemento(Register receiver_reg, - Register scratch_reg, - Label* memento_found) { - Label no_memento_found; - TestJSArrayForAllocationMemento(receiver_reg, scratch_reg, - &no_memento_found); - b(eq, memento_found); - bind(&no_memento_found); - } - - // Jumps to found label if a prototype map has dictionary elements. - void JumpIfDictionaryInPrototypeChain(Register object, Register scratch0, - Register scratch1, Label* found); - // Loads the constant pool pointer (pp) register. void LoadConstantPoolPointerRegisterFromCodeTargetAddress( Register code_target_address); @@ -1498,12 +1419,6 @@ class MacroAssembler: public Assembler { InvokeFlag flag, const CallWrapper& call_wrapper); - void InitializeNewString(Register string, - Register length, - Heap::RootListIndex map_index, - Register scratch1, - Register scratch2); - // Helper for implementing JumpIfNotInNewSpace and JumpIfInNewSpace. void InNewSpace(Register object, Register scratch, |