diff options
author | Brian Gaeke <gaeke@uiuc.edu> | 2004-06-24 21:22:08 +0000 |
---|---|---|
committer | Brian Gaeke <gaeke@uiuc.edu> | 2004-06-24 21:22:08 +0000 |
commit | 495a0974f4943019da8fdc1df48ca3f0272646c8 (patch) | |
tree | 53d2ad184cf3e2fe8ff75b79990049eb3f8603b0 /lib/Target/Sparc/InstSelectSimple.cpp | |
parent | fd9d1b37148b558f185902f11e2ac600d9a47a12 (diff) |
Support cast float to float, cast double to float, and cast float to double.
(It's not yet clear how to copy doubles from register to register.)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14371 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Sparc/InstSelectSimple.cpp')
-rw-r--r-- | lib/Target/Sparc/InstSelectSimple.cpp | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/lib/Target/Sparc/InstSelectSimple.cpp b/lib/Target/Sparc/InstSelectSimple.cpp index bbfe3cb65f..12045197b7 100644 --- a/lib/Target/Sparc/InstSelectSimple.cpp +++ b/lib/Target/Sparc/InstSelectSimple.cpp @@ -517,16 +517,33 @@ void V8ISel::emitCastOperation(MachineBasicBlock *BB, } } } else { - if (oldTyClass < cLong && newTyClass == cFloat) { - // cast int to float. Store it to a stack slot and then load - // it using ldf into a floating point register. then do fitos. - std::cerr << "Casts to float still unsupported: SrcTy = " - << *SrcTy << ", DestTy = " << *DestTy << "\n"; - abort (); - } else if (oldTyClass < cLong && newTyClass == cDouble) { - std::cerr << "Casts to double still unsupported: SrcTy = " - << *SrcTy << ", DestTy = " << *DestTy << "\n"; - abort (); + if (newTyClass == cFloat) { + switch (oldTyClass) { + case cFloat: + BuildMI (*BB, IP, V8::FMOVS, 1, DestReg).addReg (SrcReg); + break; + case cDouble: + BuildMI (*BB, IP, V8::FDTOS, 1, DestReg).addReg (SrcReg); + break; + default: + // cast int to float. Store it to a stack slot and then load + // it using ldf into a floating point register. then do fitos. + std::cerr << "Casts to float still unsupported: SrcTy = " + << *SrcTy << ", DestTy = " << *DestTy << "\n"; + abort (); + break; + } + } else if (newTyClass == cDouble) { + switch (oldTyClass) { + case cFloat: + BuildMI (*BB, IP, V8::FSTOD, 1, DestReg).addReg (SrcReg); + break; + default: + std::cerr << "Casts to double still unsupported: SrcTy = " + << *SrcTy << ", DestTy = " << *DestTy << "\n"; + abort (); + break; + } } else { std::cerr << "Cast still unsupported: SrcTy = " << *SrcTy << ", DestTy = " << *DestTy << "\n"; |