2013-04-10  Jan Beulich <jbeulich@suse.com>

	* gas/config/tc-arm.c (parse_operands): Re-write
	po_barrier_or_imm().
	(do_barrier): Remove bogus constraint().
	(do_t_barrier): Remove.

gas/testsuite/
2013-04-10  Jan Beulich <jbeulich@suse.com>

	* gas/arm/barrier-bad.d: Change title.
	* gas/arm/barrier-bad.s: Add immediate form of ISB and DSB as
	well as one symbolic form of DSB.
	* gas/arm/barrier-bad.l: Update accordingly.
	* gas/arm/barrier-bad-thumb.d: Adjust title. Use barrier-bad.s as
	source. Pass -mthumb to gas.
	* gas/arm/barrier-bad-thumb.l: Remove.
	* gas/arm/barrier-bad-thumb.s: Remove.
	* gas/arm/barrier-thumb.d: Adjust title. Use barrier.s as source.
	Pass -mthumb to gas.
	* gas/arm/barrier-thumb.s: Remove.
This commit is contained in:
Jan Beulich 2013-04-10 13:18:33 +00:00
parent edb2fa9a96
commit ccb84d658f
11 changed files with 48 additions and 139 deletions

View File

@ -1,3 +1,10 @@
2013-04-10 Jan Beulich <jbeulich@suse.com>
* gas/config/tc-arm.c (parse_operands): Re-write
po_barrier_or_imm().
(do_barrier): Remove bogus constraint().
(do_t_barrier): Remove.
2013-04-09 Joerg Wunsch <joerg.wunsch@atmel.com>
* gas/config/tc-avr.c (mcu_types): Add ATmega64RFR2,

View File

@ -6338,22 +6338,16 @@ parse_operands (char *str, const unsigned int *pattern, bfd_boolean thumb)
do \
{ \
val = parse_barrier (&str); \
if (val == FAIL) \
if (val == FAIL && ! ISALPHA (*str)) \
goto immediate; \
if (val == FAIL \
/* ISB can only take SY as an option. */ \
|| ((inst.instruction & 0xf0) == 0x60 \
&& val != 0xf)) \
{ \
if (ISALPHA (*str)) \
goto failure; \
else \
goto immediate; \
} \
else \
{ \
if ((inst.instruction & 0xf0) == 0x60 \
&& val != 0xf) \
{ \
/* ISB can only take SY as an option. */ \
inst.error = _("invalid barrier type"); \
goto failure; \
} \
inst.error = _("invalid barrier type"); \
backtrack_pos = 0; \
goto failure; \
} \
} \
while (0)
@ -7541,13 +7535,7 @@ static void
do_barrier (void)
{
if (inst.operands[0].present)
{
constraint ((inst.instruction & 0xf0) != 0x40
&& inst.operands[0].imm > 0xf
&& inst.operands[0].imm < 0x0,
_("bad barrier type"));
inst.instruction |= inst.operands[0].imm;
}
inst.instruction |= inst.operands[0].imm;
else
inst.instruction |= 0xf;
}
@ -10050,21 +10038,6 @@ do_t_arit3c (void)
}
}
static void
do_t_barrier (void)
{
if (inst.operands[0].present)
{
constraint ((inst.instruction & 0xf0) != 0x40
&& inst.operands[0].imm > 0xf
&& inst.operands[0].imm < 0x0,
_("bad barrier type"));
inst.instruction |= inst.operands[0].imm;
}
else
inst.instruction |= 0xf;
}
static void
do_t_bfc (void)
{
@ -18510,9 +18483,9 @@ static const struct asm_opcode insns[] =
#undef THUMB_VARIANT
#define THUMB_VARIANT & arm_ext_barrier
TUF("dmb", 57ff050, f3bf8f50, 1, (oBARRIER_I15), barrier, t_barrier),
TUF("dsb", 57ff040, f3bf8f40, 1, (oBARRIER_I15), barrier, t_barrier),
TUF("isb", 57ff060, f3bf8f60, 1, (oBARRIER_I15), barrier, t_barrier),
TUF("dmb", 57ff050, f3bf8f50, 1, (oBARRIER_I15), barrier, barrier),
TUF("dsb", 57ff040, f3bf8f40, 1, (oBARRIER_I15), barrier, barrier),
TUF("isb", 57ff060, f3bf8f60, 1, (oBARRIER_I15), barrier, barrier),
/* ARM V7 instructions. */
#undef ARM_VARIANT

View File

@ -1,3 +1,17 @@
2013-04-10 Jan Beulich <jbeulich@suse.com>
* gas/arm/barrier-bad.d: Change title.
* gas/arm/barrier-bad.s: Add immediate form of ISB and DSB as
well as one symbolic form of DSB.
* gas/arm/barrier-bad.l: Update accordingly.
* gas/arm/barrier-bad-thumb.d: Adjust title. Use barrier-bad.s as
source. Pass -mthumb to gas.
* gas/arm/barrier-bad-thumb.l: Remove.
* gas/arm/barrier-bad-thumb.s: Remove.
* gas/arm/barrier-thumb.d: Adjust title. Use barrier.s as source.
Pass -mthumb to gas.
* gas/arm/barrier-thumb.s: Remove.
2013-04-09 Jan Beulich <jbeulich@suse.com>
* gas/arm/vfp1xD.s: Add VMRS/VMSR tests with FPINST, FPINST2,

View File

@ -1,3 +1,5 @@
#name: All options expect SY are reserved for ISB
#name: Bad barrier options (Thumb)
#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd
#error-output: barrier-bad-thumb.l
#source: barrier-bad.s
#as: -mthumb
#error-output: barrier-bad.l

View File

@ -1,8 +0,0 @@
[^:]*: Assembler messages:
[^:]*:4: Error: invalid barrier type -- `isb st'
[^:]*:5: Error: invalid barrier type -- `isb ish'
[^:]*:6: Error: invalid barrier type -- `isb ishst'
[^:]*:7: Error: invalid barrier type -- `isb nsh'
[^:]*:8: Error: invalid barrier type -- `isb nshst'
[^:]*:9: Error: invalid barrier type -- `isb osh'
[^:]*:10: Error: invalid barrier type -- `isb oshst'

View File

@ -1,11 +0,0 @@
.syntax unified
.thumb
.arch armv7a
isb st
isb ish
isb ishst
isb nsh
isb nshst
isb osh
isb oshst

View File

@ -1,3 +1,3 @@
#name: All options expect SY are reserved for ISB
#name: Bad barrier options (ARM)
#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd
#error-output: barrier-bad.l

View File

@ -6,3 +6,6 @@
[^:]*:7: Error: invalid barrier type -- `isb nshst'
[^:]*:8: Error: invalid barrier type -- `isb osh'
[^:]*:9: Error: invalid barrier type -- `isb oshst'
[^:]*:10: Error: immediate value out of range -- `isb #23'
[^:]*:11: Error: invalid barrier type -- `dsb xyz'
[^:]*:12: Error: immediate value out of range -- `dsb #34'

View File

@ -7,4 +7,6 @@ isb nsh
isb nshst
isb osh
isb oshst
isb #23
dsb xyz
dsb #34

View File

@ -1,6 +1,7 @@
#objdump: -dr --prefix-addresses --show-raw-insn
#name: Barrier Instruction Operands
#as: -mcpu=cortex-a8
#name: Barrier Instruction Operands (Thumb)
#source: barrier.s
#as: -mcpu=cortex-a8 -mthumb
# This test is only valid on ELF based ports.
#not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd

View File

@ -1,74 +0,0 @@
@ Test case to validate barrier instruction operands for T2
.thumb
.section .text
.syntax unified
@Tests to verify dsb, dmb and isb operand acceptance
dmb sy
dmb st
dmb ish
dmb sh
dmb ishst
dmb shst
dmb nsh
dmb un
dmb nshst
dmb unst
dmb osh
dmb oshst
dsb sy
dsb st
dsb ish
dsb sh
dsb ishst
dsb shst
dsb nsh
dsb un
dsb nshst
dsb unst
dsb osh
isb sy
isb
@Sanity checks for operands in upper case
dmb SY
dmb ST
dmb ISH
dmb SH
dmb ISHST
dmb SHST
dmb NSH
dmb UN
dmb NSHST
dmb UNST
dmb OSH
dmb OSHST
dsb SY
dsb ST
dsb ISH
dsb SH
dsb ISHST
dsb SHST
dsb NSH
dsb UN
dsb NSHST
dsb UNST
dsb OSH
isb SY
@Tests to verify immediate operands
dsb 0
dsb #15
dmb 0
dmb #15
isb 0
isb #14
isb #11
isb #10
isb #7
isb #6
isb #3
isb #2
isb #15