< prev index next >

src/cpu/x86/vm/templateInterpreterGenerator_x86_32.cpp

Print this page

        

*** 343,399 **** // __ fld_d(Address(rsp, 1*wordSize)); switch (kind) { case Interpreter::java_lang_math_sin : ! __ trigfunc('s'); break; case Interpreter::java_lang_math_cos : ! __ trigfunc('c'); break; case Interpreter::java_lang_math_tan : ! __ trigfunc('t'); break; case Interpreter::java_lang_math_sqrt: __ fsqrt(); break; case Interpreter::java_lang_math_abs: __ fabs(); break; case Interpreter::java_lang_math_log: __ subptr(rsp, 2 * wordSize); __ fstp_d(Address(rsp, 0)); ! if (VM_Version::supports_sse2()) { __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlog()))); ! } ! else { __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::dlog))); } __ addptr(rsp, 2 * wordSize); break; case Interpreter::java_lang_math_log10: ! __ flog10(); ! // Store to stack to convert 80bit precision back to 64bits ! __ push_fTOS(); ! __ pop_fTOS(); break; case Interpreter::java_lang_math_pow: __ fld_d(Address(rsp, 3*wordSize)); // second argument __ subptr(rsp, 4 * wordSize); __ fstp_d(Address(rsp, 0)); __ fstp_d(Address(rsp, 2 * wordSize)); ! if (VM_Version::supports_sse2()) { __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dpow()))); } else { __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::dpow))); } __ addptr(rsp, 4 * wordSize); break; case Interpreter::java_lang_math_exp: __ subptr(rsp, 2*wordSize); __ fstp_d(Address(rsp, 0)); ! if (VM_Version::supports_sse2()) { __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dexp()))); } else { __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::dexp))); } __ addptr(rsp, 2*wordSize); --- 343,423 ---- // __ fld_d(Address(rsp, 1*wordSize)); switch (kind) { case Interpreter::java_lang_math_sin : ! __ subptr(rsp, 2 * wordSize); ! __ fstp_d(Address(rsp, 0)); ! if (VM_Version::supports_sse2() && StubRoutines::dsin() != NULL) { ! __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dsin()))); ! } else { ! __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::dsin))); ! } ! __ addptr(rsp, 2 * wordSize); break; case Interpreter::java_lang_math_cos : ! __ subptr(rsp, 2 * wordSize); ! __ fstp_d(Address(rsp, 0)); ! if (VM_Version::supports_sse2() && StubRoutines::dcos() != NULL) { ! __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dcos()))); ! } else { ! __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::dcos))); ! } ! __ addptr(rsp, 2 * wordSize); break; case Interpreter::java_lang_math_tan : ! __ subptr(rsp, 2 * wordSize); ! __ fstp_d(Address(rsp, 0)); ! if (StubRoutines::dtan() != NULL) { ! __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dtan()))); ! } else { ! __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::dtan))); ! } ! __ addptr(rsp, 2 * wordSize); break; case Interpreter::java_lang_math_sqrt: __ fsqrt(); break; case Interpreter::java_lang_math_abs: __ fabs(); break; case Interpreter::java_lang_math_log: __ subptr(rsp, 2 * wordSize); __ fstp_d(Address(rsp, 0)); ! if (StubRoutines::dlog() != NULL) { __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlog()))); ! } else { __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::dlog))); } __ addptr(rsp, 2 * wordSize); break; case Interpreter::java_lang_math_log10: ! __ subptr(rsp, 2 * wordSize); ! __ fstp_d(Address(rsp, 0)); ! if (StubRoutines::dlog10() != NULL) { ! __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlog10()))); ! } else { ! __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::dlog10))); ! } ! __ addptr(rsp, 2 * wordSize); break; case Interpreter::java_lang_math_pow: __ fld_d(Address(rsp, 3*wordSize)); // second argument __ subptr(rsp, 4 * wordSize); __ fstp_d(Address(rsp, 0)); __ fstp_d(Address(rsp, 2 * wordSize)); ! if (StubRoutines::dpow() != NULL) { __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dpow()))); } else { __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::dpow))); } __ addptr(rsp, 4 * wordSize); break; case Interpreter::java_lang_math_exp: __ subptr(rsp, 2*wordSize); __ fstp_d(Address(rsp, 0)); ! if (StubRoutines::dexp() != NULL) { __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dexp()))); } else { __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::dexp))); } __ addptr(rsp, 2*wordSize);
< prev index next >