--- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp Wed Dec 23 16:24:19 2015 -0800
+++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp Wed Dec 23 21:09:50 2015 -0800
@@ -2126,15 +2126,6 @@
__ trigfunc('t');
__ ret(0);
}
- {
- StubCodeMark mark(this, "StubRoutines", "pow");
- StubRoutines::_intrinsic_pow = (double (*)(double,double)) __ pc();
-
- __ fld_d(Address(rsp, 12));
- __ fld_d(Address(rsp, 4));
- __ pow_with_fallback(0);
- __ ret(0);
- }
}
// AES intrinsic stubs
@@ -3082,6 +3073,30 @@
}
+ address generate_libmPow() {
+ address start = __ pc();
+
+ const XMMRegister x0 = xmm0;
+ const XMMRegister x1 = xmm1;
+ const XMMRegister x2 = xmm2;
+ const XMMRegister x3 = xmm3;
+
+ const XMMRegister x4 = xmm4;
+ const XMMRegister x5 = xmm5;
+ const XMMRegister x6 = xmm6;
+ const XMMRegister x7 = xmm7;
+
+ const Register tmp = rbx;
+
+ BLOCK_COMMENT("Entry:");
+ __ enter(); // required for proper stackwalking of RuntimeStub frame
+ __ fast_pow(x0, x1, x2, x3, x4, x5, x6, x7, rax, rcx, rdx, tmp);
+ __ leave(); // required for proper stackwalking of RuntimeStub frame
+ __ ret(0);
+
+ return start;
+
+ }
// Safefetch stubs.
@@ -3310,6 +3325,7 @@
if (VM_Version::supports_sse2()) {
StubRoutines::_dexp = generate_libmExp();
StubRoutines::_dlog = generate_libmLog();
+ StubRoutines::_dpow = generate_libmPow();
}
}