2093 entry_checkcast_arraycopy); |
2093 entry_checkcast_arraycopy); |
2094 } |
2094 } |
2095 |
2095 |
2096 void generate_math_stubs() { |
2096 void generate_math_stubs() { |
2097 { |
2097 { |
2098 StubCodeMark mark(this, "StubRoutines", "log"); |
|
2099 StubRoutines::_intrinsic_log = (double (*)(double)) __ pc(); |
|
2100 |
|
2101 __ fld_d(Address(rsp, 4)); |
|
2102 __ flog(); |
|
2103 __ ret(0); |
|
2104 } |
|
2105 { |
|
2106 StubCodeMark mark(this, "StubRoutines", "log10"); |
2098 StubCodeMark mark(this, "StubRoutines", "log10"); |
2107 StubRoutines::_intrinsic_log10 = (double (*)(double)) __ pc(); |
2099 StubRoutines::_intrinsic_log10 = (double (*)(double)) __ pc(); |
2108 |
2100 |
2109 __ fld_d(Address(rsp, 4)); |
2101 __ fld_d(Address(rsp, 4)); |
2110 __ flog10(); |
2102 __ flog10(); |
3063 |
3055 |
3064 return start; |
3056 return start; |
3065 |
3057 |
3066 } |
3058 } |
3067 |
3059 |
|
3060 address generate_libmLog() { |
|
3061 address start = __ pc(); |
|
3062 |
|
3063 const XMMRegister x0 = xmm0; |
|
3064 const XMMRegister x1 = xmm1; |
|
3065 const XMMRegister x2 = xmm2; |
|
3066 const XMMRegister x3 = xmm3; |
|
3067 |
|
3068 const XMMRegister x4 = xmm4; |
|
3069 const XMMRegister x5 = xmm5; |
|
3070 const XMMRegister x6 = xmm6; |
|
3071 const XMMRegister x7 = xmm7; |
|
3072 |
|
3073 const Register tmp = rbx; |
|
3074 |
|
3075 BLOCK_COMMENT("Entry:"); |
|
3076 __ enter(); // required for proper stackwalking of RuntimeStub frame |
|
3077 __ fast_log(x0, x1, x2, x3, x4, x5, x6, x7, rax, rcx, rdx, tmp); |
|
3078 __ leave(); // required for proper stackwalking of RuntimeStub frame |
|
3079 __ ret(0); |
|
3080 |
|
3081 return start; |
|
3082 |
|
3083 } |
|
3084 |
|
3085 |
3068 |
3086 |
3069 // Safefetch stubs. |
3087 // Safefetch stubs. |
3070 void generate_safefetch(const char* name, int size, address* entry, |
3088 void generate_safefetch(const char* name, int size, address* entry, |
3071 address* fault_pc, address* continuation_pc) { |
3089 address* fault_pc, address* continuation_pc) { |
3072 // safefetch signatures: |
3090 // safefetch signatures: |
3286 StubRoutines::_crc32c_table_addr = (address)StubRoutines::x86::_crc32c_table; |
3304 StubRoutines::_crc32c_table_addr = (address)StubRoutines::x86::_crc32c_table; |
3287 StubRoutines::_updateBytesCRC32C = generate_updateBytesCRC32C(supports_clmul); |
3305 StubRoutines::_updateBytesCRC32C = generate_updateBytesCRC32C(supports_clmul); |
3288 } |
3306 } |
3289 if (VM_Version::supports_sse2()) { |
3307 if (VM_Version::supports_sse2()) { |
3290 StubRoutines::_dexp = generate_libmExp(); |
3308 StubRoutines::_dexp = generate_libmExp(); |
|
3309 StubRoutines::_dlog = generate_libmLog(); |
3291 } |
3310 } |
3292 } |
3311 } |
3293 |
3312 |
3294 |
3313 |
3295 void generate_all() { |
3314 void generate_all() { |