Skip to content

Commit 5abd1ca

Browse files
committed
[AVR] Add ELPM disassembly
1 parent ee414e3 commit 5abd1ca

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,9 +370,30 @@ static DecodeStatus decodeLoadStore(MCInst &Inst, unsigned Insn,
370370
// LD Rd, -Y : 1001 000d dddd 1010
371371
// LD Rd, Z+ : 1001 000d dddd 0001
372372
// LD Rd, -Z : 1001 000d dddd 0010
373+
//
374+
// and 3 ELPM instructions
375+
// ELPM Rd,Z : 1001 000d dddd 0110
376+
// ELPM Rd,Z+: 1001 000d dddd 0111
377+
// ELPM R0,Z : 1001 0101 1101 1000
378+
if (Insn == 0x95d8) {
379+
Inst.setOpcode(AVR::ELPM);
380+
return MCDisassembler::Success;
381+
}
382+
373383
if ((Insn & 0xfc00) != 0x9000 || (Insn & 0xf) == 0)
374384
return MCDisassembler::Fail;
375385

386+
// ELPM Rd,Z(+)
387+
if ((Insn & 0xfe00) == 0x9000) {
388+
switch (Insn & 0xf) {
389+
case 0x6:
390+
case 0x7:
391+
Inst.setOpcode((Insn & 0xf) == 6 ? AVR::ELPMRdZ : AVR::ELPMRdZPi);
392+
Inst.addOperand(MCOperand::createReg(RegVal));
393+
return MCDisassembler::Success;
394+
}
395+
}
396+
376397
// Get the base address register.
377398
unsigned RegBase;
378399
switch (Insn & 0xc) {

0 commit comments

Comments
 (0)