mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-14 22:38:03 +00:00
Expand f32 / f64 to i32 / i64 conversion to soft-fp library calls.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32523 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7f88ee0c5a
commit
6af00d588c
@ -2860,8 +2860,29 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Expand:
|
||||
assert(0 && "Shouldn't need to expand other operators here!");
|
||||
case Expand: {
|
||||
// Convert f32 / f64 to i32 / i64.
|
||||
MVT::ValueType VT = Op.getValueType();
|
||||
const char *FnName = 0;
|
||||
switch (Node->getOpcode()) {
|
||||
case ISD::FP_TO_SINT:
|
||||
if (Node->getOperand(0).getValueType() == MVT::f32)
|
||||
FnName = (VT == MVT::i32) ? "__fixsfsi" : "__fixsfdi";
|
||||
else
|
||||
FnName = (VT == MVT::i32) ? "__fixdfsi" : "__fixdfdi";
|
||||
break;
|
||||
case ISD::FP_TO_UINT:
|
||||
if (Node->getOperand(0).getValueType() == MVT::f32)
|
||||
FnName = (VT == MVT::i32) ? "__fixunssfsi" : "__fixunssfdi";
|
||||
else
|
||||
FnName = (VT == MVT::i32) ? "__fixunsdfsi" : "__fixunsdfdi";
|
||||
break;
|
||||
default: assert(0 && "Unreachable!");
|
||||
}
|
||||
SDOperand Dummy;
|
||||
Result = ExpandLibCall(FnName, Node, Dummy);
|
||||
break;
|
||||
}
|
||||
case Promote:
|
||||
Tmp1 = PromoteOp(Node->getOperand(0));
|
||||
Result = DAG.UpdateNodeOperands(Result, LegalizeOp(Tmp1));
|
||||
|
Loading…
x
Reference in New Issue
Block a user