mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-23 14:25:07 +00:00
Implement ppc long double->uint conversion.
Make ppc long double constants print. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42882 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -917,6 +917,39 @@ void AsmPrinter::EmitGlobalConstant(const Constant *CV) {
|
||||
<< " long double most significant halfword\n";
|
||||
}
|
||||
return;
|
||||
} else if (CFP->getType() == Type::PPC_FP128Ty) {
|
||||
// all long double variants are printed as hex
|
||||
// api needed to prevent premature destruction
|
||||
APInt api = CFP->getValueAPF().convertToAPInt();
|
||||
const uint64_t *p = api.getRawData();
|
||||
if (TD->isBigEndian()) {
|
||||
O << TAI->getData32bitsDirective() << uint32_t(p[0] >> 32)
|
||||
<< "\t" << TAI->getCommentString()
|
||||
<< " long double most significant word\n";
|
||||
O << TAI->getData32bitsDirective() << uint32_t(p[0])
|
||||
<< "\t" << TAI->getCommentString()
|
||||
<< " long double next word\n";
|
||||
O << TAI->getData32bitsDirective() << uint32_t(p[1] >> 32)
|
||||
<< "\t" << TAI->getCommentString()
|
||||
<< " long double next word\n";
|
||||
O << TAI->getData32bitsDirective() << uint32_t(p[1])
|
||||
<< "\t" << TAI->getCommentString()
|
||||
<< " long double least significant word\n";
|
||||
} else {
|
||||
O << TAI->getData32bitsDirective() << uint32_t(p[1])
|
||||
<< "\t" << TAI->getCommentString()
|
||||
<< " long double least significant word\n";
|
||||
O << TAI->getData32bitsDirective() << uint32_t(p[1] >> 32)
|
||||
<< "\t" << TAI->getCommentString()
|
||||
<< " long double next word\n";
|
||||
O << TAI->getData32bitsDirective() << uint32_t(p[0])
|
||||
<< "\t" << TAI->getCommentString()
|
||||
<< " long double next word\n";
|
||||
O << TAI->getData32bitsDirective() << uint32_t(p[0] >> 32)
|
||||
<< "\t" << TAI->getCommentString()
|
||||
<< " long double most significant word\n";
|
||||
}
|
||||
return;
|
||||
} else assert(0 && "Floating point constant type not handled");
|
||||
} else if (CV->getType() == Type::Int64Ty) {
|
||||
if (const ConstantInt *CI = dyn_cast<ConstantInt>(CV)) {
|
||||
|
Reference in New Issue
Block a user