diff options
author | Kevin Qin <Kevin.Qin@arm.com> | 2014-06-11 01:42:16 +0000 |
---|---|---|
committer | Kevin Qin <Kevin.Qin@arm.com> | 2014-06-11 01:42:16 +0000 |
commit | 1441ef575a2635e6a6f53e7681f3d92e0573d238 (patch) | |
tree | 1c5fa541c111536fe0b4bd02bbd361b7c47d2f0b | |
parent | ba63908cfd473ef5afd32ec8f65f32d1e70ffcc5 (diff) | |
download | clang-1441ef575a2635e6a6f53e7681f3d92e0573d238.tar.gz clang-1441ef575a2635e6a6f53e7681f3d92e0573d238.tar.bz2 clang-1441ef575a2635e6a6f53e7681f3d92e0573d238.tar.xz |
[AArch64] Add default features for CPUs on AArch64 target.
For ARM target, we can use CRYPTO and CRC features if we select
cortex-a57 by '-mcpu', but for AArch64 target, it doesn't work
unless adding with '-mfpu=crypto-neon-fp-armv8'. To keep consistency
between front-end and back-end and get end-users more easier to use,
we'd better add default feature for CPUs on AArch64 target as well.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@210625 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Basic/Targets.cpp | 20 | ||||
-rw-r--r-- | test/Preprocessor/aarch64-target-features.c | 10 |
2 files changed, 30 insertions, 0 deletions
diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index e88cb9e728..e13d7a0a4f 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -4243,6 +4243,7 @@ class AArch64TargetInfo : public TargetInfo { NeonMode }; + std::string CPU; unsigned FPU; unsigned CRC; unsigned Crypto; @@ -4302,6 +4303,8 @@ public: .Cases("cortex-a53", "cortex-a57", true) .Case("cyclone", true) .Default(false); + if (CPUKnown) + CPU = Name; return CPUKnown; } @@ -4373,6 +4376,23 @@ public: (Feature == "neon" && FPU == NeonMode); } + void getDefaultFeatures(llvm::StringMap<bool> &Features) const override { + + if (CPU == "cyclone") { + Features["fp-armv8"] = true; + Features["neon"] = true; + Features["crypto"] = true; + Features["crc"] = true; + Features["zcm"] = true; + Features["zcz"] = true; + } else if (CPU == "cortex-a53" || CPU == "cortex-a57") { + Features["fp-armv8"] = true; + Features["neon"] = true; + Features["crypto"] = true; + Features["crc"] = true; + } +} + bool handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) override { FPU = FPUMode; diff --git a/test/Preprocessor/aarch64-target-features.c b/test/Preprocessor/aarch64-target-features.c index bd5e4d85da..4dc03e0313 100644 --- a/test/Preprocessor/aarch64-target-features.c +++ b/test/Preprocessor/aarch64-target-features.c @@ -49,3 +49,13 @@ // RUN: %clang -target arm64-none-linux-gnu -mfpu=neon -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-NEON %s // CHECK-NEON: __ARM_NEON 1 // CHECK-NEON: __ARM_NEON_FP 0xe + +// RUN: %clang -target aarch64-none-linux-gnu -mcpu=cortex-a53 -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-FEATURE %s +// RUN: %clang -target aarch64-none-linux-gnu -mcpu=cortex-a57 -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-FEATURE %s +// RUN: %clang -target aarch64-none-linux-gnu -mcpu=cyclone -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-FEATURE %s +// CHECK-FEATURE: __ARM_FEATURE_CRC32 1 +// CHECK-FEATURE: __ARM_FEATURE_CRYPTO 1 +// CHECK-FEATURE: __ARM_NEON 1 +// CHECK-FEATURE: __ARM_NEON_FP 0xe + + |