diff options
author | Chris Lattner <sabre@nondot.org> | 2010-11-15 05:19:25 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-11-15 05:19:25 +0000 |
commit | 7192eb873201ff201681fefd1f5bf6ca2b2bc98e (patch) | |
tree | ec1c2bedecb7af7866bb61aff2202d85b6d9338f /lib/Target/PowerPC/PPCMCCodeEmitter.cpp | |
parent | 2ac190238e88b21e716e2853900b5076c9013410 (diff) |
add proper encoding for MTCRF instead of using a hack.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119121 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/PowerPC/PPCMCCodeEmitter.cpp')
-rw-r--r-- | lib/Target/PowerPC/PPCMCCodeEmitter.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/lib/Target/PowerPC/PPCMCCodeEmitter.cpp b/lib/Target/PowerPC/PPCMCCodeEmitter.cpp index fd98f4dfb1..bbadcb0791 100644 --- a/lib/Target/PowerPC/PPCMCCodeEmitter.cpp +++ b/lib/Target/PowerPC/PPCMCCodeEmitter.cpp @@ -56,12 +56,14 @@ public: "Invalid kind!"); return Infos[Kind - FirstTargetFixupKind]; } - + + unsigned get_crbitm_encoding(const MCInst &MI, unsigned OpNo, + SmallVectorImpl<MCFixup> &Fixups) const; + /// getMachineOpValue - Return binary encoding of operand. If the machine /// operand requires relocation, record the relocation and return zero. unsigned getMachineOpValue(const MCInst &MI,const MCOperand &MO, SmallVectorImpl<MCFixup> &Fixups) const; - // getBinaryCodeForInstr - TableGen'erated function for getting the // binary encoding for an instruction. @@ -90,10 +92,22 @@ MCCodeEmitter *llvm::createPPCMCCodeEmitter(const Target &, TargetMachine &TM, } unsigned PPCMCCodeEmitter:: +get_crbitm_encoding(const MCInst &MI, unsigned OpNo, + SmallVectorImpl<MCFixup> &Fixups) const { + const MCOperand &MO = MI.getOperand(OpNo); + assert((MI.getOpcode() == PPC::MTCRF || MI.getOpcode() == PPC::MFOCRF) && + (MO.getReg() >= PPC::CR0 && MO.getReg() <= PPC::CR7)); + return 0x80 >> PPCRegisterInfo::getRegisterNumbering(MO.getReg()); +} + + +unsigned PPCMCCodeEmitter:: getMachineOpValue(const MCInst &MI, const MCOperand &MO, SmallVectorImpl<MCFixup> &Fixups) const { - if (MO.isReg()) + if (MO.isReg()) { + assert(MI.getOpcode() != PPC::MTCRF && MI.getOpcode() != PPC::MFOCRF); return PPCRegisterInfo::getRegisterNumbering(MO.getReg()); + } if (MO.isImm()) return MO.getImm(); |