diff options
author | Dale Johannesen <dalej@apple.com> | 2007-10-15 01:05:37 +0000 |
---|---|---|
committer | Dale Johannesen <dalej@apple.com> | 2007-10-15 01:05:37 +0000 |
commit | 207bd4d90eed3753230cca29ac79e315414b56d6 (patch) | |
tree | 65694925234bc556b6d751daf4543337b974c841 /llvm/lib/Target/CBackend | |
parent | 5d15254496a15126a8f6d2482a4611f75b501399 (diff) | |
download | bcm5719-llvm-207bd4d90eed3753230cca29ac79e315414b56d6.tar.gz bcm5719-llvm-207bd4d90eed3753230cca29ac79e315414b56d6.zip |
Handle PPC long double in CBackend.
llvm-svn: 42972
Diffstat (limited to 'llvm/lib/Target/CBackend')
-rw-r--r-- | llvm/lib/Target/CBackend/CBackend.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/Target/CBackend/CBackend.cpp b/llvm/lib/Target/CBackend/CBackend.cpp index 343d6d7a5fa..35205c6edb3 100644 --- a/llvm/lib/Target/CBackend/CBackend.cpp +++ b/llvm/lib/Target/CBackend/CBackend.cpp @@ -1505,6 +1505,7 @@ bool CWriter::doInitialization(Module &M) { << "typedef unsigned int ConstantFloatTy;\n" << "typedef struct { unsigned long long f1; unsigned short f2; " "unsigned short pad[3]; } ConstantFP80Ty;\n" + // This is used for both kinds of 128-bit long double; meaning differs. << "typedef struct { unsigned long long f1; unsigned long long f2; }" " ConstantFP128Ty;\n" << "\n\n/* Global Declarations */\n"; @@ -1737,6 +1738,14 @@ void CWriter::printFloatingPointConstants(Function &F) { << ((uint16_t)p[1] | (p[0] & 0xffffffffffffLL)<<16) << ", 0x" << (uint16_t)(p[0] >> 48) << ",0,0,0" << "}; /* Long double constant */\n" << std::dec; + } else if (FPC->getType() == Type::PPC_FP128Ty) { + APInt api = FPC->getValueAPF().convertToAPInt(); + const uint64_t *p = api.getRawData(); + Out << "static const ConstantFP128Ty FPConstant" << FPCounter++ + << " = { 0x" << std::hex + << p[0] << ", 0x" << p[1] + << "}; /* Long double constant */\n" << std::dec; + } else assert(0 && "Unknown float type!"); } |