gcc/ChangeLog: * config/aarch64/aarch64-arches.def (V8_5A): Add FRINTTS * config/aarch64/aarch64-option-extensions.def (FRINTTS): New flag. * config/aarch64/aarch64.h (TARGET_FRINT): Use new flag. * config/aarch64/arm_acle.h: Use new flag for frintts intrinsics. * config/aarch64/arm_neon.h: Ditto.
gcc/testsuite/ChangeLog: * gcc.target/aarch64/cpunative/native_cpu_21.c: Add frintts to expected feature string. * gcc.target/aarch64/cpunative/native_cpu_22.c: Ditto. diff --git a/gcc/config/aarch64/aarch64-arches.def b/gcc/config/aarch64/aarch64-arches.def index c93c5c39d69ee497f1da3dd398b0353a3f99be8c..668e7833bd81a7d8795df022f205ca7ca0d0ddef 100644 --- a/gcc/config/aarch64/aarch64-arches.def +++ b/gcc/config/aarch64/aarch64-arches.def @@ -35,7 +35,7 @@ AARCH64_ARCH("armv8.1-a", generic_armv8_a, V8_1A, 8, (V8A, LSE, CRC, 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, FCMA, JSCVT)) 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.5-a", generic_armv8_a, V8_5A, 8, (V8_4A, SB, SSBS, PREDRES, FRINTTS)) AARCH64_ARCH("armv8.6-a", generic_armv8_a, V8_6A, 8, (V8_5A, I8MM, BF16)) AARCH64_ARCH("armv8.7-a", generic_armv8_a, V8_7A, 8, (V8_6A)) AARCH64_ARCH("armv8.8-a", generic_armv8_a, V8_8A, 8, (V8_7A, MOPS)) diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def index c3663998c55b9ce4113dcce57bdea5980073d73c..505f1fb721c64e4b55b52baf465024a57c68ab98 100644 --- a/gcc/config/aarch64/aarch64-option-extensions.def +++ b/gcc/config/aarch64/aarch64-option-extensions.def @@ -159,6 +159,8 @@ AARCH64_OPT_FMV_EXTENSION("rcpc", RCPC, (), (), (), "lrcpc") AARCH64_OPT_FMV_EXTENSION("rcpc3", RCPC3, (RCPC), (), (), "lrcpc3") +AARCH64_OPT_FMV_EXTENSION("frintts", FRINTTS, (FP), (), (), "frint") + AARCH64_OPT_FMV_EXTENSION("i8mm", I8MM, (SIMD), (), (), "i8mm") /* An explicit +bf16 implies +simd, but +bf16+nosimd still enables scalar BF16 diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index 864f2d438479a74c9ada80577b37b2aa86085d02..41430466b50bf223bf008c753d24f57570c1f2e5 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -367,7 +367,7 @@ constexpr auto AARCH64_FL_DEFAULT_ISA_MODE ATTRIBUTE_UNUSED #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) +#define TARGET_FRINT AARCH64_HAVE_ISA (FRINTTS) /* TME instructions are enabled. */ #define TARGET_TME AARCH64_HAVE_ISA (TME) diff --git a/gcc/config/aarch64/arm_acle.h b/gcc/config/aarch64/arm_acle.h index 0f06bde6c50261208d03985b6614d1983b535efb..617f261e1ba24acc77527b42eacb5233410689b8 100644 --- a/gcc/config/aarch64/arm_acle.h +++ b/gcc/config/aarch64/arm_acle.h @@ -130,7 +130,7 @@ __jcvt (double __a) #pragma GCC pop_options #pragma GCC push_options -#pragma GCC target ("arch=armv8.5-a") +#pragma GCC target ("+nothing+frintts") __extension__ extern __inline float __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __rint32zf (float __a) diff --git a/gcc/config/aarch64/arm_neon.h b/gcc/config/aarch64/arm_neon.h index 0ab511a884126821ecae7d2fc7c1a3427bdfe5ac..2ffbffbac855ac2c47ad6416e7d2683c4ac2ab53 100644 --- a/gcc/config/aarch64/arm_neon.h +++ b/gcc/config/aarch64/arm_neon.h @@ -27678,7 +27678,7 @@ vfmlslq_laneq_high_f16 (float32x4_t __r, float16x8_t __a, float16x8_t __b, #pragma GCC pop_options #pragma GCC push_options -#pragma GCC target ("arch=armv8.5-a") +#pragma GCC target ("+nothing+simd+frintts") __extension__ extern __inline float32x2_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_21.c b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_21.c index 603ee48d584b8085755b577e09a6e7d6abbb5623..aa70d1d22b8299befcd81a696f051eb72997d548 100644 --- a/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_21.c +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_21.c @@ -7,7 +7,7 @@ int main() return 0; } -/* { dg-final { scan-assembler {\.arch armv8-a\+flagm\+lse\+dotprod\+rdma\+crc\+fp16fml\+jscvt\+rcpc\+i8mm\+bf16\+sve2-aes\+sve2-bitperm\+sve2-sha3\+sve2-sm4\+sb\+ssbs\n} } } */ +/* { dg-final { scan-assembler {\.arch armv8-a\+flagm\+lse\+dotprod\+rdma\+crc\+fp16fml\+jscvt\+rcpc\+frintts\+i8mm\+bf16\+sve2-aes\+sve2-bitperm\+sve2-sha3\+sve2-sm4\+sb\+ssbs\n} } } */ /* Check that an Armv8-A core doesn't fall apart on extensions without midr values. */ diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_22.c b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_22.c index e0ba97fb6e9a2969b8122ca0315ef73f16983045..ccd5d0d9bb7d7bf722bcffcc14c46d88d3223cf3 100644 --- a/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_22.c +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_22.c @@ -7,7 +7,7 @@ int main() return 0; } -/* { dg-final { scan-assembler {\.arch armv8-a\+flagm\+lse\+dotprod\+rdma\+crc\+fp16fml\+jscvt\+rcpc\+i8mm\+bf16\+sve2-aes\+sve2-bitperm\+sve2-sha3\+sve2-sm4\+sb\+ssbs\+pauth\n} } } */ +/* { dg-final { scan-assembler {\.arch armv8-a\+flagm\+lse\+dotprod\+rdma\+crc\+fp16fml\+jscvt\+rcpc\+frintts\+i8mm\+bf16\+sve2-aes\+sve2-bitperm\+sve2-sha3\+sve2-sm4\+sb\+ssbs\+pauth\n} } } */ /* Check that an Armv8-A core doesn't fall apart on extensions without midr values and that it enables optional features. */