Skip to content

Commit 4c93109

Browse files
authored
[AMDGPU][NFC] Get rid of some operand decoders defined using macros. (#81482)
Use templates instead. Part of <#62629>.
1 parent f506192 commit 4c93109

File tree

2 files changed

+111
-138
lines changed

2 files changed

+111
-138
lines changed

llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp

Lines changed: 25 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,12 @@ static DecodeStatus decodeAV10(MCInst &Inst, unsigned Imm, uint64_t /* Addr */,
178178
}
179179

180180
// 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+
}
183187

184188
// Decoder for Src(9-bit encoding) AGPR, register number encoded in 9bits, set
185189
// Imm{9} to 1 (set acc) and decode using 'enum10' from decodeSrcOp, registers
@@ -204,22 +208,29 @@ static DecodeStatus decodeSrcAV10(MCInst &Inst, unsigned Imm,
204208
// will be decoded and InstPrinter will report warning. Immediate will be
205209
// decoded into constant of size ImmWidth, should match width of immediate used
206210
// 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+
}
213217

214218
// Decoder for Src(9-bit encoding) AGPR or immediate. Set Imm{9} to 1 (set acc)
215219
// 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+
}
219227

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+
}
223234

224235
// Default decoders generated by tablegen: 'Decode<RegClass>RegisterClass'
225236
// when RegisterClass is used as an operand. Most often used for destination
@@ -255,51 +266,6 @@ DECODE_OPERAND_REG_8(AReg_256)
255266
DECODE_OPERAND_REG_8(AReg_512)
256267
DECODE_OPERAND_REG_8(AReg_1024)
257268

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-
303269
static DecodeStatus DecodeVGPR_16RegisterClass(MCInst &Inst, unsigned Imm,
304270
uint64_t /*Addr*/,
305271
const MCDisassembler *Decoder) {

0 commit comments

Comments
 (0)