]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
aarch64: Add FEAT_MPAMv2 system registers
authorEzra Sitorus <ezra.sitorus@arm.com>
Thu, 15 Jan 2026 16:16:15 +0000 (16:16 +0000)
committerezra.sitorus <ezra.sitorus@arm.com>
Fri, 16 Jan 2026 10:23:07 +0000 (10:23 +0000)
gas/config/tc-aarch64.c
gas/doc/c-aarch64.texi
gas/testsuite/gas/aarch64/sysreg/mpamv2-bad.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/sysreg/mpamv2-bad.l [new file with mode: 0644]
gas/testsuite/gas/aarch64/sysreg/mpamv2.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/sysreg/mpamv2.s [new file with mode: 0644]
include/opcode/aarch64.h
opcodes/aarch64-sys-regs.def

index 0460bc8aef04f8727d17cc70cb611cf3c6ed1558..d23c5039afcfe6b21caf36817fab436409d2f103 100644 (file)
@@ -10994,6 +10994,7 @@ static const struct aarch64_option_cpu_value_table aarch64_features[] = {
   {"f16f32mm",         AARCH64_FEATURE (F16F32MM), AARCH64_FEATURES (2, SIMD, F16)},
   {"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},
   {NULL,               AARCH64_NO_FEATURES, AARCH64_NO_FEATURES},
 };
 
index c4e217f9fc530928553141c9a478bceab687c05f..ddb4c610922510c3a30bbfeaa330442ed281470b 100644 (file)
@@ -261,6 +261,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{mpamv2} @tab
+ @tab Enable MPAMv2 system registers.
 @item @code{occmo} @tab
  @tab Enable Outer Cacheable Cache Maintenance Operations.
 @item @code{pan} @tab
diff --git a/gas/testsuite/gas/aarch64/sysreg/mpamv2-bad.d b/gas/testsuite/gas/aarch64/sysreg/mpamv2-bad.d
new file mode 100644 (file)
index 0000000..af47db7
--- /dev/null
@@ -0,0 +1,3 @@
+#as: -march=armv9.4-a -menable-sysreg-checking -I$srcdir/$subdir
+#source: mpamv2.s
+#error_output: mpamv2-bad.l
diff --git a/gas/testsuite/gas/aarch64/sysreg/mpamv2-bad.l b/gas/testsuite/gas/aarch64/sysreg/mpamv2-bad.l
new file mode 100644 (file)
index 0000000..a665bc1
--- /dev/null
@@ -0,0 +1,17 @@
+.*: Assembler messages:
+.*: Error: selected processor does not support system register name 'mpamctl_el1'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'mpamctl_el1'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'mpamctl_el12'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'mpamctl_el12'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'mpamctl_el2'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'mpamctl_el2'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'mpamctl_el3'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'mpamctl_el3'
+.*:  Info: macro invoked from here
diff --git a/gas/testsuite/gas/aarch64/sysreg/mpamv2.d b/gas/testsuite/gas/aarch64/sysreg/mpamv2.d
new file mode 100644 (file)
index 0000000..159f6a3
--- /dev/null
@@ -0,0 +1,16 @@
+#as: -menable-sysreg-checking -march=armv8-a+mpamv2 -I$srcdir/$subdir
+#objdump: -dr
+
+.*:     file format .*
+
+Disassembly of section \.text:
+
+0+ <.*>:
+.*:    d518a540        msr     mpamctl_el1, x0
+.*:    d538a540        mrs     x0, mpamctl_el1
+.*:    d51da540        msr     mpamctl_el12, x0
+.*:    d53da540        mrs     x0, mpamctl_el12
+.*:    d51ca540        msr     mpamctl_el2, x0
+.*:    d53ca540        mrs     x0, mpamctl_el2
+.*:    d51ea540        msr     mpamctl_el3, x0
+.*:    d53ea540        mrs     x0, mpamctl_el3
diff --git a/gas/testsuite/gas/aarch64/sysreg/mpamv2.s b/gas/testsuite/gas/aarch64/sysreg/mpamv2.s
new file mode 100644 (file)
index 0000000..4fda3e9
--- /dev/null
@@ -0,0 +1,6 @@
+.include "sysreg-test-utils.inc"
+
+       rw_sys_reg mpamctl_el1
+       rw_sys_reg mpamctl_el12
+       rw_sys_reg mpamctl_el2
+       rw_sys_reg mpamctl_el3
index b885a06f52640c44dd98227462e6fdf4f5ec6ad8..e12296fc71a1043cc651099cf156ec7a21277a8b 100644 (file)
@@ -283,6 +283,8 @@ enum aarch64_feature_bit {
   AARCH64_FEATURE_POE2,
   /* TEV instructions.  */
   AARCH64_FEATURE_TEV,
+  /* MPAMv2.  */
+  AARCH64_FEATURE_MPAMv2,
 
   /* Virtual features.  These are used to gate instructions that are enabled
      by either of two (or more) sets of command line flags.  */
index 818c2adbec7499dc50ed33b02ef3e04bcf2d06de..1c57598d52dce7e94f1a34ee193292ada3bcbf64 100644 (file)
   SYSREG ("mpambwcap_el2",     CPENC (3,4,10,5,6),     0,              AARCH64_FEATURE (V9_3A)) /* MPAM_PE_BW_CTRL */
   SYSREG ("mpambwidr_el1",     CPENC (3,0,10,4,5),     F_REG_READ,     AARCH64_FEATURE (V9_3A)) /* MPAM_PE_BW_CTRL */
   SYSREG ("mpambwsm_el1",      CPENC (3,0,10,5,7),     0,              AARCH64_FEATURES (2, SME, V9_3A)) /* SME && MPAM_PE_BW_CTRL */
+  SYSREG ("mpamctl_el1",       CPENC (3,0,10,5,2),     0,              AARCH64_FEATURE (MPAMv2))
+  SYSREG ("mpamctl_el12",      CPENC (3,5,10,5,2),     0,              AARCH64_FEATURE (MPAMv2))
+  SYSREG ("mpamctl_el2",       CPENC (3,4,10,5,2),     0,              AARCH64_FEATURE (MPAMv2))
+  SYSREG ("mpamctl_el3",       CPENC (3,6,10,5,2),     0,              AARCH64_FEATURE (MPAMv2))
   SYSREG ("mpamhcr_el2",       CPENC (3,4,10,4,0),     0,              AARCH64_FEATURE (V8_2A)) /* MPAM */
   SYSREG ("mpamidr_el1",       CPENC (3,0,10,4,4),     F_REG_READ,     AARCH64_FEATURE (V8_2A)) /* MPAM */
   SYSREG ("mpamsm_el1",                CPENC (3,0,10,5,3),     0,              AARCH64_FEATURES (2, SME, V8_2A)) /* SME && MPAM */