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 }
|