aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Gaeke <gaeke@uiuc.edu>2004-06-24 21:22:08 +0000
committerBrian Gaeke <gaeke@uiuc.edu>2004-06-24 21:22:08 +0000
commit495a0974f4943019da8fdc1df48ca3f0272646c8 (patch)
tree53d2ad184cf3e2fe8ff75b79990049eb3f8603b0
parentfd9d1b37148b558f185902f11e2ac600d9a47a12 (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
-rw-r--r--lib/Target/Sparc/InstSelectSimple.cpp37
-rw-r--r--lib/Target/Sparc/SparcV8ISelSimple.cpp37
-rw-r--r--lib/Target/SparcV8/InstSelectSimple.cpp37
-rw-r--r--lib/Target/SparcV8/SparcV8ISelSimple.cpp37
4 files changed, 108 insertions, 40 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";
diff --git a/lib/Target/Sparc/SparcV8ISelSimple.cpp b/lib/Target/Sparc/SparcV8ISelSimple.cpp
index bbfe3cb65f..12045197b7 100644
--- a/lib/Target/Sparc/SparcV8ISelSimple.cpp
+++ b/lib/Target/Sparc/SparcV8ISelSimple.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";
diff --git a/lib/Target/SparcV8/InstSelectSimple.cpp b/lib/Target/SparcV8/InstSelectSimple.cpp
index bbfe3cb65f..12045197b7 100644
--- a/lib/Target/SparcV8/InstSelectSimple.cpp
+++ b/lib/Target/SparcV8/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";
diff --git a/lib/Target/SparcV8/SparcV8ISelSimple.cpp b/lib/Target/SparcV8/SparcV8ISelSimple.cpp
index bbfe3cb65f..12045197b7 100644
--- a/lib/Target/SparcV8/SparcV8ISelSimple.cpp
+++ b/lib/Target/SparcV8/SparcV8ISelSimple.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";