< prev index next >

src/cpu/ppc/vm/templateTable_ppc_64.cpp

Print this page
rev 13142 : 8181809: PPC64: Leverage mtfprd/mffprd on POWER8
Reviewed-by: mdoerr, simonis
Contributed-by: Matthew Brandyberry <mbrandy@linux.vnet.ibm.com>

*** 1470,1486 **** break; case Bytecodes::_i2d: __ extsw(R17_tos, R17_tos); case Bytecodes::_l2d: ! __ push_l_pop_d(); __ fcfid(F15_ftos, F15_ftos); break; case Bytecodes::_i2f: __ extsw(R17_tos, R17_tos); ! __ push_l_pop_d(); if (VM_Version::has_fcfids()) { // fcfids is >= Power7 only // Comment: alternatively, load with sign extend could be done by lfiwax. __ fcfids(F15_ftos, F15_ftos); } else { __ fcfid(F15_ftos, F15_ftos); --- 1470,1486 ---- break; case Bytecodes::_i2d: __ extsw(R17_tos, R17_tos); case Bytecodes::_l2d: ! __ move_l_to_d(); __ fcfid(F15_ftos, F15_ftos); break; case Bytecodes::_i2f: __ extsw(R17_tos, R17_tos); ! __ move_l_to_d(); if (VM_Version::has_fcfids()) { // fcfids is >= Power7 only // Comment: alternatively, load with sign extend could be done by lfiwax. __ fcfids(F15_ftos, F15_ftos); } else { __ fcfid(F15_ftos, F15_ftos);
*** 1488,1498 **** } break; case Bytecodes::_l2f: if (VM_Version::has_fcfids()) { // fcfids is >= Power7 only ! __ push_l_pop_d(); __ fcfids(F15_ftos, F15_ftos); } else { // Avoid rounding problem when result should be 0x3f800001: need fixup code before fcfid+frsp. __ mr(R3_ARG1, R17_tos); __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::l2f)); --- 1488,1498 ---- } break; case Bytecodes::_l2f: if (VM_Version::has_fcfids()) { // fcfids is >= Power7 only ! __ move_l_to_d(); __ fcfids(F15_ftos, F15_ftos); } else { // Avoid rounding problem when result should be 0x3f800001: need fixup code before fcfid+frsp. __ mr(R3_ARG1, R17_tos); __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::l2f));
*** 1512,1531 **** case Bytecodes::_f2i: __ fcmpu(CCR0, F15_ftos, F15_ftos); __ li(R17_tos, 0); // 0 in case of NAN __ bso(CCR0, done); __ fctiwz(F15_ftos, F15_ftos); ! __ push_d_pop_l(); break; case Bytecodes::_d2l: case Bytecodes::_f2l: __ fcmpu(CCR0, F15_ftos, F15_ftos); __ li(R17_tos, 0); // 0 in case of NAN __ bso(CCR0, done); __ fctidz(F15_ftos, F15_ftos); ! __ push_d_pop_l(); break; default: ShouldNotReachHere(); } __ bind(done); --- 1512,1531 ---- case Bytecodes::_f2i: __ fcmpu(CCR0, F15_ftos, F15_ftos); __ li(R17_tos, 0); // 0 in case of NAN __ bso(CCR0, done); __ fctiwz(F15_ftos, F15_ftos); ! __ move_d_to_l(); break; case Bytecodes::_d2l: case Bytecodes::_f2l: __ fcmpu(CCR0, F15_ftos, F15_ftos); __ li(R17_tos, 0); // 0 in case of NAN __ bso(CCR0, done); __ fctidz(F15_ftos, F15_ftos); ! __ move_d_to_l(); break; default: ShouldNotReachHere(); } __ bind(done);
< prev index next >