From 9bbb91e8e0a3a26fe2ff651a89011ca5a0b4794d Mon Sep 17 00:00:00 2001 From: Andrew Carlotti <andrew.carlotti@arm.com> Date: Thu, 1 Aug 2024 11:54:20 +0100 Subject: [PATCH] aarch64: Add new +fcma flag This includes +fcma as a dependency of +sve, and means that we can finally support fcma intrinsics on a64fx. Also add fcma to the Features list in several cpunative testcases that incorrectly included sve without fcma. gcc/ChangeLog: * config/aarch64/aarch64-arches.def (V8_3A): Add FCMA. * config/aarch64/aarch64-option-extensions.def (FCMA): New flag. (SVE): Add FCMA dependency. * config/aarch64/aarch64.h (TARGET_COMPLEX): Use new flag. * config/aarch64/arm_neon.h: Use new flag for fcma intrinsics. gcc/testsuite/ChangeLog: * gcc.target/aarch64/cpunative/info_15: Add fcma to Features. * gcc.target/aarch64/cpunative/info_16: Ditto. * gcc.target/aarch64/cpunative/info_17: Ditto. * gcc.target/aarch64/cpunative/info_8: Ditto. * gcc.target/aarch64/cpunative/info_9: Ditto. --- gcc/config/aarch64/aarch64-arches.def | 2 +- gcc/config/aarch64/aarch64-option-extensions.def | 4 +++- gcc/config/aarch64/aarch64.h | 2 +- gcc/config/aarch64/arm_neon.h | 2 +- gcc/testsuite/gcc.target/aarch64/cpunative/info_15 | 2 +- gcc/testsuite/gcc.target/aarch64/cpunative/info_16 | 2 +- gcc/testsuite/gcc.target/aarch64/cpunative/info_17 | 2 +- gcc/testsuite/gcc.target/aarch64/cpunative/info_8 | 2 +- gcc/testsuite/gcc.target/aarch64/cpunative/info_9 | 2 +- 9 files changed, 11 insertions(+), 9 deletions(-) diff --git a/gcc/config/aarch64/aarch64-arches.def b/gcc/config/aarch64/aarch64-arches.def index 62a7d9fd2442..d85b14be4c3f 100644 --- a/gcc/config/aarch64/aarch64-arches.def +++ b/gcc/config/aarch64/aarch64-arches.def @@ -33,7 +33,7 @@ AARCH64_ARCH("armv8-a", generic_armv8_a, V8A, 8, (SIMD)) AARCH64_ARCH("armv8.1-a", generic_armv8_a, V8_1A, 8, (V8A, LSE, CRC, RDMA)) AARCH64_ARCH("armv8.2-a", generic_armv8_a, V8_2A, 8, (V8_1A)) -AARCH64_ARCH("armv8.3-a", generic_armv8_a, V8_3A, 8, (V8_2A, PAUTH, RCPC)) +AARCH64_ARCH("armv8.3-a", generic_armv8_a, V8_3A, 8, (V8_2A, PAUTH, RCPC, FCMA)) AARCH64_ARCH("armv8.4-a", generic_armv8_a, V8_4A, 8, (V8_3A, F16FML, DOTPROD, FLAGM)) AARCH64_ARCH("armv8.5-a", generic_armv8_a, V8_5A, 8, (V8_4A, SB, SSBS, PREDRES)) AARCH64_ARCH("armv8.6-a", generic_armv8_a, V8_6A, 8, (V8_5A, I8MM, BF16)) diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def index 6a70a63afd0a..c41c4998c5cb 100644 --- a/gcc/config/aarch64/aarch64-option-extensions.def +++ b/gcc/config/aarch64/aarch64-option-extensions.def @@ -151,6 +151,8 @@ AARCH64_OPT_EXTENSION("fp16fml", F16FML, (), (F16), (), "asimdfhm") AARCH64_FMV_FEATURE("fp16fml", FP16FML, (F16FML)) +AARCH64_OPT_FMV_EXTENSION("fcma", FCMA, (SIMD), (), (), "fcma") + AARCH64_OPT_FMV_EXTENSION("rcpc", RCPC, (), (), (), "lrcpc") AARCH64_OPT_FMV_EXTENSION("rcpc3", RCPC3, (RCPC), (), (), "lrcpc3") @@ -163,7 +165,7 @@ AARCH64_OPT_FMV_EXTENSION("bf16", BF16, (FP), (SIMD), (), "bf16") AARCH64_FMV_FEATURE("rpres", RPRES, ()) -AARCH64_OPT_FMV_EXTENSION("sve", SVE, (SIMD, F16), (), (), "sve") +AARCH64_OPT_FMV_EXTENSION("sve", SVE, (SIMD, F16, FCMA), (), (), "sve") /* This specifically does not imply +sve. */ AARCH64_OPT_EXTENSION("sve-b16b16", SVE_B16B16, (), (), (), "sveb16b16") diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index 75ea2a6910ee..250edb7d426d 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -364,7 +364,7 @@ constexpr auto AARCH64_FL_DEFAULT_ISA_MODE ATTRIBUTE_UNUSED #define TARGET_JSCVT (TARGET_FLOAT && TARGET_ARMV8_3) /* Armv8.3-a Complex number extension to AdvSIMD extensions. */ -#define TARGET_COMPLEX (TARGET_SIMD && TARGET_ARMV8_3) +#define TARGET_COMPLEX AARCH64_HAVE_ISA (FCMA) /* Floating-point rounding instructions from Armv8.5-a. */ #define TARGET_FRINT (AARCH64_HAVE_ISA (V8_5A) && TARGET_FLOAT) diff --git a/gcc/config/aarch64/arm_neon.h b/gcc/config/aarch64/arm_neon.h index 20849b0b8a6d..da145adf6749 100644 --- a/gcc/config/aarch64/arm_neon.h +++ b/gcc/config/aarch64/arm_neon.h @@ -26975,7 +26975,7 @@ vbcaxq_s64 (int64x2_t __a, int64x2_t __b, int64x2_t __c) /* AdvSIMD Complex numbers intrinsics. */ #pragma GCC push_options -#pragma GCC target ("arch=armv8.3-a") +#pragma GCC target ("+nothing+fcma") #pragma GCC push_options #pragma GCC target ("+fp16") diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/info_15 b/gcc/testsuite/gcc.target/aarch64/cpunative/info_15 index 6b425ea20135..1a31a75d6b48 100644 --- a/gcc/testsuite/gcc.target/aarch64/cpunative/info_15 +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/info_15 @@ -1,6 +1,6 @@ processor : 0 BogoMIPS : 100.00 -Features : Lorem ipsum dolor sit ametd rebum expetendis per at Dolor lucilius referrentur ei mei virtute eruditi eum ne Iisque verter svesm4 asimd fp sve sve2 fphp asimdhp sm3 sm4 +Features : Lorem ipsum dolor sit ametd rebum expetendis per at Dolor lucilius referrentur ei mei virtute eruditi eum ne Iisque verter svesm4 asimd fp sve sve2 fphp asimdhp sm3 sm4 fcma CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x0 diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/info_16 b/gcc/testsuite/gcc.target/aarch64/cpunative/info_16 index 26f01c496248..cdff314be738 100644 --- a/gcc/testsuite/gcc.target/aarch64/cpunative/info_16 +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/info_16 @@ -1,6 +1,6 @@ processor : 0 BogoMIPS : 100.00 -Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 asimddp sve sve2 fphp asimdhp +Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 asimddp sve sve2 fphp asimdhp fcma CPU implementer : 0xfe CPU architecture: 8 CPU variant : 0x0 diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/info_17 b/gcc/testsuite/gcc.target/aarch64/cpunative/info_17 index 26f01c496248..cdff314be738 100644 --- a/gcc/testsuite/gcc.target/aarch64/cpunative/info_17 +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/info_17 @@ -1,6 +1,6 @@ processor : 0 BogoMIPS : 100.00 -Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 asimddp sve sve2 fphp asimdhp +Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 asimddp sve sve2 fphp asimdhp fcma CPU implementer : 0xfe CPU architecture: 8 CPU variant : 0x0 diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/info_8 b/gcc/testsuite/gcc.target/aarch64/cpunative/info_8 index 76da16c57b54..37a488946b16 100644 --- a/gcc/testsuite/gcc.target/aarch64/cpunative/info_8 +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/info_8 @@ -1,6 +1,6 @@ processor : 0 BogoMIPS : 100.00 -Features : asimd sve fp fphp asimdhp +Features : asimd sve fp fphp asimdhp fcma CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x0 diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/info_9 b/gcc/testsuite/gcc.target/aarch64/cpunative/info_9 index 14703dd1d0bf..171ba498feab 100644 --- a/gcc/testsuite/gcc.target/aarch64/cpunative/info_9 +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/info_9 @@ -1,6 +1,6 @@ processor : 0 BogoMIPS : 100.00 -Features : asimd fp svesm4 sve sve2 fphp asimdhp sm3 sm4 +Features : asimd fp svesm4 sve sve2 fphp asimdhp sm3 sm4 fcma CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x0 -- GitLab