2133 __ fld_d(Address(rsp, 4)); |
2133 __ fld_d(Address(rsp, 4)); |
2134 __ trigfunc('t'); |
2134 __ trigfunc('t'); |
2135 __ ret(0); |
2135 __ ret(0); |
2136 } |
2136 } |
2137 { |
2137 { |
2138 StubCodeMark mark(this, "StubRoutines", "exp"); |
|
2139 StubRoutines::_intrinsic_exp = (double (*)(double)) __ pc(); |
|
2140 |
|
2141 __ fld_d(Address(rsp, 4)); |
|
2142 __ exp_with_fallback(0); |
|
2143 __ ret(0); |
|
2144 } |
|
2145 { |
|
2146 StubCodeMark mark(this, "StubRoutines", "pow"); |
2138 StubCodeMark mark(this, "StubRoutines", "pow"); |
2147 StubRoutines::_intrinsic_pow = (double (*)(double,double)) __ pc(); |
2139 StubRoutines::_intrinsic_pow = (double (*)(double,double)) __ pc(); |
2148 |
2140 |
2149 __ fld_d(Address(rsp, 12)); |
2141 __ fld_d(Address(rsp, 12)); |
2150 __ fld_d(Address(rsp, 4)); |
2142 __ fld_d(Address(rsp, 4)); |
3046 __ ret(0); |
3038 __ ret(0); |
3047 |
3039 |
3048 return start; |
3040 return start; |
3049 } |
3041 } |
3050 |
3042 |
|
3043 address generate_libmExp() { |
|
3044 address start = __ pc(); |
|
3045 |
|
3046 const XMMRegister x0 = xmm0; |
|
3047 const XMMRegister x1 = xmm1; |
|
3048 const XMMRegister x2 = xmm2; |
|
3049 const XMMRegister x3 = xmm3; |
|
3050 |
|
3051 const XMMRegister x4 = xmm4; |
|
3052 const XMMRegister x5 = xmm5; |
|
3053 const XMMRegister x6 = xmm6; |
|
3054 const XMMRegister x7 = xmm7; |
|
3055 |
|
3056 const Register tmp = rbx; |
|
3057 |
|
3058 BLOCK_COMMENT("Entry:"); |
|
3059 __ enter(); // required for proper stackwalking of RuntimeStub frame |
|
3060 __ fast_exp(x0, x1, x2, x3, x4, x5, x6, x7, rax, rcx, rdx, tmp); |
|
3061 __ leave(); // required for proper stackwalking of RuntimeStub frame |
|
3062 __ ret(0); |
|
3063 |
|
3064 return start; |
|
3065 |
|
3066 } |
|
3067 |
|
3068 |
3051 // Safefetch stubs. |
3069 // Safefetch stubs. |
3052 void generate_safefetch(const char* name, int size, address* entry, |
3070 void generate_safefetch(const char* name, int size, address* entry, |
3053 address* fault_pc, address* continuation_pc) { |
3071 address* fault_pc, address* continuation_pc) { |
3054 // safefetch signatures: |
3072 // safefetch signatures: |
3055 // int SafeFetch32(int* adr, int errValue); |
3073 // int SafeFetch32(int* adr, int errValue); |
3266 bool supports_clmul = VM_Version::supports_clmul(); |
3284 bool supports_clmul = VM_Version::supports_clmul(); |
3267 StubRoutines::x86::generate_CRC32C_table(supports_clmul); |
3285 StubRoutines::x86::generate_CRC32C_table(supports_clmul); |
3268 StubRoutines::_crc32c_table_addr = (address)StubRoutines::x86::_crc32c_table; |
3286 StubRoutines::_crc32c_table_addr = (address)StubRoutines::x86::_crc32c_table; |
3269 StubRoutines::_updateBytesCRC32C = generate_updateBytesCRC32C(supports_clmul); |
3287 StubRoutines::_updateBytesCRC32C = generate_updateBytesCRC32C(supports_clmul); |
3270 } |
3288 } |
|
3289 if (VM_Version::supports_sse2()) { |
|
3290 StubRoutines::_dexp = generate_libmExp(); |
|
3291 } |
3271 } |
3292 } |
3272 |
3293 |
3273 |
3294 |
3274 void generate_all() { |
3295 void generate_all() { |
3275 // Generates all stubs and initializes the entry points |
3296 // Generates all stubs and initializes the entry points |