mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-05 00:04:22 +08:00
* config/tc-xtensa.c (xtensa_extui_opcode): New.
(xg_expand_assembly_insn): Check for invalid extui operands. (md_begin): Initialize xtensa_extui_opcode.
This commit is contained in:
parent
5b31182830
commit
d12f9798ef
@ -1,3 +1,9 @@
|
|||||||
|
2007-07-25 Sterling Augustine <sterling@tensilica.com>
|
||||||
|
|
||||||
|
* config/tc-xtensa.c (xtensa_extui_opcode): New.
|
||||||
|
(xg_expand_assembly_insn): Check for invalid extui operands.
|
||||||
|
(md_begin): Initialize xtensa_extui_opcode.
|
||||||
|
|
||||||
2007-07-24 Nick Clifton <nickc@redhat.com>
|
2007-07-24 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
* config/tc-mep.h (skip_whitespace): Remove definition.
|
* config/tc-mep.h (skip_whitespace): Remove definition.
|
||||||
|
@ -553,6 +553,7 @@ static xtensa_opcode xtensa_callx8_opcode;
|
|||||||
static xtensa_opcode xtensa_callx12_opcode;
|
static xtensa_opcode xtensa_callx12_opcode;
|
||||||
static xtensa_opcode xtensa_const16_opcode;
|
static xtensa_opcode xtensa_const16_opcode;
|
||||||
static xtensa_opcode xtensa_entry_opcode;
|
static xtensa_opcode xtensa_entry_opcode;
|
||||||
|
static xtensa_opcode xtensa_extui_opcode;
|
||||||
static xtensa_opcode xtensa_movi_opcode;
|
static xtensa_opcode xtensa_movi_opcode;
|
||||||
static xtensa_opcode xtensa_movi_n_opcode;
|
static xtensa_opcode xtensa_movi_n_opcode;
|
||||||
static xtensa_opcode xtensa_isync_opcode;
|
static xtensa_opcode xtensa_isync_opcode;
|
||||||
@ -3888,6 +3889,20 @@ xg_expand_assembly_insn (IStack *istack, TInsn *orig_insn)
|
|||||||
if (tinsn_has_invalid_symbolic_operands (orig_insn))
|
if (tinsn_has_invalid_symbolic_operands (orig_insn))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
/* Special case for extui opcode which has constraints not handled
|
||||||
|
by the ordinary operand encoding checks. The number of operands
|
||||||
|
and related syntax issues have already been checked. */
|
||||||
|
if (orig_insn->opcode == xtensa_extui_opcode)
|
||||||
|
{
|
||||||
|
int shiftimm = orig_insn->tok[2].X_add_number;
|
||||||
|
int maskimm = orig_insn->tok[3].X_add_number;
|
||||||
|
if (shiftimm + maskimm > 32)
|
||||||
|
{
|
||||||
|
as_bad (_("immediate operands sum to greater than 32"));
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* If the instruction will definitely need to be relaxed, it is better
|
/* If the instruction will definitely need to be relaxed, it is better
|
||||||
to expand it now for better scheduling. Decide whether to expand
|
to expand it now for better scheduling. Decide whether to expand
|
||||||
now.... */
|
now.... */
|
||||||
@ -5012,6 +5027,7 @@ md_begin (void)
|
|||||||
xtensa_callx12_opcode = xtensa_opcode_lookup (isa, "callx12");
|
xtensa_callx12_opcode = xtensa_opcode_lookup (isa, "callx12");
|
||||||
xtensa_const16_opcode = xtensa_opcode_lookup (isa, "const16");
|
xtensa_const16_opcode = xtensa_opcode_lookup (isa, "const16");
|
||||||
xtensa_entry_opcode = xtensa_opcode_lookup (isa, "entry");
|
xtensa_entry_opcode = xtensa_opcode_lookup (isa, "entry");
|
||||||
|
xtensa_extui_opcode = xtensa_opcode_lookup (isa, "extui");
|
||||||
xtensa_movi_opcode = xtensa_opcode_lookup (isa, "movi");
|
xtensa_movi_opcode = xtensa_opcode_lookup (isa, "movi");
|
||||||
xtensa_movi_n_opcode = xtensa_opcode_lookup (isa, "movi.n");
|
xtensa_movi_n_opcode = xtensa_opcode_lookup (isa, "movi.n");
|
||||||
xtensa_isync_opcode = xtensa_opcode_lookup (isa, "isync");
|
xtensa_isync_opcode = xtensa_opcode_lookup (isa, "isync");
|
||||||
|
Loading…
Reference in New Issue
Block a user