https://github.com/CarolineConcatto created https://github.com/llvm/llvm-project/pull/176755
This patch add the macros fopr Armv9.6 according to the ACLE[1] [1]https://github.com/ARM-software/acle/blob/main/main/acle.md >From ff2aee8548de4a5059188c096dfa712615f1f301 Mon Sep 17 00:00:00 2001 From: CarolineConcatto <[email protected]> Date: Mon, 19 Jan 2026 13:22:06 +0000 Subject: [PATCH] [Clang][AArch64] Add ACLE macros to support Armv9.6 This patch add the macros fopr Armv9.6 according to the ACLE[1] [1]https://github.com/ARM-software/acle/blob/main/main/acle.md --- clang/lib/Basic/Targets/AArch64.cpp | 54 +++++++++++++++++++ clang/lib/Basic/Targets/AArch64.h | 9 ++++ .../Preprocessor/aarch64-target-features.c | 43 +++++++++++++++ 3 files changed, 106 insertions(+) diff --git a/clang/lib/Basic/Targets/AArch64.cpp b/clang/lib/Basic/Targets/AArch64.cpp index fe407e9fc1789..d148705a36289 100644 --- a/clang/lib/Basic/Targets/AArch64.cpp +++ b/clang/lib/Basic/Targets/AArch64.cpp @@ -565,6 +565,33 @@ void AArch64TargetInfo::getTargetDefines(const LangOptions &Opts, else if (HasRCPC) Builder.defineMacro("__ARM_FEATURE_RCPC", "1"); + if (HasFPRCVT) + Builder.defineMacro("__ARM_FEATURE_FPRCVT", "1"); + + if (HasF8F16MM) + Builder.defineMacro("__ARM_FEATURE_F8F16MM", "1"); + + if (HasF8F32MM) + Builder.defineMacro("__ARM_FEATURE_F8F32MM", "1"); + + if (HasSVE_F16F32MM) + Builder.defineMacro("__ARM_FEATURE_SVE_F16F32MM", "1"); + + if (HasSVE_BFSCALE) + Builder.defineMacro("__ARM_FEATURE_SVE_BFSCALE", "1"); + + if (HasSVE_AES2) + Builder.defineMacro("__ARM_FEATURE_SVE_AES2", "1"); + + if (HasSSVE_AES) + Builder.defineMacro("__ARM_FEATURE_SSVE_AES", "1"); + + if (HasSVE2p2) + Builder.defineMacro("__ARM_FEATURE_SVE2p2", "1"); + + if (HasSME2p2) + Builder.defineMacro("__ARM_FEATURE_SME2p2", "1"); + if (HasFMV) Builder.defineMacro("__HAVE_FUNCTION_MULTI_VERSIONING", "1"); @@ -876,6 +903,15 @@ bool AArch64TargetInfo::hasFeature(StringRef Feature) const { .Case("ssve-fp8fma", HasSSVE_FP8FMA) .Case("sme-f8f32", HasSME_F8F32) .Case("sme-f8f16", HasSME_F8F16) + .Case("fprcvt", HasFPRCVT) + .Case("f8f16mm", HasF8F16MM) + .Case("f8f32mm", HasF8F32MM) + .Case("sve-f16f32mm", HasSVE_F16F32MM) + .Case("sve-bfscale", HasSVE_BFSCALE) + .Case("sve-aes2", HasSVE_AES2) + .Case("ssve-aes", HasSSVE_AES) + .Case("sve2p2", FPU & SveMode && HasSVE2p2) + .Case("sme2p2", HasSME2p2) .Default(false); } @@ -1105,6 +1141,24 @@ bool AArch64TargetInfo::handleTargetFeatures(std::vector<std::string> &Features, } if (Feature == "+strict-align") HasUnalignedAccess = false; + if (Feature == "+fprcvt") + HasFPRCVT = true; + if (Feature == "+f8f16mm") + HasF8F16MM = true; + if (Feature == "+f8f32mm") + HasF8F32MM = true; + if (Feature == "+sve-f16f32mm") + HasSVE_F16F32MM = true; + if (Feature == "+sve-bfscale") + HasSVE_BFSCALE = true; + if (Feature == "+sve-aes2") + HasSVE_AES2 = true; + if (Feature == "+ssve-aes") + HasSSVE_AES = true; + if (Feature == "+sve2p2") + HasSVE2p2 = true; + if (Feature == "+sme2p2") + HasSME2p2 = true; // All predecessor archs are added but select the latest one for ArchKind. if (Feature == "+v8a" && ArchInfo->Version < llvm::AArch64::ARMV8A.Version) diff --git a/clang/lib/Basic/Targets/AArch64.h b/clang/lib/Basic/Targets/AArch64.h index 2d3b8d2a8d950..581b161de046a 100644 --- a/clang/lib/Basic/Targets/AArch64.h +++ b/clang/lib/Basic/Targets/AArch64.h @@ -131,6 +131,15 @@ class LLVM_LIBRARY_VISIBILITY AArch64TargetInfo : public TargetInfo { bool HasRCPC3 = false; bool HasSMEFA64 = false; bool HasPAuthLR = false; + bool HasFPRCVT = false; + bool HasF8F16MM = false; + bool HasF8F32MM = false; + bool HasSVE_F16F32MM = false; + bool HasSVE_BFSCALE = false; + bool HasSVE_AES2 = false; + bool HasSSVE_AES = false; + bool HasSVE2p2 = false; + bool HasSME2p2 = false; const llvm::AArch64::ArchInfo *ArchInfo = &llvm::AArch64::ARMV8A; diff --git a/clang/test/Preprocessor/aarch64-target-features.c b/clang/test/Preprocessor/aarch64-target-features.c index 137840f6d2864..bce0f3077837c 100644 --- a/clang/test/Preprocessor/aarch64-target-features.c +++ b/clang/test/Preprocessor/aarch64-target-features.c @@ -790,3 +790,46 @@ // CHECK-SMEF8F16: __ARM_FEATURE_FP8 1 // CHECK-SMEF8F16: __ARM_FEATURE_SME2 1 // CHECK-SMEF8F16: __ARM_FEATURE_SME_F8F16 1 + +// RUN: %clang --target=aarch64 -march=armv9-a+fprcvt -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-FPRCVT %s +// CHECK-FPRCVT: __ARM_FEATURE_FPRCVT 1 + +// RUN: %clang --target=aarch64 -march=armv9-a+f8f16mm -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-F8F16MM %s +// CHECK-F8F16MM: __ARM_FEATURE_F8F16MM 1 +// CHECK-F8F16MM: __ARM_FEATURE_FP8 1 + +// RUN: %clang --target=aarch64 -march=armv9-a+f8f32mm -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-F8F32MM %s +// CHECK-F8F32MM: __ARM_FEATURE_F8F32MM 1 +// CHECK-F8F32MM: __ARM_FEATURE_FP8 1 + +// RUN: %clang --target=aarch64 -march=armv9-a+sve-f16f32mm -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-SVE-F16F32MM %s +// CHECK-SVE-F16F32MM: __ARM_FEATURE_SVE 1 +// CHECK-SVE-F16F32MM: __ARM_FEATURE_SVE_F16F32MM 1 + +// RUN: %clang --target=aarch64 -march=armv9-a+sve-bfscale -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-SVE-BFSCALE %s +// CHECK-SVE-BFSCALE: __ARM_FEATURE_SVE_BFSCALE 1 + +// RUN: %clang --target=aarch64 -march=armv9-a+sve-aes2 -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-SVE-AES2 %s +// CHECK-SVE-AES2: __ARM_FEATURE_SVE_AES2 1 + +// RUN: %clang --target=aarch64 -march=armv9-a+ssve-aes -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-SSVE-AES %s +// CHECK-SSVE-AES: __ARM_FEATURE_SME2 1 +// CHECK-SSVE-AES: __ARM_FEATURE_SSVE_AES +// CHECK-SSVE-AES: __ARM_FEATURE_SVE2_AES 1 + +// RUN: %clang -target aarch64-none-linux-gnu -march=armv9-a+sve2p2 -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-SVE2p2 %s +// CHECK-SVE2p2: __ARM_FEATURE_FP16_SCALAR_ARITHMETIC 1 +// CHECK-SVE2p2: __ARM_FEATURE_FP16_VECTOR_ARITHMETIC 1 +// CHECK-SVE2p2: __ARM_FEATURE_SVE2 1 +// CHECK-SVE2p2: __ARM_FEATURE_SVE2p1 1 +// CHECK-SVE2p2: __ARM_FEATURE_SVE2p2 1 +// CHECK-SVE2p2: __ARM_NEON 1 +// CHECK-SVE2p2: __ARM_NEON_FP 0xE +// CHECK-SVE2p2: __ARM_NEON_SVE_BRIDGE 1 +// +// RUN: %clang --target=aarch64 -march=armv9-a+sme2p2 -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-SME2p2 %s +// CHECK-SME2p2: __ARM_FEATURE_LOCALLY_STREAMING 1 +// CHECK-SME2p2: __ARM_FEATURE_SME 1 +// CHECK-SME2p2: __ARM_FEATURE_SME2 1 +// CHECK-SME2p2: __ARM_FEATURE_SME2p1 1 +// CHECK-SME2p2: __ARM_FEATURE_SME2p2 1 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
