Mercurial > projects > ldc
diff gen/tollvm.cpp @ 653:5812d6fac0f0
Fix x86_fp80 constants.
author | Christian Kamm <kamm incasoftware de> |
---|---|
date | Mon, 06 Oct 2008 09:07:35 +0200 |
parents | aa6a0b7968f7 |
children | 99f32e967746 |
line wrap: on
line diff
--- a/gen/tollvm.cpp Sun Oct 05 22:26:25 2008 +0200 +++ b/gen/tollvm.cpp Mon Oct 06 09:07:35 2008 +0200 @@ -529,7 +529,23 @@ { const LLType* llty = DtoType(t); assert(llty->isFloatingPoint()); - return LLConstantFP::get(llty, value); + + if(llty == LLType::FloatTy || llty == LLType::DoubleTy) + return LLConstantFP::get(llty, value); + else if(llty == LLType::X86_FP80Ty) { + uint64_t bits[] = {0, 0}; + bits[1] = *(uint16_t*)&value; + bits[0] = *((uint16_t*)&value + 4); + bits[0] <<= 16; + bits[0] += *((uint16_t*)&value + 3); + bits[0] <<= 16; + bits[0] += *((uint16_t*)&value + 2); + bits[0] <<= 16; + bits[0] += *((uint16_t*)&value + 1); + return LLConstantFP::get(APFloat(APInt(80, 2, bits))); + } else { + assert(0 && "Unknown floating point type encountered"); + } } //////////////////////////////////////////////////////////////////////////////////////////