From: Chris Lattner Date: Sat, 8 Mar 2008 08:59:43 +0000 (+0000) Subject: make float format handling more regular. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cd4fc42896f926ffc081e1c4a8bf4cd647883c14;p=clang make float format handling more regular. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48052 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Basic/TargetInfo.cpp b/Basic/TargetInfo.cpp index 5364affe58..8d4488a777 100644 --- a/Basic/TargetInfo.cpp +++ b/Basic/TargetInfo.cpp @@ -18,24 +18,18 @@ #include "llvm/ADT/STLExtras.h" using namespace clang; -// Out of line virtual dtor for TargetInfo. -TargetInfo::~TargetInfo() {} - -//===----------------------------------------------------------------------===// -// FIXME: These are temporary hacks. - -const llvm::fltSemantics *TargetInfo::getFloatFormat() const { - return &llvm::APFloat::IEEEsingle; -} -const llvm::fltSemantics *TargetInfo::getDoubleFormat() const { - return &llvm::APFloat::IEEEdouble; -} -const llvm::fltSemantics *TargetInfo::getLongDoubleFormat() const { - //Size = 80; Align = 32; // FIXME: implement correctly. - //Format = &llvm::APFloat::x87DoubleExtended; - return &llvm::APFloat::IEEEdouble; +// TargetInfo Constructor. +TargetInfo::TargetInfo(const std::string &T) : Triple(T) { + // Set defaults. These should be overridden by concrete targets as needed. + CharIsSigned = true; + WCharWidth = WCharAlign = 32; + FloatFormat = &llvm::APFloat::IEEEsingle; + DoubleFormat = &llvm::APFloat::IEEEdouble; + LongDoubleFormat = &llvm::APFloat::IEEEdouble; } +// Out of line virtual dtor for TargetInfo. +TargetInfo::~TargetInfo() {} //===----------------------------------------------------------------------===// diff --git a/include/clang/Basic/TargetInfo.h b/include/clang/Basic/TargetInfo.h index 2d2aca5698..017f6d6f29 100644 --- a/include/clang/Basic/TargetInfo.h +++ b/include/clang/Basic/TargetInfo.h @@ -32,16 +32,14 @@ namespace Builtin { struct Info; } class TargetInfo { std::string Triple; protected: - /// These are all caches for target values. + // Target values set by the ctor of the actual target implementation. Default + // values are specified by the TargetInfo constructor. bool CharIsSigned; unsigned WCharWidth, WCharAlign; + const llvm::fltSemantics *FloatFormat, *DoubleFormat, *LongDoubleFormat; - // TargetInfo Constructor. - TargetInfo(const std::string &T) : Triple(T) { - // Set defaults. These should be overridden by concrete targets as needed. - CharIsSigned = true; - WCharWidth = WCharAlign = 32; - } + // TargetInfo Constructor. Default initializes all fields. + TargetInfo(const std::string &T); public: /// CreateTargetInfo - Return the target info object for the specified target @@ -106,18 +104,20 @@ public: /// getFloatWidth/Align/Format - Return the size/align/format of 'float'. unsigned getFloatWidth() const { return 32; } // FIXME unsigned getFloatAlign() const { return 32; } // FIXME - const llvm::fltSemantics *getFloatFormat() const; + const llvm::fltSemantics *getFloatFormat() const { return FloatFormat; } /// getDoubleWidth/Align/Format - Return the size/align/format of 'double'. unsigned getDoubleWidth() const { return 64; } // FIXME unsigned getDoubleAlign() const { return 32; } // FIXME - const llvm::fltSemantics *getDoubleFormat() const; + const llvm::fltSemantics *getDoubleFormat() const { return DoubleFormat; } /// getLongDoubleWidth/Align/Format - Return the size/align/format of 'long /// double'. unsigned getLongDoubleWidth() const { return 64; } // FIXME unsigned getLongDoubleAlign() const { return 64; } // FIXME - const llvm::fltSemantics *getLongDoubleFormat() const; + const llvm::fltSemantics *getLongDoubleFormat() const { + return LongDoubleFormat; + } /// getIntMaxTWidth - Return the size of intmax_t and uintmax_t for this