diff options
author | Chris Lattner <sabre@nondot.org> | 2008-05-09 06:08:39 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-05-09 06:08:39 +0000 |
commit | 927686fe8c968ca786fa44d2353eebf59c4f5b8a (patch) | |
tree | b0d30bc00e5dcb4b397e83c7edb66a1f2a83105e | |
parent | 8cbcb0ed56b307339f27c6e7daf3444294d332f2 (diff) |
parameterize pointer size/align better without doing virtual method calls in normal case.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50890 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Basic/TargetInfo.h | 27 | ||||
-rw-r--r-- | lib/Basic/TargetInfo.cpp | 1 | ||||
-rw-r--r-- | lib/Basic/Targets.cpp | 6 |
3 files changed, 22 insertions, 12 deletions
diff --git a/include/clang/Basic/TargetInfo.h b/include/clang/Basic/TargetInfo.h index d135fe00ab..36fbb0d1c2 100644 --- a/include/clang/Basic/TargetInfo.h +++ b/include/clang/Basic/TargetInfo.h @@ -35,11 +35,12 @@ protected: // Target values set by the ctor of the actual target implementation. Default // values are specified by the TargetInfo constructor. bool CharIsSigned; - unsigned WCharWidth, WCharAlign; - unsigned IntWidth, IntAlign; - unsigned DoubleWidth, DoubleAlign; - unsigned LongWidth, LongAlign; - unsigned LongLongWidth, LongLongAlign; + unsigned char PointerWidth, PointerAlign; + unsigned char WCharWidth, WCharAlign; + unsigned char IntWidth, IntAlign; + unsigned char DoubleWidth, DoubleAlign; + unsigned char LongWidth, LongAlign; + unsigned char LongLongWidth, LongLongAlign; const llvm::fltSemantics *FloatFormat, *DoubleFormat, *LongDoubleFormat; @@ -61,9 +62,19 @@ public: bool isCharSigned() const { return CharIsSigned; } /// getPointerWidth - Return the width of pointers on this target, for the - /// specified address space. FIXME: implement correctly. - virtual uint64_t getPointerWidth(unsigned AddrSpace) const { return 32; } - virtual uint64_t getPointerAlign(unsigned AddrSpace) const { return 32; } + /// specified address space. + uint64_t getPointerWidth(unsigned AddrSpace) const { + return AddrSpace == 0 ? PointerWidth : getPointerWidthV(AddrSpace); + } + uint64_t getPointerAlign(unsigned AddrSpace) const { + return AddrSpace == 0 ? PointerAlign : getPointerAlignV(AddrSpace); + } + virtual uint64_t getPointerWidthV(unsigned AddrSpace) const { + return PointerWidth; + } + virtual uint64_t getPointerAlignV(unsigned AddrSpace) const { + return PointerAlign; + } /// getBoolWidth/Align - Return the size of '_Bool' and C++ 'bool' for this /// target, in bits. diff --git a/lib/Basic/TargetInfo.cpp b/lib/Basic/TargetInfo.cpp index dd1fe648d4..e8fc9232e1 100644 --- a/lib/Basic/TargetInfo.cpp +++ b/lib/Basic/TargetInfo.cpp @@ -23,6 +23,7 @@ using namespace clang; TargetInfo::TargetInfo(const std::string &T) : Triple(T) { // Set defaults. These should be overridden by concrete targets as needed. CharIsSigned = true; + PointerWidth = PointerAlign = 32; WCharWidth = WCharAlign = 32; IntWidth = IntAlign = 32; LongWidth = LongAlign = 32; diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 25bc6fbb4d..9c1675d6af 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -869,10 +869,8 @@ namespace { PIC16TargetInfo(const std::string& triple) : TargetInfo(triple) { IntWidth = IntAlign = 16; } - virtual uint64_t getPointerWidth(unsigned AddrSpace) const { return 16; } - virtual uint64_t getPointerAlign(unsigned AddrSpace) const { return 8; } - virtual unsigned getIntWidth() const { return 16; } - virtual unsigned getIntAlign() const { return 8; } + virtual uint64_t getPointerWidthV(unsigned AddrSpace) const { return 16; } + virtual uint64_t getPointerAlignV(unsigned AddrSpace) const { return 8; } virtual void getTargetDefines(std::vector<char> &Defines) const { Define(Defines, "__pic16"); } |