diff options
Diffstat (limited to 'llvm/tools/llvm-readobj/StreamWriter.cpp')
-rw-r--r-- | llvm/tools/llvm-readobj/StreamWriter.cpp | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/llvm/tools/llvm-readobj/StreamWriter.cpp b/llvm/tools/llvm-readobj/StreamWriter.cpp index 390b05e358d..871811233a6 100644 --- a/llvm/tools/llvm-readobj/StreamWriter.cpp +++ b/llvm/tools/llvm-readobj/StreamWriter.cpp @@ -8,22 +8,23 @@ using namespace llvm::support; namespace llvm { raw_ostream &operator<<(raw_ostream &OS, const HexNumber& Value) { - OS << "0x" << to_hexString(Value.Value); - return OS; -} + uint64_t N = Value.Value; + // Zero is a special case. + if (N == 0) + return OS << "0x0"; -const std::string to_hexString(uint64_t Value, bool UpperCase) { - std::string number; - llvm::raw_string_ostream stream(number); - stream << format_hex_no_prefix(Value, 1, UpperCase); - return stream.str(); -} + char NumberBuffer[20]; + char *EndPtr = NumberBuffer + sizeof(NumberBuffer); + char *CurPtr = EndPtr; + + while (N) { + uintptr_t X = N % 16; + *--CurPtr = (X < 10 ? '0' + X : 'A' + X - 10); + N /= 16; + } -const std::string to_string(uint64_t Value) { - std::string number; - llvm::raw_string_ostream stream(number); - stream << format_decimal(Value, 1); - return stream.str(); + OS << "0x"; + return OS.write(CurPtr, EndPtr - CurPtr); } void StreamWriter::printBinaryImpl(StringRef Label, StringRef Str, |