mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-22 23:24:59 +00:00
[AArch64] Allow access to all system registers with MRS/MSR instructions.
The A64 instruction set includes a generic register syntax for accessing implementation-defined system registers. The syntax for these registers is: S<op0>_<op1>_<CRn>_<CRm>_<op2> The encoding space permitted for implementation-defined system registers is: op0 op1 CRn CRm op2 11 xxx 1x11 xxxx xxx The full encoding space can now be accessed: op0 op1 CRn CRm op2 xx xxx xxxx xxxx xxx This is useful to anyone needing to write assembly code supporting new system registers before the assembler has learned the official names for them. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218753 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -626,35 +626,19 @@ static DecodeStatus DecodeMemExtend(llvm::MCInst &Inst, unsigned Imm,
|
||||
static DecodeStatus DecodeMRSSystemRegister(llvm::MCInst &Inst, unsigned Imm,
|
||||
uint64_t Address,
|
||||
const void *Decoder) {
|
||||
const AArch64Disassembler *Dis =
|
||||
static_cast<const AArch64Disassembler *>(Decoder);
|
||||
const MCSubtargetInfo &STI = Dis->getSubtargetInfo();
|
||||
|
||||
Imm |= 0x8000;
|
||||
Inst.addOperand(MCOperand::CreateImm(Imm));
|
||||
|
||||
bool ValidNamed;
|
||||
(void)AArch64SysReg::MRSMapper(STI.getFeatureBits())
|
||||
.toString(Imm, ValidNamed);
|
||||
|
||||
return ValidNamed ? Success : Fail;
|
||||
// Every system register in the encoding space is valid with the syntax
|
||||
// S<op0>_<op1>_<Cn>_<Cm>_<op2>, so decoding system registers always succeeds.
|
||||
return Success;
|
||||
}
|
||||
|
||||
static DecodeStatus DecodeMSRSystemRegister(llvm::MCInst &Inst, unsigned Imm,
|
||||
uint64_t Address,
|
||||
const void *Decoder) {
|
||||
const AArch64Disassembler *Dis =
|
||||
static_cast<const AArch64Disassembler *>(Decoder);
|
||||
const MCSubtargetInfo &STI = Dis->getSubtargetInfo();
|
||||
|
||||
Imm |= 0x8000;
|
||||
Inst.addOperand(MCOperand::CreateImm(Imm));
|
||||
|
||||
bool ValidNamed;
|
||||
(void)AArch64SysReg::MSRMapper(STI.getFeatureBits())
|
||||
.toString(Imm, ValidNamed);
|
||||
|
||||
return ValidNamed ? Success : Fail;
|
||||
return Success;
|
||||
}
|
||||
|
||||
static DecodeStatus DecodeFMOVLaneInstruction(llvm::MCInst &Inst, unsigned Insn,
|
||||
|
Reference in New Issue
Block a user