]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[AArch64][PATCH 2/2] Support ARMv8.2 DC CVAP instruction.
authorMatthew Wahab <matthew.wahab@arm.com>
Thu, 10 Dec 2015 16:38:44 +0000 (16:38 +0000)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Thu, 24 Aug 2017 12:46:29 +0000 (09:46 -0300)
ARMv8.2 adds the new system instruction DC CVAP. This patch adds support
for the instruction to binutils, enabled when -march=armv8.2-a is
selected.

gas/
2015-12-10  Matthew Wahab  <matthew.wahab@arm.com>

* config/tc-aarch64.c (parse_sys_ins_reg): Add check of
architectural support for system register.

gas/testsuite/
2015-12-10  Matthew Wahab  <matthew.wahab@arm.com>

* gas/aarch64/sysreg-2.d: Add tests for dc instruction.
* gas/aarch64/sysreg-2.s: Add uses of dc instruction.

include/opcode/
2015-12-10  Matthew Wahab  <matthew.wahab@arm.com>

* aarch64.h (aarch64_sys_ins_reg_supported_p): Declare.

opcodes/
2015-12-10  Matthew Wahab  <matthew.wahab@arm.com>

* aarch64-opc.c (aarch64_sys_regs_dc): Add "cvap".
(aarch64_sys_ins_reg_supported_p): New.

Change-Id: I3158b97d9bbee9644c2d0e2986db807412ef1053

gas/ChangeLog
gas/config/tc-aarch64.c
gas/testsuite/ChangeLog
gas/testsuite/gas/aarch64/sysreg-2.d
gas/testsuite/gas/aarch64/sysreg-2.s
include/opcode/ChangeLog
include/opcode/aarch64.h
opcodes/ChangeLog
opcodes/aarch64-opc.c

index d8adf95e94124ddd405820d56b360f144ca25dc4..fc4a7c219d00234a5343e05c6523ee4ff4b1ae08 100644 (file)
@@ -1,3 +1,8 @@
+2015-12-10  Matthew Wahab  <matthew.wahab@arm.com>
+
+       * config/tc-aarch64.c (parse_sys_ins_reg): Add check of
+       architectural support for system register.
+
 2015-12-10  Matthew Wahab  <matthew.wahab@arm.com>
 
        * doc/c-aarch64.texi (AArch64 Extensions): Update entry for crc.
index c52f441265a0994d907bf2ba92f7992696176b1a..788a0392e45c7bed7d9ea9f702d3ba49919411fd 100644 (file)
@@ -3389,6 +3389,10 @@ parse_sys_ins_reg (char **str, struct hash_control *sys_ins_regs)
   if (!o)
     return NULL;
 
+  if (!aarch64_sys_ins_reg_supported_p (cpu_variant, o))
+    as_bad (_("selected processor does not support system register "
+             "name '%s'"), buf);
+
   *str = q;
   return o;
 }
index 2eb0dc602125e6c8b26ec43473aa44a2e4058903..4579e1152a60319f4eb931e0e637dcd6e74c4d94 100644 (file)
@@ -1,3 +1,8 @@
+2015-12-10  Matthew Wahab  <matthew.wahab@arm.com>
+
+       * gas/aarch64/sysreg-2.d: Add tests for dc instruction.
+       * gas/aarch64/sysreg-2.s: Add uses of dc instruction.
+
 2015-12-10  Matthew Wahab  <matthew.wahab@arm.com>
 
        * gas/aarch64/uao-directive.d: New.
index 31b9f33eb023b690d83f185d82c14f0981ece910..dffe08f83e43526bb5fc59137cbbb878be1d6ce5 100644 (file)
@@ -27,3 +27,6 @@ Disassembly of section .text:
   [0-9a-f]+:   d518c125        msr     disr_el1, x5
   [0-9a-f]+:   d538c125        mrs     x5, disr_el1
   [0-9a-f]+:   d53cc125        mrs     x5, vdisr_el2
+  [0-9a-f]+:   d50b7a20        dc      cvac, x0
+  [0-9a-f]+:   d50b7b21        dc      cvau, x1
+  [0-9a-f]+:   d50b7c22        dc      cvap, x2
index 2a6b06c7879ecf2295eaa3d1ace013daf27ea8ad..62b3a5e8af316a8affb03eb79371ca7bad3a8e08 100644 (file)
@@ -30,3 +30,9 @@
        rw_sys_reg sys_reg=vsesr_el2 xreg=x5 r=1 w=0
        rw_sys_reg sys_reg=disr_el1 xreg=x5 r=1 w=1
        rw_sys_reg sys_reg=vdisr_el2 xreg=x5 r=1 w=0
+
+       /* DC CVAP.  */
+
+       dc cvac, x0
+       dc cvau, x1
+       dc cvap, x2
index 51919b40aefbfa865ac51f2541d32cc57e554374..61a2fb64a561be7b53670dea2e9546d9c2505c32 100644 (file)
@@ -1,3 +1,7 @@
+2015-12-10  Matthew Wahab  <matthew.wahab@arm.com>
+
+       * aarch64.h (aarch64_sys_ins_reg_supported_p): Declare.
+
 2015-12-10  Matthew Wahab  <matthew.wahab@arm.com>
 
        * aarch64.h (aarch64_sys_ins_reg): Replace has_xt with flags.
index 7024c3aaf70a65ffb2005f89a8dc3b26e6712f63..022d5827f3dde4afe993eb43e12a464e2c25711f 100644 (file)
@@ -672,6 +672,9 @@ typedef struct
 } aarch64_sys_ins_reg;
 
 extern bfd_boolean aarch64_sys_ins_reg_has_xt (const aarch64_sys_ins_reg *);
+extern bfd_boolean
+aarch64_sys_ins_reg_supported_p (const aarch64_feature_set,
+                                const aarch64_sys_ins_reg *);
 
 extern const aarch64_sys_ins_reg aarch64_sys_regs_ic [];
 extern const aarch64_sys_ins_reg aarch64_sys_regs_dc [];
index 5db471b0f3a3519ec1f8f634df3cd78149cd693f..f502bf398b1b64547ccb8df4f47bc139b2d9cd5e 100644 (file)
@@ -1,3 +1,8 @@
+2015-12-10  Matthew Wahab  <matthew.wahab@arm.com>
+
+       * aarch64-opc.c (aarch64_sys_regs_dc): Add "cvap".
+       (aarch64_sys_ins_reg_supported_p): New.
+
 2015-12-10  Matthew Wahab  <matthew.wahab@arm.com>
 
        * aarch64-dis.c (aarch64_ext_regrt_sysins): Replace use of has_xt
index 46c58df9f99a03bc9124c06f8a92caea536f98e3..6b672f3fd3edd394e3efe29921b6a6556005bda9 100644 (file)
@@ -3255,6 +3255,7 @@ const aarch64_sys_ins_reg aarch64_sys_regs_dc[] =
     { "cvac",       CPENS (3, C7, C10, 1), F_HASXT },
     { "csw",       CPENS (0, C7, C10, 2), F_HASXT },
     { "cvau",       CPENS (3, C7, C11, 1), F_HASXT },
+    { "cvap",       CPENS (3, C7, C12, 1), F_HASXT | F_ARCHEXT },
     { "civac",      CPENS (3, C7, C14, 1), F_HASXT },
     { "cisw",       CPENS (0, C7, C14, 2), F_HASXT },
     { 0,       CPENS(0,0,0,0), 0 }
@@ -3320,6 +3321,21 @@ aarch64_sys_ins_reg_has_xt (const aarch64_sys_ins_reg *sys_ins_reg)
   return (sys_ins_reg->flags & F_HASXT) != 0;
 }
 
+extern bfd_boolean
+aarch64_sys_ins_reg_supported_p (const aarch64_feature_set features,
+                                const aarch64_sys_ins_reg *reg)
+{
+  if (!(reg->flags & F_ARCHEXT))
+    return TRUE;
+
+  /* DC CVAP.  Values are from aarch64_sys_regs_dc.  */
+  if (reg->value == CPENS (3, C7, C12, 1)
+      && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_2))
+    return FALSE;
+
+  return TRUE;
+}
+
 #undef C0
 #undef C1
 #undef C2