mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-28 22:20:37 +00:00
IR: Use format_hex instead of handrolling the conversion. NFC
Cleans up some very old code in AsmWriter's WriteConstantInternal. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@254688 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8061fe5c67
commit
d8def4abd1
@ -39,6 +39,7 @@
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/Dwarf.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/Format.h"
|
||||
#include "llvm/Support/FormattedStream.h"
|
||||
#include "llvm/Support/MathExtras.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
@ -1137,15 +1138,12 @@ static void WriteConstantInternal(raw_ostream &Out, const Constant *CV,
|
||||
// x86, so we must not use these types.
|
||||
static_assert(sizeof(double) == sizeof(uint64_t),
|
||||
"assuming that double is 64 bits!");
|
||||
char Buffer[40];
|
||||
APFloat apf = CFP->getValueAPF();
|
||||
// Floats are represented in ASCII IR as double, convert.
|
||||
if (!isDouble)
|
||||
apf.convert(APFloat::IEEEdouble, APFloat::rmNearestTiesToEven,
|
||||
&ignored);
|
||||
Out << "0x" <<
|
||||
utohex_buffer(uint64_t(apf.bitcastToAPInt().getZExtValue()),
|
||||
Buffer+40);
|
||||
Out << format_hex(apf.bitcastToAPInt().getZExtValue(), 0, /*Upper=*/true);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1153,60 +1151,32 @@ static void WriteConstantInternal(raw_ostream &Out, const Constant *CV,
|
||||
// These appear as a magic letter identifying the type, then a
|
||||
// fixed number of hex digits.
|
||||
Out << "0x";
|
||||
// Bit position, in the current word, of the next nibble to print.
|
||||
int shiftcount;
|
||||
|
||||
APInt API = CFP->getValueAPF().bitcastToAPInt();
|
||||
if (&CFP->getValueAPF().getSemantics() == &APFloat::x87DoubleExtended) {
|
||||
Out << 'K';
|
||||
// api needed to prevent premature destruction
|
||||
APInt api = CFP->getValueAPF().bitcastToAPInt();
|
||||
const uint64_t* p = api.getRawData();
|
||||
uint64_t word = p[1];
|
||||
shiftcount = 12;
|
||||
int width = api.getBitWidth();
|
||||
for (int j=0; j<width; j+=4, shiftcount-=4) {
|
||||
unsigned int nibble = (word>>shiftcount) & 15;
|
||||
if (nibble < 10)
|
||||
Out << (unsigned char)(nibble + '0');
|
||||
else
|
||||
Out << (unsigned char)(nibble - 10 + 'A');
|
||||
if (shiftcount == 0 && j+4 < width) {
|
||||
word = *p;
|
||||
shiftcount = 64;
|
||||
if (width-j-4 < 64)
|
||||
shiftcount = width-j-4;
|
||||
}
|
||||
}
|
||||
Out << format_hex_no_prefix(API.getHiBits(16).getZExtValue(), 4,
|
||||
/*Upper=*/true);
|
||||
Out << format_hex_no_prefix(API.getLoBits(64).getZExtValue(), 16,
|
||||
/*Upper=*/true);
|
||||
return;
|
||||
} else if (&CFP->getValueAPF().getSemantics() == &APFloat::IEEEquad) {
|
||||
shiftcount = 60;
|
||||
Out << 'L';
|
||||
Out << format_hex_no_prefix(API.getLoBits(64).getZExtValue(), 16,
|
||||
/*Upper=*/true);
|
||||
Out << format_hex_no_prefix(API.getHiBits(64).getZExtValue(), 16,
|
||||
/*Upper=*/true);
|
||||
} else if (&CFP->getValueAPF().getSemantics() == &APFloat::PPCDoubleDouble) {
|
||||
shiftcount = 60;
|
||||
Out << 'M';
|
||||
Out << format_hex_no_prefix(API.getLoBits(64).getZExtValue(), 16,
|
||||
/*Upper=*/true);
|
||||
Out << format_hex_no_prefix(API.getHiBits(64).getZExtValue(), 16,
|
||||
/*Upper=*/true);
|
||||
} else if (&CFP->getValueAPF().getSemantics() == &APFloat::IEEEhalf) {
|
||||
shiftcount = 12;
|
||||
Out << 'H';
|
||||
Out << format_hex_no_prefix(API.getZExtValue(), 4,
|
||||
/*Upper=*/true);
|
||||
} else
|
||||
llvm_unreachable("Unsupported floating point type");
|
||||
// api needed to prevent premature destruction
|
||||
APInt api = CFP->getValueAPF().bitcastToAPInt();
|
||||
const uint64_t* p = api.getRawData();
|
||||
uint64_t word = *p;
|
||||
int width = api.getBitWidth();
|
||||
for (int j=0; j<width; j+=4, shiftcount-=4) {
|
||||
unsigned int nibble = (word>>shiftcount) & 15;
|
||||
if (nibble < 10)
|
||||
Out << (unsigned char)(nibble + '0');
|
||||
else
|
||||
Out << (unsigned char)(nibble - 10 + 'A');
|
||||
if (shiftcount == 0 && j+4 < width) {
|
||||
word = *(++p);
|
||||
shiftcount = 64;
|
||||
if (width-j-4 < 64)
|
||||
shiftcount = width-j-4;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user