Changeset 653:5812d6fac0f0
- Timestamp:
- 10/06/08 03:07:35
(2 months ago)
- Author:
- Christian Kamm <kamm incasoftware de>
- branch:
- default
- Message:
Fix x86_fp80 constants.
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r632 |
r653 |
|
| 48 | 48 | #define LLSmallVector llvm::SmallVector |
|---|
| 49 | 49 | |
|---|
| 50 | | #define APFloat llvm::APFloat |
|---|
| | 50 | using llvm::APFloat; |
|---|
| | 51 | using llvm::APInt; |
|---|
| 51 | 52 | |
|---|
| 52 | 53 | #endif // GEN_LLVM_H |
|---|
| r650 |
r653 |
|
| 530 | 530 | const LLType* llty = DtoType(t); |
|---|
| 531 | 531 | assert(llty->isFloatingPoint()); |
|---|
| 532 | | return LLConstantFP::get(llty, value); |
|---|
| | 532 | |
|---|
| | 533 | if(llty == LLType::FloatTy || llty == LLType::DoubleTy) |
|---|
| | 534 | return LLConstantFP::get(llty, value); |
|---|
| | 535 | else if(llty == LLType::X86_FP80Ty) { |
|---|
| | 536 | uint64_t bits[] = {0, 0}; |
|---|
| | 537 | bits[1] = *(uint16_t*)&value; |
|---|
| | 538 | bits[0] = *((uint16_t*)&value + 4); |
|---|
| | 539 | bits[0] <<= 16; |
|---|
| | 540 | bits[0] += *((uint16_t*)&value + 3); |
|---|
| | 541 | bits[0] <<= 16; |
|---|
| | 542 | bits[0] += *((uint16_t*)&value + 2); |
|---|
| | 543 | bits[0] <<= 16; |
|---|
| | 544 | bits[0] += *((uint16_t*)&value + 1); |
|---|
| | 545 | return LLConstantFP::get(APFloat(APInt(80, 2, bits))); |
|---|
| | 546 | } else { |
|---|
| | 547 | assert(0 && "Unknown floating point type encountered"); |
|---|
| | 548 | } |
|---|
| 533 | 549 | } |
|---|
| 534 | 550 | |
|---|