From 1df278669d7a79ff180604d6d9032673dc7e7d3c Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 8 Mar 2008 08:59:43 +0000 Subject: [PATCH] make float format handling more regular. llvm-svn: 48052 --- clang/Basic/TargetInfo.cpp | 26 ++++++++++---------------- clang/include/clang/Basic/TargetInfo.h | 20 ++++++++++---------- 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/clang/Basic/TargetInfo.cpp b/clang/Basic/TargetInfo.cpp index 5364affe589c..8d4488a7777f 100644 --- a/clang/Basic/TargetInfo.cpp +++ b/clang/Basic/TargetInfo.cpp @@ -18,25 +18,19 @@ #include "llvm/ADT/STLExtras.h" using namespace clang; +// 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() {} -//===----------------------------------------------------------------------===// -// 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; -} - - //===----------------------------------------------------------------------===// diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 2d2aca5698b6..017f6d6f2924 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/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