mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-10 08:40:41 +00:00
convertFromInteger, as originally written, expected sign-extended
input. APInt unfortunately zero-extends signed integers, so Dale modified the function to expect zero-extended input. Make this assumption explicit in the function name. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42732 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
33d4c92e78
commit
ccf596a53e
@ -194,8 +194,8 @@ namespace llvm {
|
||||
opStatus convert(const fltSemantics &, roundingMode);
|
||||
opStatus convertToInteger(integerPart *, unsigned int, bool,
|
||||
roundingMode) const;
|
||||
opStatus convertFromInteger(const integerPart *, unsigned int, bool,
|
||||
roundingMode);
|
||||
opStatus convertFromZeroExtendedInteger(const integerPart *, unsigned int,
|
||||
bool, roundingMode);
|
||||
opStatus convertFromString(const char *, roundingMode);
|
||||
APInt convertToAPInt() const;
|
||||
double convertToDouble() const;
|
||||
|
@ -3234,8 +3234,8 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
|
||||
const uint64_t zero[] = {0, 0};
|
||||
APFloat apf = APFloat(APInt(MVT::getSizeInBits(VT), 2, zero));
|
||||
uint64_t x = 1ULL << ShiftAmt;
|
||||
(void)apf.convertFromInteger(&x, MVT::getSizeInBits(NVT), false,
|
||||
APFloat::rmNearestTiesToEven);
|
||||
(void)apf.convertFromZeroExtendedInteger
|
||||
(&x, MVT::getSizeInBits(NVT), false, APFloat::rmNearestTiesToEven);
|
||||
Tmp2 = DAG.getConstantFP(apf, VT);
|
||||
Tmp3 = DAG.getSetCC(TLI.getSetCCResultTy(),
|
||||
Node->getOperand(0), Tmp2, ISD::SETLT);
|
||||
|
@ -1595,7 +1595,7 @@ SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
|
||||
case ISD::SINT_TO_FP: {
|
||||
const uint64_t zero[] = {0, 0};
|
||||
APFloat apf = APFloat(APInt(MVT::getSizeInBits(VT), 2, zero));
|
||||
(void)apf.convertFromInteger(&Val,
|
||||
(void)apf.convertFromZeroExtendedInteger(&Val,
|
||||
MVT::getSizeInBits(Operand.getValueType()),
|
||||
Opcode==ISD::SINT_TO_FP,
|
||||
APFloat::rmNearestTiesToEven);
|
||||
|
@ -396,7 +396,7 @@ GenericValue ExecutionEngine::getConstantValue(const Constant *C) {
|
||||
else if (CE->getType() == Type::X86_FP80Ty) {
|
||||
const uint64_t zero[] = {0, 0};
|
||||
APFloat apf = APFloat(APInt(80, 2, zero));
|
||||
(void)apf.convertFromInteger(GV.IntVal.getRawData(),
|
||||
(void)apf.convertFromZeroExtendedInteger(GV.IntVal.getRawData(),
|
||||
GV.IntVal.getBitWidth(), false,
|
||||
APFloat::rmNearestTiesToEven);
|
||||
GV.IntVal = apf.convertToAPInt();
|
||||
@ -412,7 +412,7 @@ GenericValue ExecutionEngine::getConstantValue(const Constant *C) {
|
||||
else if (CE->getType() == Type::X86_FP80Ty) {
|
||||
const uint64_t zero[] = { 0, 0};
|
||||
APFloat apf = APFloat(APInt(80, 2, zero));
|
||||
(void)apf.convertFromInteger(GV.IntVal.getRawData(),
|
||||
(void)apf.convertFromZeroExtendedInteger(GV.IntVal.getRawData(),
|
||||
GV.IntVal.getBitWidth(), true,
|
||||
APFloat::rmNearestTiesToEven);
|
||||
GV.IntVal = apf.convertToAPInt();
|
||||
|
@ -1247,8 +1247,8 @@ APFloat::mod(const APFloat &rhs, roundingMode rounding_mode)
|
||||
if (fs==opInvalidOp)
|
||||
return fs;
|
||||
|
||||
fs = V.convertFromInteger(x, parts * integerPartWidth, true,
|
||||
rmNearestTiesToEven);
|
||||
fs = V.convertFromZeroExtendedInteger(x, parts * integerPartWidth, true,
|
||||
rmNearestTiesToEven);
|
||||
assert(fs==opOK); // should always work
|
||||
|
||||
fs = V.multiply(rhs, rounding_mode);
|
||||
@ -1576,9 +1576,11 @@ APFloat::convertFromUnsignedInteger(integerPart *parts,
|
||||
return normalize(rounding_mode, lost_fraction);
|
||||
}
|
||||
|
||||
/* FIXME: should this just take a const APInt reference? */
|
||||
APFloat::opStatus
|
||||
APFloat::convertFromInteger(const integerPart *parts, unsigned int width,
|
||||
bool isSigned, roundingMode rounding_mode)
|
||||
APFloat::convertFromZeroExtendedInteger(const integerPart *parts,
|
||||
unsigned int width, bool isSigned,
|
||||
roundingMode rounding_mode)
|
||||
{
|
||||
unsigned int partCount = partCountForBits(width);
|
||||
opStatus status;
|
||||
|
@ -216,7 +216,7 @@ Constant *llvm::ConstantFoldCastInstruction(unsigned opc, const Constant *V,
|
||||
uint32_t BitWidth = cast<IntegerType>(SrcTy)->getBitWidth();
|
||||
APFloat apf = APFloat(APInt(DestTy->getPrimitiveSizeInBits(),
|
||||
2, zero));
|
||||
(void)apf.convertFromInteger(api.getRawData(), BitWidth,
|
||||
(void)apf.convertFromZeroExtendedInteger(api.getRawData(), BitWidth,
|
||||
opc==Instruction::SIToFP,
|
||||
APFloat::rmNearestTiesToEven);
|
||||
return ConstantFP::get(DestTy, apf);
|
||||
|
Loading…
x
Reference in New Issue
Block a user