S12Z: gas: Permit "extend" instructions which don't actually extend.

Other assemblers permit "extending" a register into a register of a
smaller size or the same size.  It doesn't make much sense to do this
but would appear to be a valid instruction.  So change the error to a
warning.

gas/
	* config/tc-s12z.c (tfr): Change as_bad to as_warn.
	Also fix message typo and semantics.
This commit is contained in:
John Darrington 2019-01-16 14:34:50 +01:00
parent d5dcaf1b59
commit 77fdb0e00b
2 changed files with 7 additions and 10 deletions

View File

@ -1,5 +1,7 @@
2019-01-16 John Darrington <john@darrington.wattle.id.au>
* config/tc-s12z.c (tfr): Change as_bad to as_warn.
Also fix message typo and semantics.
* config/tc-s12z.c (emit_opr): Emit BFD_RELOC_S12Z_OPR instead of
BFD_RELOC_24.
* testsuite/gas/s12z/opr-indirect-expr.d: Expect R_S12Z_OPR instead

View File

@ -1316,16 +1316,11 @@ tfr (const struct instruction *insn)
if (!lex_reg_name (~0, &reg2))
goto fail;
if ((0 == strcasecmp ("sex", insn->name))
|| (0 == strcasecmp ("zex", insn->name)))
{
if (registers[reg1].bytes >= registers[reg2].bytes)
{
as_bad (_("Source register for %s must be smaller that the destination register"),
insn->name);
goto fail;
}
}
if ( ((0 == strcasecmp ("sex", insn->name))
|| (0 == strcasecmp ("zex", insn->name)))
&& (registers[reg2].bytes <= registers[reg1].bytes))
as_warn (_("Source register for %s is no larger than the destination register"),
insn->name);
char *f = s12z_new_insn (1 + insn->page);
if (insn->page == 2)