]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
aarch64: Add supports for FEAT_PoPS feature and DC instructions. master
authorSrinath Parvathaneni <srinath.parvathaneni@arm.com>
Wed, 25 Jun 2025 12:32:18 +0000 (13:32 +0100)
committerSrinath Parvathaneni <srinath.parvathaneni@arm.com>
Wed, 25 Jun 2025 12:34:59 +0000 (13:34 +0100)
This patch add support for FEAT_PoPS feature which can be enabled
through +pops command line flag.

This patch also adds support for following DC instructions and the
spec can be found here [1].
1. "dc cigdvaps" enabled on passing +memtag+pops command line flags.
2. "dc civaps" enabled on passing +pops command line flag.

[1]: https://developer.arm.com/documentation/ddi0601/2025-03/AArch64-Instructions?lang=en

gas/config/tc-aarch64.c
gas/doc/c-aarch64.texi
gas/testsuite/gas/aarch64/sysreg/pops-sysregs-bad.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/sysreg/pops-sysregs-bad.l [new file with mode: 0644]
gas/testsuite/gas/aarch64/sysreg/pops-sysregs-bad.s [new file with mode: 0644]
gas/testsuite/gas/aarch64/sysreg/pops-sysregs.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/sysreg/pops-sysregs.s [new file with mode: 0644]
include/opcode/aarch64.h
opcodes/aarch64-opc.c

index e569b85b0580be6c6686cb4d934f94374a378fe2..13649e8f3d508f61145f3d855af377a2d95e2168 100644 (file)
@@ -10796,6 +10796,7 @@ static const struct aarch64_option_cpu_value_table aarch64_features[] = {
   {"sme-f16f16",       AARCH64_FEATURE (SME_F16F16), AARCH64_FEATURE (SME2)},
   {"sme-b16b16",       AARCH64_FEATURE (SME_B16B16),
                        AARCH64_FEATURES (2, SVE_B16B16, SME2)},
+  {"pops",             AARCH64_FEATURE (PoPS), AARCH64_NO_FEATURES},
   {NULL,               AARCH64_NO_FEATURES, AARCH64_NO_FEATURES},
 };
 
index 0b68602c0a080ad0b9188ccd33f6e52c973ed53c..d7e9c95111dd960778e623d39935db7c492dfc9d 100644 (file)
@@ -247,6 +247,8 @@ automatically cause those extensions to be disabled.
  @tab Enable Privileged Access Never support.
 @item @code{pauth} @tab
  @tab Enable Pointer Authentication.
+@item @code{pops} @tab
+ @tab Enable Point of Physical Storage.
 @item @code{predres} @tab
  @tab Enable the Execution and Data and Prediction instructions.
 @item @code{predres2} @tab @code{predres}
diff --git a/gas/testsuite/gas/aarch64/sysreg/pops-sysregs-bad.d b/gas/testsuite/gas/aarch64/sysreg/pops-sysregs-bad.d
new file mode 100644 (file)
index 0000000..61a6b21
--- /dev/null
@@ -0,0 +1,3 @@
+#source: pops-sysregs-bad.s
+#as: -I$srcdir/$subdir
+#error_output: pops-sysregs-bad.l
diff --git a/gas/testsuite/gas/aarch64/sysreg/pops-sysregs-bad.l b/gas/testsuite/gas/aarch64/sysreg/pops-sysregs-bad.l
new file mode 100644 (file)
index 0000000..510bf3a
--- /dev/null
@@ -0,0 +1,8 @@
+.*: Assembler messages:
+.*: Error: selected processor does not support system register name 'cigdvaps'
+.*: Error: selected processor does not support system register name 'civaps'
+.*: Error: selected processor does not support system register name 'cigdvaps'
+.*: Error: selected processor does not support system register name 'civaps'
+.*: Error: selected processor does not support system register name 'cigdvaps'
+.*: Error: comma expected between operands at operand 2 -- `dc civaps'
+.*: Error: comma expected between operands at operand 2 -- `dc cigdvaps'
diff --git a/gas/testsuite/gas/aarch64/sysreg/pops-sysregs-bad.s b/gas/testsuite/gas/aarch64/sysreg/pops-sysregs-bad.s
new file mode 100644 (file)
index 0000000..2783272
--- /dev/null
@@ -0,0 +1,20 @@
+       .arch   armv8-a+memtag
+       dc cigdvaps, x19
+
+       .arch   armv8-a+memtag
+       dc civaps, x20
+
+       .arch   armv8-a+pops
+       dc cigdvaps, x21
+
+       .arch   armv8-a
+       dc civaps, x22
+
+       .arch   armv8-a
+       dc cigdvaps, x23
+
+       .arch   armv8-a+pops
+       dc civaps
+
+       .arch   armv8-a+memtag+pops
+       dc cigdvaps
diff --git a/gas/testsuite/gas/aarch64/sysreg/pops-sysregs.d b/gas/testsuite/gas/aarch64/sysreg/pops-sysregs.d
new file mode 100644 (file)
index 0000000..db04ab8
--- /dev/null
@@ -0,0 +1,12 @@
+#source: pops-sysregs.s
+#as: -I$srcdir/$subdir
+#objdump: -dr
+
+[^:]+:     file format .*
+
+
+[^:]+:
+
+[^:]+:
+.*:    d5087fb3        dc      cigdvaps, x19
+.*:    d5087f34        dc      civaps, x20
diff --git a/gas/testsuite/gas/aarch64/sysreg/pops-sysregs.s b/gas/testsuite/gas/aarch64/sysreg/pops-sysregs.s
new file mode 100644 (file)
index 0000000..7da4dc9
--- /dev/null
@@ -0,0 +1,7 @@
+       .arch   armv8-a+memtag+pops
+
+       dc cigdvaps, x19
+
+       .arch   armv8-a+pops
+
+       dc civaps, x20
index 2dc2f7df79a826c448cdc08e823b0f770551015f..7c1163dba57e716f4019761ecabbf9e92e95b483 100644 (file)
@@ -294,6 +294,8 @@ enum aarch64_feature_bit {
   AARCH64_FEATURE_V9_5A,
   /* FPRCVT instructions.  */
   AARCH64_FEATURE_FPRCVT,
+  /* Point of Physical Storage.  */
+  AARCH64_FEATURE_PoPS,
 
   /* Virtual features.  These are used to gate instructions that are enabled
      by either of two (or more) sets of command line flags.  */
index b2fd49771d5de1137c87138d8e84725dab7c6233..60facbfb05617c5a89295b7f1cf34509ff2554e3 100644 (file)
@@ -5216,6 +5216,8 @@ const aarch64_sys_ins_reg aarch64_sys_regs_dc[] =
     { "isw",       CPENS (0, C7, C6, 2),  F_HASXT, AARCH64_NO_FEATURES },
     { "igdvac",            CPENS (0, C7, C6, 5),  F_HASXT | F_ARCHEXT, AARCH64_FEATURE (MEMTAG) },
     { "igdsw",     CPENS (0, C7, C6, 6),  F_HASXT | F_ARCHEXT, AARCH64_FEATURE (MEMTAG) },
+    { "cigdvaps",   CPENS (0, C7, C15, 5), F_HASXT | F_ARCHEXT, AARCH64_FEATURES (2, MEMTAG, PoPS) },
+    { "civaps",     CPENS (0, C7, C15, 1), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (PoPS) },
     { "cvac",       CPENS (3, C7, C10, 1), F_HASXT, AARCH64_NO_FEATURES },
     { "cgvac",      CPENS (3, C7, C10, 3), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (MEMTAG) },
     { "cgdvac",     CPENS (3, C7, C10, 5), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (MEMTAG) },