Index: src/crankshaft/ia32/lithium-codegen-ia32.cc |
diff --git a/src/crankshaft/ia32/lithium-codegen-ia32.cc b/src/crankshaft/ia32/lithium-codegen-ia32.cc |
index 48a7f3f13558bb0cc33b1c19afdd4389f2121bca..cdd96a0826f6f28ea989c42278113b1614c92372 100644 |
--- a/src/crankshaft/ia32/lithium-codegen-ia32.cc |
+++ b/src/crankshaft/ia32/lithium-codegen-ia32.cc |
@@ -3425,16 +3425,11 @@ |
void LCodeGen::DoMathExp(LMathExp* instr) { |
XMMRegister input = ToDoubleRegister(instr->value()); |
XMMRegister result = ToDoubleRegister(instr->result()); |
- // Pass one double as argument on the stack. |
- __ PrepareCallCFunction(2, eax); |
- __ movsd(Operand(esp, 0 * kDoubleSize), input); |
- __ CallCFunction(ExternalReference::ieee754_exp_function(isolate()), 2); |
- // Return value is in st(0) on ia32. |
- // Store it into the result register. |
- __ sub(esp, Immediate(kDoubleSize)); |
- __ fstp_d(Operand(esp, 0)); |
- __ movsd(result, Operand(esp, 0)); |
- __ add(esp, Immediate(kDoubleSize)); |
+ XMMRegister temp0 = double_scratch0(); |
+ Register temp1 = ToRegister(instr->temp1()); |
+ Register temp2 = ToRegister(instr->temp2()); |
+ |
+ MathExpGenerator::EmitMathExp(masm(), input, result, temp0, temp1, temp2); |
} |
void LCodeGen::PrepareForTailCall(const ParameterCount& actual, |