[binutils-gdb] aarch64: Add support for FEAT_MTETC

Richard Ball ricbal02@sourceware.org
Fri Jan 16 22:17:11 GMT 2026


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

commit 7ae2329129bff991070da84f0b6f5c022f1f3f5d
Author: Richard Ball <Richard.Ball@arm.com>
Date:   Fri Jan 16 22:16:40 2026 +0000

    aarch64: Add support for FEAT_MTETC
    
    This patch adds two new DC operations:
    
       *gbva
       *zgbva

Diff:
---
 gas/config/tc-aarch64.c                   |  1 +
 gas/doc/c-aarch64.texi                    |  2 ++
 gas/testsuite/gas/aarch64/mtetc-invalid.d |  4 ++++
 gas/testsuite/gas/aarch64/mtetc-invalid.l |  5 +++++
 gas/testsuite/gas/aarch64/mtetc.d         | 12 ++++++++++++
 gas/testsuite/gas/aarch64/mtetc.s         |  4 ++++
 include/opcode/aarch64.h                  |  2 ++
 opcodes/aarch64-opc.c                     |  2 ++
 8 files changed, 32 insertions(+)

diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index 61bd81ca0b6..38c3cfda7f2 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -11011,6 +11011,7 @@ static const struct aarch64_option_cpu_value_table aarch64_features[] = {
   {"f16mm",		AARCH64_FEATURE (F16MM), AARCH64_FEATURES (2, SIMD, F16)},
   {"sve-b16mm",		AARCH64_FEATURE (SVE_B16MM), AARCH64_FEATURE (SVE)},
   {"mpamv2",		AARCH64_FEATURE (MPAMv2), AARCH64_NO_FEATURES},
+  {"mtetc",		AARCH64_FEATURE (MTETC), AARCH64_FEATURE (MEMTAG)},
   {NULL,		AARCH64_NO_FEATURES, AARCH64_NO_FEATURES},
 };
 
diff --git a/gas/doc/c-aarch64.texi b/gas/doc/c-aarch64.texi
index ddb4c610922..a56934653d6 100644
--- a/gas/doc/c-aarch64.texi
+++ b/gas/doc/c-aarch64.texi
@@ -259,6 +259,8 @@ automatically cause those extensions to be disabled.
  @tab Enable the Lookup Table (LUT) extension.
 @item @code{memtag} @tab
  @tab Enable Armv8.5-A Memory Tagging Extensions.
+@item @code{mtetc} @tab @code{memtag}
+ @tab Enable Data cache tag block operations.
 @item @code{mops} @tab
  @tab Enable Armv8.8-A memcpy and memset acceleration instructions
 @item @code{mpamv2} @tab
diff --git a/gas/testsuite/gas/aarch64/mtetc-invalid.d b/gas/testsuite/gas/aarch64/mtetc-invalid.d
new file mode 100644
index 00000000000..b40d9361bd8
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/mtetc-invalid.d
@@ -0,0 +1,4 @@
+#name: FEAT_MTETC dc instructions without +mtetc.
+#as: -march=armv8-a
+#source: mtetc.s
+#error_output: mtetc-invalid.l
diff --git a/gas/testsuite/gas/aarch64/mtetc-invalid.l b/gas/testsuite/gas/aarch64/mtetc-invalid.l
new file mode 100644
index 00000000000..51db697bcd3
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/mtetc-invalid.l
@@ -0,0 +1,5 @@
+.*: Assembler messages:
+.*: Error: selected processor does not support system register name 'gbva'
+.*: Error: selected processor does not support system register name 'gbva'
+.*: Error: selected processor does not support system register name 'zgbva'
+.*: Error: selected processor does not support system register name 'zgbva'
diff --git a/gas/testsuite/gas/aarch64/mtetc.d b/gas/testsuite/gas/aarch64/mtetc.d
new file mode 100644
index 00000000000..54b5cddde8b
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/mtetc.d
@@ -0,0 +1,12 @@
+#as: -march=armv8-a+mtetc
+#objdump: -dr
+
+[^:]+:     file format .*
+
+Disassembly of section \.text:
+
+[^:]+:
+.*:	d50b74e0 	dc	gbva, x0
+.*:	d50b74ff 	dc	gbva, xzr
+.*:	d50b74a0 	dc	zgbva, x0
+.*:	d50b74bf 	dc	zgbva, xzr
diff --git a/gas/testsuite/gas/aarch64/mtetc.s b/gas/testsuite/gas/aarch64/mtetc.s
new file mode 100644
index 00000000000..bbb942a6b8b
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/mtetc.s
@@ -0,0 +1,4 @@
+dc	gbva, x0
+dc	gbva, xzr
+dc	zgbva, x0
+dc	zgbva, xzr
diff --git a/include/opcode/aarch64.h b/include/opcode/aarch64.h
index 4a38953ea57..42ff6eff26d 100644
--- a/include/opcode/aarch64.h
+++ b/include/opcode/aarch64.h
@@ -285,6 +285,8 @@ enum aarch64_feature_bit {
   AARCH64_FEATURE_TEV,
   /* MPAMv2.  */
   AARCH64_FEATURE_MPAMv2,
+  /* MTETC.  */
+  AARCH64_FEATURE_MTETC,
 
   /* Virtual features.  These are used to gate instructions that are enabled
      by either of two (or more) sets of command line flags.  */
diff --git a/opcodes/aarch64-opc.c b/opcodes/aarch64-opc.c
index e3fbb4f5257..67b6e67dde8 100644
--- a/opcodes/aarch64-opc.c
+++ b/opcodes/aarch64-opc.c
@@ -5312,6 +5312,8 @@ const aarch64_sys_ins_reg aarch64_sys_regs_dc[] =
     { "zva",	    CPENS (3, C7, C4, 1),  F_HASXT, AARCH64_NO_FEATURES },
     { "gva",	    CPENS (3, C7, C4, 3),  F_HASXT, AARCH64_FEATURE (MEMTAG) },
     { "gzva",	    CPENS (3, C7, C4, 4),  F_HASXT, AARCH64_FEATURE (MEMTAG) },
+    { "zgbva",	    CPENS (3, C7, C4, 5),  F_HASXT, AARCH64_FEATURE (MTETC) },
+    { "gbva",	    CPENS (3, C7, C4, 7),  F_HASXT, AARCH64_FEATURE (MTETC) },
     { "ivac",       CPENS (0, C7, C6, 1),  F_HASXT, AARCH64_NO_FEATURES },
     { "igvac",      CPENS (0, C7, C6, 3),  F_HASXT, AARCH64_FEATURE (MEMTAG) },
     { "igsw",       CPENS (0, C7, C6, 4),  F_HASXT, AARCH64_FEATURE (MEMTAG) },


More information about the Binutils-cvs mailing list