diff options
Diffstat (limited to 'deps/v8/src/s390/macro-assembler-s390.h')
-rw-r--r-- | deps/v8/src/s390/macro-assembler-s390.h | 101 |
1 files changed, 27 insertions, 74 deletions
diff --git a/deps/v8/src/s390/macro-assembler-s390.h b/deps/v8/src/s390/macro-assembler-s390.h index 06fcaf0519..572f2759f6 100644 --- a/deps/v8/src/s390/macro-assembler-s390.h +++ b/deps/v8/src/s390/macro-assembler-s390.h @@ -319,10 +319,15 @@ class MacroAssembler : public Assembler { void Mul64(Register dst, const MemOperand& src1); void Mul64(Register dst, Register src1); void Mul64(Register dst, const Operand& src1); + void MulPWithCondition(Register dst, Register src1, Register src2); // Divide void DivP(Register dividend, Register divider); + // Square root + void Sqrt(DoubleRegister result, DoubleRegister input); + void Sqrt(DoubleRegister result, const MemOperand& input); + // Compare void Cmp32(Register src1, Register src2); void CmpP(Register src1, Register src2); @@ -374,6 +379,9 @@ class MacroAssembler : public Assembler { // Load On Condition void LoadOnConditionP(Condition cond, Register dst, Register src); + void LoadPositiveP(Register result, Register input); + void LoadPositive32(Register result, Register input); + // Store Floating Point void StoreDouble(DoubleRegister dst, const MemOperand& opnd); void StoreFloat32(DoubleRegister dst, const MemOperand& opnd); @@ -784,16 +792,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 @@ -838,8 +836,10 @@ class MacroAssembler : public Assembler { void StoreRepresentation(Register src, const MemOperand& mem, Representation r, Register scratch = no_reg); - void AddSmiLiteral(Register dst, Register src, Smi* smi, Register scratch); - void SubSmiLiteral(Register dst, Register src, Smi* smi, Register scratch); + void AddSmiLiteral(Register dst, Register src, Smi* smi, + Register scratch = r0); + void SubSmiLiteral(Register dst, Register src, Smi* smi, + Register scratch = r0); void CmpSmiLiteral(Register src1, Smi* smi, Register scratch); void CmpLogicalSmiLiteral(Register src1, Smi* smi, Register scratch); void AndSmiLiteral(Register dst, Register src, Smi* smi); @@ -891,9 +891,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. @@ -990,25 +991,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. @@ -1071,22 +1053,6 @@ class MacroAssembler : public Assembler { // sets the flags and leaves the object type in the type_reg register. void CompareInstanceType(Register map, 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, - DoubleRegister 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 @@ -1576,12 +1542,19 @@ 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); - inline void TestIfSmi(Register value) { tmll(value, Operand(1)); } + inline void TestIfSmi(MemOperand value) { + if (is_uint12(value.offset())) { + tm(value, Operand(1)); + } else if (is_int20(value.offset())) { + tmy(value, Operand(1)); + } else { + LoadB(r0, value); + tmll(r0, Operand(1)); + } + } + inline void TestIfPositiveSmi(Register value, Register scratch) { STATIC_ASSERT((kSmiTagMask | kSmiSignMask) == (intptr_t)(1UL << (kBitsPerPointer - 1) | 1)); @@ -1695,11 +1668,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, Register index, @@ -1772,21 +1740,6 @@ class MacroAssembler : public Assembler { Register scratch2_reg, Label* no_memento_found); - void JumpIfJSArrayHasAllocationMemento(Register receiver_reg, - Register scratch_reg, - Register scratch2_reg, - Label* memento_found) { - Label no_memento_found; - TestJSArrayForAllocationMemento(receiver_reg, scratch_reg, scratch2_reg, - &no_memento_found); - beq(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); - private: static const int kSmiShift = kSmiTagSize + kSmiShiftSize; |