Index: src/ia32/lithium-codegen-ia32.h |
diff --git a/src/ia32/lithium-codegen-ia32.h b/src/ia32/lithium-codegen-ia32.h |
index d05da8a0841bb8f9328997ef4444282aa2a069f8..0e8be82efacbfd6ee19e16dff6f0ed18a6798ee4 100644 |
--- a/src/ia32/lithium-codegen-ia32.h |
+++ b/src/ia32/lithium-codegen-ia32.h |
@@ -105,7 +105,7 @@ class LCodeGen BASE_EMBEDDED { |
Operand ToOperand(LOperand* op) const; |
Register ToRegister(LOperand* op) const; |
XMMRegister ToDoubleRegister(LOperand* op) const; |
- bool IsX87TopOfStack(LOperand* op) const; |
+ X87Register ToX87Register(LOperand* op) const; |
bool IsInteger32(LConstantOperand* op) const; |
bool IsSmi(LConstantOperand* op) const; |
@@ -118,13 +118,18 @@ class LCodeGen BASE_EMBEDDED { |
// Support for non-sse2 (x87) floating point stack handling. |
// These functions maintain the depth of the stack (either 0 or 1) |
- void PushX87DoubleOperand(Operand src); |
- void PushX87FloatOperand(Operand src); |
- void ReadX87Operand(Operand dst); |
- bool X87StackNonEmpty() const { return x87_stack_depth_ > 0; } |
- void PopX87(); |
- void CurrentInstructionReturnsX87Result(); |
- void FlushX87StackIfNecessary(LInstruction* instr); |
+ enum X87OperandType { kX87DoubleOperand, kX87FloatOperand, kX87IntOperand }; |
mvstanton
2013/07/04 12:30:55
Maybe update the comment above, it's out of date n
|
+ |
+ void X87Mov(X87Register reg, Operand src, |
+ X87OperandType operand = kX87DoubleOperand); |
+ void X87Mov(Operand src, X87Register reg); |
+ |
+ void X87PrepareBinaryOp( |
+ X87Register left, X87Register right, X87Register result); |
+ |
+ void X87LoadForUsage(X87Register reg); |
+ void X87PrepareToWrite(X87Register reg); |
+ void X87CommitWrite(X87Register reg); |
Handle<Object> ToHandle(LConstantOperand* op) const; |
@@ -291,6 +296,7 @@ class LCodeGen BASE_EMBEDDED { |
Register ToRegister(int index) const; |
XMMRegister ToDoubleRegister(int index) const; |
+ X87Register ToX87Register(int index) const; |
int ToInteger32(LConstantOperand* op) const; |
double ToDouble(LConstantOperand* op) const; |
@@ -331,6 +337,7 @@ class LCodeGen BASE_EMBEDDED { |
void EmitNumberUntagDNoSSE2( |
Register input, |
Register temp, |
+ X87Register res_reg, |
bool allow_undefined_as_nan, |
bool deoptimize_on_minus_zero, |
LEnvironment* env, |
@@ -392,6 +399,15 @@ class LCodeGen BASE_EMBEDDED { |
// register, or a stack slot operand. |
void EmitPushTaggedOperand(LOperand* operand); |
+ void X87Fxch(X87Register reg, int other_slot = 0); |
+ void X87Fld(Operand src, X87OperandType opts); |
+ void X87Free(X87Register reg); |
+ |
+ void FlushX87StackIfNecessary(LInstruction* instr); |
+ bool X87StackContains(X87Register reg); |
+ int X87ArrayIndex(X87Register reg); |
+ int x87_st2idx(int pos); |
+ |
Zone* zone_; |
LPlatformChunk* const chunk_; |
MacroAssembler* const masm_; |
@@ -413,6 +429,7 @@ class LCodeGen BASE_EMBEDDED { |
int osr_pc_offset_; |
int last_lazy_deopt_pc_; |
bool frame_is_built_; |
+ X87Register x87_stack_[8]; |
mvstanton
2013/07/04 12:30:55
Can you replace the constant with something more o
|
int x87_stack_depth_; |
// Builder that keeps track of safepoints in the code. The table |