hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp
changeset 35540 e001ad24dcdb
parent 35537 bed5e2dc57a1
child 36555 4f37fd7a5a09
equal deleted inserted replaced
35539:9a687b686976 35540:e001ad24dcdb
  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() {