[GAS][ARM]Generate unpredictable warning for pc used in data processing instructions with register-shifted register operand.

gas/

2016-10-19  Renlin Li  <renlin.li@arm.com>

	* config/tc-arm.c (encode_arm_shift): Generate unpredictable warning
	for register-shifted register instructions.
	* testsuite/gas/arm/shift-bad-pc.d: New.
	* testsuite/gas/arm/shift-bad-pc.l: New.
	* testsuite/gas/arm/shift-bad-pc.s: New.
This commit is contained in:
Renlin Li 2016-10-19 11:18:56 +01:00
parent bbb76b184f
commit 008a97eff0
5 changed files with 103 additions and 0 deletions

View File

@ -1,3 +1,11 @@
2016-10-19 Renlin Li <renlin.li@arm.com>
* config/tc-arm.c (encode_arm_shift): Generate unpredictable warning
for register-shifted register instructions.
* testsuite/gas/arm/shift-bad-pc.d: New.
* testsuite/gas/arm/shift-bad-pc.l: New.
* testsuite/gas/arm/shift-bad-pc.s: New.
2016-10-17 Cupertino Miranda <cmiranda@synopsys.com>
* testsuite/arc/dis-inv.d: Fixed matching.

View File

@ -7427,6 +7427,21 @@ encode_arm_vfp_reg (int reg, enum vfp_reg_pos pos)
static void
encode_arm_shift (int i)
{
/* register-shifted register. */
if (inst.operands[i].immisreg)
{
int index;
for (index = 0; index <= i; ++index)
{
gas_assert (inst.operands[index].present);
if (inst.operands[index].isreg && inst.operands[index].reg == REG_PC)
as_warn (UNPRED_REG ("r15"));
}
if (inst.operands[i].imm == REG_PC)
as_warn (UNPRED_REG ("r15"));
}
if (inst.operands[i].shift_kind == SHIFT_RRX)
inst.instruction |= SHIFT_ROR << 5;
else

View File

@ -0,0 +1,3 @@
# name: pc used in instructions with register-shifted register
# as:
# error-output: shift-bad-pc.l

View File

@ -0,0 +1,56 @@
.*shift-bad-pc.s: Assembler messages:
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:20: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:21: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:21: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:21: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:21: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:21: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:21: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:21: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:21: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:21: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:21: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:21: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:21: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:21: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:21: Warning: using r15 results in unpredictable behaviour
.*shift-bad-pc.s:21: Warning: using r15 results in unpredictable behaviour

View File

@ -0,0 +1,21 @@
.syntax unified
.macro insn4 rd rn rm rs
.irp insn, and, eor, sub, rsb, add, adc, sbc, rsc, orr, bic
\insn pc, \rn, \rm, lsr \rs
\insn \rd, pc, \rm, lsr \rs
\insn \rd, \rn, pc, lsr \rs
\insn \rd, \rn, \rm, lsr pc
.endr
.endm
.macro insn3 rn rm rs
.irp insn, tst, teq, cmp, cmn, mvn
\insn pc, \rm, lsr \rs
\insn \rn, pc, lsr \rs
\insn \rn, \rm, lsr pc
.endr
.endm
insn4 r0 r1 r2 r3
insn3 r0 r1 r2