diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2006-10-17 13:13:23 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2006-10-17 13:13:23 +0000 |
| commit | c31ee949203fd5bfda7007f269f9affbec1cd5df (patch) | |
| tree | b89a026f633896cd9cd0773c12802393d9029359 /llvm/lib/Target | |
| parent | 2794184191fdbfe87fb205b4086e0f93ba16fb4c (diff) | |
| download | bcm5719-llvm-c31ee949203fd5bfda7007f269f9affbec1cd5df.tar.gz bcm5719-llvm-c31ee949203fd5bfda7007f269f9affbec1cd5df.zip | |
add FCPYS and FCPYD
llvm-svn: 30995
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/ARM/ARMInstrInfo.td | 5 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/ARMRegisterInfo.cpp | 14 |
2 files changed, 16 insertions, 3 deletions
diff --git a/llvm/lib/Target/ARM/ARMInstrInfo.td b/llvm/lib/Target/ARM/ARMInstrInfo.td index 099b499c52a..e427050440a 100644 --- a/llvm/lib/Target/ARM/ARMInstrInfo.td +++ b/llvm/lib/Target/ARM/ARMInstrInfo.td @@ -212,6 +212,11 @@ def fcmpd : InstARM<(ops DFPRegs:$a, DFPRegs:$b), "fcmpd $a, $b", [(armcmp DFPRegs:$a, DFPRegs:$b)]>; +// Floating Point Copy +def FCPYS : InstARM<(ops FPRegs:$dst, FPRegs:$src), "fcpys $dst, $src", []>; + +def FCPYD : InstARM<(ops DFPRegs:$dst, DFPRegs:$src), "fcpyd $dst, $src", []>; + // Floating Point Conversion // We use bitconvert for moving the data between the register classes. // The format conversion is done with ARM specific nodes diff --git a/llvm/lib/Target/ARM/ARMRegisterInfo.cpp b/llvm/lib/Target/ARM/ARMRegisterInfo.cpp index fd04f5aecf2..703952367f7 100644 --- a/llvm/lib/Target/ARM/ARMRegisterInfo.cpp +++ b/llvm/lib/Target/ARM/ARMRegisterInfo.cpp @@ -47,9 +47,17 @@ void ARMRegisterInfo::copyRegToReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I, unsigned DestReg, unsigned SrcReg, const TargetRegisterClass *RC) const { - assert (RC == ARM::IntRegsRegisterClass); - BuildMI(MBB, I, ARM::MOV, 3, DestReg).addReg(SrcReg).addImm(0) - .addImm(ARMShift::LSL); + assert(RC == ARM::IntRegsRegisterClass || + RC == ARM::FPRegsRegisterClass || + RC == ARM::DFPRegsRegisterClass); + + if (RC == ARM::IntRegsRegisterClass) + BuildMI(MBB, I, ARM::MOV, 3, DestReg).addReg(SrcReg).addImm(0) + .addImm(ARMShift::LSL); + else if (RC == ARM::FPRegsRegisterClass) + BuildMI(MBB, I, ARM::FCPYS, 1, DestReg).addReg(SrcReg); + else + BuildMI(MBB, I, ARM::FCPYD, 1, DestReg).addReg(SrcReg); } MachineInstr *ARMRegisterInfo::foldMemoryOperand(MachineInstr* MI, |

