[AArch64] Fix missing architecture checks for ARMv8.2 system registers.
authorMatthew Wahab <matthew.wahab@arm.com>
Thu, 14 Jan 2016 10:55:11 +0000 (10:55 +0000)
committerMatthew Wahab <matthew.wahab@arm.com>
Thu, 14 Jan 2016 10:55:11 +0000 (10:55 +0000)
Some of the RAS system registers added to binutils as part of the ARMv8.2
support are missing the feature checks to warn when they aren't
supported by the target.

This patch adds the missing feature checks with a test to check that
the correct warnings are given for all the ARMv8.2 system registers.

gas/
2016-01-14  Matthew Wahab  <matthew.wahab@arm.com>

* testsuite/gas/aarch64/illegal-sysreg-2.l: New.
* testsuite/gas/aarch64/illegal-sysreg-2.d: New.

opcodes/
2016-01-14  Matthew Wahab  <matthew.wahab@arm.com>

* aarch64-opc.c (aarch64_sys_reg_supported_p): Merge conditionals
testing for RAS support.  Add checks for erxfr_el1, erxctlr_el1,
erxtatus_el1 and erxaddr_el1.

Change-Id: I66b590ea49c1eb6b0e5c93e0dc2bc9c4e79a52fe

gas/ChangeLog
gas/testsuite/gas/aarch64/illegal-sysreg-2.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/illegal-sysreg-2.l [new file with mode: 0644]
opcodes/ChangeLog
opcodes/aarch64-opc.c

index a86a0717677dabd3af8c660db13dd6c93ec2b522..97f3a03c85ff2ae8fbf5484b273767f22bd9e072 100644 (file)
@@ -1,3 +1,8 @@
+2016-01-14  Matthew Wahab  <matthew.wahab@arm.com>
+
+       * testsuite/gas/aarch64/illegal-sysreg-2.l: New.
+       * testsuite/gas/aarch64/illegal-sysreg-2.d: New.
+
 2016-01-13  Maciej W. Rozycki  <macro@imgtec.com>
 
        * config/tc-nios2.c (output_movia): Preset `code' to 0.
diff --git a/gas/testsuite/gas/aarch64/illegal-sysreg-2.d b/gas/testsuite/gas/aarch64/illegal-sysreg-2.d
new file mode 100644 (file)
index 0000000..5306efb
--- /dev/null
@@ -0,0 +1,3 @@
+#as: -march=armv8-a
+#source: sysreg-2.s
+#error-output: illegal-sysreg-2.l
diff --git a/gas/testsuite/gas/aarch64/illegal-sysreg-2.l b/gas/testsuite/gas/aarch64/illegal-sysreg-2.l
new file mode 100644 (file)
index 0000000..f059611
--- /dev/null
@@ -0,0 +1,49 @@
+[^:]*: Assembler messages:
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'id_aa64mmfr2_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'erridr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'errselr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'errselr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'erxfr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'erxctlr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'erxctlr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'erxstatus_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'erxstatus_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'erxaddr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'erxaddr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'erxmisc0_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'erxmisc0_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'erxmisc1_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'erxmisc1_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'vsesr_el2'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'disr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'disr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'vdisr_el2'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'cvap'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 's1e1rp'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 's1e1wp'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmblimitr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmblimitr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmbptr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmbptr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmbsr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmbsr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmbidr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmbidr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmscr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmscr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmsicr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmsicr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmsirr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmsirr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmsfcr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmsfcr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmsevfr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmsevfr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmslatfr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmslatfr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmscr_el2'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmscr_el2'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmscr_el12'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmscr_el12'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmbidr_el1'
+[^:]*:[0-9]+: Error: selected processor does not support system register name 'pmsidr_el1'
index 333bac5a64cc509d585adcbdcb02007199d510ab..37e9a6e00354ce0a3b1ccd86dbc0f4ae29d22352 100644 (file)
@@ -1,3 +1,9 @@
+2016-01-14  Matthew Wahab  <matthew.wahab@arm.com>
+
+       * aarch64-opc.c (aarch64_sys_reg_supported_p): Merge conditionals
+       testing for RAS support.  Add checks for erxfr_el1, erxctlr_el1,
+       erxtatus_el1 and erxaddr_el1.
+
 2016-01-12  Matthew Wahab  <matthew.wahab@arm.com>
 
        * arm-dis.c (arm_opcodes): Add "esb".
index 83c4dbbdc703b6747489b444776b79df9a03c615..1cd5c1b55dfb34f53cef5e94503c9e0157c625e3 100644 (file)
@@ -3222,18 +3222,16 @@ aarch64_sys_reg_supported_p (const aarch64_feature_set features,
 
   /* RAS extension.  */
 
-  /* ERRIDR_EL1 and ERRSELR_EL1.  */
+  /* ERRIDR_EL1, ERRSELR_EL1, ERXFR_EL1, ERXCTLR_EL1, ERXSTATUS_EL, ERXADDR_EL1,
+     ERXMISC0_EL1 AND ERXMISC1_EL1.  */
   if ((reg->value == CPENC (3, 0, C5, C3, 0)
-       || reg->value == CPENC (3, 0, C5, C3, 1))
-      && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_RAS))
-    return FALSE;
-
-  /* ERXFR_EL1, ERXCTLR_EL1, ERXSTATUS_EL, ERXADDR_EL1, ERXMISC0_EL1 AND
-     ERXMISC1_EL1.  */
-  if ((reg->value == CPENC (3, 0, C5, C3, 0)
-       || reg->value == CPENC (3, 0, C5, C3 ,1)
+       || reg->value == CPENC (3, 0, C5, C3, 1)
        || reg->value == CPENC (3, 0, C5, C3, 2)
        || reg->value == CPENC (3, 0, C5, C3, 3)
+       || reg->value == CPENC (3, 0, C5, C4, 0)
+       || reg->value == CPENC (3, 0, C5, C4, 1)
+       || reg->value == CPENC (3, 0, C5, C4, 2)
+       || reg->value == CPENC (3, 0, C5, C4, 3)
        || reg->value == CPENC (3, 0, C5, C5, 0)
        || reg->value == CPENC (3, 0, C5, C5, 1))
       && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_RAS))