@@ -178,8 +178,12 @@ static DecodeStatus decodeAV10(MCInst &Inst, unsigned Imm, uint64_t /* Addr */,
178
178
}
179
179
180
180
// Decoder for Src(9-bit encoding) registers only.
181
- #define DECODE_OPERAND_SRC_REG_9 (RegClass, OpWidth ) \
182
- DECODE_SrcOp (decodeOperand_##RegClass, 9 , OpWidth, Imm, false , 0 )
181
+ template <AMDGPUDisassembler::OpWidthTy OpWidth>
182
+ static DecodeStatus decodeSrcReg9 (MCInst &Inst, unsigned Imm,
183
+ uint64_t /* Addr */ ,
184
+ const MCDisassembler *Decoder) {
185
+ return decodeSrcOp (Inst, 9 , OpWidth, Imm, Imm, false , 0 , Decoder);
186
+ }
183
187
184
188
// Decoder for Src(9-bit encoding) AGPR, register number encoded in 9bits, set
185
189
// Imm{9} to 1 (set acc) and decode using 'enum10' from decodeSrcOp, registers
@@ -204,22 +208,29 @@ static DecodeStatus decodeSrcAV10(MCInst &Inst, unsigned Imm,
204
208
// will be decoded and InstPrinter will report warning. Immediate will be
205
209
// decoded into constant of size ImmWidth, should match width of immediate used
206
210
// by OperandType (important for floating point types).
207
- # define DECODE_OPERAND_SRC_REG_OR_IMM_9 ( RegClass, OpWidth, ImmWidth ) \
208
- DECODE_SrcOp (decodeOperand_##RegClass##_Imm##ImmWidth, 9 , OpWidth, Imm, \
209
- false , ImmWidth)
210
-
211
- # define DECODE_OPERAND_SRC_REG_OR_IMM_9_TYPED ( Name, OpWidth, ImmWidth ) \
212
- DECODE_SrcOp (decodeOperand_##Name, 9 , OpWidth, Imm, false , ImmWidth)
211
+ template <AMDGPUDisassembler::OpWidthTy OpWidth, unsigned ImmWidth>
212
+ static DecodeStatus decodeSrcRegOrImm9 (MCInst &Inst, unsigned Imm,
213
+ uint64_t /* Addr */ ,
214
+ const MCDisassembler *Decoder) {
215
+ return decodeSrcOp (Inst, 9 , OpWidth, Imm, Imm, false , ImmWidth, Decoder);
216
+ }
213
217
214
218
// Decoder for Src(9-bit encoding) AGPR or immediate. Set Imm{9} to 1 (set acc)
215
219
// and decode using 'enum10' from decodeSrcOp.
216
- #define DECODE_OPERAND_SRC_REG_OR_IMM_A9 (RegClass, OpWidth, ImmWidth ) \
217
- DECODE_SrcOp (decodeOperand_##RegClass##_Imm##ImmWidth, 9 , OpWidth, \
218
- Imm | 512 , false , ImmWidth)
220
+ template <AMDGPUDisassembler::OpWidthTy OpWidth, unsigned ImmWidth>
221
+ static DecodeStatus decodeSrcRegOrImmA9 (MCInst &Inst, unsigned Imm,
222
+ uint64_t /* Addr */ ,
223
+ const MCDisassembler *Decoder) {
224
+ return decodeSrcOp (Inst, 9 , OpWidth, Imm, Imm | 512 , false , ImmWidth,
225
+ Decoder);
226
+ }
219
227
220
- #define DECODE_OPERAND_SRC_REG_OR_IMM_DEFERRED_9 (RegClass, OpWidth, ImmWidth ) \
221
- DECODE_SrcOp (decodeOperand_##RegClass##_Deferred##_Imm##ImmWidth, 9 , \
222
- OpWidth, Imm, true , ImmWidth)
228
+ template <AMDGPUDisassembler::OpWidthTy OpWidth, unsigned ImmWidth>
229
+ static DecodeStatus decodeSrcRegOrImmDeferred9 (MCInst &Inst, unsigned Imm,
230
+ uint64_t /* Addr */ ,
231
+ const MCDisassembler *Decoder) {
232
+ return decodeSrcOp (Inst, 9 , OpWidth, Imm, Imm, true , ImmWidth, Decoder);
233
+ }
223
234
224
235
// Default decoders generated by tablegen: 'Decode<RegClass>RegisterClass'
225
236
// when RegisterClass is used as an operand. Most often used for destination
@@ -255,51 +266,6 @@ DECODE_OPERAND_REG_8(AReg_256)
255
266
DECODE_OPERAND_REG_8(AReg_512)
256
267
DECODE_OPERAND_REG_8(AReg_1024)
257
268
258
- // Decoders for register only source RegisterOperands that use use 9-bit Src
259
- // encoding: 'decodeOperand_<RegClass>'.
260
-
261
- DECODE_OPERAND_SRC_REG_9(VGPR_32, OPW32)
262
- DECODE_OPERAND_SRC_REG_9(VReg_64, OPW64)
263
- DECODE_OPERAND_SRC_REG_9(VReg_128, OPW128)
264
- DECODE_OPERAND_SRC_REG_9(VReg_256, OPW256)
265
- DECODE_OPERAND_SRC_REG_9(VRegOrLds_32, OPW32)
266
-
267
- // Decoders for register or immediate RegisterOperands that use 9-bit Src
268
- // encoding: 'decodeOperand_<RegClass>_Imm<ImmWidth>'.
269
-
270
- DECODE_OPERAND_SRC_REG_OR_IMM_9(SReg_64, OPW64, 64 )
271
- DECODE_OPERAND_SRC_REG_OR_IMM_9(SReg_32, OPW32, 32 )
272
- DECODE_OPERAND_SRC_REG_OR_IMM_9(SReg_32, OPW32, 16 )
273
- DECODE_OPERAND_SRC_REG_OR_IMM_9(SRegOrLds_32, OPW32, 32 )
274
- DECODE_OPERAND_SRC_REG_OR_IMM_9(VS_32_Lo128, OPW16, 16 )
275
- DECODE_OPERAND_SRC_REG_OR_IMM_9(VS_32, OPW32, 16 )
276
- DECODE_OPERAND_SRC_REG_OR_IMM_9(VS_32, OPW32, 32 )
277
- DECODE_OPERAND_SRC_REG_OR_IMM_9(VS_64, OPW64, 64 )
278
- DECODE_OPERAND_SRC_REG_OR_IMM_9(VS_64, OPW64, 32 )
279
- DECODE_OPERAND_SRC_REG_OR_IMM_9(VReg_64, OPW64, 64 )
280
- DECODE_OPERAND_SRC_REG_OR_IMM_9(VReg_64, OPW64, 32 )
281
- DECODE_OPERAND_SRC_REG_OR_IMM_9(VReg_64, OPW64, 16 )
282
- DECODE_OPERAND_SRC_REG_OR_IMM_9(VReg_128, OPW128, 32 )
283
- DECODE_OPERAND_SRC_REG_OR_IMM_9(VReg_128, OPW128, 16 )
284
- DECODE_OPERAND_SRC_REG_OR_IMM_9(VReg_256, OPW256, 64 )
285
- DECODE_OPERAND_SRC_REG_OR_IMM_9(VReg_256, OPW256, 32 )
286
- DECODE_OPERAND_SRC_REG_OR_IMM_9(VReg_512, OPW512, 32 )
287
- DECODE_OPERAND_SRC_REG_OR_IMM_9(VReg_1024, OPW1024, 32 )
288
-
289
- DECODE_OPERAND_SRC_REG_OR_IMM_9_TYPED(VS_32_ImmV2I16, OPW32, 32 )
290
- DECODE_OPERAND_SRC_REG_OR_IMM_9_TYPED(VS_32_ImmV2F16, OPW32, 16 )
291
-
292
- DECODE_OPERAND_SRC_REG_OR_IMM_A9(AReg_64, OPW64, 64 )
293
- DECODE_OPERAND_SRC_REG_OR_IMM_A9(AReg_128, OPW128, 32 )
294
- DECODE_OPERAND_SRC_REG_OR_IMM_A9(AReg_256, OPW256, 64 )
295
- DECODE_OPERAND_SRC_REG_OR_IMM_A9(AReg_512, OPW512, 32 )
296
- DECODE_OPERAND_SRC_REG_OR_IMM_A9(AReg_1024, OPW1024, 32 )
297
-
298
- DECODE_OPERAND_SRC_REG_OR_IMM_DEFERRED_9(VS_32_Lo128, OPW16, 16 )
299
- DECODE_OPERAND_SRC_REG_OR_IMM_DEFERRED_9(VS_32, OPW16, 16 )
300
- DECODE_OPERAND_SRC_REG_OR_IMM_DEFERRED_9(VS_32, OPW32, 32 )
301
- DECODE_OPERAND_SRC_REG_OR_IMM_DEFERRED_9(SReg_32, OPW32, 32 )
302
-
303
269
static DecodeStatus DecodeVGPR_16RegisterClass(MCInst &Inst, unsigned Imm,
304
270
uint64_t /* Addr*/ ,
305
271
const MCDisassembler *Decoder) {
0 commit comments