]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
aarch64: Add support for Armv9.5-A architecture
authorClaudio Bantaloukas <claudio.bantaloukas@arm.com>
Mon, 10 Jun 2024 13:18:52 +0000 (13:18 +0000)
committerRichard Earnshaw <rearnsha@arm.com>
Fri, 28 Jun 2024 13:52:30 +0000 (14:52 +0100)
The new -march=armv9.5-a flag enables access to the
mandatory cpa, lut and faminmax extensions.
Existing test cases for features are extended to verify they
work without additional flags.

13 files changed:
gas/NEWS
gas/config/tc-aarch64.c
gas/doc/c-aarch64.texi
gas/testsuite/gas/aarch64/advsimd-faminmax.d
gas/testsuite/gas/aarch64/advsimd-lut.d
gas/testsuite/gas/aarch64/armv9_5.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/armv9_5.s [new file with mode: 0644]
gas/testsuite/gas/aarch64/cpa-addsub.d
gas/testsuite/gas/aarch64/cpa-sve.d
gas/testsuite/gas/aarch64/sme2-faminmax.d
gas/testsuite/gas/aarch64/sve2-faminmax.d
gas/testsuite/gas/aarch64/sve2-lut.d
include/opcode/aarch64.h

index 332ad1e3bcc49274c32f5ebf077ac1059f956603..d0eb0f7d5ca8722f475f9160ff7ca6d56d15d605 100644 (file)
--- a/gas/NEWS
+++ b/gas/NEWS
@@ -1,5 +1,7 @@
 -*- text -*-
 
+* Add support for 'armv9.5-a' for -march in AArch64 GAS.
+
 * In x86 Intel syntax undue mnemonic suffixes are now warned about.  This is
   a first step towards rejecting their use where unjustified.
 
index 5d15ee9fc029e4ad211ecd7ce27aee6817824b86..42c03bd199e66048111ef981aa5352ddd6e48981 100644 (file)
@@ -10595,6 +10595,7 @@ static const struct aarch64_arch_option_table aarch64_archs[] = {
   {"armv9.2-a",        AARCH64_ARCH_FEATURES (V9_2A)},
   {"armv9.3-a",        AARCH64_ARCH_FEATURES (V9_3A)},
   {"armv9.4-a",        AARCH64_ARCH_FEATURES (V9_4A)},
+  {"armv9.5-a", AARCH64_ARCH_FEATURES (V9_5A)},
   {NULL, AARCH64_NO_FEATURES}
 };
 
index 157c7b2f8a08c56e14b941f2cc5e56c94fe682d2..212630477a1c766d5e983faedbdddd04075b2d6c 100644 (file)
@@ -116,7 +116,7 @@ following architecture names are recognized: @code{armv8-a},
 @code{armv8.1-a}, @code{armv8.2-a}, @code{armv8.3-a}, @code{armv8.4-a}
 @code{armv8.5-a}, @code{armv8.6-a}, @code{armv8.7-a}, @code{armv8.8-a},
 @code{armv8.9-a}, @code{armv8-r}, @code{armv9-a}, @code{armv9.1-a},
-@code{armv9.2-a}, @code{armv9.3-a} and @code{armv9.4-a}.
+@code{armv9.2-a}, @code{armv9.3-a}, @code{armv9.4-a} and @code{armv9.5-a}.
 
 If both @option{-mcpu} and @option{-march} are specified, the
 assembler will use the setting for @option{-mcpu}.  If neither are
@@ -334,6 +334,7 @@ automatically cause those extensions to be disabled.
 @item @code{armv9.2-a} @tab @code{armv9.1-a}, @code{armv8.7-a}
 @item @code{armv9.3-a} @tab @code{armv9.2-a}, @code{armv8.8-a}
 @item @code{armv9.4-a} @tab @code{armv9.3-a}, @code{armv8.9-a}
+@item @code{armv9.5-a} @tab @code{armv9.4-a}, @code{cpa}, @code{lut}, @code{faminmax}
 @item @code{armv8-r} @tab @code{armv8.4-a+nolor}
 @end multitable
 
index 96df2a7e2cf4a814946a271bb4776b1a79f1fc26..486e404e9af733e695a552ab01859d0d7128867b 100644 (file)
@@ -1,4 +1,5 @@
 #objdump: -dr
+#as: -march=armv9.5-a
 #as: -march=armv8-a+faminmax
 
 .*:     file format .*
@@ -57,4 +58,4 @@ Disassembly of section \.text:
 [^:]+: 6ee0dfe0        famin   v0.2d, v31.2d, v0.2d
 [^:]+: 6effdc00        famin   v0.2d, v0.2d, v31.2d
 [^:]+: 6ef0ddd2        famin   v18.2d, v14.2d, v16.2d
-[^:]+: 2ef3dc23        .inst   0x2ef3dc23 ; undefined
\ No newline at end of file
+[^:]+: 2ef3dc23        .inst   0x2ef3dc23 ; undefined
index 0240d0ded6da108a1b135ec61a93ce99f4b52286..f95c9c6cda16fccd48d14f735d999d821c90b602 100644 (file)
@@ -1,4 +1,5 @@
 #objdump: -dr
+#as: -march=armv9.5-a
 #as: -march=armv8-a+lut
 
 .*:     file format .*
diff --git a/gas/testsuite/gas/aarch64/armv9_5.d b/gas/testsuite/gas/aarch64/armv9_5.d
new file mode 100644 (file)
index 0000000..22a64a5
--- /dev/null
@@ -0,0 +1,10 @@
+#objdump: -dr
+
+.*:     file format .*
+
+Disassembly of section \.text:
+
+0+ <.*>:
+[^:]+: 9a002000        addpt   x0, x0, x0
+[^:]+: 0ec01c00        famax   v0.4h, v0.4h, v0.4h
+[^:]+: 4e801000        luti2   v0.16b, {v0.16b}, v0\[0\]
diff --git a/gas/testsuite/gas/aarch64/armv9_5.s b/gas/testsuite/gas/aarch64/armv9_5.s
new file mode 100644 (file)
index 0000000..a6a1174
--- /dev/null
@@ -0,0 +1,9 @@
+       .text
+
+       .arch   armv9.5-a
+       // CPA
+       addpt   x0, x0, x0
+       // FAMINMAX
+       famax   v0.4h, v0.4h, v0.4h
+       // LUT
+       luti2   v0.16b, { v0.16b }, v0[0]
index 73e9ea28604a7a94751334fdcbff2fe8ea50d969..9cc66d754c7912d637a8b3e83f2c2ac43470eaea 100644 (file)
@@ -1,4 +1,5 @@
 #name: Tests for CPA instructions ((M)ADDPT and (M)SUBPT).
+#as: -march=armv9.5-a
 #as: -march=armv8-a+cpa
 #objdump: -dr
 
index e2bf48a35bf8c44a68362b908bec607ec563b307..090504f40912ad76a4d9a7ae541083083aa1c290 100644 (file)
@@ -1,4 +1,5 @@
 #name: Tests for CPA+SVE instructions.
+#as: -march=armv9.5-a+sve
 #as: -march=armv8-a+sve+cpa
 #objdump: -dr
 
index 9a6d69e30d81c33954e1c1aaabd207aa79acb3bf..9eeb487b32dfa7249c558350bb461ae0ad19f212 100644 (file)
@@ -1,4 +1,5 @@
 #objdump: -dr
+#as: -march=armv9.5-a+sme2
 #as: -march=armv8-a+faminmax+sme2
 
 .*:     file format .*
index d85019ccd29f759310a330f17579ece0fc6cbae8..7a2743bacc96c811565b4d20c50b5ef68d3614a4 100644 (file)
@@ -1,4 +1,5 @@
 #objdump: -dr
+#as: -march=armv9.5-a+sve2
 #as: -march=armv8-a+faminmax+sve2
 
 .*:     file format .*
@@ -87,4 +88,4 @@ Disassembly of section \.text:
  138:  654f9ce5        famin   z5.h, p7/m, z5.h, z7.h
  13c:  04d13d05        movprfx z5.d, p7/m, z8.d
  140:  65cf9d25        famin   z5.d, p7/m, z5.d, z9.d
- 144:  650f9d25        .inst   0x650f9d25 ; undefined
\ No newline at end of file
+ 144:  650f9d25        .inst   0x650f9d25 ; undefined
index 7b39b17d35d80574d2d508dca2b9acd13aebb2ef..cdbc13ea1ce9108e6b76ac6a30938e758441b711 100644 (file)
@@ -1,4 +1,5 @@
 #objdump: -dr
+#as: -march=armv9.5-a+sve2
 #as: -march=armv8-a+lut+sve2
 
 .*:     file format .*
@@ -38,4 +39,4 @@ Disassembly of section \.text:
 [^:]+: 4520b7e0        luti4   z0.h, \{z31.h-z0.h\}, z0\[0\]
 [^:]+: 453fb400        luti4   z0.h, \{z0.h-z1.h\}, z31\[0\]
 [^:]+: 45e0b400        luti4   z0.h, \{z0.h-z1.h\}, z0\[3\]
-[^:]+: 45afb524        luti4   z4.h, \{z9.h-z10.h\}, z15\[2\]
\ No newline at end of file
+[^:]+: 45afb524        luti4   z4.h, \{z9.h-z10.h\}, z15\[2\]
index 61758c96285ebe4d86c57f172f485ba0e8b7790e..9daa911394f6e501458f79c0c8644a3e6f14626b 100644 (file)
@@ -269,6 +269,8 @@ enum aarch64_feature_bit {
   AARCH64_FEATURE_FP8DOT2_SVE,
   /* +sme-f16f16 or +sme-f8f16  */
   AARCH64_FEATURE_SME_F16F16_F8F16,
+  /* Armv9.5-A processors.  */
+  AARCH64_FEATURE_V9_5A,
   AARCH64_NUM_FEATURES
 };
 
@@ -361,6 +363,10 @@ enum aarch64_feature_bit {
 #define AARCH64_ARCH_V9_3A_FEATURES(X) AARCH64_ARCH_V8_8A_FEATURES (X)
 #define AARCH64_ARCH_V9_4A_FEATURES(X) (AARCH64_ARCH_V8_9A_FEATURES (X) \
                                         | AARCH64_FEATBIT (X, SVE2p1))
+#define AARCH64_ARCH_V9_5A_FEATURES(X) (AARCH64_FEATBIT (X, V9_5A)     \
+                                        | AARCH64_FEATBIT (X, CPA)     \
+                                        | AARCH64_FEATBIT (X, LUT)     \
+                                        | AARCH64_FEATBIT (X, FAMINMAX))
 
 /* Architectures are the sum of the base and extensions.  */
 #define AARCH64_ARCH_V8A(X)    (AARCH64_FEATBIT (X, V8) \
@@ -398,6 +404,8 @@ enum aarch64_feature_bit {
                                 | AARCH64_ARCH_V9_3A_FEATURES (X))
 #define AARCH64_ARCH_V9_4A(X)  (AARCH64_ARCH_V9_3A (X) \
                                 | AARCH64_ARCH_V9_4A_FEATURES (X))
+#define AARCH64_ARCH_V9_5A(X)  (AARCH64_ARCH_V9_4A (X) \
+                                | AARCH64_ARCH_V9_5A_FEATURES (X))
 
 #define AARCH64_ARCH_NONE(X)   0