]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
aarch64: Add occmo flag for FEAT_OCCMO
authorEzra Sitorus <ezra.sitorus@arm.com>
Thu, 5 Jun 2025 14:27:15 +0000 (15:27 +0100)
committerAlice Carlotti <alice.carlotti@arm.com>
Thu, 19 Jun 2025 13:05:14 +0000 (14:05 +0100)
FEAT_OCCMO support was introduced, but the feature flags were missing.
This patch adds these flags, as well as splitting up the tests to test
occmo vs occmo+memtag operands.

gas/config/tc-aarch64.c
gas/doc/c-aarch64.texi
gas/testsuite/gas/aarch64/occmo-memtag.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/occmo-memtag.s [new file with mode: 0644]
gas/testsuite/gas/aarch64/occmo.d
gas/testsuite/gas/aarch64/occmo.s
include/opcode/aarch64.h
opcodes/aarch64-opc.c

index 42a3115102d36f140af9c21b7b6320cd7de898d1..b4bd1bcb4bb86f9511874a2400115893d4ccebd3 100644 (file)
@@ -10691,6 +10691,7 @@ static const struct aarch64_option_cpu_value_table aarch64_features[] = {
   {"rng",              AARCH64_FEATURE (RNG), AARCH64_NO_FEATURES},
   {"ssbs",             AARCH64_FEATURE (SSBS), AARCH64_NO_FEATURES},
   {"memtag",           AARCH64_FEATURE (MEMTAG), AARCH64_NO_FEATURES},
+  {"occmo",            AARCH64_FEATURE (OCCMO), AARCH64_NO_FEATURES},
   {"sve2",             AARCH64_FEATURE (SVE2), AARCH64_FEATURE (SVE)},
   {"sve2-sm4",         AARCH64_FEATURE (SVE2_SM4),
                        AARCH64_FEATURES (2, SVE2, SM4)},
index 1d5fac1adcd59a87e390b545be6ff917cf1597eb..a1075a29e6cc7a1ebdc4ad771515c4b2adea91dc 100644 (file)
@@ -233,6 +233,8 @@ automatically cause those extensions to be disabled.
  @tab Enable Armv8.5-A Memory Tagging Extensions.
 @item @code{mops} @tab
  @tab Enable Armv8.8-A memcpy and memset acceleration instructions
+@item @code{occmo} @tab
+ @tab Enable Outer Cacheable Cache Maintenance Operations.
 @item @code{pan} @tab
  @tab Enable Privileged Access Never support.
 @item @code{pauth} @tab
diff --git a/gas/testsuite/gas/aarch64/occmo-memtag.d b/gas/testsuite/gas/aarch64/occmo-memtag.d
new file mode 100644 (file)
index 0000000..0dbbab0
--- /dev/null
@@ -0,0 +1,13 @@
+#name: FEAT_OCCMO + MEMTAG Test
+#as: -march=armv8-a+occmo+memtag
+#objdump: -dr
+
+.*:     file format .*
+
+Disassembly of section .text:
+
+0+ <.*>:
+[^:]*: d50b7be0        dc      cgdvaoc, x0
+[^:]*: d50b7bff        dc      cgdvaoc, xzr
+[^:]*: d50b7fe0        dc      cigdvaoc, x0
+[^:]*: d50b7fff        dc      cigdvaoc, xzr
diff --git a/gas/testsuite/gas/aarch64/occmo-memtag.s b/gas/testsuite/gas/aarch64/occmo-memtag.s
new file mode 100644 (file)
index 0000000..2426dfb
--- /dev/null
@@ -0,0 +1,4 @@
+       dc      cgdvaoc, x0
+       dc      cgdvaoc, xzr
+       dc      cigdvaoc, x0
+       dc      cigdvaoc, xzr
index 388d8f4ca0ae41004976b21e98d7be9cfdfa727d..0ec68e85086cba88c64bcf3fb5018c6429b0822e 100644 (file)
@@ -1,5 +1,5 @@
 #name: FEAT_OCCMO Test
-#as: -march=armv9.5-a+memtag
+#as: -march=armv8-a+occmo
 #objdump: -dr
 
 .*:     file format .*
@@ -7,12 +7,7 @@
 Disassembly of section .text:
 
 0+ <.*>:
-
 [^:]*: d50b7b00        dc      cvaoc, x0
-[^:]*: d50b7b1e        dc      cvaoc, x30
-[^:]*: d50b7be0        dc      cgdvaoc, x0
-[^:]*: d50b7bfe        dc      cgdvaoc, x30
+[^:]*: d50b7b1f        dc      cvaoc, xzr
 [^:]*: d50b7f00        dc      civaoc, x0
-[^:]*: d50b7f1e        dc      civaoc, x30
-[^:]*: d50b7fe0        dc      cigdvaoc, x0
-[^:]*: d50b7ffe        dc      cigdvaoc, x30
+[^:]*: d50b7f1f        dc      civaoc, xzr
index 92cfaf006fcd1dcebc4dea080c9fe390ca9f1a39..750341d14deaf4f38185d9703c222b698c125eb8 100644 (file)
@@ -1,8 +1,4 @@
        dc      cvaoc, x0
-       dc      cvaoc, x30
-       dc      cgdvaoc, x0
-       dc      cgdvaoc, x30
+       dc      cvaoc, xzr
        dc      civaoc, x0
-       dc      civaoc, x30
-       dc      cigdvaoc, x0
-       dc      cigdvaoc, x30
+       dc      civaoc, xzr
index 3efd0b24db4a8364c54c9571af48245344be5552..1c7d6f1c1b75bc916a60d14bc67f69f707da2683 100644 (file)
@@ -137,6 +137,8 @@ enum aarch64_feature_bit {
   AARCH64_FEATURE_SSBS,
   /* Memory Tagging Extension.  */
   AARCH64_FEATURE_MEMTAG,
+  /* Outer Cacheable Cache Maintenance Operation.  */
+  AARCH64_FEATURE_OCCMO,
   /* Transactional Memory Extension.  */
   AARCH64_FEATURE_TME,
   /* XS memory attribute.  */
index e075214ea378a2c19a64077715dfad10877844e8..b31f663358a8e72de4eeb0ada2d78583fc49d0e9 100644 (file)
@@ -5216,8 +5216,8 @@ const aarch64_sys_ins_reg aarch64_sys_regs_dc[] =
     { "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) },
-    { "cvaoc",      CPENS (3, C7, C11, 0), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (V9_5A) },
-    { "cgdvaoc",    CPENS (3, C7, C11, 7), F_HASXT | F_ARCHEXT, AARCH64_FEATURES (2, V9_5A, MEMTAG) },
+    { "cvaoc",      CPENS (3, C7, C11, 0), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (OCCMO) },
+    { "cgdvaoc",    CPENS (3, C7, C11, 7), F_HASXT | F_ARCHEXT, AARCH64_FEATURES (2, OCCMO, MEMTAG) },
     { "csw",       CPENS (0, C7, C10, 2), F_HASXT, AARCH64_NO_FEATURES },
     { "cgsw",       CPENS (0, C7, C10, 4), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (MEMTAG) },
     { "cgdsw",     CPENS (0, C7, C10, 6), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (MEMTAG) },
@@ -5234,8 +5234,8 @@ const aarch64_sys_ins_reg aarch64_sys_regs_dc[] =
     { "cisw",       CPENS (0, C7, C14, 2), F_HASXT, AARCH64_NO_FEATURES },
     { "cigsw",      CPENS (0, C7, C14, 4), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (MEMTAG) },
     { "cigdsw",     CPENS (0, C7, C14, 6), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (MEMTAG) },
-    { "civaoc",     CPENS (3, C7, C15, 0), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (V9_5A) },
-    { "cigdvaoc",   CPENS (3, C7, C15, 7), F_HASXT | F_ARCHEXT, AARCH64_FEATURES (2, V9_5A, MEMTAG) },
+    { "civaoc",     CPENS (3, C7, C15, 0), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (OCCMO) },
+    { "cigdvaoc",   CPENS (3, C7, C15, 7), F_HASXT | F_ARCHEXT, AARCH64_FEATURES (2, OCCMO, MEMTAG) },
     { "cipae",      CPENS (4, C7, C14, 0), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (V8_7A) },
     { "cigdpae",    CPENS (4, C7, C14, 7), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (V8_7A) },
     { "cipapa",     CPENS (6, C7, C14, 1), F_HASXT, AARCH64_NO_FEATURES },