* config/tc-arm.c (opcode_tag): Add OT_cinfix3_deprecated.
	(opcode_lookup): Issue a warning for opcode with
	OT_cinfix3_deprecated.  Otherwise treat OT_cinfix3_deprecated
	identical to OT_cinfix3.
	(TxC3w, TC3w, tC3w): New.
	(insns): Use tC3w and TC3w for comparison instructions with
	's' suffix.

gas/testsuite
	* gas/arm/armv1.d (error-output): New.
	* gas/arm/armv1.l: New.
	* gas/arm/thumb32.d (error-output): New.
	* gas/arm/thumb32.l: New.
This commit is contained in:
Kazu Hirata
2006-05-04 15:41:00 +00:00
parent 8b2f7496cc
commit 088fa78ea0
7 changed files with 66 additions and 7 deletions

View File

@ -1,3 +1,13 @@
2006-05-04 Kazu Hirata <kazu@codesourcery.com>
* config/tc-arm.c (opcode_tag): Add OT_cinfix3_deprecated.
(opcode_lookup): Issue a warning for opcode with
OT_cinfix3_deprecated. Otherwise treat OT_cinfix3_deprecated
identical to OT_cinfix3.
(TxC3w, TC3w, tC3w): New.
(insns): Use tC3w and TC3w for comparison instructions with
's' suffix.
2006-05-04 Alan Modra <amodra@bigpond.net.au> 2006-05-04 Alan Modra <amodra@bigpond.net.au>
* subsegs.h (struct frchain): Delete frch_seg. * subsegs.h (struct frchain): Delete frch_seg.

View File

@ -12111,6 +12111,8 @@ enum opcode_tag
OT_cinfix3, /* Instruction takes a conditional infix, OT_cinfix3, /* Instruction takes a conditional infix,
beginning at character index 3. (In beginning at character index 3. (In
unified mode, it becomes a suffix.) */ unified mode, it becomes a suffix.) */
OT_cinfix3_deprecated, /* The same as OT_cinfix3. This is used for
tsts, cmps, cmns, and teqs. */
OT_cinfix3_legacy, /* Legacy instruction takes a conditional infix at OT_cinfix3_legacy, /* Legacy instruction takes a conditional infix at
character index 3, even in unified mode. Used for character index 3, even in unified mode. Used for
legacy instructions where suffix and infix forms legacy instructions where suffix and infix forms
@ -12267,6 +12269,7 @@ opcode_lookup (char **str)
break; break;
case OT_cinfix3: case OT_cinfix3:
case OT_cinfix3_deprecated:
case OT_odd_infix_unc: case OT_odd_infix_unc:
if (!unified_syntax) if (!unified_syntax)
return 0; return 0;
@ -12313,11 +12316,16 @@ opcode_lookup (char **str)
memmove (affix + 2, affix, (end - affix) - 2); memmove (affix + 2, affix, (end - affix) - 2);
memcpy (affix, save, 2); memcpy (affix, save, 2);
if (opcode && (opcode->tag == OT_cinfix3 || opcode->tag == OT_csuf_or_in3 if (opcode
|| opcode->tag == OT_cinfix3_legacy)) && (opcode->tag == OT_cinfix3
|| opcode->tag == OT_cinfix3_deprecated
|| opcode->tag == OT_csuf_or_in3
|| opcode->tag == OT_cinfix3_legacy))
{ {
/* step CM */ /* step CM */
if (unified_syntax && opcode->tag == OT_cinfix3) if (unified_syntax
&& (opcode->tag == OT_cinfix3
|| opcode->tag == OT_cinfix3_deprecated))
as_warn (_("conditional infixes are deprecated in unified syntax")); as_warn (_("conditional infixes are deprecated in unified syntax"));
inst.cond = cond->value; inst.cond = cond->value;
@ -12356,6 +12364,9 @@ md_assemble (char *str)
return; return;
} }
if (opcode->tag == OT_cinfix3_deprecated)
as_warn (_("s suffix on comparison instruction is deprecated"));
if (thumb_mode) if (thumb_mode)
{ {
arm_feature_set variant; arm_feature_set variant;
@ -12857,10 +12868,17 @@ static struct asm_barrier_opt barrier_opt_names[] =
#define TxC3(mnem, op, top, nops, ops, ae, te) \ #define TxC3(mnem, op, top, nops, ops, ae, te) \
{ #mnem, OPS##nops ops, OT_cinfix3, 0x##op, top, ARM_VARIANT, \ { #mnem, OPS##nops ops, OT_cinfix3, 0x##op, top, ARM_VARIANT, \
THUMB_VARIANT, do_##ae, do_##te } THUMB_VARIANT, do_##ae, do_##te }
#define TxC3w(mnem, op, top, nops, ops, ae, te) \
{ #mnem, OPS##nops ops, OT_cinfix3_deprecated, 0x##op, top, ARM_VARIANT, \
THUMB_VARIANT, do_##ae, do_##te }
#define TC3(mnem, aop, top, nops, ops, ae, te) \ #define TC3(mnem, aop, top, nops, ops, ae, te) \
TxC3(mnem, aop, 0x##top, nops, ops, ae, te) TxC3(mnem, aop, 0x##top, nops, ops, ae, te)
#define TC3w(mnem, aop, top, nops, ops, ae, te) \
TxC3w(mnem, aop, 0x##top, nops, ops, ae, te)
#define tC3(mnem, aop, top, nops, ops, ae, te) \ #define tC3(mnem, aop, top, nops, ops, ae, te) \
TxC3(mnem, aop, T_MNEM_##top, nops, ops, ae, te) TxC3(mnem, aop, T_MNEM_##top, nops, ops, ae, te)
#define tC3w(mnem, aop, top, nops, ops, ae, te) \
TxC3w(mnem, aop, T_MNEM_##top, nops, ops, ae, te)
/* Mnemonic with a conditional infix in an unusual place. Each and every variant has to /* Mnemonic with a conditional infix in an unusual place. Each and every variant has to
appear in the condition table. */ appear in the condition table. */
@ -13023,13 +13041,13 @@ static const struct asm_opcode insns[] =
for setting PSR flag bits. They are obsolete in V6 and do not for setting PSR flag bits. They are obsolete in V6 and do not
have Thumb equivalents. */ have Thumb equivalents. */
tCE(tst, 1100000, tst, 2, (RR, SH), cmp, t_mvn_tst), tCE(tst, 1100000, tst, 2, (RR, SH), cmp, t_mvn_tst),
tC3(tsts, 1100000, tst, 2, (RR, SH), cmp, t_mvn_tst), tC3w(tsts, 1100000, tst, 2, (RR, SH), cmp, t_mvn_tst),
CL(tstp, 110f000, 2, (RR, SH), cmp), CL(tstp, 110f000, 2, (RR, SH), cmp),
tCE(cmp, 1500000, cmp, 2, (RR, SH), cmp, t_mov_cmp), tCE(cmp, 1500000, cmp, 2, (RR, SH), cmp, t_mov_cmp),
tC3(cmps, 1500000, cmp, 2, (RR, SH), cmp, t_mov_cmp), tC3w(cmps, 1500000, cmp, 2, (RR, SH), cmp, t_mov_cmp),
CL(cmpp, 150f000, 2, (RR, SH), cmp), CL(cmpp, 150f000, 2, (RR, SH), cmp),
tCE(cmn, 1700000, cmn, 2, (RR, SH), cmp, t_mvn_tst), tCE(cmn, 1700000, cmn, 2, (RR, SH), cmp, t_mvn_tst),
tC3(cmns, 1700000, cmn, 2, (RR, SH), cmp, t_mvn_tst), tC3w(cmns, 1700000, cmn, 2, (RR, SH), cmp, t_mvn_tst),
CL(cmnp, 170f000, 2, (RR, SH), cmp), CL(cmnp, 170f000, 2, (RR, SH), cmp),
tCE(mov, 1a00000, mov, 2, (RR, SH), mov, t_mov_cmp), tCE(mov, 1a00000, mov, 2, (RR, SH), mov, t_mov_cmp),
@ -13083,7 +13101,7 @@ static const struct asm_opcode insns[] =
TCE(rsb, 0600000, ebc00000, 3, (RR, oRR, SH), arit, t_rsb), TCE(rsb, 0600000, ebc00000, 3, (RR, oRR, SH), arit, t_rsb),
TC3(rsbs, 0700000, ebd00000, 3, (RR, oRR, SH), arit, t_rsb), TC3(rsbs, 0700000, ebd00000, 3, (RR, oRR, SH), arit, t_rsb),
TCE(teq, 1300000, ea900f00, 2, (RR, SH), cmp, t_mvn_tst), TCE(teq, 1300000, ea900f00, 2, (RR, SH), cmp, t_mvn_tst),
TC3(teqs, 1300000, ea900f00, 2, (RR, SH), cmp, t_mvn_tst), TC3w(teqs, 1300000, ea900f00, 2, (RR, SH), cmp, t_mvn_tst),
CL(teqp, 130f000, 2, (RR, SH), cmp), CL(teqp, 130f000, 2, (RR, SH), cmp),
TC3(ldrt, 4300000, f8500e00, 2, (RR, ADDR), ldstt, t_ldstt), TC3(ldrt, 4300000, f8500e00, 2, (RR, ADDR), ldstt, t_ldstt),

View File

@ -1,3 +1,10 @@
2006-05-04 Kazu Hirata <kazu@codesourcery.com>
* gas/arm/armv1.d (error-output): New.
* gas/arm/armv1.l: New.
* gas/arm/thumb32.d (error-output): New.
* gas/arm/thumb32.l: New.
2006-05-04 Thiemo Seufer <ths@mips.com> 2006-05-04 Thiemo Seufer <ths@mips.com>
Nigel Stephens <nigel@mips.com> Nigel Stephens <nigel@mips.com>

View File

@ -1,6 +1,7 @@
#objdump: -dr --prefix-addresses --show-raw-insn #objdump: -dr --prefix-addresses --show-raw-insn
#name: ARM v1 instructions #name: ARM v1 instructions
#as: -mcpu=arm7t #as: -mcpu=arm7t
#error-output: armv1.l
# Test the ARM v1 instructions # Test the ARM v1 instructions

View File

@ -0,0 +1,5 @@
[^:]*: Assembler messages:
[^:]*:26: Warning: s suffix on comparison instruction is deprecated
[^:]*:29: Warning: s suffix on comparison instruction is deprecated
[^:]*:32: Warning: s suffix on comparison instruction is deprecated
[^:]*:35: Warning: s suffix on comparison instruction is deprecated

View File

@ -3,6 +3,7 @@
# objdump: -dr --prefix-addresses --show-raw-insn # objdump: -dr --prefix-addresses --show-raw-insn
# The arm-aout and arm-pe ports do not support Thumb branch relocations. # The arm-aout and arm-pe ports do not support Thumb branch relocations.
# not-target: *-*-*aout* *-*-pe # not-target: *-*-*aout* *-*-pe
# error-output: thumb32.l
.*: +file format .*arm.* .*: +file format .*arm.*

View File

@ -0,0 +1,17 @@
[^;]*: Assembler messages:
[^;]*:446: Warning: s suffix on comparison instruction is deprecated
[^;]*:446: Warning: s suffix on comparison instruction is deprecated
[^;]*:446: Warning: s suffix on comparison instruction is deprecated
[^;]*:446: Warning: s suffix on comparison instruction is deprecated
[^;]*:447: Warning: s suffix on comparison instruction is deprecated
[^;]*:447: Warning: s suffix on comparison instruction is deprecated
[^;]*:447: Warning: s suffix on comparison instruction is deprecated
[^;]*:447: Warning: s suffix on comparison instruction is deprecated
[^;]*:448: Warning: s suffix on comparison instruction is deprecated
[^;]*:448: Warning: s suffix on comparison instruction is deprecated
[^;]*:448: Warning: s suffix on comparison instruction is deprecated
[^;]*:448: Warning: s suffix on comparison instruction is deprecated
[^;]*:449: Warning: s suffix on comparison instruction is deprecated
[^;]*:449: Warning: s suffix on comparison instruction is deprecated
[^;]*:449: Warning: s suffix on comparison instruction is deprecated
[^;]*:449: Warning: s suffix on comparison instruction is deprecated