From 99b90c46110df304b9941dc1a2b38ec6a15774fc Mon Sep 17 00:00:00 2001 From: Andrew Carlotti Date: Thu, 30 Jan 2025 19:14:46 +0000 Subject: [PATCH] aarch64: Fix fp8 feature dependencies We agreed with LLVM that we shouldn't enforce the architectural dependencies between fp8 muliplication features, so remove them. Additionally, fix a typo in the gating for FEAT_SME_F8F16 instructions, which were mistakenly gated by +sme-f8f32 instead. Until now this mistake had been masked by the dependency between the features. --- gas/config/tc-aarch64.c | 10 +++++----- gas/doc/c-aarch64.texi | 16 ++++++++-------- gas/testsuite/gas/aarch64/fp8-mul-illegal.d | 2 +- gas/testsuite/gas/aarch64/fp8-sve-mul-illegal.d | 2 +- opcodes/aarch64-tbl.h | 2 +- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c index b79af4044ff..b40886dc08c 100644 --- a/gas/config/tc-aarch64.c +++ b/gas/config/tc-aarch64.c @@ -10751,18 +10751,18 @@ static const struct aarch64_option_cpu_value_table aarch64_features[] = { {"brbe", AARCH64_FEATURE (BRBE), AARCH64_NO_FEATURES}, {"sme-lutv2", AARCH64_FEATURE (SME_LUTv2), AARCH64_FEATURE (SME2)}, {"fp8fma", AARCH64_FEATURE (FP8FMA), AARCH64_FEATURE (FP8)}, - {"fp8dot4", AARCH64_FEATURE (FP8DOT4), AARCH64_FEATURE (FP8FMA)}, - {"fp8dot2", AARCH64_FEATURE (FP8DOT2), AARCH64_FEATURE (FP8DOT4)}, + {"fp8dot4", AARCH64_FEATURE (FP8DOT4), AARCH64_FEATURE (FP8)}, + {"fp8dot2", AARCH64_FEATURE (FP8DOT2), AARCH64_FEATURE (FP8)}, {"ssve-fp8fma", AARCH64_FEATURE (SSVE_FP8FMA), AARCH64_FEATURES (2, FP8, SME2)}, {"ssve-fp8dot4", AARCH64_FEATURE (SSVE_FP8DOT4), - AARCH64_FEATURE (SSVE_FP8FMA)}, + AARCH64_FEATURES (2, FP8, SME2)}, {"ssve-fp8dot2", AARCH64_FEATURE (SSVE_FP8DOT2), - AARCH64_FEATURE (SSVE_FP8DOT4)}, + AARCH64_FEATURES (2, FP8, SME2)}, {"sme-f8f32", AARCH64_FEATURE (SME_F8F32), AARCH64_FEATURES (2, FP8, SME2)}, {"sme-f8f16", AARCH64_FEATURE (SME_F8F16), - AARCH64_FEATURE (SME_F8F32)}, + AARCH64_FEATURES (2, FP8, SME2)}, {"sme-f16f16", AARCH64_FEATURE (SME_F16F16), AARCH64_FEATURE (SME2)}, {"sme-b16b16", AARCH64_FEATURE (SME_B16B16), AARCH64_FEATURES (2, SVE_B16B16, SME2)}, diff --git a/gas/doc/c-aarch64.texi b/gas/doc/c-aarch64.texi index 5d0aac8fe0a..1dbefde26de 100644 --- a/gas/doc/c-aarch64.texi +++ b/gas/doc/c-aarch64.texi @@ -195,9 +195,9 @@ automatically cause those extensions to be disabled. @tab Enable floating-point extensions. @item @code{fp8} @tab @tab Enable the Floating Point 8 (FP8) extension. -@item @code{fp8dot2} @tab @code{fp8dot4} +@item @code{fp8dot2} @tab @code{fp8} @tab Enable the FP8 2-way dot product instructions. -@item @code{fp8dot4} @tab @code{fp8fma} +@item @code{fp8dot4} @tab @code{fp8} @tab Enable the FP8 4-way dot product instructions. @item @code{fp8fma} @tab @code{fp8} @tab Enable the FP8 FMA instructions. @@ -271,7 +271,7 @@ automatically cause those extensions to be disabled. @tab Enable the Scalable Matrix Extension. @item @code{sme-b16b16} @tab @code{sme2}, @code{sve-b16b16} @tab Enable SME ZA-targeting non-widening BFloat16 instructions. -@item @code{sme-f8f16} @tab @code{sme-f8f32} +@item @code{sme-f8f16} @tab @code{sme2}, @code{fp8} @tab Enable the SME F8F16 Extension. @item @code{sme-f8f32} @tab @code{sme2}, @code{fp8} @tab Enable the SME F8F32 Extension. @@ -287,12 +287,12 @@ automatically cause those extensions to be disabled. @tab Enable SME2.1. @item @code{ssbs} @tab @tab Enable Speculative Store Bypassing Safe state read and write. -@item @code{ssve-fp8dot2} @tab @code{ssve-fp8dot4} - @tab Enable the Streaming SVE FP8 2-way dot product instructions. These can also be enabled using @code{+fp8dot2+sme2}. -@item @code{ssve-fp8dot4} @tab @code{ssve-fp8fma} - @tab Enable the Streaming SVE FP8 4-way dot product instructions. These can also be enabled using @code{+fp8dot4+sme2}. +@item @code{ssve-fp8dot2} @tab @code{sme2}, @code{fp8} + @tab Enable the Streaming SVE FP8 2-way dot product instructions. +@item @code{ssve-fp8dot4} @tab @code{sme2}, @code{fp8} + @tab Enable the Streaming SVE FP8 4-way dot product instructions. @item @code{ssve-fp8fma} @tab @code{sme2}, @code{fp8} - @tab Enable the Streaming SVE FP8 FMA instructions. These can also be enabled using @code{+fp8fma+sme2}. + @tab Enable the Streaming SVE FP8 FMA instructions. @item @code{sve} @tab @code{fcma} @tab Enable the Scalable Vector Extension. @item @code{sve-b16b16} @tab diff --git a/gas/testsuite/gas/aarch64/fp8-mul-illegal.d b/gas/testsuite/gas/aarch64/fp8-mul-illegal.d index 1dac59a5d82..2a2224b0b09 100644 --- a/gas/testsuite/gas/aarch64/fp8-mul-illegal.d +++ b/gas/testsuite/gas/aarch64/fp8-mul-illegal.d @@ -1,2 +1,2 @@ -#as: -march=armv8-a+fp8dot2 +#as: -march=armv8-a+fp8dot2+fp8dot4+fp8fma #error_output: fp8-mul-illegal.l diff --git a/gas/testsuite/gas/aarch64/fp8-sve-mul-illegal.d b/gas/testsuite/gas/aarch64/fp8-sve-mul-illegal.d index f1d98eec161..45dcca3c847 100644 --- a/gas/testsuite/gas/aarch64/fp8-sve-mul-illegal.d +++ b/gas/testsuite/gas/aarch64/fp8-sve-mul-illegal.d @@ -1,2 +1,2 @@ -#as: -march=armv8-a+sve2+fp8dot2 +#as: -march=armv8-a+sve2+fp8dot2+fp8dot4+fp8fma #error_output: fp8-sve-mul-illegal.l diff --git a/opcodes/aarch64-tbl.h b/opcodes/aarch64-tbl.h index 70cd3ffb6e0..0d42be3bef6 100644 --- a/opcodes/aarch64-tbl.h +++ b/opcodes/aarch64-tbl.h @@ -2858,7 +2858,7 @@ static const aarch64_feature_set aarch64_feature_fp8dot2_sve = static const aarch64_feature_set aarch64_feature_sme_f8f32 = AARCH64_FEATURES (2, SME_F8F32, SME2); static const aarch64_feature_set aarch64_feature_sme_f8f16 = - AARCH64_FEATURES (2, SME_F8F32, SME2); + AARCH64_FEATURES (2, SME_F8F16, SME2); static const aarch64_feature_set aarch64_feature_sme_f16f16_f8f16 = AARCH64_FEATURES (2, SME_F16F16_F8F16, SME2); static const aarch64_feature_set aarch64_feature_sme_f16f16 = -- 2.39.5