diff options
author | Joerg Sonnenberger <joerg@bec.de> | 2015-10-04 09:11:22 +0000 |
---|---|---|
committer | Joerg Sonnenberger <joerg@bec.de> | 2015-10-04 09:11:22 +0000 |
commit | 726e624c0c50496514d405081b11e3894dfbda72 (patch) | |
tree | 4e0c617cabfacc184f45647a8218449bacaf34ef /llvm/lib/Target/Sparc/Disassembler/SparcDisassembler.cpp | |
parent | 78741a1b1e43d5489d863a82e9a116b6ef620643 (diff) | |
download | llvm-726e624c0c50496514d405081b11e3894dfbda72.zip llvm-726e624c0c50496514d405081b11e3894dfbda72.tar.gz llvm-726e624c0c50496514d405081b11e3894dfbda72.tar.bz2 |
[SPARCv9] Add support for the rdpr/wrpr instructions.
llvm-svn: 249262
Diffstat (limited to 'llvm/lib/Target/Sparc/Disassembler/SparcDisassembler.cpp')
-rw-r--r-- | llvm/lib/Target/Sparc/Disassembler/SparcDisassembler.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/Target/Sparc/Disassembler/SparcDisassembler.cpp b/llvm/lib/Target/Sparc/Disassembler/SparcDisassembler.cpp index e518fc7..51751ec 100644 --- a/llvm/lib/Target/Sparc/Disassembler/SparcDisassembler.cpp +++ b/llvm/lib/Target/Sparc/Disassembler/SparcDisassembler.cpp @@ -117,6 +117,12 @@ static const unsigned ASRRegDecoderTable[] = { SP::ASR24, SP::ASR25, SP::ASR26, SP::ASR27, SP::ASR28, SP::ASR29, SP::ASR30, SP::ASR31}; +static const unsigned PRRegDecoderTable[] = { + SP::TPC, SP::TNPC, SP::TSTATE, SP::TT, SP::TICK, SP::TBA, SP::PSTATE, + SP::TL, SP::PIL, SP::CWP, SP::CANSAVE, SP::CANRESTORE, SP::CLEANWIN, + SP::OTHERWIN, SP::WSTATE +}; + static const uint16_t IntPairDecoderTable[] = { SP::G0_G1, SP::G2_G3, SP::G4_G5, SP::G6_G7, SP::O0_O1, SP::O2_O3, SP::O4_O5, SP::O6_O7, @@ -203,6 +209,15 @@ static DecodeStatus DecodeASRRegsRegisterClass(MCInst &Inst, unsigned RegNo, return MCDisassembler::Success; } +static DecodeStatus DecodePRRegsRegisterClass(MCInst &Inst, unsigned RegNo, + uint64_t Address, + const void *Decoder) { + if (RegNo >= array_lengthof(PRRegDecoderTable)) + return MCDisassembler::Fail; + Inst.addOperand(MCOperand::createReg(PRRegDecoderTable[RegNo])); + return MCDisassembler::Success; +} + static DecodeStatus DecodeIntPairRegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const void *Decoder) { DecodeStatus S = MCDisassembler::Success; |