1235 void LIRGenerator::do_update_CRC32C(Intrinsic* x) { |
1235 void LIRGenerator::do_update_CRC32C(Intrinsic* x) { |
1236 Unimplemented(); |
1236 Unimplemented(); |
1237 } |
1237 } |
1238 |
1238 |
1239 void LIRGenerator::do_FmaIntrinsic(Intrinsic* x) { |
1239 void LIRGenerator::do_FmaIntrinsic(Intrinsic* x) { |
1240 fatal("FMA intrinsic is not implemented on this platform"); |
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 } |
1241 } |
1262 } |
1242 |
1263 |
1243 void LIRGenerator::do_vectorizedMismatch(Intrinsic* x) { |
1264 void LIRGenerator::do_vectorizedMismatch(Intrinsic* x) { |
1244 fatal("vectorizedMismatch intrinsic is not implemented on this platform"); |
1265 fatal("vectorizedMismatch intrinsic is not implemented on this platform"); |
1245 } |
1266 } |