diff options
| author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2009-05-27 17:23:44 +0000 |
|---|---|---|
| committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2009-05-27 17:23:44 +0000 |
| commit | d3bdf19ce7a37e23a6c4d877fb681eb010be74f7 (patch) | |
| tree | ea845becd986ec2cf30f812a4f65a6f02e9db78e /lib/Target/Mips/MipsInstrInfo.cpp | |
| parent | 0d09b83a481ea529f5ed8fe991afbadf01e582e3 (diff) | |
Added support for fround, fextend and FP_TO_SINT
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72483 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Mips/MipsInstrInfo.cpp')
| -rw-r--r-- | lib/Target/Mips/MipsInstrInfo.cpp | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/lib/Target/Mips/MipsInstrInfo.cpp b/lib/Target/Mips/MipsInstrInfo.cpp index 2ccbe898fa..6225fa9c98 100644 --- a/lib/Target/Mips/MipsInstrInfo.cpp +++ b/lib/Target/Mips/MipsInstrInfo.cpp @@ -55,7 +55,8 @@ isMoveInstr(const MachineInstr &MI, unsigned &SrcReg, unsigned &DstReg, if (MI.getOpcode() == Mips::FMOV_S32 || MI.getOpcode() == Mips::FMOV_D32 || MI.getOpcode() == Mips::MFC1 || - MI.getOpcode() == Mips::MTC1 ) { + MI.getOpcode() == Mips::MTC1 || + MI.getOpcode() == Mips::MOVCCRToCCR) { DstReg = MI.getOperand(0).getReg(); SrcReg = MI.getOperand(1).getReg(); return true; @@ -69,6 +70,7 @@ isMoveInstr(const MachineInstr &MI, unsigned &SrcReg, unsigned &DstReg, return true; } } + return false; } @@ -132,22 +134,23 @@ copyRegToReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I, if (I != MBB.end()) DL = I->getDebugLoc(); if (DestRC != SrcRC) { - // Moves between coprocessors and cpu + + // Copy to/from FCR31 condition register if ((DestRC == Mips::CPURegsRegisterClass) && + (SrcRC == Mips::CCRRegisterClass)) + BuildMI(MBB, I, DL, get(Mips::CFC1), DestReg).addReg(SrcReg); + else if ((DestRC == Mips::CCRRegisterClass) && + (SrcRC == Mips::CPURegsRegisterClass)) + BuildMI(MBB, I, DL, get(Mips::CTC1), DestReg).addReg(SrcReg); + + // Moves between coprocessors and cpu + else if ((DestRC == Mips::CPURegsRegisterClass) && (SrcRC == Mips::FGR32RegisterClass)) BuildMI(MBB, I, DL, get(Mips::MFC1), DestReg).addReg(SrcReg); else if ((DestRC == Mips::FGR32RegisterClass) && (SrcRC == Mips::CPURegsRegisterClass)) BuildMI(MBB, I, DL, get(Mips::MTC1), DestReg).addReg(SrcReg); - // Condition registers - else if ((SrcRC == Mips::CCRRegisterClass) && - (SrcReg == Mips::FCR31)) - return true; // This register is used implicitly, no copy needed. - else if ((DestRC == Mips::CCRRegisterClass) && - (DestReg == Mips::FCR31)) - return true; // This register is used implicitly, no copy needed. - // Move from/to Hi/Lo registers else if ((DestRC == Mips::HILORegisterClass) && (SrcRC == Mips::CPURegsRegisterClass)) { @@ -172,6 +175,8 @@ copyRegToReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I, BuildMI(MBB, I, DL, get(Mips::FMOV_S32), DestReg).addReg(SrcReg); else if (DestRC == Mips::AFGR64RegisterClass) BuildMI(MBB, I, DL, get(Mips::FMOV_D32), DestReg).addReg(SrcReg); + else if (DestRC == Mips::CCRRegisterClass) + BuildMI(MBB, I, DL, get(Mips::MOVCCRToCCR), DestReg).addReg(SrcReg); else // Can't copy this register return false; |
