Wiki Roadmap Timeline Tickets New Ticket Source Search Help / Guide About Trac Login

Changeset 653:5812d6fac0f0

Show
Ignore:
Timestamp:
10/06/08 03:07:35 (3 months ago)
Author:
Christian Kamm <kamm incasoftware de>
branch:
default
Message:

Fix x86_fp80 constants.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • gen/llvm.h

    r632 r653  
    4848#define LLSmallVector llvm::SmallVector 
    4949 
    50 #define APFloat llvm::APFloat 
     50using llvm::APFloat; 
     51using llvm::APInt; 
    5152 
    5253#endif // GEN_LLVM_H 
  • gen/tollvm.cpp

    r650 r653  
    530530    const LLType* llty = DtoType(t); 
    531531    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    } 
    533549} 
    534550 
Copyright © 2008, LDC Development Team.