< prev index next >

src/cpu/aarch64/vm/c1_LIRGenerator_aarch64.cpp

Print this page
rev 12379 : 8162338: AArch64: Intrinsify fused mac operations
Reviewed-by:


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);


< prev index next >