Index: src/compiler/ia32/code-generator-ia32.cc |
diff --git a/src/compiler/ia32/code-generator-ia32.cc b/src/compiler/ia32/code-generator-ia32.cc |
index 6df22f6d5f44d52fad748e958a584be537e27c16..9ffc1c51b9edddfc1aebc7f017a9079ad25e84db 100644 |
--- a/src/compiler/ia32/code-generator-ia32.cc |
+++ b/src/compiler/ia32/code-generator-ia32.cc |
@@ -682,6 +682,21 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
case kIeee754Float64Log10: |
ASSEMBLE_IEEE754_UNOP(log10); |
break; |
+ case kIeee754Float64Pow: { |
+ // TODO(bmeurer): Improve integration of the stub. |
+ if (!i.InputDoubleRegister(1).is(xmm2)) { |
+ __ movaps(xmm2, i.InputDoubleRegister(0)); |
+ __ movaps(xmm1, i.InputDoubleRegister(1)); |
+ } else { |
+ __ movaps(xmm0, i.InputDoubleRegister(0)); |
+ __ movaps(xmm1, xmm2); |
+ __ movaps(xmm2, xmm0); |
+ } |
+ MathPowStub stub(isolate(), MathPowStub::DOUBLE); |
+ __ CallStub(&stub); |
+ __ movaps(i.OutputDoubleRegister(), xmm3); |
+ break; |
+ } |
case kIeee754Float64Sin: |
ASSEMBLE_IEEE754_UNOP(sin); |
break; |