Index: src/x87/macro-assembler-x87.h |
diff --git a/src/ia32/macro-assembler-ia32.h b/src/x87/macro-assembler-x87.h |
similarity index 95% |
copy from src/ia32/macro-assembler-ia32.h |
copy to src/x87/macro-assembler-x87.h |
index 71e7427d2d46259b10060f1021aada1920ecba44..e5206da9f645d1218310b92b9d414bfca77b2812 100644 |
--- a/src/ia32/macro-assembler-ia32.h |
+++ b/src/x87/macro-assembler-x87.h |
@@ -2,8 +2,8 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#ifndef V8_IA32_MACRO_ASSEMBLER_IA32_H_ |
-#define V8_IA32_MACRO_ASSEMBLER_IA32_H_ |
+#ifndef V8_X87_MACRO_ASSEMBLER_X87_H_ |
+#define V8_X87_MACRO_ASSEMBLER_X87_H_ |
#include "assembler.h" |
#include "frames.h" |
@@ -63,7 +63,6 @@ class MacroAssembler: public Assembler { |
void RememberedSetHelper(Register object, // Used for debug code. |
Register addr, |
Register scratch, |
- SaveFPRegsMode save_fp, |
RememberedSetFinalAction and_then); |
void CheckPageFlag(Register object, |
@@ -138,7 +137,6 @@ class MacroAssembler: public Assembler { |
int offset, |
Register value, |
Register scratch, |
- SaveFPRegsMode save_fp, |
RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, |
SmiCheck smi_check = INLINE_SMI_CHECK); |
@@ -149,14 +147,12 @@ class MacroAssembler: public Assembler { |
int offset, |
Register value, |
Register scratch, |
- SaveFPRegsMode save_fp, |
RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, |
SmiCheck smi_check = INLINE_SMI_CHECK) { |
RecordWriteField(context, |
offset + kHeapObjectTag, |
value, |
scratch, |
- save_fp, |
remembered_set_action, |
smi_check); |
} |
@@ -171,7 +167,6 @@ class MacroAssembler: public Assembler { |
Register array, |
Register value, |
Register index, |
- SaveFPRegsMode save_fp, |
RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, |
SmiCheck smi_check = INLINE_SMI_CHECK); |
@@ -184,7 +179,6 @@ class MacroAssembler: public Assembler { |
Register object, |
Register address, |
Register value, |
- SaveFPRegsMode save_fp, |
RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, |
SmiCheck smi_check = INLINE_SMI_CHECK); |
@@ -195,8 +189,7 @@ class MacroAssembler: public Assembler { |
Register object, |
Handle<Map> map, |
Register scratch1, |
- Register scratch2, |
- SaveFPRegsMode save_fp); |
+ Register scratch2); |
// --------------------------------------------------------------------------- |
// Debugger Support |
@@ -211,14 +204,14 @@ class MacroAssembler: public Assembler { |
// arguments in register eax and sets up the number of arguments in |
// register edi and the pointer to the first argument in register |
// esi. |
- void EnterExitFrame(bool save_doubles); |
+ void EnterExitFrame(); |
void EnterApiExitFrame(int argc); |
// Leave the current exit frame. Expects the return value in |
// register eax:edx (untouched) and the pointer to the first |
// argument in register esi. |
- void LeaveExitFrame(bool save_doubles); |
+ void LeaveExitFrame(); |
// Leave the current exit frame. Expects the return value in |
// register eax (untouched). |
@@ -326,12 +319,6 @@ class MacroAssembler: public Assembler { |
void GetBuiltinEntry(Register target, Builtins::JavaScript id); |
// Expression support |
- // cvtsi2sd instruction only writes to the low 64-bit of dst register, which |
- // hinders register renaming and makes dependence chains longer. So we use |
- // xorps to clear the dst register before cvtsi2sd to solve this issue. |
- void Cvtsi2sd(XMMRegister dst, Register src) { Cvtsi2sd(dst, Operand(src)); } |
- void Cvtsi2sd(XMMRegister dst, const Operand& src); |
- |
// Support for constant splitting. |
bool IsUnsafeImmediate(const Immediate& x); |
void SafeMove(Register dst, const Immediate& x); |
@@ -368,8 +355,7 @@ class MacroAssembler: public Assembler { |
void StoreNumberToDoubleElements(Register maybe_number, |
Register elements, |
Register key, |
- Register scratch1, |
- XMMRegister scratch2, |
+ Register scratch, |
Label* fail, |
int offset = 0); |
@@ -430,21 +416,16 @@ class MacroAssembler: public Assembler { |
void ClampUint8(Register reg); |
- void ClampDoubleToUint8(XMMRegister input_reg, |
- XMMRegister scratch_reg, |
- Register result_reg); |
- |
void SlowTruncateToI(Register result_reg, Register input_reg, |
int offset = HeapNumber::kValueOffset - kHeapObjectTag); |
void TruncateHeapNumberToI(Register result_reg, Register input_reg); |
- void TruncateDoubleToI(Register result_reg, XMMRegister input_reg); |
+ void TruncateX87TOSToI(Register result_reg); |
- void DoubleToI(Register result_reg, XMMRegister input_reg, |
- XMMRegister scratch, MinusZeroMode minus_zero_mode, |
+ void X87TOSToI(Register result_reg, MinusZeroMode minus_zero_mode, |
Label* conversion_failed, Label::Distance dst = Label::kFar); |
- void TaggedToI(Register result_reg, Register input_reg, XMMRegister temp, |
+ void TaggedToI(Register result_reg, Register input_reg, |
MinusZeroMode minus_zero_mode, Label* lost_precision); |
// Smi tagging support. |
@@ -465,7 +446,7 @@ class MacroAssembler: public Assembler { |
j(not_carry, is_smi); |
} |
- void LoadUint32(XMMRegister dst, Register src, XMMRegister scratch); |
+ void LoadUint32NoSSE2(Register src); |
// Jump the register contains a smi. |
inline void JumpIfSmi(Register value, |
@@ -500,7 +481,6 @@ class MacroAssembler: public Assembler { |
sar(reg, shift); |
and_(reg, Immediate(mask)); |
} |
- void LoadPowerOf2(XMMRegister dst, Register scratch, int power); |
// Abort execution if argument is not a number, enabled via --debug-code. |
void AssertNumber(Register object); |
@@ -717,19 +697,14 @@ class MacroAssembler: public Assembler { |
void StubReturn(int argc); |
// Call a runtime routine. |
- void CallRuntime(const Runtime::Function* f, |
- int num_arguments, |
- SaveFPRegsMode save_doubles = kDontSaveFPRegs); |
- void CallRuntimeSaveDoubles(Runtime::FunctionId id) { |
+ void CallRuntime(const Runtime::Function* f, int num_arguments); |
+ // Convenience function: Same as above, but takes the fid instead. |
+ void CallRuntime(Runtime::FunctionId id) { |
const Runtime::Function* function = Runtime::FunctionForId(id); |
- CallRuntime(function, function->nargs, kSaveFPRegs); |
+ CallRuntime(function, function->nargs); |
} |
- |
- // Convenience function: Same as above, but takes the fid instead. |
- void CallRuntime(Runtime::FunctionId id, |
- int num_arguments, |
- SaveFPRegsMode save_doubles = kDontSaveFPRegs) { |
- CallRuntime(Runtime::FunctionForId(id), num_arguments, save_doubles); |
+ void CallRuntime(Runtime::FunctionId id, int num_arguments) { |
+ CallRuntime(Runtime::FunctionForId(id), num_arguments); |
} |
// Convenience function: call an external reference. |
@@ -815,9 +790,6 @@ class MacroAssembler: public Assembler { |
void Move(Register dst, const Immediate& x); |
void Move(const Operand& dst, const Immediate& x); |
- // Move an immediate into an XMM register. |
- void Move(XMMRegister dst, double val); |
- |
// Push a handle value. |
void Push(Handle<Object> handle) { push(Immediate(handle)); } |
void Push(Smi* smi) { Push(Handle<Smi>(smi, isolate())); } |
@@ -827,6 +799,9 @@ class MacroAssembler: public Assembler { |
return code_object_; |
} |
+ // Insert code to verify that the x87 stack has the specified depth (0-7) |
+ void VerifyX87StackDepth(uint32_t depth); |
+ |
// Emit code for a truncating division by a constant. The dividend register is |
// unchanged, the result is in edx, and eax gets clobbered. |
void TruncatingDiv(Register dividend, int32_t divisor); |
@@ -963,7 +938,7 @@ class MacroAssembler: public Assembler { |
const CallWrapper& call_wrapper = NullCallWrapper()); |
void EnterExitFramePrologue(); |
- void EnterExitFrameEpilogue(int argc, bool save_doubles); |
+ void EnterExitFrameEpilogue(int argc); |
void LeaveExitFrameEpilogue(bool restore_context); |
@@ -1089,4 +1064,4 @@ extern void LogGeneratedCodeCoverage(const char* file_line); |
} } // namespace v8::internal |
-#endif // V8_IA32_MACRO_ASSEMBLER_IA32_H_ |
+#endif // V8_X87_MACRO_ASSEMBLER_X87_H_ |