Skip to content

Commit f711e7c

Browse files
committed
refactor
1 parent 9e26c52 commit f711e7c

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

llvm/lib/Target/AVR/Disassembler/AVRDisassembler.cpp

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -331,10 +331,23 @@ static DecodeStatus decodeCondBranch(MCInst &Inst, unsigned Insn,
331331
static DecodeStatus decodeAddSubWordImm(MCInst &Inst, unsigned Insn,
332332
uint64_t Address,
333333
const MCDisassembler *Decoder) {
334-
// Get the register
335-
unsigned RegVal = GPRDecoderTable[24 + 2 * ((Insn >> 4) & 0x3)];
336-
337334
if ((Insn & 0xfe00) == 0x9600) {
335+
// Get the register
336+
unsigned RegVal;
337+
switch ((Insn >> 4) & 0x3) {
338+
case 0:
339+
RegVal = AVR::R25R24;
340+
break;
341+
case 1:
342+
RegVal = AVR::R27R26;
343+
break;
344+
case 2:
345+
RegVal = AVR::R29R28;
346+
break;
347+
case 3:
348+
RegVal = AVR::R31R30;
349+
}
350+
338351
Inst.setOpcode((Insn & 0xff00) == 0x9600 ? AVR::ADIWRdK : AVR::SUBIWRdK);
339352
Inst.addOperand(MCOperand::createReg(RegVal));
340353
unsigned imm = ((Insn & 0x00C0) >> 2) | (Insn & 0xF);
@@ -347,11 +360,10 @@ static DecodeStatus decodeAddSubWordImm(MCInst &Inst, unsigned Insn,
347360
static DecodeStatus decodeMoveWord(MCInst &Inst, unsigned Insn,
348361
uint64_t Address,
349362
const MCDisassembler *Decoder) {
350-
// Get the registers
351-
unsigned RegValD = GPRDecoderTable[2 * ((Insn >> 4) & 0xf)];
352-
unsigned RegValR = GPRDecoderTable[2 * (Insn & 0xf)];
353-
354363
if ((Insn & 0xff00) == 0x0100) {
364+
// Get the registers
365+
unsigned RegValD = GPRDecoderTable[2 * ((Insn >> 4) & 0xf)];
366+
unsigned RegValR = GPRDecoderTable[2 * (Insn & 0xf)];
355367
Inst.setOpcode(AVR::MOVWRdRr);
356368
Inst.addOperand(MCOperand::createReg(RegValD));
357369
Inst.addOperand(MCOperand::createReg(RegValR));

0 commit comments

Comments
 (0)