mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-12 18:33:22 +00:00
Fix a subtle bug involving constant expr casts from int to fp
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19410 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ee749d7488
commit
6e7c47c12d
@ -3576,13 +3576,13 @@ void X86ISel::emitCastOperation(MachineBasicBlock *BB,
|
|||||||
|
|
||||||
// Compute whether the sign bit is set by shifting the reg right 31 bits.
|
// Compute whether the sign bit is set by shifting the reg right 31 bits.
|
||||||
unsigned IsNeg = makeAnotherReg(Type::IntTy);
|
unsigned IsNeg = makeAnotherReg(Type::IntTy);
|
||||||
BuildMI(BB, X86::SHR32ri, 2, IsNeg).addReg(SrcReg).addImm(31);
|
BuildMI(*BB, IP, X86::SHR32ri, 2, IsNeg).addReg(SrcReg).addImm(31);
|
||||||
|
|
||||||
// Create a CP value that has the offset in one word and 0 in the other.
|
// Create a CP value that has the offset in one word and 0 in the other.
|
||||||
static ConstantInt *TheOffset = ConstantUInt::get(Type::ULongTy,
|
static ConstantInt *TheOffset = ConstantUInt::get(Type::ULongTy,
|
||||||
0x4f80000000000000ULL);
|
0x4f80000000000000ULL);
|
||||||
unsigned CPI = F->getConstantPool()->getConstantPoolIndex(TheOffset);
|
unsigned CPI = F->getConstantPool()->getConstantPoolIndex(TheOffset);
|
||||||
BuildMI(BB, X86::FADD32m, 5, RealDestReg).addReg(DestReg)
|
BuildMI(*BB, IP, X86::FADD32m, 5, RealDestReg).addReg(DestReg)
|
||||||
.addConstantPoolIndex(CPI).addZImm(4).addReg(IsNeg).addSImm(0);
|
.addConstantPoolIndex(CPI).addZImm(4).addReg(IsNeg).addSImm(0);
|
||||||
|
|
||||||
} else if (SrcTy == Type::ULongTy) {
|
} else if (SrcTy == Type::ULongTy) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user