mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-14 15:39:00 +00:00
Implement cast bool to X
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5012 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
71794c0069
commit
7d25589ee1
@ -854,7 +854,7 @@ ISel::visitCastInst (CastInst &CI)
|
|||||||
// 4) cast {int, uint, ptr} to {short, ushort}
|
// 4) cast {int, uint, ptr} to {short, ushort}
|
||||||
// cast {int, uint, ptr} to {sbyte, ubyte}
|
// cast {int, uint, ptr} to {sbyte, ubyte}
|
||||||
// cast {short, ushort} to {sbyte, ubyte}
|
// cast {short, ushort} to {sbyte, ubyte}
|
||||||
//
|
|
||||||
// 1) Implement casts to bool by using compare on the operand followed
|
// 1) Implement casts to bool by using compare on the operand followed
|
||||||
// by set if not zero on the result.
|
// by set if not zero on the result.
|
||||||
if (targetType == Type::BoolTy)
|
if (targetType == Type::BoolTy)
|
||||||
@ -863,10 +863,11 @@ ISel::visitCastInst (CastInst &CI)
|
|||||||
BuildMI (BB, X86::SETNEr, 1, destReg);
|
BuildMI (BB, X86::SETNEr, 1, destReg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2) Implement casts between values of the same type class (as determined
|
// 2) Implement casts between values of the same type class (as determined
|
||||||
// by getClass) by using a register-to-register move.
|
// by getClass) by using a register-to-register move.
|
||||||
unsigned int srcClass = getClass (sourceType);
|
unsigned srcClass = sourceType == Type::BoolTy ? cByte : getClass(sourceType);
|
||||||
unsigned int targClass = getClass (targetType);
|
unsigned targClass = getClass (targetType);
|
||||||
static const unsigned regRegMove[] = {
|
static const unsigned regRegMove[] = {
|
||||||
X86::MOVrr8, X86::MOVrr16, X86::MOVrr32
|
X86::MOVrr8, X86::MOVrr16, X86::MOVrr32
|
||||||
};
|
};
|
||||||
|
@ -854,7 +854,7 @@ ISel::visitCastInst (CastInst &CI)
|
|||||||
// 4) cast {int, uint, ptr} to {short, ushort}
|
// 4) cast {int, uint, ptr} to {short, ushort}
|
||||||
// cast {int, uint, ptr} to {sbyte, ubyte}
|
// cast {int, uint, ptr} to {sbyte, ubyte}
|
||||||
// cast {short, ushort} to {sbyte, ubyte}
|
// cast {short, ushort} to {sbyte, ubyte}
|
||||||
//
|
|
||||||
// 1) Implement casts to bool by using compare on the operand followed
|
// 1) Implement casts to bool by using compare on the operand followed
|
||||||
// by set if not zero on the result.
|
// by set if not zero on the result.
|
||||||
if (targetType == Type::BoolTy)
|
if (targetType == Type::BoolTy)
|
||||||
@ -863,10 +863,11 @@ ISel::visitCastInst (CastInst &CI)
|
|||||||
BuildMI (BB, X86::SETNEr, 1, destReg);
|
BuildMI (BB, X86::SETNEr, 1, destReg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2) Implement casts between values of the same type class (as determined
|
// 2) Implement casts between values of the same type class (as determined
|
||||||
// by getClass) by using a register-to-register move.
|
// by getClass) by using a register-to-register move.
|
||||||
unsigned int srcClass = getClass (sourceType);
|
unsigned srcClass = sourceType == Type::BoolTy ? cByte : getClass(sourceType);
|
||||||
unsigned int targClass = getClass (targetType);
|
unsigned targClass = getClass (targetType);
|
||||||
static const unsigned regRegMove[] = {
|
static const unsigned regRegMove[] = {
|
||||||
X86::MOVrr8, X86::MOVrr16, X86::MOVrr32
|
X86::MOVrr8, X86::MOVrr16, X86::MOVrr32
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user