Add a new flag -menable-sysreg-checking to restore previous behaviour.
This existing behaviour is quite inconsistent, so the gating will
probably be updated in the future. (In particular, many system
registers are currently gated with the architecture version they were
released with instead of the lower architecture version that they
actually require).
This patch retains the +d128 requirement for msrr/mrrs.
Co-Authored-By: Srinath Parvathaneni <srinath.parvathaneni@arm.com>
return TOLOWER (p[0]);
}
+/* By default, system register accesses are unguarded (apart from the
+ requirement of +d128 for mrrs/msrr). */
+static int sysreg_checking_p = 0;
+
/* Parse a system register or a PSTATE field name for an MSR/MRS instruction.
Returns the encoding for the option, or PARSE_FAIL.
}
else
{
- if (pstatefield_p && !aarch64_pstatefield_supported_p (cpu_variant, o))
+ if (pstatefield_p && sysreg_checking_p
+ && !aarch64_pstatefield_supported_p (cpu_variant, o))
as_bad (_("selected processor does not support PSTATE field "
"name '%s'"), buf);
- if (!pstatefield_p
+ if (!pstatefield_p && sysreg_checking_p
&& !aarch64_sys_ins_reg_supported_p (cpu_variant, o->name,
o->flags, &o->features))
as_bad (_("selected processor does not support system register "
NULL},
{"mno-verbose-error", N_("do not output verbose error messages"),
&verbose_error_p, 0, NULL},
+ {"menable-sysreg-checking",
+ N_("enable feature flag gating for system registers"),
+ &sysreg_checking_p, 1, NULL},
{NULL, NULL, NULL, 0, NULL}
};
@item -mno-verbose-error
This option disables verbose error messages in AArch64 gas.
+@cindex @code{-menable-sysreg-checking} command-line option, AArch64
+@item -menable-sysreg-checking
+This option enables error messages that are issued if an attempt is made to
+assemble a system register access which will not execute on the target
+architecture.
+
@end table
@c man end
-#as: -march=armv8-a+ras
+#as: -menable-sysreg-checking -march=armv8-a+ras
#objdump: -dr
.*: file format .*
-#as: -march=armv8.4-a+crypto+sm4+sha3
+#as: -menable-sysreg-checking -march=armv8.4-a+crypto+sm4+sha3
#source: armv8_4-a-registers-illegal.s
#error_output: armv8_4-a-registers-illegal.l
-#as: -march=armv8.4-a
+#as: -menable-sysreg-checking -march=armv8.4-a
#objdump: -dr
.*: file format .*
#name: RME_GPC3 System register
-#as: -march=armv9.5-a
+#as: -menable-sysreg-checking -march=armv9.5-a
#objdump: -dr
.*: file format .*
-#as: -march=armv8-a
+#as: -menable-sysreg-checking -march=armv8-a
#source: ite1.s
-#error_output: illegal-ite1-1.l
\ No newline at end of file
+#error_output: illegal-ite1-1.l
-#as: -march=armv8-a
+#as: -menable-sysreg-checking -march=armv8-a
#source: predres2.s
-#error_output: illegal-predres2-1.l
\ No newline at end of file
+#error_output: illegal-predres2-1.l
#name: Illegal Instructions
-#as: -mno-verbose-error
+#as: -menable-sysreg-checking -mno-verbose-error
#source: illegal.s
#error_output: illegal.l
-#as: -march=armv9.4-a+ite
+#as: -menable-sysreg-checking -march=armv9.4-a+ite
#objdump: -dr
.*: file format .*
#name: MEC unavailable for architecture below armv9.2-a
-#as: -march=armv9.1-a
+#as: -menable-sysreg-checking -march=armv9.1-a
#source: mec.s
#error_output: mec-arch-bad.l
#name: MEC System registers
-#as: -march=armv9.2-a
+#as: -menable-sysreg-checking -march=armv9.2-a
#objdump: -dr
.*: file format .*
-#as: -march=armv8.2-a+profile
+#as: -menable-sysreg-checking -march=armv8.2-a+profile
#objdump: -dr
.*: file format .*
#objdump: -dr
-#as: --defsym DIRECTIVE=1
+#as: -menable-sysreg-checking --defsym DIRECTIVE=1
#source: pan.s
.*: file format .*
#objdump: -dr
-#as: -march=armv8-a+pan
+#as: -menable-sysreg-checking -march=armv8-a+pan
.*: file format .*
#name: SME mode selection and state access instructions
-#as: -march=armv8-a+sme
+#as: -menable-sysreg-checking -march=armv8-a+sme
#objdump: -dr
.*: file format .*
-#as: -march=armv8-a --defsym ERROR2=1
+#as: -menable-sysreg-checking -march=armv8-a --defsym ERROR2=1
#source: ssbs.s
#error_output: ssbs-illegal2.l
#source: ssbs.s
#objdump: -dr
-#as: -march=armv8-a+ssbs --defsym SUCCESS=1
+#as: -menable-sysreg-checking -march=armv8-a+ssbs --defsym SUCCESS=1
.*: file format .*
#source: ssbs.s
#objdump: -dr
-#as: -march=armv8.5-a --defsym SUCCESS=1
+#as: -menable-sysreg-checking -march=armv8.5-a --defsym SUCCESS=1
.*: file format .*
-#as: -march=armv8.8-a
+#as: -menable-sysreg-checking -march=armv8.8-a
#objdump: -dr
.*: file format .*
#source: armv8_9-a-sysregs.s
-#as: -march=armv8.8-a -I$srcdir/$subdir --no-info
+#as: -menable-sysreg-checking -march=armv8.8-a -I$srcdir/$subdir --no-info
#error_output: armv8_9-a-sysregs-bad.l
#source: armv8_9-a-sysregs.s
-#as: -march=armv8.9-a -I$srcdir/$subdir
+#as: -menable-sysreg-checking -march=armv8.9-a -I$srcdir/$subdir
#objdump: -dr
.*: file format .*
#source: armv9_5-a-sysregs.s
-#as: -march=armv9.4-a -I$srcdir/$subdir
+#as: -menable-sysreg-checking -march=armv9.4-a -I$srcdir/$subdir
#error_output: armv9_5-a-sysregs-archv9_4-unsupported.l
#source: armv9_5-a-sysregs.s
-#as: -march=armv9.5-a -I$srcdir/$subdir
+#as: -menable-sysreg-checking -march=armv9.5-a -I$srcdir/$subdir
#objdump: -dr
.*: file format .*
#name: Test that fpmr register is gated and available via the fp8 feature
#source: fpmr.s
-#as: -march=armv9.2-a+fp8
+#as: -menable-sysreg-checking -march=armv9.2-a+fp8
#objdump: -dr
.*: file format .*
#name: Test that fpmr register is not supported by default
#source: fpmr.s
-#as: -march=armv9.2-a
+#as: -menable-sysreg-checking -march=armv9.2-a
#error_output: fpmr-unsupported-by-default.l
-#as: -march=armv8-a
+#as: -menable-sysreg-checking -march=armv8-a
#source: gcs-sysregs.s
#error_output: gcs-sysregs-bad.l
#name: Test of Guarded Control Stack system registers
-#as: -march=armv8.8-a+gcs
+#as: -menable-sysreg-checking -march=armv8.8-a+gcs
#objdump: -dr
.*: file format .*
#source: sysreg-3.s
-#as: -march=armv8-a -I$srcdir/$subdir --no-info
+#as: -menable-sysreg-checking -march=armv8-a -I$srcdir/$subdir --no-info
#error_output: illegal-sysreg-3.l
#source: sysreg-4.s
-#as: -march=armv8-a
+#as: -menable-sysreg-checking -march=armv8-a
#error_output: illegal-sysreg-4.l
-#as: -march=armv8-a
+#as: -menable-sysreg-checking -march=armv8-a
#error_output: illegal-sysreg-4b.l
-#as: -march=armv8.3-a
+#as: -menable-sysreg-checking -march=armv8.3-a
#source: sysreg-5.s
#error_output: illegal-sysreg-5.l
+#as: -menable-sysreg-checking
#source: illegal-sysreg-7.s
#error_output: illegal-sysreg-7.l
-#as: --no-info
+#as: -menable-sysreg-checking --no-info
#error_output: illegal-sysreg-8.l
-#as: --no-info
+#as: -menable-sysreg-checking --no-info
#warning_output: illegal-sysreg-8b.l
-#as: -march=armv9.3-a
+#as: -march=armv9.3-a -menable-sysreg-checking
#source: mpam-bad.s
#error_output: mpam-bad.l
#source: pops-sysregs-bad.s
-#as: -I$srcdir/$subdir
+#as: -menable-sysreg-checking -I$srcdir/$subdir
#error_output: pops-sysregs-bad.l
#source: pops-sysregs.s
-#as: -I$srcdir/$subdir
+#as: -menable-sysreg-checking -I$srcdir/$subdir
#objdump: -dr
[^:]+: file format .*
-#as: -march=armv8-a+sme
+#as: -menable-sysreg-checking -march=armv8-a+sme
#source: sme-sysreg-illegal.s
#warning_output: sme-sysreg-illegal.l
#name: SME extension (system registers)
-#as: -march=armv8-a+sme
+#as: -menable-sysreg-checking -march=armv8-a+sme
#objdump: -dr
.*: file format .*
-#as: -march=armv8-a+nosve
+#as: -menable-sysreg-checking -march=armv8-a+nosve
#source: sve-sysreg.s
#error_output: sve-sysreg-invalid.l
-#as: -march=armv8-a+sve
+#as: -menable-sysreg-checking -march=armv8-a+sve
#objdump: -dr
#source: sysreg-1.s
-#as: -I$srcdir/$subdir
+#as: -menable-sysreg-checking -I$srcdir/$subdir
#objdump: -dr
.*: file format .*
#source: sysreg-10.s
-#as: -march=armv8.7-a -I$srcdir/$subdir
+#as: -menable-sysreg-checking -march=armv8.7-a -I$srcdir/$subdir
#error_output: sysreg-10-bad.l
#source: sysreg-10.s
-#as: -march=armv8.8-a -I$srcdir/$subdir
+#as: -menable-sysreg-checking -march=armv8.8-a -I$srcdir/$subdir
#objdump: -dr
[^:]+: file format .*
#source: sysreg-2.s
-#as: -march=armv8.2-a+profile -I$srcdir/$subdir
+#as: -menable-sysreg-checking -march=armv8.2-a+profile -I$srcdir/$subdir
#objdump: -dr
.*: file .*
#source: sysreg-3.s
-#as: -march=armv8.3-a -I$srcdir/$subdir
+#as: -menable-sysreg-checking -march=armv8.3-a -I$srcdir/$subdir
#objdump: -dr
.*: file .*
#source: sysreg-4.s
-#as: -march=armv8.5-a+rng+memtag
+#as: -menable-sysreg-checking -march=armv8.5-a+rng+memtag
#objdump: -dr
.*: file format .*
#source: sysreg-6.s
-#as: -I$srcdir/$subdir
+#as: -menable-sysreg-checking -I$srcdir/$subdir
#objdump: -dr
.*: file format .*
#source: sysreg-7.s
-#as: -I$srcdir/$subdir
+#as: -menable-sysreg-checking -I$srcdir/$subdir
#objdump: -dr
.*: file format .*
#source: sysreg-8.s
-#as: -I$srcdir/$subdir
+#as: -menable-sysreg-checking -I$srcdir/$subdir
#objdump: -dr
.*
#source: sysreg-9-bad.s
-#as: -I$srcdir/$subdir
+#as: -menable-sysreg-checking -I$srcdir/$subdir
#error_output: sysreg-9-bad.l
#source: sysreg-9.s
-#as: -I$srcdir/$subdir
+#as: -menable-sysreg-checking -I$srcdir/$subdir
#objdump: -dr
#objdump: -dr -M notes
-#as: -march=armv8-a
+#as: -menable-sysreg-checking -march=armv8-a
#warning_output: sysreg-diagnostic.l
.*: file format .*
#source: sysreg.s
-#as: -I$srcdir/$subdir
+#as: -menable-sysreg-checking -I$srcdir/$subdir
#objdump: -dr
.*: file format .*
#source: sysreg128.s
-#as: -I$srcdir/$subdir
+#as: -menable-sysreg-checking -I$srcdir/$subdir
#objdump: -dr
.*
--- /dev/null
+#source: sysregs_with_no_restrictions.s
+#as: -menable-sysreg-checking -I$srcdir/$subdir
+#error_output: sysregs_with_no_restrictions-bad.l
--- /dev/null
+.*: Assembler messages:
+.*: Error: selected processor does not support system register name 'mpuir_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'afsr0_el12'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'afsr0_el12'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support PSTATE field name 'uao'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'uao'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'uao'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'apdakeyhi_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'apdakeyhi_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'amcfgr_el0'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'vsttbr_el2'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'vsttbr_el2'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'scxtnum_el0'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'scxtnum_el0'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'id_pfr2_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'amcg1idr_el0'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'hcrx_el2'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'hcrx_el2'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support PSTATE field name 'allint'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'allint'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'allint'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pfar_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pfar_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pir_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pir_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmecr_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmecr_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'hdfgrtr2_el2'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'hdfgrtr2_el2'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'mdselr_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'mdselr_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmicfiltr_el0'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmicfiltr_el0'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmsdsfr_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmsdsfr_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmuacr_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmuacr_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'por_el0'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'por_el0'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 's2pir_el2'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 's2pir_el2'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 's2por_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 's2por_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'sctlr2_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'sctlr2_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'spmaccessr_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'spmaccessr_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'tcr2_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'tcr2_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'amair2_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'amair2_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmccntsvr_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'vdisr_el3'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'vdisr_el3'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'spmzr_el0'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'spmzr_el0'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'mdstepop_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'mdstepop_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'gpcbw_el3'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'gpcbw_el3'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbmar_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbmar_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'erxgsr_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'fpmr'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'fpmr'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'id_aa64zfr0_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'lorc_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'lorc_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbidr_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'gcspr_el0'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'gcspr_el0'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'id_aa64smfr0_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'trcitecr_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'trcitecr_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'gcr_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'gcr_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'rndr'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support PSTATE field name 'pan'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pan'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pan'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support PSTATE field name 'ssbs'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'ssbs'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'ssbs'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'rcwmask_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'rcwmask_el1'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'ttbr1_el2'
+.*: Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'ttbr1_el2'
+.*: Info: macro invoked from here
--- /dev/null
+#as: -I$srcdir/$subdir
+#objdump: -dr
+
+[^:]+: file format .*
+
+
+[^:]+:
+
+[^:]+:
+.*: d5380080 mrs x0, mpuir_el1
+.*: d51d5100 msr afsr0_el12, x0
+.*: d53d5100 mrs x0, afsr0_el12
+.*: d5184280 msr uao, x0
+.*: d5384280 mrs x0, uao
+.*: d5182220 msr apdakeyhi_el1, x0
+.*: d5382220 mrs x0, apdakeyhi_el1
+.*: d53bd220 mrs x0, amcfgr_el0
+.*: d51c2600 msr vsttbr_el2, x0
+.*: d53c2600 mrs x0, vsttbr_el2
+.*: d51bd0e0 msr scxtnum_el0, x0
+.*: d53bd0e0 mrs x0, scxtnum_el0
+.*: d5380380 mrs x0, id_pfr2_el1
+.*: d53bd2c0 mrs x0, amcg1idr_el0
+.*: d51c1240 msr hcrx_el2, x0
+.*: d53c1240 mrs x0, hcrx_el2
+.*: d5184300 msr allint, x0
+.*: d5384300 mrs x0, allint
+.*: d51860a0 msr pfar_el1, x0
+.*: d53860a0 mrs x0, pfar_el1
+.*: d518a260 msr pir_el1, x0
+.*: d538a260 mrs x0, pir_el1
+.*: d5189ea0 msr pmecr_el1, x0
+.*: d5389ea0 mrs x0, pmecr_el1
+.*: d51c3100 msr hdfgrtr2_el2, x0
+.*: d53c3100 mrs x0, hdfgrtr2_el2
+.*: d5100440 msr mdselr_el1, x0
+.*: d5300440 mrs x0, mdselr_el1
+.*: d51b9600 msr pmicfiltr_el0, x0
+.*: d53b9600 mrs x0, pmicfiltr_el0
+.*: d5189a80 msr pmsdsfr_el1, x0
+.*: d5389a80 mrs x0, pmsdsfr_el1
+.*: d5189e80 msr pmuacr_el1, x0
+.*: d5389e80 mrs x0, pmuacr_el1
+.*: d51ba280 msr por_el0, x0
+.*: d53ba280 mrs x0, por_el0
+.*: d51ca2a0 msr s2pir_el2, x0
+.*: d53ca2a0 mrs x0, s2pir_el2
+.*: d518a2a0 msr s2por_el1, x0
+.*: d538a2a0 mrs x0, s2por_el1
+.*: d5181060 msr sctlr2_el1, x0
+.*: d5381060 mrs x0, sctlr2_el1
+.*: d5109d60 msr spmaccessr_el1, x0
+.*: d5309d60 mrs x0, spmaccessr_el1
+.*: d5182060 msr tcr2_el1, x0
+.*: d5382060 mrs x0, tcr2_el1
+.*: d518a320 msr amair2_el1, x0
+.*: d538a320 mrs x0, amair2_el1
+.*: d530ebe0 mrs x0, pmccntsvr_el1
+.*: d51ec120 msr vdisr_el3, x0
+.*: d53ec120 mrs x0, vdisr_el3
+.*: d5139c80 msr spmzr_el0, x0
+.*: d5339c80 mrs x0, spmzr_el0
+.*: d5100540 msr mdstepop_el1, x0
+.*: d5300540 mrs x0, mdstepop_el1
+.*: d51e21a0 msr gpcbw_el3, x0
+.*: d53e21a0 mrs x0, gpcbw_el3
+.*: d5189aa0 msr pmbmar_el1, x0
+.*: d5389aa0 mrs x0, pmbmar_el1
+.*: d5385340 mrs x0, erxgsr_el1
+.*: d51b4440 msr fpmr, x0
+.*: d53b4440 mrs x0, fpmr
+.*: d5380480 mrs x0, id_aa64zfr0_el1
+.*: d518a460 msr lorc_el1, x0
+.*: d538a460 mrs x0, lorc_el1
+.*: d5389ae0 mrs x0, pmbidr_el1
+.*: d51b2520 msr gcspr_el0, x0
+.*: d53b2520 mrs x0, gcspr_el0
+.*: d53804a0 mrs x0, id_aa64smfr0_el1
+.*: d5181260 msr trcitecr_el1, x0
+.*: d5381260 mrs x0, trcitecr_el1
+.*: d51810c0 msr gcr_el1, x0
+.*: d53810c0 mrs x0, gcr_el1
+.*: d53b2400 mrs x0, rndr
+.*: d518c120 msr disr_el1, x0
+.*: d538c120 mrs x0, disr_el1
+.*: d5184260 msr pan, x0
+.*: d5384260 mrs x0, pan
+.*: d51b42c0 msr ssbs, x0
+.*: d53b42c0 mrs x0, ssbs
+.*: d558d0c2 msrr rcwmask_el1, x2, x3
+.*: d578d0c2 mrrs x2, x3, rcwmask_el1
+.*: d55c2002 msrr ttbr0_el2, x2, x3
+.*: d57c2002 mrrs x2, x3, ttbr0_el2
+.*: d55c2022 msrr ttbr1_el2, x2, x3
+.*: d57c2022 mrrs x2, x3, ttbr1_el2
--- /dev/null
+ .include "sysreg-test-utils.inc"
+.text
+ rw_sys_reg mpuir_el1 w=0 // V8R
+ rw_sys_reg afsr0_el12 // V8_1A
+ rw_sys_reg uao // V8_2A
+ rw_sys_reg apdakeyhi_el1 // V8_3A
+ rw_sys_reg amcfgr_el0 w=0 // V8_4A
+ rw_sys_reg vsttbr_el2 // V8A && V8_4A
+ rw_sys_reg scxtnum_el0 // SCXTNUM
+ rw_sys_reg id_pfr2_el1 w=0 // ID_PFR2
+ rw_sys_reg amcg1idr_el0 w=0 // V8_6A
+ rw_sys_reg hcrx_el2 // V8_7A
+ rw_sys_reg allint // V8_8A
+
+ rw_sys_reg pfar_el1 // PFAR
+ rw_sys_reg pir_el1 // S1PIE
+ rw_sys_reg pmecr_el1 // SEBEP
+ rw_sys_reg hdfgrtr2_el2 // FGT2
+ rw_sys_reg mdselr_el1 // DEBUGv8p9
+ rw_sys_reg pmicfiltr_el0 // PMUv3_ICNTR
+ rw_sys_reg pmsdsfr_el1 // SPE_FDS
+ rw_sys_reg pmuacr_el1 // PMUv3p9
+ rw_sys_reg por_el0 // S1POE
+ rw_sys_reg s2pir_el2 // S2PIE
+ rw_sys_reg s2por_el1 // S2POE
+ rw_sys_reg sctlr2_el1 // SCTLR2
+ rw_sys_reg spmaccessr_el1 // SPMU
+ rw_sys_reg tcr2_el1 // TCR2
+ rw_sys_reg amair2_el1 // AIE
+ rw_sys_reg pmccntsvr_el1 w=0 // PMUv3_SS
+
+ rw_sys_reg vdisr_el3 // E3DES
+ rw_sys_reg spmzr_el0 // SPMU2
+ rw_sys_reg mdstepop_el1 // STEP2
+ rw_sys_reg gpcbw_el3 // V9_5A
+
+ rw_sys_reg pmbmar_el1 // PROFILE && V9_5A
+
+ rw_sys_reg erxgsr_el1 w=0 // RASv2
+ rw_sys_reg fpmr // FP8
+ rw_sys_reg id_aa64zfr0_el1 w=0 // SVE
+ rw_sys_reg lorc_el1 // LOR
+ rw_sys_reg pmbidr_el1 w=0 // PROFILE
+ rw_sys_reg gcspr_el0 // GCS
+ rw_sys_reg id_aa64smfr0_el1 w=0 // SME
+ rw_sys_reg trcitecr_el1 // ITE
+ rw_sys_reg gcr_el1 // MEMTAG
+ rw_sys_reg rndr w=0 // RNG
+ rw_sys_reg disr_el1 // RAS
+ rw_sys_reg pan // PAN
+ rw_sys_reg ssbs // SSBS
+
+ .arch_extension d128 // For the msrr and mrrs instructions.
+ rw_sys_reg_128 rcwmask_el1 xreg1=x2 xreg2=x3 // THE
+ rw_sys_reg_128 ttbr0_el2 xreg1=x2 xreg2=x3 // V8A
+ rw_sys_reg_128 ttbr1_el2 xreg1=x2 xreg2=x3 // V8A && V8_1A
--- /dev/null
+#as: -menable-sysreg-checking -I$srcdir/$subdir
+#objdump: -dr
+
+[^:]+: file format .*
+
+
+[^:]+:
+
+[^:]+:
+.*: d5380080 mrs x0, mpuir_el1
+.*: d51d5100 msr afsr0_el12, x0
+.*: d53d5100 mrs x0, afsr0_el12
+.*: d5184280 msr uao, x0
+.*: d5384280 mrs x0, uao
+.*: d5182220 msr apdakeyhi_el1, x0
+.*: d5382220 mrs x0, apdakeyhi_el1
+.*: d53bd220 mrs x0, amcfgr_el0
+.*: d51c2600 msr vsttbr_el2, x0
+.*: d53c2600 mrs x0, vsttbr_el2
+.*: d51bd0e0 msr scxtnum_el0, x0
+.*: d53bd0e0 mrs x0, scxtnum_el0
+.*: d5380380 mrs x0, id_pfr2_el1
+.*: d53bd2c0 mrs x0, amcg1idr_el0
+.*: d51c1240 msr hcrx_el2, x0
+.*: d53c1240 mrs x0, hcrx_el2
+.*: d5184300 msr allint, x0
+.*: d5384300 mrs x0, allint
+.*: d51860a0 msr pfar_el1, x0
+.*: d53860a0 mrs x0, pfar_el1
+.*: d518a260 msr pir_el1, x0
+.*: d538a260 mrs x0, pir_el1
+.*: d5189ea0 msr pmecr_el1, x0
+.*: d5389ea0 mrs x0, pmecr_el1
+.*: d51c3100 msr hdfgrtr2_el2, x0
+.*: d53c3100 mrs x0, hdfgrtr2_el2
+.*: d5100440 msr mdselr_el1, x0
+.*: d5300440 mrs x0, mdselr_el1
+.*: d51b9600 msr pmicfiltr_el0, x0
+.*: d53b9600 mrs x0, pmicfiltr_el0
+.*: d5189a80 msr pmsdsfr_el1, x0
+.*: d5389a80 mrs x0, pmsdsfr_el1
+.*: d5189e80 msr pmuacr_el1, x0
+.*: d5389e80 mrs x0, pmuacr_el1
+.*: d51ba280 msr por_el0, x0
+.*: d53ba280 mrs x0, por_el0
+.*: d51ca2a0 msr s2pir_el2, x0
+.*: d53ca2a0 mrs x0, s2pir_el2
+.*: d518a2a0 msr s2por_el1, x0
+.*: d538a2a0 mrs x0, s2por_el1
+.*: d5181060 msr sctlr2_el1, x0
+.*: d5381060 mrs x0, sctlr2_el1
+.*: d5109d60 msr spmaccessr_el1, x0
+.*: d5309d60 mrs x0, spmaccessr_el1
+.*: d5182060 msr tcr2_el1, x0
+.*: d5382060 mrs x0, tcr2_el1
+.*: d518a320 msr amair2_el1, x0
+.*: d538a320 mrs x0, amair2_el1
+.*: d530ebe0 mrs x0, pmccntsvr_el1
+.*: d51ec120 msr vdisr_el3, x0
+.*: d53ec120 mrs x0, vdisr_el3
+.*: d5139c80 msr spmzr_el0, x0
+.*: d5339c80 mrs x0, spmzr_el0
+.*: d5100540 msr mdstepop_el1, x0
+.*: d5300540 mrs x0, mdstepop_el1
+.*: d51e21a0 msr gpcbw_el3, x0
+.*: d53e21a0 mrs x0, gpcbw_el3
+.*: d5189aa0 msr pmbmar_el1, x0
+.*: d5389aa0 mrs x0, pmbmar_el1
+.*: d5385340 mrs x0, erxgsr_el1
+.*: d51b4440 msr fpmr, x0
+.*: d53b4440 mrs x0, fpmr
+.*: d5380480 mrs x0, id_aa64zfr0_el1
+.*: d518a460 msr lorc_el1, x0
+.*: d538a460 mrs x0, lorc_el1
+.*: d5389ae0 mrs x0, pmbidr_el1
+.*: d51b2520 msr gcspr_el0, x0
+.*: d53b2520 mrs x0, gcspr_el0
+.*: d53804a0 mrs x0, id_aa64smfr0_el1
+.*: d5181260 msr trcitecr_el1, x0
+.*: d5381260 mrs x0, trcitecr_el1
+.*: d51810c0 msr gcr_el1, x0
+.*: d53810c0 mrs x0, gcr_el1
+.*: d53b2400 mrs x0, rndr
+.*: d518c120 msr disr_el1, x0
+.*: d538c120 mrs x0, disr_el1
+.*: d5184260 msr pan, x0
+.*: d5384260 mrs x0, pan
+.*: d51b42c0 msr ssbs, x0
+.*: d53b42c0 mrs x0, ssbs
+.*: d558d0c2 msrr rcwmask_el1, x2, x3
+.*: d578d0c2 mrrs x2, x3, rcwmask_el1
+.*: d55c2002 msrr ttbr0_el2, x2, x3
+.*: d57c2002 mrrs x2, x3, ttbr0_el2
+.*: d55c2022 msrr ttbr1_el2, x2, x3
+.*: d57c2022 mrrs x2, x3, ttbr1_el2
--- /dev/null
+ .include "sysreg-test-utils.inc"
+.text
+ .arch armv8-r
+ rw_sys_reg mpuir_el1 w=0 // V8R
+
+ .arch armv8.1-a
+ rw_sys_reg afsr0_el12 // V8_1A
+
+ .arch armv8.2-a
+ rw_sys_reg uao // V8_2A
+
+ .arch armv8.3-a
+ rw_sys_reg apdakeyhi_el1 // V8_3A
+
+ .arch armv8.4-a
+ rw_sys_reg amcfgr_el0 w=0 // V8_4A
+ rw_sys_reg vsttbr_el2 // V8A && V8_4A
+
+ .arch armv8.5-a
+ rw_sys_reg scxtnum_el0 // SCXTNUM
+ rw_sys_reg id_pfr2_el1 w=0 // ID_PFR2
+
+ .arch armv8.6-a
+ rw_sys_reg amcg1idr_el0 w=0 // V8_6A
+
+ .arch armv8.7-a
+ rw_sys_reg hcrx_el2 // V8_7A
+
+ .arch armv8.8-a
+ rw_sys_reg allint // V8_8A
+
+ .arch armv8.9-a
+ rw_sys_reg pfar_el1 // PFAR
+ rw_sys_reg pir_el1 // S1PIE
+ rw_sys_reg pmecr_el1 // SEBEP
+ rw_sys_reg hdfgrtr2_el2 // FGT2
+ rw_sys_reg mdselr_el1 // DEBUGv8p9
+ rw_sys_reg pmicfiltr_el0 // PMUv3_ICNTR
+ rw_sys_reg pmsdsfr_el1 // SPE_FDS
+ rw_sys_reg pmuacr_el1 // PMUv3p9
+ rw_sys_reg por_el0 // S1POE
+ rw_sys_reg s2pir_el2 // S2PIE
+ rw_sys_reg s2por_el1 // S2POE
+ rw_sys_reg sctlr2_el1 // SCTLR2
+ rw_sys_reg spmaccessr_el1 // SPMU
+ rw_sys_reg tcr2_el1 // TCR2
+ rw_sys_reg amair2_el1 // AIE
+ rw_sys_reg pmccntsvr_el1 w=0 // PMUv3_SS
+
+ .arch armv9.5-a
+ rw_sys_reg vdisr_el3 // E3DES
+ rw_sys_reg spmzr_el0 // SPMU2
+ rw_sys_reg mdstepop_el1 // STEP2
+ rw_sys_reg gpcbw_el3 // V9_5A
+
+ .arch armv9.5-a+profile
+ rw_sys_reg pmbmar_el1 // PROFILE && V9_5A
+
+ .arch_extension rasv2
+ rw_sys_reg erxgsr_el1 w=0 // RASv2
+ .arch_extension fp8
+ rw_sys_reg fpmr // FP8
+ .arch_extension sve
+ rw_sys_reg id_aa64zfr0_el1 w=0 // SVE
+ .arch_extension lor
+ rw_sys_reg lorc_el1 // LOR
+ .arch_extension profile
+ rw_sys_reg pmbidr_el1 w=0 // PROFILE
+ .arch_extension gcs
+ rw_sys_reg gcspr_el0 // GCS
+ .arch_extension sme
+ rw_sys_reg id_aa64smfr0_el1 w=0 // SME
+ .arch_extension ite
+ rw_sys_reg trcitecr_el1 // ITE
+ .arch_extension memtag
+ rw_sys_reg gcr_el1 // MEMTAG
+ .arch_extension rng
+ rw_sys_reg rndr w=0 // RNG
+ .arch_extension ras
+ rw_sys_reg disr_el1 // RAS
+ .arch_extension pan
+ rw_sys_reg pan // PAN
+ .arch_extension ssbs
+ rw_sys_reg ssbs // SSBS
+
+ .arch_extension d128 // For the msrr and mrrs instructions.
+ .arch_extension the
+ rw_sys_reg_128 rcwmask_el1 xreg1=x2 xreg2=x3 // THE
+
+ .arch armv8-a+d128
+ rw_sys_reg_128 ttbr0_el2 xreg1=x2 xreg2=x3 // V8A
+ .arch armv8.1-a+d128
+ rw_sys_reg_128 ttbr1_el2 xreg1=x2 xreg2=x3 // V8A && V8_1A
#name: invalid system registers for Armv8-R AArch64
+#as: -menable-sysreg-checking
#source: v8-r-bad-sysregs.s
#error_output: v8-r-bad-sysregs.l
#name: check that Armv8-R system registers are rejected without -march=armv8-r
+#as: -menable-sysreg-checking
#source: v8-r-sysregs.s
#error_output: v8-r-sysregs-need-arch.l
#name: Exhaustive test of Armv8-R system registers
-#as: -march=armv8-r
+#as: -menable-sysreg-checking -march=armv8-r
#objdump: -dr -m aarch64:armv8-r
.*: file format .*
#objdump: -dr
-#as: --defsym DIRECTIVE=1
+#as: -menable-sysreg-checking --defsym DIRECTIVE=1
#source: uao.s
.*: file format .*
#objdump: -dr
-#as: -march=armv8.2-a
+#as: -menable-sysreg-checking -march=armv8.2-a
.*: file format .*
#objdump: -dr
-#as: --defsym DIRECTIVE=1
+#as: -menable-sysreg-checking --defsym DIRECTIVE=1
#source: virthostext.s
#objdump: -dr
-#as: -march=armv8.1-a
+#as: -menable-sysreg-checking -march=armv8.1-a
#source: virthostext.s