@@ -1086,59 +1086,14 @@ def MipsMemAsmOperand : AsmOperandClass {
1086
1086
let ParserMethod = "parseMemOperand";
1087
1087
}
1088
1088
1089
- def MipsMemSimm9AsmOperand : AsmOperandClass {
1090
- let Name = "MemOffsetSimm9" ;
1089
+ class MipsMemSimmAsmOperand<int Width, int Shift = 0> : AsmOperandClass {
1090
+ let Name = "MemOffsetSimm" # Width # "_" # Shift ;
1091
1091
let SuperClasses = [MipsMemAsmOperand];
1092
1092
let RenderMethod = "addMemOperands";
1093
1093
let ParserMethod = "parseMemOperand";
1094
- let PredicateMethod = "isMemWithSimmOffset<9>";
1095
- let DiagnosticType = "MemSImm9";
1096
- }
1097
-
1098
- def MipsMemSimm10AsmOperand : AsmOperandClass {
1099
- let Name = "MemOffsetSimm10";
1100
- let SuperClasses = [MipsMemAsmOperand];
1101
- let RenderMethod = "addMemOperands";
1102
- let ParserMethod = "parseMemOperand";
1103
- let PredicateMethod = "isMemWithSimmOffset<10>";
1104
- let DiagnosticType = "MemSImm10";
1105
- }
1106
-
1107
- def MipsMemSimm12AsmOperand : AsmOperandClass {
1108
- let Name = "MemOffsetSimm12";
1109
- let SuperClasses = [MipsMemAsmOperand];
1110
- let RenderMethod = "addMemOperands";
1111
- let ParserMethod = "parseMemOperand";
1112
- let PredicateMethod = "isMemWithSimmOffset<12>";
1113
- let DiagnosticType = "MemSImm12";
1114
- }
1115
-
1116
- foreach I = {1, 2, 3} in
1117
- def MipsMemSimm10Lsl # I # AsmOperand : AsmOperandClass {
1118
- let Name = "MemOffsetSimm10_" # I;
1119
- let SuperClasses = [MipsMemAsmOperand];
1120
- let RenderMethod = "addMemOperands";
1121
- let ParserMethod = "parseMemOperand";
1122
- let PredicateMethod = "isMemWithSimmOffset<10, " # I # ">";
1123
- let DiagnosticType = "MemSImm10Lsl" # I;
1124
- }
1125
-
1126
- def MipsMemSimm11AsmOperand : AsmOperandClass {
1127
- let Name = "MemOffsetSimm11";
1128
- let SuperClasses = [MipsMemAsmOperand];
1129
- let RenderMethod = "addMemOperands";
1130
- let ParserMethod = "parseMemOperand";
1131
- let PredicateMethod = "isMemWithSimmOffset<11>";
1132
- let DiagnosticType = "MemSImm11";
1133
- }
1134
-
1135
- def MipsMemSimm16AsmOperand : AsmOperandClass {
1136
- let Name = "MemOffsetSimm16";
1137
- let SuperClasses = [MipsMemAsmOperand];
1138
- let RenderMethod = "addMemOperands";
1139
- let ParserMethod = "parseMemOperand";
1140
- let PredicateMethod = "isMemWithSimmOffset<16>";
1141
- let DiagnosticType = "MemSImm16";
1094
+ let PredicateMethod = "isMemWithSimmOffset<" # Width # ", " # Shift # ">";
1095
+ let DiagnosticType = !if(!eq(Shift, 0), "MemSImm" # Width,
1096
+ "MemSImm" # Width # "Lsl" # Shift);
1142
1097
}
1143
1098
1144
1099
def MipsMemSimmPtrAsmOperand : AsmOperandClass {
@@ -1188,39 +1143,38 @@ def simm12 : Operand<i32> {
1188
1143
def mem_simm9 : mem_generic {
1189
1144
let MIOperandInfo = (ops ptr_rc, simm9);
1190
1145
let EncoderMethod = "getMemEncoding";
1191
- let ParserMatchClass = MipsMemSimm9AsmOperand ;
1146
+ let ParserMatchClass = MipsMemSimmAsmOperand<9> ;
1192
1147
}
1193
1148
1194
1149
def mem_simm10 : mem_generic {
1195
1150
let MIOperandInfo = (ops ptr_rc, simm10);
1196
1151
let EncoderMethod = "getMemEncoding";
1197
- let ParserMatchClass = MipsMemSimm10AsmOperand ;
1152
+ let ParserMatchClass = MipsMemSimmAsmOperand<10> ;
1198
1153
}
1199
1154
1200
1155
foreach I = {1, 2, 3} in
1201
1156
def mem_simm10_lsl # I : mem_generic {
1202
1157
let MIOperandInfo = (ops ptr_rc, !cast<Operand>("simm10_lsl" # I));
1203
1158
let EncoderMethod = "getMemEncoding<" # I # ">";
1204
- let ParserMatchClass =
1205
- !cast<AsmOperandClass>("MipsMemSimm10Lsl" # I # "AsmOperand");
1159
+ let ParserMatchClass = MipsMemSimmAsmOperand<10, I>;
1206
1160
}
1207
1161
1208
1162
def mem_simm11 : mem_generic {
1209
1163
let MIOperandInfo = (ops ptr_rc, simm11);
1210
1164
let EncoderMethod = "getMemEncoding";
1211
- let ParserMatchClass = MipsMemSimm11AsmOperand ;
1165
+ let ParserMatchClass = MipsMemSimmAsmOperand<11> ;
1212
1166
}
1213
1167
1214
1168
def mem_simm12 : mem_generic {
1215
1169
let MIOperandInfo = (ops ptr_rc, simm12);
1216
1170
let EncoderMethod = "getMemEncoding";
1217
- let ParserMatchClass = MipsMemSimm12AsmOperand ;
1171
+ let ParserMatchClass = MipsMemSimmAsmOperand<12> ;
1218
1172
}
1219
1173
1220
1174
def mem_simm16 : mem_generic {
1221
1175
let MIOperandInfo = (ops ptr_rc, simm16);
1222
1176
let EncoderMethod = "getMemEncoding";
1223
- let ParserMatchClass = MipsMemSimm16AsmOperand ;
1177
+ let ParserMatchClass = MipsMemSimmAsmOperand<16> ;
1224
1178
}
1225
1179
1226
1180
def mem_simmptr : mem_generic {
0 commit comments