1017 crc.load_item_force(cc->at(0));
1018 __ move(addr, cc->at(1));
1019 len.load_item_force(cc->at(2));
1020
1021 __ call_runtime_leaf(StubRoutines::updateBytesCRC32(), getThreadTemp(), result_reg, cc->args());
1022 __ move(result_reg, result);
1023
1024 break;
1025 }
1026 default: {
1027 ShouldNotReachHere();
1028 }
1029 }
1030 }
1031
1032 void LIRGenerator::do_update_CRC32C(Intrinsic* x) {
1033 Unimplemented();
1034 }
1035
1036 void LIRGenerator::do_FmaIntrinsic(Intrinsic* x) {
1037 fatal("FMA intrinsic is not implemented on this platform");
1038 }
1039
1040 void LIRGenerator::do_vectorizedMismatch(Intrinsic* x) {
1041 fatal("vectorizedMismatch intrinsic is not implemented on this platform");
1042 }
1043
1044 // _i2l, _i2f, _i2d, _l2i, _l2f, _l2d, _f2i, _f2l, _f2d, _d2i, _d2l, _d2f
1045 // _i2b, _i2c, _i2s
1046 void LIRGenerator::do_Convert(Convert* x) {
1047 LIRItem value(x->value(), this);
1048 value.load_item();
1049 LIR_Opr input = value.result();
1050 LIR_Opr result = rlock(x);
1051
1052 // arguments of lir_convert
1053 LIR_Opr conv_input = input;
1054 LIR_Opr conv_result = result;
1055 ConversionStub* stub = NULL;
1056
1057 __ convert(x->op(), conv_input, conv_result);
|
1017 crc.load_item_force(cc->at(0));
1018 __ move(addr, cc->at(1));
1019 len.load_item_force(cc->at(2));
1020
1021 __ call_runtime_leaf(StubRoutines::updateBytesCRC32(), getThreadTemp(), result_reg, cc->args());
1022 __ move(result_reg, result);
1023
1024 break;
1025 }
1026 default: {
1027 ShouldNotReachHere();
1028 }
1029 }
1030 }
1031
1032 void LIRGenerator::do_update_CRC32C(Intrinsic* x) {
1033 Unimplemented();
1034 }
1035
1036 void LIRGenerator::do_FmaIntrinsic(Intrinsic* x) {
1037 assert(x->number_of_arguments() == 3, "wrong type");
1038 assert(UseFMA, "Needs FMA instructions support.");
1039 LIRItem value(x->argument_at(0), this);
1040 LIRItem value1(x->argument_at(1), this);
1041 LIRItem value2(x->argument_at(2), this);
1042
1043 value.load_item();
1044 value1.load_item();
1045 value2.load_item();
1046
1047 LIR_Opr calc_input = value.result();
1048 LIR_Opr calc_input1 = value1.result();
1049 LIR_Opr calc_input2 = value2.result();
1050 LIR_Opr calc_result = rlock_result(x);
1051
1052 switch (x->id()) {
1053 case vmIntrinsics::_fmaD: __ fmad(calc_input, calc_input1, calc_input2, calc_result); break;
1054 case vmIntrinsics::_fmaF: __ fmaf(calc_input, calc_input1, calc_input2, calc_result); break;
1055 default: ShouldNotReachHere();
1056 }
1057 }
1058
1059 void LIRGenerator::do_vectorizedMismatch(Intrinsic* x) {
1060 fatal("vectorizedMismatch intrinsic is not implemented on this platform");
1061 }
1062
1063 // _i2l, _i2f, _i2d, _l2i, _l2f, _l2d, _f2i, _f2l, _f2d, _d2i, _d2l, _d2f
1064 // _i2b, _i2c, _i2s
1065 void LIRGenerator::do_Convert(Convert* x) {
1066 LIRItem value(x->value(), this);
1067 value.load_item();
1068 LIR_Opr input = value.result();
1069 LIR_Opr result = rlock(x);
1070
1071 // arguments of lir_convert
1072 LIR_Opr conv_input = input;
1073 LIR_Opr conv_result = result;
1074 ConversionStub* stub = NULL;
1075
1076 __ convert(x->op(), conv_input, conv_result);
|