From afd884718962dc65ce0237d33af3073c9a16104f Mon Sep 17 00:00:00 2001 From: Kevin Qin Date: Wed, 11 Jun 2014 01:42:16 +0000 Subject: [PATCH] [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. llvm-svn: 210625 --- clang/lib/Basic/Targets.cpp | 20 ++++++++++++++++++++ clang/test/Preprocessor/aarch64-target-features.c | 10 ++++++++++ 2 files changed, 30 insertions(+) diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index e88cb9e..e13d7a0 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/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 &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 &Features, DiagnosticsEngine &Diags) override { FPU = FPUMode; diff --git a/clang/test/Preprocessor/aarch64-target-features.c b/clang/test/Preprocessor/aarch64-target-features.c index bd5e4d8..4dc03e0 100644 --- a/clang/test/Preprocessor/aarch64-target-features.c +++ b/clang/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 + + -- 2.7.4