* gas/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. * gas/testsuite/gas/arm/armv8-a-bad.l: Update testcase. * gas/testsuite/gas/arm/armv8-a-bad.s: Likewise.
This commit is contained in:
parent
59d09be6f5
commit
dcbd0d713c
@ -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.
|
||||
|
@ -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;
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user