diff options
author | Nick Clifton <nickc@redhat.com> | 2011-08-03 11:35:56 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2011-08-03 11:35:56 +0000 |
commit | 877807f8c481a4c5780b3d7bba7963c068910434 (patch) | |
tree | e85f7cb43cf0495ffc896ecbaf604c14b676e1db /gas/config | |
parent | 092d27ff4797e721d10b5de0394a2725ff8a966e (diff) | |
download | gdb-877807f8c481a4c5780b3d7bba7963c068910434.zip gdb-877807f8c481a4c5780b3d7bba7963c068910434.tar.gz gdb-877807f8c481a4c5780b3d7bba7963c068910434.tar.bz2 |
* config/tc-arm.c (do_t_strexbh): New.
(insns): Update accordingly.
* gas/arm/strex-bad-t.d: New testcase.
* gas/arm/strex-bad-t.s: Likewise.
* gas/arm/strex-bad-t.l: Likewise.
* gas/arm/strex-t.s: Likewise.
* gas/arm/strex-t.d: Likewise.
Diffstat (limited to 'gas/config')
-rw-r--r-- | gas/config/tc-arm.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index b018b4f..77606a3 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -8501,6 +8501,21 @@ do_strex (void) } static void +do_t_strexbh (void) +{ + constraint (!inst.operands[2].isreg || !inst.operands[2].preind + || inst.operands[2].postind || inst.operands[2].writeback + || inst.operands[2].immisreg || inst.operands[2].shifted + || inst.operands[2].negative, + BAD_ADDR_MODE); + + constraint (inst.operands[0].reg == inst.operands[1].reg + || inst.operands[0].reg == inst.operands[2].reg, BAD_OVERLAP); + + do_rm_rd_rn (); +} + +static void do_strexd (void) { constraint (inst.operands[1].reg % 2 != 0, @@ -17516,9 +17531,9 @@ static const struct asm_opcode insns[] = TCE("ldrexh", 1f00f9f, e8d00f5f, 2, (RRnpc_npcsp, RRnpcb), rd_rn, rd_rn), TCE("strexb", 1c00f90, e8c00f40, 3, (RRnpc_npcsp, RRnpc_npcsp, ADDR), - strex, rm_rd_rn), + strex, t_strexbh), TCE("strexh", 1e00f90, e8c00f50, 3, (RRnpc_npcsp, RRnpc_npcsp, ADDR), - strex, rm_rd_rn), + strex, t_strexbh), TUF("clrex", 57ff01f, f3bf8f2f, 0, (), noargs, noargs), #undef ARM_VARIANT |