aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-05-09 06:08:39 +0000
committerChris Lattner <sabre@nondot.org>2008-05-09 06:08:39 +0000
commit927686fe8c968ca786fa44d2353eebf59c4f5b8a (patch)
treeb0d30bc00e5dcb4b397e83c7edb66a1f2a83105e
parent8cbcb0ed56b307339f27c6e7daf3444294d332f2 (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.h27
-rw-r--r--lib/Basic/TargetInfo.cpp1
-rw-r--r--lib/Basic/Targets.cpp6
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");
}