@@ -956,20 +956,24 @@ let AssemblerPredicate = isGFX10Plus, DecoderNamespace = "GFX10" in {
956
956
} // End DecoderNamespace = "SDWA10"
957
957
958
958
//===------------------------------ VOP2be ------------------------------===//
959
- multiclass VOP2be_Real_gfx10 <bits<6> op, string opName, string asmName> {
959
+ multiclass VOP2be_Real_e32_gfx10 <bits<6> op, string opName, string asmName> {
960
960
def _e32_gfx10 :
961
961
VOP2_Real<!cast<VOP2_Pseudo>(opName#"_e32"), SIEncodingFamily.GFX10>,
962
962
VOP2e<op{5-0}, !cast<VOP2_Pseudo>(opName#"_e32").Pfl> {
963
963
VOP2_Pseudo Ps = !cast<VOP2_Pseudo>(opName#"_e32");
964
964
let AsmString = asmName # !subst(", vcc", "", Ps.AsmOperands);
965
965
}
966
+ }
967
+ multiclass VOP2be_Real_e64_gfx10<bits<6> op, string opName, string asmName> {
966
968
def _e64_gfx10 :
967
969
VOP3_Real<!cast<VOP3_Pseudo>(opName#"_e64"), SIEncodingFamily.GFX10>,
968
970
VOP3be_gfx10<{0, 1, 0, 0, op{5-0}},
969
971
!cast<VOP3_Pseudo>(opName#"_e64").Pfl> {
970
972
VOP3_Pseudo Ps = !cast<VOP3_Pseudo>(opName#"_e64");
971
973
let AsmString = asmName # Ps.AsmOperands;
972
974
}
975
+ }
976
+ multiclass VOP2be_Real_sdwa_gfx10<bits<6> op, string opName, string asmName> {
973
977
foreach _ = BoolToList<!cast<VOP2_Pseudo>(opName#"_e32").Pfl.HasExtSDWA9>.ret in
974
978
def _sdwa_gfx10 :
975
979
VOP_SDWA10_Real<!cast<VOP2_SDWA_Pseudo>(opName#"_sdwa")>,
@@ -978,6 +982,28 @@ let AssemblerPredicate = isGFX10Plus, DecoderNamespace = "GFX10" in {
978
982
let AsmString = asmName # !subst(", vcc", "", Ps.AsmOperands);
979
983
let DecoderNamespace = "SDWA10";
980
984
}
985
+ foreach _ = BoolToList<!cast<VOP2_Pseudo>(opName#"_e32").Pfl.HasExtSDWA9>.ret in
986
+ def _sdwa_w32_gfx10 :
987
+ Base_VOP_SDWA10_Real<!cast<VOP2_SDWA_Pseudo>(opName#"_sdwa")>,
988
+ VOP2_SDWA9Ae<op{5-0}, !cast<VOP2_SDWA_Pseudo>(opName#"_sdwa").Pfl> {
989
+ VOP2_SDWA_Pseudo Ps = !cast<VOP2_SDWA_Pseudo>(opName#"_sdwa");
990
+ let AsmString = asmName # !subst("vcc", "vcc_lo", Ps.AsmOperands);
991
+ let isAsmParserOnly = 1;
992
+ let DecoderNamespace = "SDWA10";
993
+ let WaveSizePredicate = isWave32;
994
+ }
995
+ foreach _ = BoolToList<!cast<VOP2_Pseudo>(opName#"_e32").Pfl.HasExtSDWA9>.ret in
996
+ def _sdwa_w64_gfx10 :
997
+ Base_VOP_SDWA10_Real<!cast<VOP2_SDWA_Pseudo>(opName#"_sdwa")>,
998
+ VOP2_SDWA9Ae<op{5-0}, !cast<VOP2_SDWA_Pseudo>(opName#"_sdwa").Pfl> {
999
+ VOP2_SDWA_Pseudo Ps = !cast<VOP2_SDWA_Pseudo>(opName#"_sdwa");
1000
+ let AsmString = asmName # Ps.AsmOperands;
1001
+ let isAsmParserOnly = 1;
1002
+ let DecoderNamespace = "SDWA10";
1003
+ let WaveSizePredicate = isWave64;
1004
+ }
1005
+ }
1006
+ multiclass VOP2be_Real_dpp_gfx10<bits<6> op, string opName, string asmName> {
981
1007
foreach _ = BoolToList<!cast<VOP2_Pseudo>(opName#"_e32").Pfl.HasExtDPP>.ret in
982
1008
def _dpp_gfx10 :
983
1009
VOP2_DPP16<op, !cast<VOP2_DPP_Pseudo>(opName#"_dpp"), asmName> {
@@ -986,60 +1012,46 @@ let AssemblerPredicate = isGFX10Plus, DecoderNamespace = "GFX10" in {
986
1012
let DecoderNamespace = "SDWA10";
987
1013
}
988
1014
foreach _ = BoolToList<!cast<VOP2_Pseudo>(opName#"_e32").Pfl.HasExtDPP>.ret in
1015
+ def _dpp_w32_gfx10 :
1016
+ Base_VOP2_DPP16<op, !cast<VOP2_DPP_Pseudo>(opName#"_dpp"), asmName> {
1017
+ string AsmDPP = !cast<VOP2_Pseudo>(opName#"_e32").Pfl.AsmDPP16;
1018
+ let AsmString = asmName # !subst("vcc", "vcc_lo", AsmDPP);
1019
+ let isAsmParserOnly = 1;
1020
+ let WaveSizePredicate = isWave32;
1021
+ }
1022
+ foreach _ = BoolToList<!cast<VOP2_Pseudo>(opName#"_e32").Pfl.HasExtDPP>.ret in
1023
+ def _dpp_w64_gfx10 :
1024
+ Base_VOP2_DPP16<op, !cast<VOP2_DPP_Pseudo>(opName#"_dpp"), asmName> {
1025
+ string AsmDPP = !cast<VOP2_Pseudo>(opName#"_e32").Pfl.AsmDPP16;
1026
+ let AsmString = asmName # AsmDPP;
1027
+ let isAsmParserOnly = 1;
1028
+ let WaveSizePredicate = isWave64;
1029
+ }
1030
+ }
1031
+ multiclass VOP2be_Real_dpp8_gfx10<bits<6> op, string opName, string asmName> {
1032
+ foreach _ = BoolToList<!cast<VOP2_Pseudo>(opName#"_e32").Pfl.HasExtDPP>.ret in
989
1033
def _dpp8_gfx10 :
990
1034
VOP2_DPP8<op, !cast<VOP2_Pseudo>(opName#"_e32"), asmName> {
991
1035
string AsmDPP8 = !cast<VOP2_Pseudo>(opName#"_e32").Pfl.AsmDPP8;
992
1036
let AsmString = asmName # !subst(", vcc", "", AsmDPP8);
993
1037
let DecoderNamespace = "DPP8";
994
1038
}
995
-
996
- let WaveSizePredicate = isWave32 in {
997
- foreach _ = BoolToList<!cast<VOP2_Pseudo>(opName#"_e32").Pfl.HasExtSDWA9>.ret in
998
- def _sdwa_w32_gfx10 :
999
- Base_VOP_SDWA10_Real<!cast<VOP2_SDWA_Pseudo>(opName#"_sdwa")>,
1000
- VOP2_SDWA9Ae<op{5-0}, !cast<VOP2_SDWA_Pseudo>(opName#"_sdwa").Pfl> {
1001
- VOP2_SDWA_Pseudo Ps = !cast<VOP2_SDWA_Pseudo>(opName#"_sdwa");
1002
- let AsmString = asmName # !subst("vcc", "vcc_lo", Ps.AsmOperands);
1003
- let isAsmParserOnly = 1;
1004
- let DecoderNamespace = "SDWA10";
1005
- }
1006
- def _dpp_w32_gfx10 :
1007
- Base_VOP2_DPP16<op, !cast<VOP2_DPP_Pseudo>(opName#"_dpp"), asmName> {
1008
- string AsmDPP = !cast<VOP2_Pseudo>(opName#"_e32").Pfl.AsmDPP16;
1009
- let AsmString = asmName # !subst("vcc", "vcc_lo", AsmDPP);
1010
- let isAsmParserOnly = 1;
1011
- }
1012
- def _dpp8_w32_gfx10 :
1013
- VOP2_DPP8<op, !cast<VOP2_Pseudo>(opName#"_e32"), asmName> {
1014
- string AsmDPP8 = !cast<VOP2_Pseudo>(opName#"_e32").Pfl.AsmDPP8;
1015
- let AsmString = asmName # !subst("vcc", "vcc_lo", AsmDPP8);
1016
- let isAsmParserOnly = 1;
1017
- }
1018
- } // End WaveSizePredicate = isWave32
1019
-
1020
- let WaveSizePredicate = isWave64 in {
1021
- foreach _ = BoolToList<!cast<VOP2_Pseudo>(opName#"_e32").Pfl.HasExtSDWA9>.ret in
1022
- def _sdwa_w64_gfx10 :
1023
- Base_VOP_SDWA10_Real<!cast<VOP2_SDWA_Pseudo>(opName#"_sdwa")>,
1024
- VOP2_SDWA9Ae<op{5-0}, !cast<VOP2_SDWA_Pseudo>(opName#"_sdwa").Pfl> {
1025
- VOP2_SDWA_Pseudo Ps = !cast<VOP2_SDWA_Pseudo>(opName#"_sdwa");
1026
- let AsmString = asmName # Ps.AsmOperands;
1027
- let isAsmParserOnly = 1;
1028
- let DecoderNamespace = "SDWA10";
1029
- }
1030
- def _dpp_w64_gfx10 :
1031
- Base_VOP2_DPP16<op, !cast<VOP2_DPP_Pseudo>(opName#"_dpp"), asmName> {
1032
- string AsmDPP = !cast<VOP2_Pseudo>(opName#"_e32").Pfl.AsmDPP16;
1033
- let AsmString = asmName # AsmDPP;
1034
- let isAsmParserOnly = 1;
1035
- }
1036
- def _dpp8_w64_gfx10 :
1037
- VOP2_DPP8<op, !cast<VOP2_Pseudo>(opName#"_e32"), asmName> {
1038
- string AsmDPP8 = !cast<VOP2_Pseudo>(opName#"_e32").Pfl.AsmDPP8;
1039
- let AsmString = asmName # AsmDPP8;
1040
- let isAsmParserOnly = 1;
1041
- }
1042
- } // End WaveSizePredicate = isWave64
1039
+ foreach _ = BoolToList<!cast<VOP2_Pseudo>(opName#"_e32").Pfl.HasExtDPP>.ret in
1040
+ def _dpp8_w32_gfx10 :
1041
+ VOP2_DPP8<op, !cast<VOP2_Pseudo>(opName#"_e32"), asmName> {
1042
+ string AsmDPP8 = !cast<VOP2_Pseudo>(opName#"_e32").Pfl.AsmDPP8;
1043
+ let AsmString = asmName # !subst("vcc", "vcc_lo", AsmDPP8);
1044
+ let isAsmParserOnly = 1;
1045
+ let WaveSizePredicate = isWave32;
1046
+ }
1047
+ foreach _ = BoolToList<!cast<VOP2_Pseudo>(opName#"_e32").Pfl.HasExtDPP>.ret in
1048
+ def _dpp8_w64_gfx10 :
1049
+ VOP2_DPP8<op, !cast<VOP2_Pseudo>(opName#"_e32"), asmName> {
1050
+ string AsmDPP8 = !cast<VOP2_Pseudo>(opName#"_e32").Pfl.AsmDPP8;
1051
+ let AsmString = asmName # AsmDPP8;
1052
+ let isAsmParserOnly = 1;
1053
+ let WaveSizePredicate = isWave64;
1054
+ }
1043
1055
}
1044
1056
1045
1057
//===----------------------------- VOP3Only -----------------------------===//
@@ -1060,8 +1072,19 @@ let AssemblerPredicate = isGFX10Plus, DecoderNamespace = "GFX10" in {
1060
1072
}
1061
1073
} // End AssemblerPredicate = isGFX10Plus, DecoderNamespace = "GFX10"
1062
1074
1063
- multiclass Base_VOP2_Real_gfx10<bits<6> op> :
1064
- VOP2_Real_e32_gfx10<op>, VOP2_Real_e64_gfx10<op>;
1075
+ multiclass VOP2be_Real_gfx10<bits<6> op, string opName, string asmName> :
1076
+ VOP2be_Real_e32_gfx10<op, opName, asmName>,
1077
+ VOP2be_Real_e64_gfx10<op, opName, asmName>,
1078
+ VOP2be_Real_sdwa_gfx10<op, opName, asmName>,
1079
+ VOP2be_Real_dpp_gfx10<op, opName, asmName>,
1080
+ VOP2be_Real_dpp8_gfx10<op, opName, asmName>;
1081
+
1082
+ multiclass VOP2e_Real_gfx10<bits<6> op, string opName, string asmName> :
1083
+ VOP2_Real_e32_gfx10<op>,
1084
+ VOP2_Real_e64_gfx10<op>,
1085
+ VOP2be_Real_sdwa_gfx10<op, opName, asmName>,
1086
+ VOP2be_Real_dpp_gfx10<op, opName, asmName>,
1087
+ VOP2be_Real_dpp8_gfx10<op, opName, asmName>;
1065
1088
1066
1089
multiclass VOP2_Real_gfx10<bits<6> op> :
1067
1090
VOP2_Real_e32_gfx10<op>, VOP2_Real_e64_gfx10<op>,
@@ -1075,7 +1098,6 @@ multiclass VOP2_Real_gfx10_with_name<bits<6> op, string opName,
1075
1098
VOP2_Real_dpp_gfx10_with_name<op, opName, asmName>,
1076
1099
VOP2_Real_dpp8_gfx10_with_name<op, opName, asmName>;
1077
1100
1078
- defm V_CNDMASK_B32 : Base_VOP2_Real_gfx10<0x001>;
1079
1101
defm V_XNOR_B32 : VOP2_Real_gfx10<0x01e>;
1080
1102
defm V_FMAC_F32 : VOP2_Real_gfx10<0x02b>;
1081
1103
defm V_FMAMK_F32 : VOP2Only_Real_MADK_gfx10<0x02c>;
@@ -1108,6 +1130,9 @@ defm V_SUB_CO_CI_U32 :
1108
1130
defm V_SUBREV_CO_CI_U32 :
1109
1131
VOP2be_Real_gfx10<0x02a, "V_SUBBREV_U32", "v_subrev_co_ci_u32">;
1110
1132
1133
+ defm V_CNDMASK_B32 :
1134
+ VOP2e_Real_gfx10<0x001, "V_CNDMASK_B32", "v_cndmask_b32">;
1135
+
1111
1136
// VOP3 only.
1112
1137
defm V_BFM_B32 : VOP3Only_Real_gfx10<0x363>;
1113
1138
defm V_BCNT_U32_B32 : VOP3Only_Real_gfx10<0x364>;
0 commit comments