r206390 - [ARM64] Fix up predefines, including adding big endian support to Targets.cpp
James Molloy
james.molloy at arm.com
Wed Apr 16 08:06:20 PDT 2014
Author: jamesm
Date: Wed Apr 16 10:06:20 2014
New Revision: 206390
URL: http://llvm.org/viewvc/llvm-project?rev=206390&view=rev
Log:
[ARM64] Fix up predefines, including adding big endian support to Targets.cpp
Modified:
cfe/trunk/lib/Basic/Targets.cpp
cfe/trunk/test/Preprocessor/init.c
Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=206390&r1=206389&r2=206390&view=diff
==============================================================================
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Wed Apr 16 10:06:20 2014
@@ -4478,6 +4478,7 @@ public:
namespace {
class ARM64TargetInfo : public TargetInfo {
+ virtual void setDescriptionString() = 0;
static const TargetInfo::GCCRegAlias GCCRegAliases[];
static const char *const GCCRegNames[];
@@ -4488,7 +4489,6 @@ class ARM64TargetInfo : public TargetInf
public:
ARM64TargetInfo(const llvm::Triple &Triple)
: TargetInfo(Triple), ABI("aapcs") {
- BigEndian = false;
LongWidth = LongAlign = PointerWidth = PointerAlign = 64;
IntMaxType = SignedLong;
UIntMaxType = UnsignedLong;
@@ -4526,7 +4526,7 @@ public:
virtual bool setCPU(const std::string &Name) {
bool CPUKnown = llvm::StringSwitch<bool>(Name)
- .Case("arm64-generic", true)
+ .Case("generic", true)
.Case("cyclone", true)
.Default(false);
return CPUKnown;
@@ -4535,23 +4535,11 @@ public:
virtual void getTargetDefines(const LangOptions &Opts,
MacroBuilder &Builder) const {
// Target identification.
- Builder.defineMacro("__arm64");
- Builder.defineMacro("__arm64__");
Builder.defineMacro("__aarch64__");
- Builder.defineMacro("__ARM64_ARCH_8__");
- Builder.defineMacro("__AARCH64_SIMD__");
- Builder.defineMacro("__ARM_NEON__");
// Target properties.
Builder.defineMacro("_LP64");
Builder.defineMacro("__LP64__");
- Builder.defineMacro("__LITTLE_ENDIAN__");
-
- // Subtarget options.
- Builder.defineMacro("__REGISTER_PREFIX__", "");
-
- Builder.defineMacro("__aarch64__");
- Builder.defineMacro("__AARCH64EL__");
// ACLE predefines. Many can only have one possible value on v8 AArch64.
Builder.defineMacro("__ARM_ACLE", "200");
@@ -4587,9 +4575,6 @@ public:
Builder.defineMacro("__ARM_SIZEOF_MINIMAL_ENUM",
Opts.ShortEnums ? "1" : "4");
- if (BigEndian)
- Builder.defineMacro("__ARM_BIG_ENDIAN");
-
// FIXME: the target should support NEON as an optional extension, like
// the OSS AArch64.
Builder.defineMacro("__ARM_NEON");
@@ -4610,10 +4595,18 @@ public:
virtual bool hasFeature(StringRef Feature) const {
return llvm::StringSwitch<bool>(Feature)
.Case("arm64", true)
+ .Case("aarch64", true)
.Case("neon", true)
.Default(false);
}
+ bool handleTargetFeatures(std::vector<std::string> &Features,
+ DiagnosticsEngine &Diags) override {
+ setDescriptionString();
+
+ return true;
+ }
+
virtual bool isCLZForZeroUndef() const { return false; }
virtual BuiltinVaListKind getBuiltinVaListKind() const {
@@ -4741,13 +4734,65 @@ const Builtin::Info ARM64TargetInfo::Bui
{ #ID, TYPE, ATTRS, 0, ALL_LANGUAGES },
#include "clang/Basic/BuiltinsARM64.def"
};
+
+class ARM64leTargetInfo : public ARM64TargetInfo {
+ void setDescriptionString() override {
+ if (getTriple().isOSBinFormatMachO())
+ DescriptionString = "e-m:o-i64:64-i128:128-n32:64-S128";
+ else
+ DescriptionString = "e-m:e-i64:64-i128:128-n32:64-S128";
+ }
+
+public:
+ ARM64leTargetInfo(const llvm::Triple &Triple)
+ : ARM64TargetInfo(Triple) {
+ BigEndian = false;
+ }
+ void getTargetDefines(const LangOptions &Opts,
+ MacroBuilder &Builder) const override {
+ Builder.defineMacro("__AARCH64EL__");
+ ARM64TargetInfo::getTargetDefines(Opts, Builder);
+ }
+};
+
+class ARM64beTargetInfo : public ARM64TargetInfo {
+ void setDescriptionString() override {
+ assert(!getTriple().isOSBinFormatMachO());
+ DescriptionString = "E-m:e-i64:64-i128:128-n32:64-S128";
+ }
+
+public:
+ ARM64beTargetInfo(const llvm::Triple &Triple)
+ : ARM64TargetInfo(Triple) { }
+ void getTargetDefines(const LangOptions &Opts,
+ MacroBuilder &Builder) const override {
+ Builder.defineMacro("__AARCH64EB__");
+ Builder.defineMacro("__AARCH_BIG_ENDIAN");
+ Builder.defineMacro("__ARM_BIG_ENDIAN");
+ ARM64TargetInfo::getTargetDefines(Opts, Builder);
+ }
+};
} // end anonymous namespace.
namespace {
-class DarwinARM64TargetInfo : public DarwinTargetInfo<ARM64TargetInfo> {
+class DarwinARM64TargetInfo : public DarwinTargetInfo<ARM64leTargetInfo> {
+protected:
+ void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
+ MacroBuilder &Builder) const override {
+ Builder.defineMacro("__AARCH64_SIMD__");
+ Builder.defineMacro("__ARM64_ARCH_8__");
+ Builder.defineMacro("__ARM_NEON__");
+ Builder.defineMacro("__LITTLE_ENDIAN__");
+ Builder.defineMacro("__REGISTER_PREFIX__", "");
+ Builder.defineMacro("__arm64", "1");
+ Builder.defineMacro("__arm64__", "1");
+
+ getDarwinDefines(Builder, Opts, Triple, PlatformName, PlatformMinVersion);
+ }
+
public:
DarwinARM64TargetInfo(const llvm::Triple &Triple)
- : DarwinTargetInfo<ARM64TargetInfo>(Triple) {
+ : DarwinTargetInfo<ARM64leTargetInfo>(Triple) {
Int64Type = SignedLongLong;
WCharType = SignedInt;
UseSignedCharForObjCBool = false;
@@ -6089,9 +6134,21 @@ static TargetInfo *AllocateTarget(const
switch (os) {
case llvm::Triple::Linux:
- return new LinuxTargetInfo<ARM64TargetInfo>(Triple);
+ return new LinuxTargetInfo<ARM64leTargetInfo>(Triple);
+ case llvm::Triple::NetBSD:
+ return new NetBSDTargetInfo<ARM64leTargetInfo>(Triple);
+ default:
+ return new ARM64leTargetInfo(Triple);
+ }
+
+ case llvm::Triple::arm64_be:
+ switch (os) {
+ case llvm::Triple::Linux:
+ return new LinuxTargetInfo<ARM64beTargetInfo>(Triple);
+ case llvm::Triple::NetBSD:
+ return new NetBSDTargetInfo<ARM64beTargetInfo>(Triple);
default:
- return new ARM64TargetInfo(Triple);
+ return new ARM64beTargetInfo(Triple);
}
case llvm::Triple::xcore:
Modified: cfe/trunk/test/Preprocessor/init.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/init.c?rev=206390&r1=206389&r2=206390&view=diff
==============================================================================
--- cfe/trunk/test/Preprocessor/init.c (original)
+++ cfe/trunk/test/Preprocessor/init.c Wed Apr 16 10:06:20 2014
@@ -213,6 +213,7 @@
// Other definitions vary from platform to platform
// RUN: %clang_cc1 -E -dM -ffreestanding -triple=aarch64-none-none < /dev/null | FileCheck -check-prefix AARCH64 %s
+// RUN: %clang_cc1 -E -dM -ffreestanding -triple=arm64-none-none < /dev/null | FileCheck -check-prefix AARCH64 %s
//
// AARCH64:#define _LP64 1
// AARCH64-NOT:#define __AARCH64EB__ 1
@@ -315,6 +316,7 @@
// AARCH64:#define __aarch64__ 1
//
// RUN: %clang_cc1 -E -dM -ffreestanding -triple=aarch64_be-none-none < /dev/null | FileCheck -check-prefix AARCH64-BE %s
+// RUN: %clang_cc1 -E -dM -ffreestanding -triple=arm64_be-none-none < /dev/null | FileCheck -check-prefix AARCH64-BE %s
//
// AARCH64-BE:#define _LP64 1
// AARCH64-BE:#define __AARCH64EB__ 1
More information about the cfe-commits
mailing list