diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2023-09-02 21:17:18 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2024-01-07 23:04:38 +0000 |
| commit | 0e1e0ce556810ad5f9d45485e686f0653530516c (patch) | |
| tree | ab02ce7c4fafc0518430e9cec77d41201bce23f0 /contrib/llvm-project/llvm/lib/Target/M68k/Disassembler/M68kDisassembler.cpp | |
| parent | c3eb0b7c19221f3a2133ab14d3ffffa61ec0c4bc (diff) | |
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Target/M68k/Disassembler/M68kDisassembler.cpp')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/Target/M68k/Disassembler/M68kDisassembler.cpp | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/contrib/llvm-project/llvm/lib/Target/M68k/Disassembler/M68kDisassembler.cpp b/contrib/llvm-project/llvm/lib/Target/M68k/Disassembler/M68kDisassembler.cpp index ffe4869e8fe5..2124a35cc65a 100644 --- a/contrib/llvm-project/llvm/lib/Target/M68k/Disassembler/M68kDisassembler.cpp +++ b/contrib/llvm-project/llvm/lib/Target/M68k/Disassembler/M68kDisassembler.cpp @@ -33,14 +33,14 @@ using namespace llvm; typedef MCDisassembler::DecodeStatus DecodeStatus; static const unsigned RegisterDecode[] = { - M68k::D0, M68k::D1, M68k::D2, M68k::D3, M68k::D4, M68k::D5, - M68k::D6, M68k::D7, M68k::A0, M68k::A1, M68k::A2, M68k::A3, - M68k::A4, M68k::A5, M68k::A6, M68k::SP, -}; + M68k::D0, M68k::D1, M68k::D2, M68k::D3, M68k::D4, M68k::D5, + M68k::D6, M68k::D7, M68k::A0, M68k::A1, M68k::A2, M68k::A3, + M68k::A4, M68k::A5, M68k::A6, M68k::SP, M68k::FP0, M68k::FP1, + M68k::FP2, M68k::FP3, M68k::FP4, M68k::FP5, M68k::FP6, M68k::FP7}; static DecodeStatus DecodeRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const void *Decoder) { - if (RegNo >= 16) + if (RegNo >= 24) return DecodeStatus::Fail; Inst.addOperand(MCOperand::createReg(RegisterDecode[RegNo])); return DecodeStatus::Success; @@ -88,6 +88,15 @@ static DecodeStatus DecodeXR16RegisterClass(MCInst &Inst, uint64_t RegNo, return DecodeRegisterClass(Inst, RegNo, Address, Decoder); } +static DecodeStatus DecodeFPDRRegisterClass(MCInst &Inst, uint64_t RegNo, + uint64_t Address, + const void *Decoder) { + return DecodeRegisterClass(Inst, RegNo | 16ULL, Address, Decoder); +} +#define DecodeFPDR32RegisterClass DecodeFPDRRegisterClass +#define DecodeFPDR64RegisterClass DecodeFPDRRegisterClass +#define DecodeFPDR80RegisterClass DecodeFPDRRegisterClass + static DecodeStatus DecodeCCRCRegisterClass(MCInst &Inst, APInt &Insn, uint64_t Address, const void *Decoder) { @@ -102,6 +111,10 @@ static DecodeStatus DecodeImm32(MCInst &Inst, uint64_t Imm, uint64_t Address, #include "M68kGenDisassemblerTable.inc" +#undef DecodeFPDR32RegisterClass +#undef DecodeFPDR64RegisterClass +#undef DecodeFPDR80RegisterClass + /// A disassembler class for M68k. struct M68kDisassembler : public MCDisassembler { M68kDisassembler(const MCSubtargetInfo &STI, MCContext &Ctx) |
