Skip to content

Commit b35fb46

Browse files
committed
[Xtensa] Minor improvements in disassembler.
1 parent 5914e7c commit b35fb46

File tree

1 file changed

+10
-27
lines changed

1 file changed

+10
-27
lines changed

llvm/lib/Target/Xtensa/Disassembler/XtensaDisassembler.cpp

Lines changed: 10 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -73,58 +73,46 @@ static DecodeStatus DecodeARRegisterClass(MCInst &Inst, uint64_t RegNo,
7373
return MCDisassembler::Success;
7474
}
7575

76-
static const MCPhysReg MRDecoderTable[] = {Xtensa::M0, Xtensa::M1, Xtensa::M2,
77-
Xtensa::M3};
78-
7976
static DecodeStatus DecodeMRRegisterClass(MCInst &Inst, uint64_t RegNo,
8077
uint64_t Address,
8178
const void *Decoder) {
82-
if (RegNo >= std::size(MRDecoderTable))
79+
if (RegNo > 3)
8380
return MCDisassembler::Fail;
8481

85-
MCPhysReg Reg = MRDecoderTable[RegNo];
82+
MCPhysReg Reg = Xtensa::M0 + RegNo;
8683
Inst.addOperand(MCOperand::createReg(Reg));
8784
return MCDisassembler::Success;
8885
}
8986

90-
static const MCPhysReg MR01DecoderTable[] = {Xtensa::M0, Xtensa::M1};
91-
9287
static DecodeStatus DecodeMR01RegisterClass(MCInst &Inst, uint64_t RegNo,
9388
uint64_t Address,
9489
const void *Decoder) {
95-
if (RegNo > 2)
90+
if (RegNo > 1)
9691
return MCDisassembler::Fail;
9792

98-
MCPhysReg Reg = MR01DecoderTable[RegNo];
93+
MCPhysReg Reg = Xtensa::M0 + RegNo;
9994
Inst.addOperand(MCOperand::createReg(Reg));
10095
return MCDisassembler::Success;
10196
}
10297

103-
static const MCPhysReg MR23DecoderTable[] = {Xtensa::M2, Xtensa::M3};
104-
10598
static DecodeStatus DecodeMR23RegisterClass(MCInst &Inst, uint64_t RegNo,
10699
uint64_t Address,
107100
const void *Decoder) {
108-
if (RegNo != 0 && RegNo != 1)
101+
if (RegNo > 1)
109102
return MCDisassembler::Fail;
110103

111-
MCPhysReg Reg = MR23DecoderTable[RegNo];
104+
MCPhysReg Reg = Xtensa::M2 + RegNo;
112105
Inst.addOperand(MCOperand::createReg(Reg));
113106
return MCDisassembler::Success;
114107
}
115108

116-
static const MCPhysReg FPRDecoderTable[] = {
117-
Xtensa::F0, Xtensa::F1, Xtensa::F2, Xtensa::F3, Xtensa::F4, Xtensa::F5,
118-
Xtensa::F6, Xtensa::F7, Xtensa::F8, Xtensa::F9, Xtensa::F10, Xtensa::F11,
119-
Xtensa::F12, Xtensa::F13, Xtensa::F14, Xtensa::F15};
120-
121109
static DecodeStatus DecodeFPRRegisterClass(MCInst &Inst, uint64_t RegNo,
122110
uint64_t Address,
123111
const void *Decoder) {
124-
if (RegNo >= std::size(FPRDecoderTable))
112+
if (RegNo > 15)
125113
return MCDisassembler::Fail;
126114

127-
MCPhysReg Reg = FPRDecoderTable[RegNo];
115+
MCPhysReg Reg = Xtensa::F0 + RegNo;
128116
Inst.addOperand(MCOperand::createReg(Reg));
129117
return MCDisassembler::Success;
130118
}
@@ -222,18 +210,13 @@ static DecodeStatus DecodeSRRegisterClass(MCInst &Inst, uint64_t RegNo,
222210
return MCDisassembler::Fail;
223211
}
224212

225-
const MCPhysReg BRDecoderTable[] = {
226-
Xtensa::B0, Xtensa::B1, Xtensa::B2, Xtensa::B3, Xtensa::B4, Xtensa::B5,
227-
Xtensa::B6, Xtensa::B7, Xtensa::B8, Xtensa::B9, Xtensa::B10, Xtensa::B11,
228-
Xtensa::B12, Xtensa::B13, Xtensa::B14, Xtensa::B15};
229-
230213
static DecodeStatus DecodeBRRegisterClass(MCInst &Inst, uint64_t RegNo,
231214
uint64_t Address,
232215
const void *Decoder) {
233-
if (RegNo >= std::size(BRDecoderTable))
216+
if (RegNo > 15)
234217
return MCDisassembler::Fail;
235218

236-
MCPhysReg Reg = BRDecoderTable[RegNo];
219+
MCPhysReg Reg = Xtensa::B0 + RegNo;
237220
Inst.addOperand(MCOperand::createReg(Reg));
238221
return MCDisassembler::Success;
239222
}

0 commit comments

Comments
 (0)