* gas/config/tc-arm.c (deprecated_coproc_regs_s): New structure.
authorMatthew Gretton-Dann <matthew.gretton-dann@arm.com>
Fri, 24 Aug 2012 07:54:45 +0000 (07:54 +0000)
committerMatthew Gretton-Dann <matthew.gretton-dann@arm.com>
Fri, 24 Aug 2012 07:54:45 +0000 (07:54 +0000)
(deprecated_coproc_regs): New variable.
(deprecated_coproc_reg_count): Likewise.
(do_co_reg): Error on obsolete & warn on deprecated registers.
* gas/testsuite/gas/arm/armv8-a-bad.l: Update testcase.
* gas/testsuite/gas/arm/armv8-a-bad.s: Likewise.

gas/ChangeLog
gas/config/tc-arm.c
gas/testsuite/ChangeLog
gas/testsuite/gas/arm/armv8-a-bad.l
gas/testsuite/gas/arm/armv8-a-bad.s

index 7148cb1937537e6d01a390e70c0c4a8a9ea57526..046e15ce4ec68b7d9575ab140c727cc14eeaa787 100644 (file)
@@ -1,3 +1,10 @@
+2012-08-24  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>
+
+       * config/tc-arm.c (deprecated_coproc_regs_s): New structure.
+       (deprecated_coproc_regs): New variable.
+       (deprecated_coproc_reg_count): Likewise.
+       (do_co_reg): Error on obsolete & warn on deprecated registers.
+
 2012-08-24  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>
 
        * config/tc-arm.c (check_obsolete): New function.
index af4a1e58ce272ddc2667d3efb2834084e8cfb72d..02e843d492aa52a413482fe68d2aaeb3085d78c4 100644 (file)
@@ -7710,10 +7710,52 @@ do_cmp (void)
 
    No special properties.  */
 
+struct deprecated_coproc_regs_s
+{
+  unsigned cp;
+  int opc1;
+  unsigned crn;
+  unsigned crm;
+  int opc2;
+  arm_feature_set deprecated;
+  arm_feature_set obsoleted;
+  const char *dep_msg;
+  const char *obs_msg;
+};
+
+#define DEPR_ACCESS_V8 \
+  N_("This coprocessor register access is deprecated in ARMv8")
+
+/* Table of all deprecated coprocessor registers.  */
+static struct deprecated_coproc_regs_s deprecated_coproc_regs[] =
+{
+    {15, 0, 7, 10, 5,                                  /* CP15DMB.  */
+     ARM_FEATURE (ARM_EXT_V8, 0), ARM_FEATURE (0, 0),
+     DEPR_ACCESS_V8, NULL},
+    {15, 0, 7, 10, 4,                                  /* CP15DSB.  */
+     ARM_FEATURE (ARM_EXT_V8, 0), ARM_FEATURE (0, 0),
+     DEPR_ACCESS_V8, NULL},
+    {15, 0, 7,  5, 4,                                  /* CP15ISB.  */
+     ARM_FEATURE (ARM_EXT_V8, 0), ARM_FEATURE (0, 0),
+     DEPR_ACCESS_V8, NULL},
+    {14, 6, 1,  0, 0,                                  /* TEEHBR.  */
+     ARM_FEATURE (ARM_EXT_V8, 0), ARM_FEATURE (0, 0),
+     DEPR_ACCESS_V8, NULL},
+    {14, 6, 0,  0, 0,                                  /* TEECR.  */
+     ARM_FEATURE (ARM_EXT_V8, 0), ARM_FEATURE (0, 0),
+     DEPR_ACCESS_V8, NULL},
+};
+
+#undef DEPR_ACCESS_V8
+
+static const size_t deprecated_coproc_reg_count =
+  sizeof (deprecated_coproc_regs) / sizeof (deprecated_coproc_regs[0]);
+
 static void
 do_co_reg (void)
 {
   unsigned Rd;
+  size_t i;
 
   Rd = inst.operands[2].reg;
   if (thumb_mode)
@@ -7733,6 +7775,23 @@ do_co_reg (void)
        constraint (Rd == REG_PC, BAD_PC);
     }
 
+    for (i = 0; i < deprecated_coproc_reg_count; ++i)
+      {
+       const struct deprecated_coproc_regs_s *r =
+         deprecated_coproc_regs + i;
+
+       if (inst.operands[0].reg == r->cp
+           && inst.operands[1].imm == r->opc1
+           && inst.operands[3].reg == r->crn
+           && inst.operands[4].reg == r->crm
+           && inst.operands[5].imm == r->opc2)
+         {
+           if (!check_obsolete (&r->obsoleted, r->obs_msg)
+               && warn_on_deprecated
+               && ARM_CPU_HAS_FEATURE (cpu_variant, r->deprecated))
+             as_warn ("%s", r->dep_msg);
+         }
+      }
 
   inst.instruction |= inst.operands[0].reg << 8;
   inst.instruction |= inst.operands[1].imm << 21;
index 6b8d34a0b228e0f25106cedd1d5b6712cbe9af05..1428e580c76644bebfd9ec7d1629c6bb882f02b5 100644 (file)
@@ -1,3 +1,8 @@
+2012-08-24  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>
+
+       * gas/arm/armv8-a-bad.l: Update testcase.
+       * gas/arm/armv8-a-bad.s: Likewise.
+
 2012-08-24  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>
 
        * gas/arm/armv8-a-bad.d: New testcase.
index 2c9a147760fff76803e33d86cc9b8eef00b08c95..cde1bba9a38d9cc72eb0430b68c1df571e5073d3 100644 (file)
@@ -1,2 +1,7 @@
 .*: Assembler messages:
 .*:7: Error: swp{b} use is obsoleted for ARMv8 and later
+.*:10: Warning: This coprocessor register access is deprecated in ARMv8
+.*:11: Warning: This coprocessor register access is deprecated in ARMv8
+.*:12: Warning: This coprocessor register access is deprecated in ARMv8
+.*:13: Warning: This coprocessor register access is deprecated in ARMv8
+.*:14: Warning: This coprocessor register access is deprecated in ARMv8
index a6d55c71f4a0a8a92aa2af507cc147313079583a..af08639fae8f39d9650aab10e6ad43194f37e968 100644 (file)
@@ -5,3 +5,10 @@
        // SWP
        .arm
        swp r0, r1, [r2]
+
+       // deprecated MCRs
+       mcr p15, 0, r0, c7, c5, 4
+       mcr p15, 0, r1, c7, c10, 4
+       mcr p15, 0, r2, c7, c10, 5
+       mrc p14, 6, r1, c0, c0, 0
+       mrc p14, 6, r0, c1, c0, 0
This page took 0.041738 seconds and 4 git commands to generate.