[binutils-gdb] aarch64: Fix fp8 feature dependencies

Andrew Carlotti acarlotti@sourceware.org
Fri Jan 31 15:18:54 GMT 2025


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=99b90c46110df304b9941dc1a2b38ec6a15774fc

commit 99b90c46110df304b9941dc1a2b38ec6a15774fc
Author: Andrew Carlotti <andrew.carlotti@arm.com>
Date:   Thu Jan 30 19:14:46 2025 +0000

    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.

Diff:
---
 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 =


More information about the Binutils-cvs mailing list