2101 __ fld_d(Address(rsp, 4)); |
2101 __ fld_d(Address(rsp, 4)); |
2102 __ flog10(); |
2102 __ flog10(); |
2103 __ ret(0); |
2103 __ ret(0); |
2104 } |
2104 } |
2105 { |
2105 { |
2106 StubCodeMark mark(this, "StubRoutines", "sin"); |
|
2107 StubRoutines::_intrinsic_sin = (double (*)(double)) __ pc(); |
|
2108 |
|
2109 __ fld_d(Address(rsp, 4)); |
|
2110 __ trigfunc('s'); |
|
2111 __ ret(0); |
|
2112 } |
|
2113 { |
|
2114 StubCodeMark mark(this, "StubRoutines", "cos"); |
|
2115 StubRoutines::_intrinsic_cos = (double (*)(double)) __ pc(); |
|
2116 |
|
2117 __ fld_d(Address(rsp, 4)); |
|
2118 __ trigfunc('c'); |
|
2119 __ ret(0); |
|
2120 } |
|
2121 { |
|
2122 StubCodeMark mark(this, "StubRoutines", "tan"); |
2106 StubCodeMark mark(this, "StubRoutines", "tan"); |
2123 StubRoutines::_intrinsic_tan = (double (*)(double)) __ pc(); |
2107 StubRoutines::_intrinsic_tan = (double (*)(double)) __ pc(); |
2124 |
2108 |
2125 __ fld_d(Address(rsp, 4)); |
2109 __ fld_d(Address(rsp, 4)); |
2126 __ trigfunc('t'); |
2110 __ trigfunc('t'); |
3439 |
3423 |
3440 return start; |
3424 return start; |
3441 |
3425 |
3442 } |
3426 } |
3443 |
3427 |
|
3428 address generate_libm_reduce_pi04l() { |
|
3429 address start = __ pc(); |
|
3430 |
|
3431 BLOCK_COMMENT("Entry:"); |
|
3432 __ libm_reduce_pi04l(rax, rcx, rdx, rbx, rsi, rdi, rbp, rsp); |
|
3433 |
|
3434 return start; |
|
3435 |
|
3436 } |
|
3437 |
|
3438 address generate_libm_sin_cos_huge() { |
|
3439 address start = __ pc(); |
|
3440 |
|
3441 const XMMRegister x0 = xmm0; |
|
3442 const XMMRegister x1 = xmm1; |
|
3443 |
|
3444 BLOCK_COMMENT("Entry:"); |
|
3445 __ libm_sincos_huge(x0, x1, rax, rcx, rdx, rbx, rsi, rdi, rbp, rsp); |
|
3446 |
|
3447 return start; |
|
3448 |
|
3449 } |
|
3450 |
|
3451 address generate_libmSin() { |
|
3452 address start = __ pc(); |
|
3453 |
|
3454 const XMMRegister x0 = xmm0; |
|
3455 const XMMRegister x1 = xmm1; |
|
3456 const XMMRegister x2 = xmm2; |
|
3457 const XMMRegister x3 = xmm3; |
|
3458 |
|
3459 const XMMRegister x4 = xmm4; |
|
3460 const XMMRegister x5 = xmm5; |
|
3461 const XMMRegister x6 = xmm6; |
|
3462 const XMMRegister x7 = xmm7; |
|
3463 |
|
3464 BLOCK_COMMENT("Entry:"); |
|
3465 __ enter(); // required for proper stackwalking of RuntimeStub frame |
|
3466 __ fast_sin(x0, x1, x2, x3, x4, x5, x6, x7, rax, rbx, rdx); |
|
3467 __ leave(); // required for proper stackwalking of RuntimeStub frame |
|
3468 __ ret(0); |
|
3469 |
|
3470 return start; |
|
3471 |
|
3472 } |
|
3473 |
|
3474 address generate_libmCos() { |
|
3475 address start = __ pc(); |
|
3476 |
|
3477 const XMMRegister x0 = xmm0; |
|
3478 const XMMRegister x1 = xmm1; |
|
3479 const XMMRegister x2 = xmm2; |
|
3480 const XMMRegister x3 = xmm3; |
|
3481 |
|
3482 const XMMRegister x4 = xmm4; |
|
3483 const XMMRegister x5 = xmm5; |
|
3484 const XMMRegister x6 = xmm6; |
|
3485 const XMMRegister x7 = xmm7; |
|
3486 |
|
3487 const Register tmp = rbx; |
|
3488 |
|
3489 BLOCK_COMMENT("Entry:"); |
|
3490 __ enter(); // required for proper stackwalking of RuntimeStub frame |
|
3491 __ fast_cos(x0, x1, x2, x3, x4, x5, x6, x7, rax, rcx, rdx, tmp); |
|
3492 __ leave(); // required for proper stackwalking of RuntimeStub frame |
|
3493 __ ret(0); |
|
3494 |
|
3495 return start; |
|
3496 |
|
3497 } |
3444 |
3498 |
3445 // Safefetch stubs. |
3499 // Safefetch stubs. |
3446 void generate_safefetch(const char* name, int size, address* entry, |
3500 void generate_safefetch(const char* name, int size, address* entry, |
3447 address* fault_pc, address* continuation_pc) { |
3501 address* fault_pc, address* continuation_pc) { |
3448 // safefetch signatures: |
3502 // safefetch signatures: |
3667 } |
3721 } |
3668 if (VM_Version::supports_sse2()) { |
3722 if (VM_Version::supports_sse2()) { |
3669 StubRoutines::_dexp = generate_libmExp(); |
3723 StubRoutines::_dexp = generate_libmExp(); |
3670 StubRoutines::_dlog = generate_libmLog(); |
3724 StubRoutines::_dlog = generate_libmLog(); |
3671 StubRoutines::_dpow = generate_libmPow(); |
3725 StubRoutines::_dpow = generate_libmPow(); |
|
3726 if (UseLibmSinIntrinsic || UseLibmCosIntrinsic) { |
|
3727 StubRoutines::_dlibm_reduce_pi04l = generate_libm_reduce_pi04l(); |
|
3728 StubRoutines::_dlibm_sin_cos_huge = generate_libm_sin_cos_huge(); |
|
3729 } |
|
3730 if (UseLibmSinIntrinsic) { |
|
3731 StubRoutines::_dsin = generate_libmSin(); |
|
3732 } |
|
3733 if (UseLibmCosIntrinsic) { |
|
3734 StubRoutines::_dcos = generate_libmCos(); |
|
3735 } |
3672 } |
3736 } |
3673 } |
3737 } |
3674 |
3738 |
3675 |
3739 |
3676 void generate_all() { |
3740 void generate_all() { |