@@ -145,6 +145,17 @@ static DecodeStatus decodeSplitBarrier(MCInst &Inst, unsigned Val,
145
145
MandatoryLiteral, ImmWidth)); \
146
146
}
147
147
148
+ static DecodeStatus decodeSrcOp (MCInst &Inst, unsigned EncSize,
149
+ AMDGPUDisassembler::OpWidthTy OpWidth,
150
+ unsigned Imm, unsigned EncImm,
151
+ bool MandatoryLiteral, unsigned ImmWidth,
152
+ const MCDisassembler *Decoder) {
153
+ assert (Imm < (1 << EncSize) && " Operand doesn't fit encoding!" );
154
+ auto DAsm = static_cast <const AMDGPUDisassembler *>(Decoder);
155
+ return addOperand (
156
+ Inst, DAsm->decodeSrcOp (OpWidth, EncImm, MandatoryLiteral, ImmWidth));
157
+ }
158
+
148
159
// Decoder for registers. Imm(7-bit) is number of register, uses decodeSrcOp to
149
160
// get register class. Used by SGPR only operands.
150
161
#define DECODE_OPERAND_REG_7 (RegClass, OpWidth ) \
@@ -154,9 +165,12 @@ static DecodeStatus decodeSplitBarrier(MCInst &Inst, unsigned Val,
154
165
// Imm{9} is acc(agpr or vgpr) Imm{8} should be 0 (see VOP3Pe_SMFMAC).
155
166
// Set Imm{8} to 1 (IS_VGPR) to decode using 'enum10' from decodeSrcOp.
156
167
// Used by AV_ register classes (AGPR or VGPR only register operands).
157
- #define DECODE_OPERAND_REG_AV10 (RegClass, OpWidth ) \
158
- DECODE_SrcOp (Decode##RegClass##RegisterClass, 10 , OpWidth, \
159
- Imm | AMDGPU::EncValues::IS_VGPR, false , 0 )
168
+ template <AMDGPUDisassembler::OpWidthTy OpWidth>
169
+ static DecodeStatus decodeAV10(MCInst &Inst, unsigned Imm, uint64_t /* Addr */ ,
170
+ const MCDisassembler *Decoder) {
171
+ return decodeSrcOp (Inst, 10 , OpWidth, Imm, Imm | AMDGPU::EncValues::IS_VGPR,
172
+ false , 0 , Decoder);
173
+ }
160
174
161
175
// Decoder for Src(9-bit encoding) registers only.
162
176
#define DECODE_OPERAND_SRC_REG_9 (RegClass, OpWidth ) \
@@ -165,13 +179,20 @@ static DecodeStatus decodeSplitBarrier(MCInst &Inst, unsigned Val,
165
179
// Decoder for Src(9-bit encoding) AGPR, register number encoded in 9bits, set
166
180
// Imm{9} to 1 (set acc) and decode using 'enum10' from decodeSrcOp, registers
167
181
// only.
168
- #define DECODE_OPERAND_SRC_REG_A9 (RegClass, OpWidth ) \
169
- DECODE_SrcOp (decodeOperand_##RegClass, 9 , OpWidth, Imm | 512 , false , 0 )
182
+ template <AMDGPUDisassembler::OpWidthTy OpWidth>
183
+ static DecodeStatus decodeSrcA9(MCInst &Inst, unsigned Imm, uint64_t /* Addr */ ,
184
+ const MCDisassembler *Decoder) {
185
+ return decodeSrcOp (Inst, 9 , OpWidth, Imm, Imm | 512 , false , 0 , Decoder);
186
+ }
170
187
171
188
// Decoder for 'enum10' from decodeSrcOp, Imm{0-8} is 9-bit Src encoding
172
189
// Imm{9} is acc, registers only.
173
- #define DECODE_SRC_OPERAND_REG_AV10 (RegClass, OpWidth ) \
174
- DECODE_SrcOp (decodeOperand_##RegClass, 10 , OpWidth, Imm, false , 0 )
190
+ template <AMDGPUDisassembler::OpWidthTy OpWidth>
191
+ static DecodeStatus decodeSrcAV10 (MCInst &Inst, unsigned Imm,
192
+ uint64_t /* Addr */ ,
193
+ const MCDisassembler *Decoder) {
194
+ return decodeSrcOp (Inst, 10 , OpWidth, Imm, Imm, false , 0 , Decoder);
195
+ }
175
196
176
197
// Decoder for RegisterOperands using 9-bit Src encoding. Operand can be
177
198
// register from RegClass or immediate. Registers that don't belong to RegClass
@@ -229,9 +250,6 @@ DECODE_OPERAND_REG_8(AReg_256)
229
250
DECODE_OPERAND_REG_8(AReg_512)
230
251
DECODE_OPERAND_REG_8(AReg_1024)
231
252
232
- DECODE_OPERAND_REG_AV10(AVDst_128, OPW128)
233
- DECODE_OPERAND_REG_AV10(AVDst_512, OPW512)
234
-
235
253
// Decoders for register only source RegisterOperands that use use 9-bit Src
236
254
// encoding: 'decodeOperand_<RegClass>'.
237
255
@@ -241,12 +259,6 @@ DECODE_OPERAND_SRC_REG_9(VReg_128, OPW128)
241
259
DECODE_OPERAND_SRC_REG_9(VReg_256, OPW256)
242
260
DECODE_OPERAND_SRC_REG_9(VRegOrLds_32, OPW32)
243
261
244
- DECODE_OPERAND_SRC_REG_A9(AGPR_32, OPW32)
245
-
246
- DECODE_SRC_OPERAND_REG_AV10(AV_32, OPW32)
247
- DECODE_SRC_OPERAND_REG_AV10(AV_64, OPW64)
248
- DECODE_SRC_OPERAND_REG_AV10(AV_128, OPW128)
249
-
250
262
// Decoders for register or immediate RegisterOperands that use 9-bit Src
251
263
// encoding: 'decodeOperand_<RegClass>_Imm<ImmWidth>'.
252
264
0 commit comments