< 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 >