< prev index next >

src/cpu/ppc/vm/c1_LIRGenerator_ppc.cpp

Print this page
rev 12409 : 8171244: PPC64: Make interpreter's math entries consistent with C1 and C2 and support FMA
Reviewed-by:


1418       LIR_Opr arg1 = cc->at(0),
1419               arg2 = cc->at(1),
1420               arg3 = cc->at(2);
1421 
1422       // CCallingConventionRequiresIntsAsLongs
1423       crc.load_item_force(arg1); // We skip int->long conversion here, because CRC32 stub doesn't care about high bits.
1424       __ leal(LIR_OprFact::address(a), arg2);
1425       load_int_as_long(gen()->lir(), len, arg3);
1426 
1427       __ call_runtime_leaf(StubRoutines::updateBytesCRC32(), LIR_OprFact::illegalOpr, result_reg, cc->args());
1428       __ move(result_reg, result);
1429       break;
1430     }
1431     default: {
1432       ShouldNotReachHere();
1433     }
1434   }
1435 }
1436 
1437 void LIRGenerator::do_FmaIntrinsic(Intrinsic* x) {
1438   fatal("FMA intrinsic is not implemented on this platform");



















1439 }
1440 
1441 void LIRGenerator::do_vectorizedMismatch(Intrinsic* x) {
1442   fatal("vectorizedMismatch intrinsic is not implemented on this platform");
1443 }
1444 
1445 void LIRGenerator::do_update_CRC32C(Intrinsic* x) {
1446   Unimplemented();
1447 }


1418       LIR_Opr arg1 = cc->at(0),
1419               arg2 = cc->at(1),
1420               arg3 = cc->at(2);
1421 
1422       // CCallingConventionRequiresIntsAsLongs
1423       crc.load_item_force(arg1); // We skip int->long conversion here, because CRC32 stub doesn't care about high bits.
1424       __ leal(LIR_OprFact::address(a), arg2);
1425       load_int_as_long(gen()->lir(), len, arg3);
1426 
1427       __ call_runtime_leaf(StubRoutines::updateBytesCRC32(), LIR_OprFact::illegalOpr, result_reg, cc->args());
1428       __ move(result_reg, result);
1429       break;
1430     }
1431     default: {
1432       ShouldNotReachHere();
1433     }
1434   }
1435 }
1436 
1437 void LIRGenerator::do_FmaIntrinsic(Intrinsic* x) {
1438   assert(x->number_of_arguments() == 3, "wrong type");
1439   assert(UseFMA, "Needs FMA instructions support.");
1440   LIRItem value(x->argument_at(0), this);
1441   LIRItem value1(x->argument_at(1), this);
1442   LIRItem value2(x->argument_at(2), this);
1443 
1444   value.load_item();
1445   value1.load_item();
1446   value2.load_item();
1447 
1448   LIR_Opr calc_input = value.result();
1449   LIR_Opr calc_input1 = value1.result();
1450   LIR_Opr calc_input2 = value2.result();
1451   LIR_Opr calc_result = rlock_result(x);
1452 
1453   switch (x->id()) {
1454   case vmIntrinsics::_fmaD: __ fmad(calc_input, calc_input1, calc_input2, calc_result); break;
1455   case vmIntrinsics::_fmaF: __ fmaf(calc_input, calc_input1, calc_input2, calc_result); break;
1456   default:                  ShouldNotReachHere();
1457   }
1458 }
1459 
1460 void LIRGenerator::do_vectorizedMismatch(Intrinsic* x) {
1461   fatal("vectorizedMismatch intrinsic is not implemented on this platform");
1462 }
1463 
1464 void LIRGenerator::do_update_CRC32C(Intrinsic* x) {
1465   Unimplemented();
1466 }
< prev index next >