diff options
Diffstat (limited to 'deps/v8/src/s390/macro-assembler-s390.h')
-rw-r--r-- | deps/v8/src/s390/macro-assembler-s390.h | 131 |
1 files changed, 56 insertions, 75 deletions
diff --git a/deps/v8/src/s390/macro-assembler-s390.h b/deps/v8/src/s390/macro-assembler-s390.h index a3b57e9d4f..ace1604934 100644 --- a/deps/v8/src/s390/macro-assembler-s390.h +++ b/deps/v8/src/s390/macro-assembler-s390.h @@ -168,6 +168,8 @@ class MacroAssembler : public Assembler { MacroAssembler(Isolate* isolate, void* buffer, int size, CodeObjectRequired create_code_object); + Isolate* isolate() const { return isolate_; } + // Returns the size of a call in instructions. static int CallSize(Register target); int CallSize(Address target, RelocInfo::Mode rmode, Condition cond = al); @@ -342,18 +344,22 @@ class MacroAssembler : public Assembler { void DivP(Register dividend, Register divider); void Div32(Register dst, Register src1, const MemOperand& src2); void Div32(Register dst, Register src1, Register src2); - void Div32(Register dst, Register src1, const Operand& src2); void DivU32(Register dst, Register src1, const MemOperand& src2); void DivU32(Register dst, Register src1, Register src2); - void DivU32(Register dst, Register src1, const Operand& src2); + void Div64(Register dst, Register src1, const MemOperand& src2); + void Div64(Register dst, Register src1, Register src2); + void DivU64(Register dst, Register src1, const MemOperand& src2); + void DivU64(Register dst, Register src1, Register src2); // Mod void Mod32(Register dst, Register src1, const MemOperand& src2); void Mod32(Register dst, Register src1, Register src2); - void Mod32(Register dst, Register src1, const Operand& src2); void ModU32(Register dst, Register src1, const MemOperand& src2); void ModU32(Register dst, Register src1, Register src2); - void ModU32(Register dst, Register src1, const Operand& src2); + void Mod64(Register dst, Register src1, const MemOperand& src2); + void Mod64(Register dst, Register src1, Register src2); + void ModU64(Register dst, Register src1, const MemOperand& src2); + void ModU64(Register dst, Register src1, Register src2); // Square root void Sqrt(DoubleRegister result, DoubleRegister input); @@ -408,6 +414,25 @@ class MacroAssembler : public Assembler { void LoadFloat32(DoubleRegister dst, const MemOperand& opnd); void LoadFloat32ConvertToDouble(DoubleRegister dst, const MemOperand& mem); + void AddFloat32(DoubleRegister dst, const MemOperand& opnd, + DoubleRegister scratch); + void AddFloat64(DoubleRegister dst, const MemOperand& opnd, + DoubleRegister scratch); + void SubFloat32(DoubleRegister dst, const MemOperand& opnd, + DoubleRegister scratch); + void SubFloat64(DoubleRegister dst, const MemOperand& opnd, + DoubleRegister scratch); + void MulFloat32(DoubleRegister dst, const MemOperand& opnd, + DoubleRegister scratch); + void MulFloat64(DoubleRegister dst, const MemOperand& opnd, + DoubleRegister scratch); + void DivFloat32(DoubleRegister dst, const MemOperand& opnd, + DoubleRegister scratch); + void DivFloat64(DoubleRegister dst, const MemOperand& opnd, + DoubleRegister scratch); + void LoadFloat32ToDouble(DoubleRegister dst, const MemOperand& opnd, + DoubleRegister scratch); + // Load On Condition void LoadOnConditionP(Condition cond, Register dst, Register src); @@ -710,26 +735,24 @@ class MacroAssembler : public Assembler { // Converts the integer (untagged smi) in |src| to a double, storing // the result to |dst| - void ConvertIntToDouble(Register src, DoubleRegister dst); + void ConvertIntToDouble(DoubleRegister dst, Register src); // Converts the unsigned integer (untagged smi) in |src| to // a double, storing the result to |dst| - void ConvertUnsignedIntToDouble(Register src, DoubleRegister dst); + void ConvertUnsignedIntToDouble(DoubleRegister dst, Register src); // Converts the integer (untagged smi) in |src| to // a float, storing the result in |dst| - void ConvertIntToFloat(Register src, DoubleRegister dst); + void ConvertIntToFloat(DoubleRegister dst, Register src); // Converts the unsigned integer (untagged smi) in |src| to // a float, storing the result in |dst| - void ConvertUnsignedIntToFloat(Register src, DoubleRegister dst); + void ConvertUnsignedIntToFloat(DoubleRegister dst, Register src); -#if V8_TARGET_ARCH_S390X - void ConvertInt64ToFloat(Register src, DoubleRegister double_dst); - void ConvertInt64ToDouble(Register src, DoubleRegister double_dst); - void ConvertUnsignedInt64ToFloat(Register src, DoubleRegister double_dst); - void ConvertUnsignedInt64ToDouble(Register src, DoubleRegister double_dst); -#endif + void ConvertInt64ToFloat(DoubleRegister double_dst, Register src); + void ConvertInt64ToDouble(DoubleRegister double_dst, Register src); + void ConvertUnsignedInt64ToFloat(DoubleRegister double_dst, Register src); + void ConvertUnsignedInt64ToDouble(DoubleRegister double_dst, Register src); void MovIntToFloat(DoubleRegister dst, Register src); void MovFloatToInt(Register dst, DoubleRegister src); @@ -737,43 +760,36 @@ class MacroAssembler : public Assembler { void MovInt64ToDouble(DoubleRegister dst, Register src); // Converts the double_input to an integer. Note that, upon return, // the contents of double_dst will also hold the fixed point representation. - void ConvertFloat32ToInt64(const DoubleRegister double_input, -#if !V8_TARGET_ARCH_S390X - const Register dst_hi, -#endif - const Register dst, - const DoubleRegister double_dst, + void ConvertFloat32ToInt64(const Register dst, + const DoubleRegister double_input, FPRoundingMode rounding_mode = kRoundToZero); // Converts the double_input to an integer. Note that, upon return, // the contents of double_dst will also hold the fixed point representation. - void ConvertDoubleToInt64(const DoubleRegister double_input, -#if !V8_TARGET_ARCH_S390X - const Register dst_hi, -#endif - const Register dst, const DoubleRegister double_dst, + void ConvertDoubleToInt64(const Register dst, + const DoubleRegister double_input, + FPRoundingMode rounding_mode = kRoundToZero); + void ConvertDoubleToInt32(const Register dst, + const DoubleRegister double_input, FPRoundingMode rounding_mode = kRoundToZero); - void ConvertFloat32ToInt32(const DoubleRegister double_input, - const Register dst, - const DoubleRegister double_dst, + void ConvertFloat32ToInt32(const Register result, + const DoubleRegister double_input, FPRoundingMode rounding_mode); void ConvertFloat32ToUnsignedInt32( - const DoubleRegister double_input, const Register dst, - const DoubleRegister double_dst, + const Register result, const DoubleRegister double_input, FPRoundingMode rounding_mode = kRoundToZero); -#if V8_TARGET_ARCH_S390X // Converts the double_input to an unsigned integer. Note that, upon return, // the contents of double_dst will also hold the fixed point representation. void ConvertDoubleToUnsignedInt64( - const DoubleRegister double_input, const Register dst, - const DoubleRegister double_dst, + const Register dst, const DoubleRegister double_input, + FPRoundingMode rounding_mode = kRoundToZero); + void ConvertDoubleToUnsignedInt32( + const Register dst, const DoubleRegister double_input, FPRoundingMode rounding_mode = kRoundToZero); void ConvertFloat32ToUnsignedInt64( - const DoubleRegister double_input, const Register dst, - const DoubleRegister double_dst, + const Register result, const DoubleRegister double_input, FPRoundingMode rounding_mode = kRoundToZero); -#endif #if !V8_TARGET_ARCH_S390X void ShiftLeftPair(Register dst_low, Register dst_high, Register src_low, @@ -945,8 +961,6 @@ class MacroAssembler : public Assembler { void IsObjectJSStringType(Register object, Register scratch, Label* fail); - void IsObjectNameType(Register object, Register scratch, Label* fail); - // Frame restart support void MaybeDropFrames(); @@ -1095,17 +1109,6 @@ class MacroAssembler : public Assembler { void CheckMap(Register obj, Register scratch, Heap::RootListIndex index, Label* fail, SmiCheckType smi_check_type); - // Check if the map of an object is equal to a specified weak map and branch - // to a specified target if equal. Skip the smi check if not required - // (object is known to be a heap object) - void DispatchWeakMap(Register obj, Register scratch1, Register scratch2, - Handle<WeakCell> cell, Handle<Code> success, - SmiCheckType smi_check_type); - - // Compare the given value and the value of weak cell. - void CmpWeakValue(Register value, Handle<WeakCell> cell, Register scratch, - CRegister cr = cr7); - void GetWeakValue(Register value, Handle<WeakCell> cell); // Load the value of the weak cell in the value register. Branch to the given @@ -1315,7 +1318,6 @@ class MacroAssembler : public Assembler { // Calls Abort(msg) if the condition cond is not satisfied. // Use --debug_code to enable. void Assert(Condition cond, BailoutReason reason, CRegister cr = cr7); - void AssertFastElements(Register elements); // Like Assert(), but always enabled. void Check(Condition cond, BailoutReason reason, CRegister cr = cr7); @@ -1598,27 +1600,14 @@ class MacroAssembler : public Assembler { // Jump if either of the registers contain a smi. void JumpIfEitherSmi(Register reg1, Register reg2, Label* on_either_smi); - // Abort execution if argument is a number, enabled via --debug-code. - void AssertNotNumber(Register object); - // Abort execution if argument is a smi, enabled via --debug-code. void AssertNotSmi(Register object); void AssertSmi(Register object); -#if V8_TARGET_ARCH_S390X - inline void TestIfInt32(Register value, Register scratch) { - // High bits must be identical to fit into an 32-bit integer - lgfr(scratch, value); - CmpP(scratch, value); - } -#else - inline void TestIfInt32(Register hi_word, Register lo_word, - Register scratch) { + inline void TestIfInt32(Register value) { // High bits must be identical to fit into an 32-bit integer - ShiftRightArith(scratch, lo_word, Operand(31)); - CmpP(scratch, hi_word); + cgfr(value, value); } -#endif #if V8_TARGET_ARCH_S390X // Ensure it is permissable to read/write int value directly from @@ -1632,12 +1621,6 @@ class MacroAssembler : public Assembler { #define SmiWordOffset(offset) offset #endif - // Abort execution if argument is not a string, enabled via --debug-code. - void AssertString(Register object); - - // Abort execution if argument is not a name, enabled via --debug-code. - void AssertName(Register object); - void AssertFunction(Register object); // Abort execution if argument is not a JSBoundFunction, @@ -1646,10 +1629,7 @@ class MacroAssembler : public Assembler { // Abort execution if argument is not a JSGeneratorObject, // enabled via --debug-code. - void AssertGeneratorObject(Register object); - - // Abort execution if argument is not a JSReceiver, enabled via --debug-code. - void AssertReceiver(Register object); + void AssertGeneratorObject(Register object, Register suspend_flags); // Abort execution if argument is not undefined or an AllocationSite, enabled // via --debug-code. @@ -1797,6 +1777,7 @@ class MacroAssembler : public Assembler { bool generating_stub_; bool has_frame_; + Isolate* isolate_; // This handle will be patched with the code object on installation. Handle<Object> code_object_; |