diff options
Diffstat (limited to 'clang/lib/Basic')
| -rw-r--r-- | clang/lib/Basic/TargetInfo.cpp | 10 | ||||
| -rw-r--r-- | clang/lib/Basic/Targets.cpp | 31 | 
2 files changed, 30 insertions, 11 deletions
diff --git a/clang/lib/Basic/TargetInfo.cpp b/clang/lib/Basic/TargetInfo.cpp index e8fc9232e12..6562911a33d 100644 --- a/clang/lib/Basic/TargetInfo.cpp +++ b/clang/lib/Basic/TargetInfo.cpp @@ -21,15 +21,21 @@ using namespace clang;  // TargetInfo Constructor.  TargetInfo::TargetInfo(const std::string &T) : Triple(T) { -  // Set defaults.  These should be overridden by concrete targets as needed. +  // Set defaults.  Defaults are set for a 32-bit RISC platform, +  // like PPC or SPARC. +  // These should be overridden by concrete targets as needed.    CharIsSigned = true;    PointerWidth = PointerAlign = 32;    WCharWidth = WCharAlign = 32;    IntWidth = IntAlign = 32;    LongWidth = LongAlign = 32;    LongLongWidth = LongLongAlign = 64; +  FloatWidth = 32; +  FloatAlign = 32;    DoubleWidth = 64; -  DoubleAlign = 32; +  DoubleAlign = 64; +  LongDoubleWidth = 64; +  LongDoubleAlign = 64;    FloatFormat = &llvm::APFloat::IEEEsingle;    DoubleFormat = &llvm::APFloat::IEEEdouble;    LongDoubleFormat = &llvm::APFloat::IEEEdouble; diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index d7bbe50618b..8aa4a4fb7b7 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -697,8 +697,13 @@ public:  namespace {  class DarwinI386TargetInfo : public DarwinTargetInfo {  public: -  DarwinI386TargetInfo(const std::string& triple) : DarwinTargetInfo(triple) {} -   +  DarwinI386TargetInfo(const std::string& triple) : DarwinTargetInfo(triple) { +    DoubleAlign = LongLongAlign = 32; +    LongDoubleWidth = 96; +    LongDoubleAlign = 32; +    LongDoubleFormat = &llvm::APFloat::x87DoubleExtended; +  } +    virtual void getTargetDefines(std::vector<char> &Defines) const {      DarwinTargetInfo::getTargetDefines(Defines);      getX86Defines(Defines, false); @@ -741,6 +746,9 @@ class DarwinX86_64TargetInfo : public DarwinTargetInfo {  public:    DarwinX86_64TargetInfo(const std::string& triple) : DarwinTargetInfo(triple) {      LongWidth = LongAlign = PointerWidth = PointerAlign = 64; +    LongDoubleWidth = 128; +    LongDoubleAlign = 128; +    LongDoubleFormat = &llvm::APFloat::x87DoubleExtended;    }    virtual void getTargetDefines(std::vector<char> &Defines) const { @@ -782,7 +790,9 @@ public:  namespace {  class DarwinARMTargetInfo : public DarwinTargetInfo {  public: -  DarwinARMTargetInfo(const std::string& triple) :DarwinTargetInfo(triple) {} +  DarwinARMTargetInfo(const std::string& triple) :DarwinTargetInfo(triple) { +    // FIXME: Are the defaults corrent for ARM? +  }    virtual void getTargetDefines(std::vector<char> &Defines) const {      DarwinTargetInfo::getTargetDefines(Defines); @@ -871,7 +881,10 @@ namespace {    class PIC16TargetInfo : public TargetInfo{    public:      PIC16TargetInfo(const std::string& triple) : TargetInfo(triple) { -      IntWidth = IntAlign = 16; +      // FIXME: Is IntAlign really supposed to be 16?  There seems +      // little point on a platform with 8-bit loads. +      IntWidth = IntAlign = LongAlign = LongLongAlign = PointerWidth = 16; +      PointerAlign = 8;      }      virtual uint64_t getPointerWidthV(unsigned AddrSpace) const { return 16; }      virtual uint64_t getPointerAlignV(unsigned AddrSpace) const { return 8; } @@ -909,25 +922,25 @@ static inline bool IsX86(const std::string& TT) {  TargetInfo* TargetInfo::CreateTargetInfo(const std::string &T) {    if (T.find("ppc-") == 0 || T.find("powerpc-") == 0)      return new DarwinPPCTargetInfo(T); -   +    if (T.find("ppc64-") == 0 || T.find("powerpc64-") == 0)      return new DarwinPPC64TargetInfo(T); -   +    if (T.find("armv6-") == 0 || T.find("arm-") == 0)      return new DarwinARMTargetInfo(T);    if (T.find("sparc-") == 0)      return new SolarisSparcV8TargetInfo(T); // ugly hack -   +    if (T.find("x86_64-") == 0)      return new DarwinX86_64TargetInfo(T); -   +    if (T.find("pic16-") == 0)      return new PIC16TargetInfo(T);    if (IsX86(T))      return new DarwinI386TargetInfo(T); -   +    return NULL;  }  | 

