< prev index next >
src/cpu/x86/vm/stubGenerator_x86_64.cpp
Print this page
*** 2972,2994 ****
StubRoutines::_arrayof_oop_arraycopy_uninit = StubRoutines::_oop_arraycopy_uninit;
}
void generate_math_stubs() {
{
- StubCodeMark mark(this, "StubRoutines", "log");
- StubRoutines::_intrinsic_log = (double (*)(double)) __ pc();
-
- __ subq(rsp, 8);
- __ movdbl(Address(rsp, 0), xmm0);
- __ fld_d(Address(rsp, 0));
- __ flog();
- __ fstp_d(Address(rsp, 0));
- __ movdbl(xmm0, Address(rsp, 0));
- __ addq(rsp, 8);
- __ ret(0);
- }
- {
StubCodeMark mark(this, "StubRoutines", "log10");
StubRoutines::_intrinsic_log10 = (double (*)(double)) __ pc();
__ subq(rsp, 8);
__ movdbl(Address(rsp, 0), xmm0);
--- 2972,2981 ----
*** 4185,4203 ****
BLOCK_COMMENT("Entry:");
__ enter(); // required for proper stackwalking of RuntimeStub frame
#ifdef _WIN64
// save the xmm registers which must be preserved 6-7
! __ movdqu(xmm_save(6), as_XMMRegister(6));
! __ movdqu(xmm_save(7), as_XMMRegister(7));
#endif
__ fast_exp(x0, x1, x2, x3, x4, x5, x6, x7, rax, rcx, rdx, tmp);
#ifdef _WIN64
// restore xmm regs belonging to calling function
! __ movdqu(as_XMMRegister(6), xmm_save(6));
! __ movdqu(as_XMMRegister(7), xmm_save(7));
#endif
__ leave(); // required for proper stackwalking of RuntimeStub frame
__ ret(0);
--- 4172,4233 ----
BLOCK_COMMENT("Entry:");
__ enter(); // required for proper stackwalking of RuntimeStub frame
#ifdef _WIN64
// save the xmm registers which must be preserved 6-7
! __ subptr(rsp, 4 * wordSize);
! __ movdqu(Address(rsp, 0), xmm6);
! __ movdqu(Address(rsp, 2 * wordSize), xmm7);
#endif
__ fast_exp(x0, x1, x2, x3, x4, x5, x6, x7, rax, rcx, rdx, tmp);
#ifdef _WIN64
// restore xmm regs belonging to calling function
! __ movdqu(xmm6, Address(rsp, 0));
! __ movdqu(xmm7, Address(rsp, 2 * wordSize));
! __ addptr(rsp, 4 * wordSize);
! #endif
!
! __ leave(); // required for proper stackwalking of RuntimeStub frame
! __ ret(0);
!
! return start;
!
! }
!
! address generate_libmLog() {
! 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 tmp1 = r11;
! const Register tmp2 = r8;
!
! BLOCK_COMMENT("Entry:");
! __ enter(); // required for proper stackwalking of RuntimeStub frame
!
! #ifdef _WIN64
! // save the xmm registers which must be preserved 6-7
! __ subptr(rsp, 4 * wordSize);
! __ movdqu(Address(rsp, 0), xmm6);
! __ movdqu(Address(rsp, 2 * wordSize), xmm7);
! #endif
! __ fast_log(x0, x1, x2, x3, x4, x5, x6, x7, rax, rcx, rdx, tmp1, tmp2);
!
! #ifdef _WIN64
! // restore xmm regs belonging to calling function
! __ movdqu(xmm6, Address(rsp, 0));
! __ movdqu(xmm7, Address(rsp, 2 * wordSize));
! __ addptr(rsp, 4 * wordSize);
#endif
__ leave(); // required for proper stackwalking of RuntimeStub frame
__ ret(0);
*** 4390,4400 ****
--- 4420,4433 ----
bool supports_clmul = VM_Version::supports_clmul();
StubRoutines::x86::generate_CRC32C_table(supports_clmul);
StubRoutines::_crc32c_table_addr = (address)StubRoutines::x86::_crc32c_table;
StubRoutines::_updateBytesCRC32C = generate_updateBytesCRC32C(supports_clmul);
}
+ if (VM_Version::supports_sse2()) {
StubRoutines::_dexp = generate_libmExp();
+ StubRoutines::_dlog = generate_libmLog();
+ }
}
void generate_all() {
// Generates all stubs and initializes the entry points
< prev index next >