Skip to content

Commit c62720e

Browse files
author
git apple-llvm automerger
committed
Merge commit '499e11e01c91' from llvm.org/main into next
2 parents 825fde7 + 499e11e commit c62720e

File tree

1 file changed

+80
-106
lines changed

1 file changed

+80
-106
lines changed

llvm/lib/Target/Lanai/Disassembler/LanaiDisassembler.cpp

Lines changed: 80 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -47,34 +47,100 @@ LLVMInitializeLanaiDisassembler() {
4747
LanaiDisassembler::LanaiDisassembler(const MCSubtargetInfo &STI, MCContext &Ctx)
4848
: MCDisassembler(STI, Ctx) {}
4949

50-
// Forward declare because the autogenerated code will reference this.
51-
// Definition is further down.
52-
static DecodeStatus DecodeGPRRegisterClass(MCInst &Inst, unsigned RegNo,
53-
uint64_t Address,
54-
const MCDisassembler *Decoder);
50+
// clang-format off
51+
static const unsigned GPRDecoderTable[] = {
52+
Lanai::R0, Lanai::R1, Lanai::PC, Lanai::R3, Lanai::SP, Lanai::FP,
53+
Lanai::R6, Lanai::R7, Lanai::RV, Lanai::R9, Lanai::RR1, Lanai::RR2,
54+
Lanai::R12, Lanai::R13, Lanai::R14, Lanai::RCA, Lanai::R16, Lanai::R17,
55+
Lanai::R18, Lanai::R19, Lanai::R20, Lanai::R21, Lanai::R22, Lanai::R23,
56+
Lanai::R24, Lanai::R25, Lanai::R26, Lanai::R27, Lanai::R28, Lanai::R29,
57+
Lanai::R30, Lanai::R31
58+
};
59+
// clang-format on
60+
61+
DecodeStatus DecodeGPRRegisterClass(MCInst &Inst, unsigned RegNo,
62+
uint64_t /*Address*/,
63+
const MCDisassembler * /*Decoder*/) {
64+
if (RegNo > 31)
65+
return MCDisassembler::Fail;
66+
67+
unsigned Reg = GPRDecoderTable[RegNo];
68+
Inst.addOperand(MCOperand::createReg(Reg));
69+
return MCDisassembler::Success;
70+
}
5571

5672
static DecodeStatus decodeRiMemoryValue(MCInst &Inst, unsigned Insn,
5773
uint64_t Address,
58-
const MCDisassembler *Decoder);
74+
const MCDisassembler *Decoder) {
75+
// RI memory values encoded using 23 bits:
76+
// 5 bit register, 16 bit constant
77+
unsigned Register = (Insn >> 18) & 0x1f;
78+
Inst.addOperand(MCOperand::createReg(GPRDecoderTable[Register]));
79+
unsigned Offset = (Insn & 0xffff);
80+
Inst.addOperand(MCOperand::createImm(SignExtend32<16>(Offset)));
81+
82+
return MCDisassembler::Success;
83+
}
5984

6085
static DecodeStatus decodeRrMemoryValue(MCInst &Inst, unsigned Insn,
6186
uint64_t Address,
62-
const MCDisassembler *Decoder);
87+
const MCDisassembler *Decoder) {
88+
// RR memory values encoded using 20 bits:
89+
// 5 bit register, 5 bit register, 2 bit PQ, 3 bit ALU operator, 5 bit JJJJJ
90+
unsigned Register = (Insn >> 15) & 0x1f;
91+
Inst.addOperand(MCOperand::createReg(GPRDecoderTable[Register]));
92+
Register = (Insn >> 10) & 0x1f;
93+
Inst.addOperand(MCOperand::createReg(GPRDecoderTable[Register]));
94+
95+
return MCDisassembler::Success;
96+
}
6397

6498
static DecodeStatus decodeSplsValue(MCInst &Inst, unsigned Insn,
6599
uint64_t Address,
66-
const MCDisassembler *Decoder);
100+
const MCDisassembler *Decoder) {
101+
// RI memory values encoded using 17 bits:
102+
// 5 bit register, 10 bit constant
103+
unsigned Register = (Insn >> 12) & 0x1f;
104+
Inst.addOperand(MCOperand::createReg(GPRDecoderTable[Register]));
105+
unsigned Offset = (Insn & 0x3ff);
106+
Inst.addOperand(MCOperand::createImm(SignExtend32<10>(Offset)));
67107

68-
static DecodeStatus decodeBranch(MCInst &Inst, unsigned Insn, uint64_t Address,
69-
const MCDisassembler *Decoder);
108+
return MCDisassembler::Success;
109+
}
70110

71-
static DecodeStatus decodePredicateOperand(MCInst &Inst, unsigned Val,
72-
uint64_t Address,
73-
const MCDisassembler *Decoder);
111+
static bool tryAddingSymbolicOperand(int64_t Value, bool IsBranch,
112+
uint64_t Address, uint64_t Offset,
113+
uint64_t Width, MCInst &MI,
114+
const MCDisassembler *Decoder) {
115+
return Decoder->tryAddingSymbolicOperand(MI, Value, Address, IsBranch, Offset,
116+
Width, /*InstSize=*/0);
117+
}
118+
119+
static DecodeStatus decodeBranch(MCInst &MI, unsigned Insn, uint64_t Address,
120+
const MCDisassembler *Decoder) {
121+
if (!tryAddingSymbolicOperand(Insn + Address, false, Address, 2, 23, MI,
122+
Decoder))
123+
MI.addOperand(MCOperand::createImm(Insn));
124+
return MCDisassembler::Success;
125+
}
74126

75127
static DecodeStatus decodeShiftImm(MCInst &Inst, unsigned Insn,
76128
uint64_t Address,
77-
const MCDisassembler *Decoder);
129+
const MCDisassembler *Decoder) {
130+
unsigned Offset = (Insn & 0xffff);
131+
Inst.addOperand(MCOperand::createImm(SignExtend32<16>(Offset)));
132+
133+
return MCDisassembler::Success;
134+
}
135+
136+
static DecodeStatus decodePredicateOperand(MCInst &Inst, unsigned Val,
137+
uint64_t Address,
138+
const MCDisassembler *Decoder) {
139+
if (Val >= LPCC::UNKNOWN)
140+
return MCDisassembler::Fail;
141+
Inst.addOperand(MCOperand::createImm(Val));
142+
return MCDisassembler::Success;
143+
}
78144

79145
#include "LanaiGenDisassemblerTables.inc"
80146

@@ -157,95 +223,3 @@ LanaiDisassembler::getInstruction(MCInst &Instr, uint64_t &Size,
157223

158224
return MCDisassembler::Fail;
159225
}
160-
161-
static const unsigned GPRDecoderTable[] = {
162-
Lanai::R0, Lanai::R1, Lanai::PC, Lanai::R3, Lanai::SP, Lanai::FP,
163-
Lanai::R6, Lanai::R7, Lanai::RV, Lanai::R9, Lanai::RR1, Lanai::RR2,
164-
Lanai::R12, Lanai::R13, Lanai::R14, Lanai::RCA, Lanai::R16, Lanai::R17,
165-
Lanai::R18, Lanai::R19, Lanai::R20, Lanai::R21, Lanai::R22, Lanai::R23,
166-
Lanai::R24, Lanai::R25, Lanai::R26, Lanai::R27, Lanai::R28, Lanai::R29,
167-
Lanai::R30, Lanai::R31};
168-
169-
DecodeStatus DecodeGPRRegisterClass(MCInst &Inst, unsigned RegNo,
170-
uint64_t /*Address*/,
171-
const MCDisassembler * /*Decoder*/) {
172-
if (RegNo > 31)
173-
return MCDisassembler::Fail;
174-
175-
unsigned Reg = GPRDecoderTable[RegNo];
176-
Inst.addOperand(MCOperand::createReg(Reg));
177-
return MCDisassembler::Success;
178-
}
179-
180-
static DecodeStatus decodeRiMemoryValue(MCInst &Inst, unsigned Insn,
181-
uint64_t Address,
182-
const MCDisassembler *Decoder) {
183-
// RI memory values encoded using 23 bits:
184-
// 5 bit register, 16 bit constant
185-
unsigned Register = (Insn >> 18) & 0x1f;
186-
Inst.addOperand(MCOperand::createReg(GPRDecoderTable[Register]));
187-
unsigned Offset = (Insn & 0xffff);
188-
Inst.addOperand(MCOperand::createImm(SignExtend32<16>(Offset)));
189-
190-
return MCDisassembler::Success;
191-
}
192-
193-
static DecodeStatus decodeRrMemoryValue(MCInst &Inst, unsigned Insn,
194-
uint64_t Address,
195-
const MCDisassembler *Decoder) {
196-
// RR memory values encoded using 20 bits:
197-
// 5 bit register, 5 bit register, 2 bit PQ, 3 bit ALU operator, 5 bit JJJJJ
198-
unsigned Register = (Insn >> 15) & 0x1f;
199-
Inst.addOperand(MCOperand::createReg(GPRDecoderTable[Register]));
200-
Register = (Insn >> 10) & 0x1f;
201-
Inst.addOperand(MCOperand::createReg(GPRDecoderTable[Register]));
202-
203-
return MCDisassembler::Success;
204-
}
205-
206-
static DecodeStatus decodeSplsValue(MCInst &Inst, unsigned Insn,
207-
uint64_t Address,
208-
const MCDisassembler *Decoder) {
209-
// RI memory values encoded using 17 bits:
210-
// 5 bit register, 10 bit constant
211-
unsigned Register = (Insn >> 12) & 0x1f;
212-
Inst.addOperand(MCOperand::createReg(GPRDecoderTable[Register]));
213-
unsigned Offset = (Insn & 0x3ff);
214-
Inst.addOperand(MCOperand::createImm(SignExtend32<10>(Offset)));
215-
216-
return MCDisassembler::Success;
217-
}
218-
219-
static bool tryAddingSymbolicOperand(int64_t Value, bool IsBranch,
220-
uint64_t Address, uint64_t Offset,
221-
uint64_t Width, MCInst &MI,
222-
const MCDisassembler *Decoder) {
223-
return Decoder->tryAddingSymbolicOperand(MI, Value, Address, IsBranch, Offset,
224-
Width, /*InstSize=*/0);
225-
}
226-
227-
static DecodeStatus decodeBranch(MCInst &MI, unsigned Insn, uint64_t Address,
228-
const MCDisassembler *Decoder) {
229-
if (!tryAddingSymbolicOperand(Insn + Address, false, Address, 2, 23, MI,
230-
Decoder))
231-
MI.addOperand(MCOperand::createImm(Insn));
232-
return MCDisassembler::Success;
233-
}
234-
235-
static DecodeStatus decodeShiftImm(MCInst &Inst, unsigned Insn,
236-
uint64_t Address,
237-
const MCDisassembler *Decoder) {
238-
unsigned Offset = (Insn & 0xffff);
239-
Inst.addOperand(MCOperand::createImm(SignExtend32<16>(Offset)));
240-
241-
return MCDisassembler::Success;
242-
}
243-
244-
static DecodeStatus decodePredicateOperand(MCInst &Inst, unsigned Val,
245-
uint64_t Address,
246-
const MCDisassembler *Decoder) {
247-
if (Val >= LPCC::UNKNOWN)
248-
return MCDisassembler::Fail;
249-
Inst.addOperand(MCOperand::createImm(Val));
250-
return MCDisassembler::Success;
251-
}

0 commit comments

Comments
 (0)