diff --git a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp index 2c6aa2ee348a1..38ba87f6691f9 100644 --- a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp +++ b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp @@ -361,9 +361,9 @@ static bool IsAGPROperand(const MCInst &Inst, int OpIdx, return Reg >= AMDGPU::AGPR0 && Reg <= AMDGPU::AGPR255; } -static DecodeStatus decodeOperand_AVLdSt_Any(MCInst &Inst, unsigned Imm, - AMDGPUDisassembler::OpWidthTy Opw, - const MCDisassembler *Decoder) { +static DecodeStatus decodeAVLdSt(MCInst &Inst, unsigned Imm, + AMDGPUDisassembler::OpWidthTy Opw, + const MCDisassembler *Decoder) { auto DAsm = static_cast(Decoder); if (!DAsm->isGFX90A()) { Imm &= 511; @@ -395,6 +395,13 @@ static DecodeStatus decodeOperand_AVLdSt_Any(MCInst &Inst, unsigned Imm, return addOperand(Inst, DAsm->decodeSrcOp(Opw, Imm | 256)); } +template +static DecodeStatus decodeAVLdSt(MCInst &Inst, unsigned Imm, + uint64_t /* Addr */, + const MCDisassembler *Decoder) { + return decodeAVLdSt(Inst, Imm, Opw, Decoder); +} + static DecodeStatus decodeOperand_VSrc_f64(MCInst &Inst, unsigned Imm, uint64_t Addr, const MCDisassembler *Decoder) { @@ -404,41 +411,6 @@ static DecodeStatus decodeOperand_VSrc_f64(MCInst &Inst, unsigned Imm, Inst, DAsm->decodeSrcOp(AMDGPUDisassembler::OPW64, Imm, false, 64, true)); } -static DecodeStatus -DecodeAVLdSt_32RegisterClass(MCInst &Inst, unsigned Imm, uint64_t Addr, - const MCDisassembler *Decoder) { - return decodeOperand_AVLdSt_Any(Inst, Imm, - AMDGPUDisassembler::OPW32, Decoder); -} - -static DecodeStatus -DecodeAVLdSt_64RegisterClass(MCInst &Inst, unsigned Imm, uint64_t Addr, - const MCDisassembler *Decoder) { - return decodeOperand_AVLdSt_Any(Inst, Imm, - AMDGPUDisassembler::OPW64, Decoder); -} - -static DecodeStatus -DecodeAVLdSt_96RegisterClass(MCInst &Inst, unsigned Imm, uint64_t Addr, - const MCDisassembler *Decoder) { - return decodeOperand_AVLdSt_Any(Inst, Imm, - AMDGPUDisassembler::OPW96, Decoder); -} - -static DecodeStatus -DecodeAVLdSt_128RegisterClass(MCInst &Inst, unsigned Imm, uint64_t Addr, - const MCDisassembler *Decoder) { - return decodeOperand_AVLdSt_Any(Inst, Imm, - AMDGPUDisassembler::OPW128, Decoder); -} - -static DecodeStatus -DecodeAVLdSt_160RegisterClass(MCInst &Inst, unsigned Imm, uint64_t Addr, - const MCDisassembler *Decoder) { - return decodeOperand_AVLdSt_Any(Inst, Imm, AMDGPUDisassembler::OPW160, - Decoder); -} - #define DECODE_SDWA(DecName) \ DECODE_OPERAND(decodeSDWA##DecName, decodeSDWA##DecName) diff --git a/llvm/lib/Target/AMDGPU/SIRegisterInfo.td b/llvm/lib/Target/AMDGPU/SIRegisterInfo.td index f42af89cf5e6d..01c4296419fb8 100644 --- a/llvm/lib/Target/AMDGPU/SIRegisterInfo.td +++ b/llvm/lib/Target/AMDGPU/SIRegisterInfo.td @@ -1379,30 +1379,17 @@ def AVDst_512 : RegisterOperand { let EncoderMethod = "getAVOperandEncoding"; } -def AVLdSt_32 : RegisterOperand { - let DecoderMethod = "DecodeAVLdSt_32RegisterClass"; +class AVLdStOperand + : RegisterOperand { + let DecoderMethod = "decodeAVLdSt"; let EncoderMethod = "getAVOperandEncoding"; } -def AVLdSt_64 : RegisterOperand { - let DecoderMethod = "DecodeAVLdSt_64RegisterClass"; - let EncoderMethod = "getAVOperandEncoding"; -} - -def AVLdSt_96 : RegisterOperand { - let DecoderMethod = "DecodeAVLdSt_96RegisterClass"; - let EncoderMethod = "getAVOperandEncoding"; -} - -def AVLdSt_128 : RegisterOperand { - let DecoderMethod = "DecodeAVLdSt_128RegisterClass"; - let EncoderMethod = "getAVOperandEncoding"; -} - -def AVLdSt_160 : RegisterOperand { - let DecoderMethod = "DecodeAVLdSt_160RegisterClass"; - let EncoderMethod = "getAVOperandEncoding"; -} +def AVLdSt_32 : AVLdStOperand; +def AVLdSt_64 : AVLdStOperand; +def AVLdSt_96 : AVLdStOperand; +def AVLdSt_128 : AVLdStOperand; +def AVLdSt_160 : AVLdStOperand; //===----------------------------------------------------------------------===// // ACSrc_* Operands with an AGPR or an inline constant