aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp
diff options
context:
space:
mode:
authorSergei Barannikov <barannikov88@gmail.com>2025-09-15 00:57:31 +0300
committerGitHub <noreply@github.com>2025-09-15 00:57:31 +0300
commit983c8b6b2575c034dc98514a35d0fd9b08d9935e (patch)
tree0c43001f7c460a0307e870c007bf89b8e04f0f71 /llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp
parentfb60d0337c15640df95872d90240fde42fb80ea1 (diff)
downloadllvm-983c8b6b2575c034dc98514a35d0fd9b08d9935e.zip
llvm-983c8b6b2575c034dc98514a35d0fd9b08d9935e.tar.gz
llvm-983c8b6b2575c034dc98514a35d0fd9b08d9935e.tar.bz2
[RISCV] Remove a couple of custom instruction decoders (NFC) (#158483)
These instructions can be decoded automatically.
Diffstat (limited to 'llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp')
-rw-r--r--llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp64
1 files changed, 24 insertions, 40 deletions
diff --git a/llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp b/llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp
index fb5a35d..ff07122 100644
--- a/llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp
+++ b/llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp
@@ -194,12 +194,24 @@ static DecodeStatus DecodeFPR128RegisterClass(MCInst &Inst, uint32_t RegNo,
return MCDisassembler::Success;
}
+static DecodeStatus DecodeGPRX1RegisterClass(MCInst &Inst,
+ const MCDisassembler *Decoder) {
+ Inst.addOperand(MCOperand::createReg(RISCV::X1));
+ return MCDisassembler::Success;
+}
+
static DecodeStatus DecodeSPRegisterClass(MCInst &Inst,
const MCDisassembler *Decoder) {
Inst.addOperand(MCOperand::createReg(RISCV::X2));
return MCDisassembler::Success;
}
+static DecodeStatus DecodeGPRX5RegisterClass(MCInst &Inst,
+ const MCDisassembler *Decoder) {
+ Inst.addOperand(MCOperand::createReg(RISCV::X5));
+ return MCDisassembler::Success;
+}
+
static DecodeStatus DecodeGPRNoX0RegisterClass(MCInst &Inst, uint32_t RegNo,
uint64_t Address,
const MCDisassembler *Decoder) {
@@ -408,6 +420,18 @@ static DecodeStatus decodeVMaskReg(MCInst &Inst, uint32_t RegNo,
return MCDisassembler::Success;
}
+static DecodeStatus decodeImmThreeOperand(MCInst &Inst,
+ const MCDisassembler *Decoder) {
+ Inst.addOperand(MCOperand::createImm(3));
+ return MCDisassembler::Success;
+}
+
+static DecodeStatus decodeImmFourOperand(MCInst &Inst,
+ const MCDisassembler *Decoder) {
+ Inst.addOperand(MCOperand::createImm(4));
+ return MCDisassembler::Success;
+}
+
template <unsigned N>
static DecodeStatus decodeUImmOperand(MCInst &Inst, uint32_t Imm,
int64_t Address,
@@ -579,46 +603,6 @@ static DecodeStatus decodeXqccmpRlistS0(MCInst &Inst, uint32_t Imm,
return decodeZcmpRlist(Inst, Imm, Address, Decoder);
}
-static DecodeStatus decodeCSSPushPopchk(MCInst &Inst, uint16_t Insn,
- uint64_t Address,
- const MCDisassembler *Decoder) {
- uint32_t Rs1 = fieldFromInstruction(Insn, 7, 5);
- [[maybe_unused]] DecodeStatus Result =
- DecodeGPRX1X5RegisterClass(Inst, Rs1, Address, Decoder);
- assert(Result == MCDisassembler::Success && "Invalid register");
- return MCDisassembler::Success;
-}
-
-static DecodeStatus decodeXTHeadMemPair(MCInst &Inst, uint32_t Insn,
- uint64_t Address,
- const MCDisassembler *Decoder) {
- DecodeStatus S = MCDisassembler::Success;
- uint32_t Rd1 = fieldFromInstruction(Insn, 7, 5);
- uint32_t Rs1 = fieldFromInstruction(Insn, 15, 5);
- uint32_t Rd2 = fieldFromInstruction(Insn, 20, 5);
- uint32_t UImm2 = fieldFromInstruction(Insn, 25, 2);
- if (!Check(S, DecodeGPRRegisterClass(Inst, Rd1, Address, Decoder)))
- return MCDisassembler::Fail;
- if (!Check(S, DecodeGPRRegisterClass(Inst, Rd2, Address, Decoder)))
- return MCDisassembler::Fail;
- if (!Check(S, DecodeGPRRegisterClass(Inst, Rs1, Address, Decoder)))
- return MCDisassembler::Fail;
- [[maybe_unused]] DecodeStatus Result =
- decodeUImmOperand<2>(Inst, UImm2, Address, Decoder);
- assert(Result == MCDisassembler::Success && "Invalid immediate");
-
- // Disassemble the final operand which is implicit.
- unsigned Opcode = Inst.getOpcode();
- bool IsWordOp = (Opcode == RISCV::TH_LWD || Opcode == RISCV::TH_LWUD ||
- Opcode == RISCV::TH_SWD);
- if (IsWordOp)
- Inst.addOperand(MCOperand::createImm(3));
- else
- Inst.addOperand(MCOperand::createImm(4));
-
- return S;
-}
-
#include "RISCVGenDisassemblerTables.inc"
namespace {