diff options
author | Chris Lattner <sabre@nondot.org> | 2010-01-19 22:11:05 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-01-19 22:11:05 +0000 |
commit | c70daf316e238b50ec4dbed1d768bc24b8e982db (patch) | |
tree | 3cbb7241c805e4b400fcae825c095a0b2a94bf1b /llvm/lib | |
parent | e8800b8d7c6f0604e98653d532341a88f047bb0e (diff) | |
download | bcm5719-llvm-c70daf316e238b50ec4dbed1d768bc24b8e982db.tar.gz bcm5719-llvm-c70daf316e238b50ec4dbed1d768bc24b8e982db.zip |
simplify the code for printing x86 long double, don't do work
for -fverbose-asm unless it's on.
llvm-svn: 93926
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 97 |
1 files changed, 22 insertions, 75 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 2e576b323a6..a989b7622ad 100644 --- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -1200,82 +1200,29 @@ void AsmPrinter::EmitGlobalConstantFP(const ConstantFP *CFP, // api needed to prevent premature destruction APInt api = CFP->getValueAPF().bitcastToAPInt(); const uint64_t *p = api.getRawData(); - // Convert to double so we can print the approximate val as a comment. - APFloat DoubleVal = CFP->getValueAPF(); - bool ignored; - DoubleVal.convert(APFloat::IEEEdouble, APFloat::rmNearestTiesToEven, - &ignored); + if (VerboseAsm) { + // Convert to double so we can print the approximate val as a comment. + APFloat DoubleVal = CFP->getValueAPF(); + bool ignored; + DoubleVal.convert(APFloat::IEEEdouble, APFloat::rmNearestTiesToEven, + &ignored); + O.PadToColumn(MAI->getCommentColumn()); + O << MAI->getCommentString() << " x86_fp80 ~= " + << DoubleVal.convertToDouble() << '\n'; + } + if (TD.isBigEndian()) { - O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[1]); - if (VerboseAsm) { - O.PadToColumn(MAI->getCommentColumn()); - O << MAI->getCommentString() - << " most significant halfword of x86_fp80 ~" - << DoubleVal.convertToDouble(); - } - O << '\n'; - O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 48); - if (VerboseAsm) { - O.PadToColumn(MAI->getCommentColumn()); - O << MAI->getCommentString() << " next halfword"; - } - O << '\n'; - O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 32); - if (VerboseAsm) { - O.PadToColumn(MAI->getCommentColumn()); - O << MAI->getCommentString() << " next halfword"; - } - O << '\n'; - O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 16); - if (VerboseAsm) { - O.PadToColumn(MAI->getCommentColumn()); - O << MAI->getCommentString() << " next halfword"; - } - O << '\n'; - O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0]); - if (VerboseAsm) { - O.PadToColumn(MAI->getCommentColumn()); - O << MAI->getCommentString() - << " least significant halfword"; - } - O << '\n'; - } else { - O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0]); - if (VerboseAsm) { - O.PadToColumn(MAI->getCommentColumn()); - O << MAI->getCommentString() - << " least significant halfword of x86_fp80 ~" - << DoubleVal.convertToDouble(); - } - O << '\n'; - O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 16); - if (VerboseAsm) { - O.PadToColumn(MAI->getCommentColumn()); - O << MAI->getCommentString() - << " next halfword"; - } - O << '\n'; - O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 32); - if (VerboseAsm) { - O.PadToColumn(MAI->getCommentColumn()); - O << MAI->getCommentString() - << " next halfword"; - } - O << '\n'; - O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 48); - if (VerboseAsm) { - O.PadToColumn(MAI->getCommentColumn()); - O << MAI->getCommentString() - << " next halfword"; - } - O << '\n'; - O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[1]); - if (VerboseAsm) { - O.PadToColumn(MAI->getCommentColumn()); - O << MAI->getCommentString() - << " most significant halfword"; - } - O << '\n'; + O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[1]) << '\n'; + O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 48)<<'\n'; + O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 32)<<'\n'; + O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 16)<<'\n'; + O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0]) <<'\n'; + } else { + O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0]) << '\n'; + O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 16)<<'\n'; + O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 32)<<'\n'; + O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 48)<<'\n'; + O << MAI->getData16bitsDirective(AddrSpace) << uint16_t(p[1]) << '\n'; } OutStreamer.EmitZeros(TD.getTypeAllocSize(CFP->getType()) - TD.getTypeStoreSize(CFP->getType()), AddrSpace); |