mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
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
This commit is contained in:
parent
fd9d1b3714
commit
495a0974f4
@ -517,16 +517,33 @@ void V8ISel::emitCastOperation(MachineBasicBlock *BB,
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (oldTyClass < cLong && newTyClass == cFloat) {
|
||||
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 ();
|
||||
} else if (oldTyClass < cLong && newTyClass == cDouble) {
|
||||
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";
|
||||
|
@ -517,16 +517,33 @@ void V8ISel::emitCastOperation(MachineBasicBlock *BB,
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (oldTyClass < cLong && newTyClass == cFloat) {
|
||||
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 ();
|
||||
} else if (oldTyClass < cLong && newTyClass == cDouble) {
|
||||
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";
|
||||
|
@ -517,16 +517,33 @@ void V8ISel::emitCastOperation(MachineBasicBlock *BB,
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (oldTyClass < cLong && newTyClass == cFloat) {
|
||||
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 ();
|
||||
} else if (oldTyClass < cLong && newTyClass == cDouble) {
|
||||
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";
|
||||
|
@ -517,16 +517,33 @@ void V8ISel::emitCastOperation(MachineBasicBlock *BB,
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (oldTyClass < cLong && newTyClass == cFloat) {
|
||||
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 ();
|
||||
} else if (oldTyClass < cLong && newTyClass == cDouble) {
|
||||
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";
|
||||
|
Loading…
Reference in New Issue
Block a user