summaryrefslogtreecommitdiff
path: root/deps/v8/src/s390/macro-assembler-s390.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/s390/macro-assembler-s390.h')
-rw-r--r--deps/v8/src/s390/macro-assembler-s390.h131
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_;