hotspot/src/cpu/x86/vm/templateInterpreterGenerator_x86_32.cpp
changeset 35495 e27da438fa13
parent 35479 62c12ca7a45e
child 38018 1dc6c6f21231
--- a/hotspot/src/cpu/x86/vm/templateInterpreterGenerator_x86_32.cpp	Thu Jan 14 13:26:19 2016 +0100
+++ b/hotspot/src/cpu/x86/vm/templateInterpreterGenerator_x86_32.cpp	Thu Jan 14 17:36:29 2016 +0100
@@ -378,10 +378,15 @@
         break;
     case Interpreter::java_lang_math_pow:
       __ fld_d(Address(rsp, 3*wordSize)); // second argument
-      __ pow_with_fallback(0);
-      // Store to stack to convert 80bit precision back to 64bits
-      __ push_fTOS();
-      __ pop_fTOS();
+      __ subptr(rsp, 4 * wordSize);
+      __ fstp_d(Address(rsp, 0));
+      __ fstp_d(Address(rsp, 2 * wordSize));
+      if (VM_Version::supports_sse2()) {
+        __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dpow())));
+      } else {
+        __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::dpow)));
+      }
+      __ addptr(rsp, 4 * wordSize);
       break;
     case Interpreter::java_lang_math_exp:
       __ subptr(rsp, 2*wordSize);