mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-28 06:24:57 +00:00
Constants.cpp: Only read 32 bits for float.
Otherwise we'll discard the wrong half of a uint64_t on big-endian systems. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230016 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -2715,17 +2715,20 @@ uint64_t ConstantDataSequential::getElementAsInteger(unsigned Elt) const {
|
|||||||
/// type, return the specified element as an APFloat.
|
/// type, return the specified element as an APFloat.
|
||||||
APFloat ConstantDataSequential::getElementAsAPFloat(unsigned Elt) const {
|
APFloat ConstantDataSequential::getElementAsAPFloat(unsigned Elt) const {
|
||||||
const char *EltPtr = getElementPointer(Elt);
|
const char *EltPtr = getElementPointer(Elt);
|
||||||
auto EltVal = *reinterpret_cast<const uint64_t *>(EltPtr);
|
|
||||||
|
|
||||||
switch (getElementType()->getTypeID()) {
|
switch (getElementType()->getTypeID()) {
|
||||||
default:
|
default:
|
||||||
llvm_unreachable("Accessor can only be used when element is float/double!");
|
llvm_unreachable("Accessor can only be used when element is float/double!");
|
||||||
case Type::FloatTyID:
|
case Type::FloatTyID: {
|
||||||
|
auto EltVal = *reinterpret_cast<const uint32_t *>(EltPtr);
|
||||||
return APFloat(APFloat::IEEEsingle, APInt(32, EltVal));
|
return APFloat(APFloat::IEEEsingle, APInt(32, EltVal));
|
||||||
case Type::DoubleTyID:
|
}
|
||||||
|
case Type::DoubleTyID: {
|
||||||
|
auto EltVal = *reinterpret_cast<const uint64_t *>(EltPtr);
|
||||||
return APFloat(APFloat::IEEEdouble, APInt(64, EltVal));
|
return APFloat(APFloat::IEEEdouble, APInt(64, EltVal));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// getElementAsFloat - If this is an sequential container of floats, return
|
/// getElementAsFloat - If this is an sequential container of floats, return
|
||||||
/// the specified element as a float.
|
/// the specified element as a float.
|
||||||
|
Reference in New Issue
Block a user