]> granicus.if.org Git - clang/commitdiff
parameterize pointer size/align better without doing virtual method calls in normal...
authorChris Lattner <sabre@nondot.org>
Fri, 9 May 2008 06:08:39 +0000 (06:08 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 9 May 2008 06:08:39 +0000 (06:08 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50890 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/TargetInfo.h
lib/Basic/TargetInfo.cpp
lib/Basic/Targets.cpp

index d135fe00ab060f3c831d42ac71311c4e1d33e3d8..36fbb0d1c2374f6cce53a93aeb173450016a3ff3 100644 (file)
@@ -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.
index dd1fe648d42ee88599f86e98b1329c6e6669ffcb..e8fc9232e129a471de4f7b8fcf8134d078f05617 100644 (file)
@@ -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;
index 25bc6fbb4ded5454d36999bd2343bddf0aa58d96..9c1675d6afa69c015c026cd6dcf11740ce832c3c 100644 (file)
@@ -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");
     }