SignBit = DAG.getNode(ISD::SRL, SrcNVT, SignBit,
DAG.getConstant(SizeDiff, TLI.getShiftAmountTy()));
SignBit = DAG.getNode(ISD::TRUNCATE, NVT, SignBit);
- } else if (SizeDiff < 0)
- SignBit = DAG.getNode(ISD::SIGN_EXTEND, NVT, SignBit);
+ } else if (SizeDiff < 0) {
+ SignBit = DAG.getNode(ISD::ZERO_EXTEND, NVT, SignBit);
+ SignBit = DAG.getNode(ISD::SHL, NVT, SignBit,
+ DAG.getConstant(-SizeDiff, TLI.getShiftAmountTy()));
+ }
// Clear the sign bit of first operand.
SDOperand Mask2 = (VT == MVT::f64)
LC = RTLIB::FPTOSINT_F32_I32;
else if (OVT == MVT::f64)
LC = RTLIB::FPTOSINT_F64_I32;
+ else if (OVT == MVT::f80)
+ LC = RTLIB::FPTOSINT_F80_I32;
+ else if (OVT == MVT::ppcf128)
+ LC = RTLIB::FPTOSINT_PPCF128_I32;
else
assert(0 && "Unexpected i32-to-fp conversion!");
} else if (VT == MVT::i64) {