summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic/Targets.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2014-01-03 19:22:05 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2014-01-03 19:22:05 +0000
commitc418ae93a8bafb0590dd8445677f9c60cb9f0224 (patch)
tree275142e239b4528f0d29651538d473281be911b6 /clang/lib/Basic/Targets.cpp
parent58873566b3718a6b2730e7d726491398766a39a4 (diff)
downloadbcm5719-llvm-c418ae93a8bafb0590dd8445677f9c60cb9f0224.tar.gz
bcm5719-llvm-c418ae93a8bafb0590dd8445677f9c60cb9f0224.zip
Update for llvm's DataLayout including mangling information.
llvm-svn: 198439
Diffstat (limited to 'clang/lib/Basic/Targets.cpp')
-rw-r--r--clang/lib/Basic/Targets.cpp95
1 files changed, 57 insertions, 38 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index eb07942a799..9dcd027b996 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -485,7 +485,7 @@ public:
this->UIntMaxType = TargetInfo::UnsignedLongLong;
this->Int64Type = TargetInfo::SignedLongLong;
this->SizeType = TargetInfo::UnsignedInt;
- this->DescriptionString = "E-p:32:32-i64:64-n32:64";
+ this->DescriptionString = "E-m:e-p:32:32-i64:64-n32:64";
}
};
@@ -625,11 +625,11 @@ public:
// RegParmMax is inherited from the underlying architecture
this->LongDoubleFormat = &llvm::APFloat::IEEEdouble;
if (Triple.getArch() == llvm::Triple::arm) {
- this->DescriptionString = "e-p:32:32-i64:64-v128:64:128-n32-S128";
+ this->DescriptionString = "e-m:e-p:32:32-i64:64-v128:64:128-n32-S128";
} else if (Triple.getArch() == llvm::Triple::x86) {
- this->DescriptionString = "e-p:32:32-i64:64-n8:16:32-S128";
+ this->DescriptionString = "e-m:e-p:32:32-i64:64-n8:16:32-S128";
} else if (Triple.getArch() == llvm::Triple::x86_64) {
- this->DescriptionString = "e-p:32:32-i64:64-n8:16:32:64-S128";
+ this->DescriptionString = "e-m:e-p:32:32-i64:64-n8:16:32:64-S128";
} else if (Triple.getArch() == llvm::Triple::mipsel) {
// Handled on mips' setDescriptionString.
} else {
@@ -1188,7 +1188,7 @@ namespace {
class PPC32TargetInfo : public PPCTargetInfo {
public:
PPC32TargetInfo(const llvm::Triple &Triple) : PPCTargetInfo(Triple) {
- DescriptionString = "E-p:32:32-i64:64-n32";
+ DescriptionString = "E-m:e-p:32:32-i64:64-n32";
switch (getTriple().getOS()) {
case llvm::Triple::Linux:
@@ -1232,9 +1232,9 @@ public:
if (getTriple().getOS() == llvm::Triple::FreeBSD) {
LongDoubleWidth = LongDoubleAlign = 64;
LongDoubleFormat = &llvm::APFloat::IEEEdouble;
- DescriptionString = "E-i64:64-n32:64";
+ DescriptionString = "E-m:e-i64:64-n32:64";
} else
- DescriptionString = "E-i64:64-n32:64";
+ DescriptionString = "E-m:e-i64:64-n32:64";
// PPC64 supports atomics up to 8 bytes.
MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64;
@@ -1257,7 +1257,7 @@ public:
PtrDiffType = SignedInt; // for http://llvm.org/bugs/show_bug.cgi?id=15726
LongLongAlign = 32;
SuitableAlign = 128;
- DescriptionString = "E-p:32:32-f64:32:64-n32";
+ DescriptionString = "E-m:o-p:32:32-f64:32:64-n32";
}
virtual BuiltinVaListKind getBuiltinVaListKind() const {
return TargetInfo::CharPtrBuiltinVaList;
@@ -1271,7 +1271,7 @@ public:
: DarwinTargetInfo<PPC64TargetInfo>(Triple) {
HasAlignMac68kSupport = true;
SuitableAlign = 128;
- DescriptionString = "E-i64:64-n32:64";
+ DescriptionString = "E-m:o-i64:64-n32:64";
}
};
} // end anonymous namespace.
@@ -2917,7 +2917,7 @@ public:
LongDoubleWidth = 96;
LongDoubleAlign = 32;
SuitableAlign = 128;
- DescriptionString = "e-p:32:32-f64:32:64-f80:32-n8:16:32-S128";
+ DescriptionString = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128";
SizeType = UnsignedInt;
PtrDiffType = SignedInt;
IntPtrType = SignedInt;
@@ -3011,7 +3011,7 @@ public:
MaxVectorAlign = 256;
SizeType = UnsignedLong;
IntPtrType = SignedLong;
- DescriptionString = "e-p:32:32-f64:32:64-f80:128-n8:16:32-S128";
+ DescriptionString = "e-m:o-p:32:32-f64:32:64-f80:128-n8:16:32-S128";
HasAlignMac68kSupport = true;
}
@@ -3027,7 +3027,7 @@ public:
TLSSupported = false;
WCharType = UnsignedShort;
DoubleAlign = LongLongAlign = 64;
- DescriptionString = "e-p:32:32-i64:64-f80:32-n8:16:32-S32";
+ DescriptionString = "e-m:c-p:32:32-i64:64-f80:32-n8:16:32-S32";
}
virtual void getTargetDefines(const LangOptions &Opts,
MacroBuilder &Builder) const {
@@ -3094,7 +3094,7 @@ public:
TLSSupported = false;
WCharType = UnsignedShort;
DoubleAlign = LongLongAlign = 64;
- DescriptionString = "e-p:32:32-i64:64-f80:32-n8:16:32-S32";
+ DescriptionString = "e-m:c-p:32:32-i64:64-f80:32-n8:16:32-S32";
}
virtual void getTargetDefines(const LangOptions &Opts,
MacroBuilder &Builder) const {
@@ -3200,7 +3200,7 @@ public:
Int64Type = SignedLong;
RegParmMax = 6;
- DescriptionString = "e-i64:64-f80:128-n8:16:32:64-S128";
+ DescriptionString = "e-m:e-i64:64-f80:128-n8:16:32:64-S128";
// Use fpret only for long double.
RealTypeUsesObjCFPRet = (1 << TargetInfo::LongDouble);
@@ -3323,6 +3323,7 @@ public:
: DarwinTargetInfo<X86_64TargetInfo>(Triple) {
Int64Type = SignedLongLong;
MaxVectorAlign = 256;
+ DescriptionString = "e-m:o-i64:64-f80:128-n8:16:32:64-S128";
}
};
} // end anonymous namespace
@@ -3372,7 +3373,7 @@ public:
LongDoubleWidth = LongDoubleAlign = 128;
PointerWidth = PointerAlign = 64;
SuitableAlign = 128;
- DescriptionString = "e-i64:64-i128:128-n32:64-S128";
+ DescriptionString = "e-m:e-i64:64-i128:128-n32:64-S128";
WCharType = UnsignedInt;
LongDoubleFormat = &llvm::APFloat::IEEEquad;
@@ -3661,14 +3662,15 @@ class ARMTargetInfo : public TargetInfo {
IsAAPCS = true;
DoubleAlign = LongLongAlign = LongDoubleAlign = SuitableAlign = 64;
+ const llvm::Triple &T = getTriple();
// size_t is unsigned long on Darwin and netbsd.
- if (getTriple().isOSDarwin() || getTriple().getOS() == llvm::Triple::NetBSD)
+ if (T.isOSDarwin() || T.getOS() == llvm::Triple::NetBSD)
SizeType = UnsignedLong;
else
SizeType = UnsignedInt;
- if (getTriple().getOS() == llvm::Triple::NetBSD) {
+ if (T.getOS() == llvm::Triple::NetBSD) {
WCharType = SignedInt;
} else {
// AAPCS 7.1.1, ARM-Linux ABI 2.4: type of wchar_t is unsigned int.
@@ -3682,22 +3684,32 @@ class ARMTargetInfo : public TargetInfo {
if (IsThumb) {
// Thumb1 add sp, #imm requires the immediate value be multiple of 4,
// so set preferred for small types to 32.
- DescriptionString = "e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:64-"
- "v128:64:128-a:0:32-n32-S64";
+ if (T.isOSBinFormatMachO())
+ DescriptionString = "e-m:o-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:64-"
+ "v128:64:128-a:0:32-n32-S64";
+ else
+ DescriptionString = "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:64-"
+ "v128:64:128-a:0:32-n32-S64";
+
} else {
- DescriptionString = "e-p:32:32-i64:64-v128:64:128-n32-S64";
+ if (T.isOSBinFormatMachO())
+ DescriptionString = "e-m:o-p:32:32-i64:64-v128:64:128-n32-S64";
+ else
+ DescriptionString = "e-m:e-p:32:32-i64:64-v128:64:128-n32-S64";
}
// FIXME: Enumerated types are variable width in straight AAPCS.
}
void setABIAPCS() {
+ const llvm::Triple &T = getTriple();
+
IsAAPCS = false;
DoubleAlign = LongLongAlign = LongDoubleAlign = SuitableAlign = 32;
// size_t is unsigned int on FreeBSD.
- if (getTriple().getOS() == llvm::Triple::FreeBSD)
+ if (T.getOS() == llvm::Triple::FreeBSD)
SizeType = UnsignedInt;
else
SizeType = UnsignedLong;
@@ -3717,11 +3729,19 @@ class ARMTargetInfo : public TargetInfo {
if (IsThumb) {
// Thumb1 add sp, #imm requires the immediate value be multiple of 4,
// so set preferred for small types to 32.
- DescriptionString = "e-p:32:32-i1:8:32-i8:8:32-i16:16:32-f64:32:64"
- "-v64:32:64-v128:32:128-a:0:32-n32-S32";
+ if (T.isOSBinFormatMachO())
+ DescriptionString = "e-m:o-p:32:32-i1:8:32-i8:8:32-i16:16:32-f64:32:64"
+ "-v64:32:64-v128:32:128-a:0:32-n32-S32";
+ else
+ DescriptionString = "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-f64:32:64"
+ "-v64:32:64-v128:32:128-a:0:32-n32-S32";
} else {
- DescriptionString =
- "e-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32";
+ if (T.isOSBinFormatMachO())
+ DescriptionString =
+ "e-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32";
+ else
+ DescriptionString =
+ "e-m:e-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32";
}
// FIXME: Override "preferred align" for double and long long.
@@ -4225,7 +4245,7 @@ class HexagonTargetInfo : public TargetInfo {
public:
HexagonTargetInfo(const llvm::Triple &Triple) : TargetInfo(Triple) {
BigEndian = false;
- DescriptionString = "e-p:32:32-i1:32-i64:64-a:0-n32";
+ DescriptionString = "e-m:e-p:32:32-i1:32-i64:64-a:0-n32";
// {} in inline assembly are packet specifiers, not assembly variant
// specifiers.
@@ -4480,7 +4500,7 @@ void SparcTargetInfo::getGCCRegAliases(const GCCRegAlias *&Aliases,
class SparcV8TargetInfo : public SparcTargetInfo {
public:
SparcV8TargetInfo(const llvm::Triple &Triple) : SparcTargetInfo(Triple) {
- DescriptionString = "E-p:32:32-i64:64-f128:64-n32-S64";
+ DescriptionString = "E-m:e-p:32:32-i64:64-f128:64-n32-S64";
}
virtual void getTargetDefines(const LangOptions &Opts,
@@ -4495,7 +4515,7 @@ class SparcV9TargetInfo : public SparcTargetInfo {
public:
SparcV9TargetInfo(const llvm::Triple &Triple) : SparcTargetInfo(Triple) {
// FIXME: Support Sparc quad-precision long double?
- DescriptionString = "E-i64:64-n32:64-S128";
+ DescriptionString = "E-m:e-i64:64-n32:64-S128";
// This is an LP64 platform.
LongWidth = LongAlign = PointerWidth = PointerAlign = 64;
@@ -4561,8 +4581,7 @@ namespace {
LongDoubleAlign = 64;
LongDoubleFormat = &llvm::APFloat::IEEEquad;
MinGlobalAlign = 16;
- DescriptionString = "E-i1:8:16-i8:8:16-i64:64"
- "-f128:64-a:8:16-n32:64";
+ DescriptionString = "E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-a:8:16-n32:64";
MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64;
}
virtual void getTargetDefines(const LangOptions &Opts,
@@ -4670,7 +4689,7 @@ namespace {
IntPtrType = SignedInt;
PtrDiffType = SignedInt;
SigAtomicType = SignedLong;
- DescriptionString = "e-p:16:16-i32:16:32-n8:16";
+ DescriptionString = "e-m:e-p:16:16-i32:16:32-n8:16";
}
virtual void getTargetDefines(const LangOptions &Opts,
MacroBuilder &Builder) const {
@@ -5104,7 +5123,7 @@ public:
class Mips32EBTargetInfo : public Mips32TargetInfoBase {
virtual void setDescriptionString() {
- DescriptionString = "E-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64";
+ DescriptionString = "E-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64";
}
public:
@@ -5121,7 +5140,7 @@ public:
class Mips32ELTargetInfo : public Mips32TargetInfoBase {
virtual void setDescriptionString() {
- DescriptionString = "e-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64";
+ DescriptionString = "e-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64";
}
public:
@@ -5230,9 +5249,9 @@ public:
class Mips64EBTargetInfo : public Mips64TargetInfoBase {
virtual void setDescriptionString() {
if (ABI == "n32")
- DescriptionString = "E-p:32:32-i8:8:32-i16:16:32-i64:64-n32:64-S128";
+ DescriptionString = "E-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32:64-S128";
else
- DescriptionString = "E-i8:8:32-i16:16:32-i64:64-n32:64-S128";
+ DescriptionString = "E-m:m-i8:8:32-i16:16:32-i64:64-n32:64-S128";
}
@@ -5250,9 +5269,9 @@ public:
class Mips64ELTargetInfo : public Mips64TargetInfoBase {
virtual void setDescriptionString() {
if (ABI == "n32")
- DescriptionString = "e-p:32:32-i8:8:32-i16:16:32-i64:64-n32:64-S128";
+ DescriptionString = "e-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32:64-S128";
else
- DescriptionString = "e-i8:8:32-i16:16:32-i64:64-n32:64-S128";
+ DescriptionString = "e-m:m-i8:8:32-i16:16:32-i64:64-n32:64-S128";
}
public:
Mips64ELTargetInfo(const llvm::Triple &Triple)
@@ -5439,7 +5458,7 @@ public:
WCharType = UnsignedChar;
WIntType = UnsignedInt;
UseZeroLengthBitfieldAlignment = true;
- DescriptionString = "e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:32"
+ DescriptionString = "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:32"
"-f64:32-a:0:32-n32";
}
virtual void getTargetDefines(const LangOptions &Opts,
OpenPOWER on IntegriCloud