Index: src/ia32/lithium-gap-resolver-ia32.cc |
diff --git a/src/ia32/lithium-gap-resolver-ia32.cc b/src/ia32/lithium-gap-resolver-ia32.cc |
index a75ce2152c03823d7c51fab6e5a64808b37b51e1..e884a9dbcede98187c6e5b0fc7e39fb9f503849e 100644 |
--- a/src/ia32/lithium-gap-resolver-ia32.cc |
+++ b/src/ia32/lithium-gap-resolver-ia32.cc |
@@ -332,10 +332,8 @@ void LGapResolver::EmitMove(int index) { |
} else { |
__ push(Immediate(upper)); |
__ push(Immediate(lower)); |
- if (cgen_->X87StackNonEmpty()) { |
- cgen_->PopX87(); |
- } |
- cgen_->PushX87DoubleOperand(MemOperand(esp, 0)); |
+ X87Register dst = cgen_->ToX87Register(destination); |
+ cgen_->X87Mov(dst, MemOperand(esp, 0)); |
__ add(esp, Immediate(kDoubleSize)); |
} |
} else { |
@@ -367,10 +365,10 @@ void LGapResolver::EmitMove(int index) { |
} else { |
// load from the register onto the stack, store in destination, which must |
// be a double stack slot in the non-SSE2 case. |
- ASSERT(source->index() == 0); // source is on top of the stack |
ASSERT(destination->IsDoubleStackSlot()); |
Operand dst = cgen_->ToOperand(destination); |
- cgen_->ReadX87Operand(dst); |
+ X87Register src = cgen_->ToX87Register(source); |
+ cgen_->X87Mov(dst, src); |
} |
} else if (source->IsDoubleStackSlot()) { |
if (CpuFeatures::IsSupported(SSE2)) { |
@@ -403,10 +401,8 @@ void LGapResolver::EmitMove(int index) { |
__ mov(dst1, tmp); |
} else { |
Operand src = cgen_->ToOperand(source); |
- if (cgen_->X87StackNonEmpty()) { |
- cgen_->PopX87(); |
- } |
- cgen_->PushX87DoubleOperand(src); |
+ X87Register dst = cgen_->ToX87Register(destination); |
+ cgen_->X87Mov(dst, src); |
} |
} |
} else { |