2124 |
2124 |
2125 __ fld_d(Address(rsp, 4)); |
2125 __ fld_d(Address(rsp, 4)); |
2126 __ trigfunc('t'); |
2126 __ trigfunc('t'); |
2127 __ ret(0); |
2127 __ ret(0); |
2128 } |
2128 } |
2129 { |
|
2130 StubCodeMark mark(this, "StubRoutines", "pow"); |
|
2131 StubRoutines::_intrinsic_pow = (double (*)(double,double)) __ pc(); |
|
2132 |
|
2133 __ fld_d(Address(rsp, 12)); |
|
2134 __ fld_d(Address(rsp, 4)); |
|
2135 __ pow_with_fallback(0); |
|
2136 __ ret(0); |
|
2137 } |
|
2138 } |
2129 } |
2139 |
2130 |
2140 // AES intrinsic stubs |
2131 // AES intrinsic stubs |
2141 enum {AESBlockSize = 16}; |
2132 enum {AESBlockSize = 16}; |
2142 |
2133 |
3080 |
3071 |
3081 return start; |
3072 return start; |
3082 |
3073 |
3083 } |
3074 } |
3084 |
3075 |
|
3076 address generate_libmPow() { |
|
3077 address start = __ pc(); |
|
3078 |
|
3079 const XMMRegister x0 = xmm0; |
|
3080 const XMMRegister x1 = xmm1; |
|
3081 const XMMRegister x2 = xmm2; |
|
3082 const XMMRegister x3 = xmm3; |
|
3083 |
|
3084 const XMMRegister x4 = xmm4; |
|
3085 const XMMRegister x5 = xmm5; |
|
3086 const XMMRegister x6 = xmm6; |
|
3087 const XMMRegister x7 = xmm7; |
|
3088 |
|
3089 const Register tmp = rbx; |
|
3090 |
|
3091 BLOCK_COMMENT("Entry:"); |
|
3092 __ enter(); // required for proper stackwalking of RuntimeStub frame |
|
3093 __ fast_pow(x0, x1, x2, x3, x4, x5, x6, x7, rax, rcx, rdx, tmp); |
|
3094 __ leave(); // required for proper stackwalking of RuntimeStub frame |
|
3095 __ ret(0); |
|
3096 |
|
3097 return start; |
|
3098 |
|
3099 } |
3085 |
3100 |
3086 |
3101 |
3087 // Safefetch stubs. |
3102 // Safefetch stubs. |
3088 void generate_safefetch(const char* name, int size, address* entry, |
3103 void generate_safefetch(const char* name, int size, address* entry, |
3089 address* fault_pc, address* continuation_pc) { |
3104 address* fault_pc, address* continuation_pc) { |
3308 StubRoutines::_updateBytesCRC32C = generate_updateBytesCRC32C(supports_clmul); |
3323 StubRoutines::_updateBytesCRC32C = generate_updateBytesCRC32C(supports_clmul); |
3309 } |
3324 } |
3310 if (VM_Version::supports_sse2()) { |
3325 if (VM_Version::supports_sse2()) { |
3311 StubRoutines::_dexp = generate_libmExp(); |
3326 StubRoutines::_dexp = generate_libmExp(); |
3312 StubRoutines::_dlog = generate_libmLog(); |
3327 StubRoutines::_dlog = generate_libmLog(); |
|
3328 StubRoutines::_dpow = generate_libmPow(); |
3313 } |
3329 } |
3314 } |
3330 } |
3315 |
3331 |
3316 |
3332 |
3317 void generate_all() { |
3333 void generate_all() { |