1220 // CCallingConventionRequiresIntsAsLongs
1221 crc.load_item_force(arg1); // We skip int->long conversion here, because CRC32 stub doesn't care about high bits.
1222 __ leal(LIR_OprFact::address(a), arg2);
1223 load_int_as_long(gen()->lir(), len, arg3);
1224
1225 __ call_runtime_leaf(StubRoutines::updateBytesCRC32(), LIR_OprFact::illegalOpr, result_reg, cc->args());
1226 __ move(result_reg, result);
1227 break;
1228 }
1229 default: {
1230 ShouldNotReachHere();
1231 }
1232 }
1233 }
1234
1235 void LIRGenerator::do_update_CRC32C(Intrinsic* x) {
1236 Unimplemented();
1237 }
1238
1239 void LIRGenerator::do_FmaIntrinsic(Intrinsic* x) {
1240 fatal("FMA intrinsic is not implemented on this platform");
1241 }
1242
1243 void LIRGenerator::do_vectorizedMismatch(Intrinsic* x) {
1244 fatal("vectorizedMismatch intrinsic is not implemented on this platform");
1245 }
1246
|
1220 // CCallingConventionRequiresIntsAsLongs
1221 crc.load_item_force(arg1); // We skip int->long conversion here, because CRC32 stub doesn't care about high bits.
1222 __ leal(LIR_OprFact::address(a), arg2);
1223 load_int_as_long(gen()->lir(), len, arg3);
1224
1225 __ call_runtime_leaf(StubRoutines::updateBytesCRC32(), LIR_OprFact::illegalOpr, result_reg, cc->args());
1226 __ move(result_reg, result);
1227 break;
1228 }
1229 default: {
1230 ShouldNotReachHere();
1231 }
1232 }
1233 }
1234
1235 void LIRGenerator::do_update_CRC32C(Intrinsic* x) {
1236 Unimplemented();
1237 }
1238
1239 void LIRGenerator::do_FmaIntrinsic(Intrinsic* x) {
1240 assert(x->number_of_arguments() == 3, "wrong type");
1241 assert(UseFMA, "Needs FMA instructions support.");
1242 LIRItem value(x->argument_at(0), this);
1243 LIRItem value1(x->argument_at(1), this);
1244 LIRItem value2(x->argument_at(2), this);
1245
1246 value2.set_destroys_register();
1247
1248 value.load_item();
1249 value1.load_item();
1250 value2.load_item();
1251
1252 LIR_Opr calc_input = value.result();
1253 LIR_Opr calc_input1 = value1.result();
1254 LIR_Opr calc_input2 = value2.result();
1255 LIR_Opr calc_result = rlock_result(x);
1256
1257 switch (x->id()) {
1258 case vmIntrinsics::_fmaD: __ fmad(calc_input, calc_input1, calc_input2, calc_result); break;
1259 case vmIntrinsics::_fmaF: __ fmaf(calc_input, calc_input1, calc_input2, calc_result); break;
1260 default: ShouldNotReachHere();
1261 }
1262 }
1263
1264 void LIRGenerator::do_vectorizedMismatch(Intrinsic* x) {
1265 fatal("vectorizedMismatch intrinsic is not implemented on this platform");
1266 }
1267
|