gas/
* config/tc-mips.c (mips_arg_info): Remove soft_match. (match_out_of_range, match_not_constant): New functions. (match_const_int): Remove fallback parameter and check for soft_match. Use match_not_constant. (match_mapped_int_operand, match_addiusp_operand) (match_perf_reg_operand, match_save_restore_list_operand) (match_mdmx_imm_reg_operand): Update accordingly. Use match_out_of_range and set_insn_error* instead of as_bad. (match_int_operand): Likewise. Use match_not_constant in the !allows_nonconst case. (match_float_constant): Report invalid float constants. (match_insn, match_mips16_insn): Remove soft_match code. Rely on match_float_constant to check for invalid constants. Fail the match if match_const_int or match_float_constant return false. (mips_ip): Update accordingly. (mips16_ip): Likewise. Undo null termination of instruction name once lookup is complete. gas/testsuite/ * gas/mips/ext-ill.l, gas/mips/lui-1.l, gas/mips/mips16e-64.l, gas/mips/mips32r2-ill-fp64.l, gas/mips/mips32r2-ill-nofp.l, gas/mips/mips32r2-ill.l, gas/mips/mips64r2-ill.l, gas/mips/octeon-ill.l, gas/mips/r5900-error-vu0.l, gas/mips/vr5400-ill.l: Adjust expected errors. * gas/mips/micromips-size-0.l, gas/mips/micromips-size-0.s: Likewise. Add new tests. * gas/mips/mips16e-save-err.s, gas/mips/mips16e-save-err.l: New test. * gas/mips/mips.exp: Run it.
This commit is contained in:
parent
e3de51ce11
commit
1a00e61226
18 changed files with 332 additions and 302 deletions
|
@ -1,3 +1,23 @@
|
|||
2013-08-19 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* config/tc-mips.c (mips_arg_info): Remove soft_match.
|
||||
(match_out_of_range, match_not_constant): New functions.
|
||||
(match_const_int): Remove fallback parameter and check for soft_match.
|
||||
Use match_not_constant.
|
||||
(match_mapped_int_operand, match_addiusp_operand)
|
||||
(match_perf_reg_operand, match_save_restore_list_operand)
|
||||
(match_mdmx_imm_reg_operand): Update accordingly. Use
|
||||
match_out_of_range and set_insn_error* instead of as_bad.
|
||||
(match_int_operand): Likewise. Use match_not_constant in the
|
||||
!allows_nonconst case.
|
||||
(match_float_constant): Report invalid float constants.
|
||||
(match_insn, match_mips16_insn): Remove soft_match code. Rely on
|
||||
match_float_constant to check for invalid constants. Fail the
|
||||
match if match_const_int or match_float_constant return false.
|
||||
(mips_ip): Update accordingly.
|
||||
(mips16_ip): Likewise. Undo null termination of instruction name
|
||||
once lookup is complete.
|
||||
|
||||
2013-08-19 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* config/tc-mips.c (mips_insn_error_format): New enum.
|
||||
|
|
|
@ -4271,13 +4271,6 @@ struct mips_arg_info
|
|||
where it gives the lsb position. */
|
||||
unsigned int last_op_int;
|
||||
|
||||
/* If true, match routines should silently reject invalid arguments.
|
||||
If false, match routines can accept invalid arguments as long as
|
||||
they report an appropriate error. They still have the option of
|
||||
silently rejecting arguments, in which case a generic "Invalid operands"
|
||||
style of error will be used instead. */
|
||||
bfd_boolean soft_match;
|
||||
|
||||
/* If true, the OP_INT match routine should treat plain symbolic operands
|
||||
as if a relocation operator like %lo(...) had been used. This is only
|
||||
ever true if the operand can be relocated. */
|
||||
|
@ -4291,6 +4284,23 @@ struct mips_arg_info
|
|||
bfd_boolean seen_at;
|
||||
};
|
||||
|
||||
/* Record that the argument is out of range. */
|
||||
|
||||
static void
|
||||
match_out_of_range (struct mips_arg_info *arg)
|
||||
{
|
||||
set_insn_error_i (arg->argnum, _("operand %d out of range"), arg->argnum);
|
||||
}
|
||||
|
||||
/* Record that the argument isn't constant but needs to be. */
|
||||
|
||||
static void
|
||||
match_not_constant (struct mips_arg_info *arg)
|
||||
{
|
||||
set_insn_error_i (arg->argnum, _("operand %d must be constant"),
|
||||
arg->argnum);
|
||||
}
|
||||
|
||||
/* Try to match an OT_CHAR token for character CH. Consume the token
|
||||
and return true on success, otherwise return false. */
|
||||
|
||||
|
@ -4354,7 +4364,7 @@ match_expression (struct mips_arg_info *arg, expressionS *value,
|
|||
error. */
|
||||
|
||||
static bfd_boolean
|
||||
match_const_int (struct mips_arg_info *arg, offsetT *value, offsetT fallback)
|
||||
match_const_int (struct mips_arg_info *arg, offsetT *value)
|
||||
{
|
||||
expressionS ex;
|
||||
bfd_reloc_code_real_type r[3];
|
||||
|
@ -4366,11 +4376,8 @@ match_const_int (struct mips_arg_info *arg, offsetT *value, offsetT fallback)
|
|||
*value = ex.X_add_number;
|
||||
else
|
||||
{
|
||||
if (arg->soft_match)
|
||||
return FALSE;
|
||||
as_bad (_("Operand %d of `%s' must be constant"),
|
||||
arg->argnum, arg->insn->insn_mo->name);
|
||||
*value = fallback;
|
||||
match_not_constant (arg);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -4546,7 +4553,6 @@ match_int_operand (struct mips_arg_info *arg,
|
|||
unsigned int uval;
|
||||
int min_val, max_val, factor;
|
||||
offsetT sval;
|
||||
bfd_boolean print_hex;
|
||||
|
||||
operand = (const struct mips_int_operand *) operand_base;
|
||||
factor = 1 << operand->shift;
|
||||
|
@ -4580,7 +4586,10 @@ match_int_operand (struct mips_arg_info *arg,
|
|||
/* If non-constant operands are allowed then leave them for
|
||||
the caller to process, otherwise fail the match. */
|
||||
if (!arg->allow_nonconst)
|
||||
return FALSE;
|
||||
{
|
||||
match_not_constant (arg);
|
||||
return FALSE;
|
||||
}
|
||||
offset_reloc[0] = BFD_RELOC_LO16;
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -4592,38 +4601,16 @@ match_int_operand (struct mips_arg_info *arg,
|
|||
}
|
||||
else
|
||||
{
|
||||
if (!match_const_int (arg, &sval, min_val))
|
||||
if (!match_const_int (arg, &sval))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
arg->last_op_int = sval;
|
||||
|
||||
/* Check the range. If there's a problem, record the lowest acceptable
|
||||
value in arg->last_op_int in order to prevent an unhelpful error
|
||||
from OP_MSB too.
|
||||
|
||||
Bit counts have traditionally been printed in hex by the disassembler
|
||||
but printed as decimal in error messages. Only resort to hex if
|
||||
the operand is bigger than 6 bits. */
|
||||
print_hex = operand->print_hex && operand_base->size > 6;
|
||||
if (sval < min_val || sval > max_val)
|
||||
if (sval < min_val || sval > max_val || sval % factor)
|
||||
{
|
||||
if (arg->soft_match)
|
||||
return FALSE;
|
||||
report_bad_range (arg->insn, arg->argnum, sval, min_val, max_val,
|
||||
print_hex);
|
||||
arg->last_op_int = min_val;
|
||||
}
|
||||
else if (sval % factor)
|
||||
{
|
||||
if (arg->soft_match)
|
||||
return FALSE;
|
||||
as_bad (print_hex && sval >= 0
|
||||
? _("Operand %d of `%s' must be a factor of %d, was 0x%lx.")
|
||||
: _("Operand %d of `%s' must be a factor of %d, was %ld."),
|
||||
arg->argnum, arg->insn->insn_mo->name, factor,
|
||||
(unsigned long) sval);
|
||||
arg->last_op_int = min_val;
|
||||
match_out_of_range (arg);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
uval = (unsigned int) sval >> operand->shift;
|
||||
|
@ -4668,7 +4655,7 @@ match_mapped_int_operand (struct mips_arg_info *arg,
|
|||
offsetT sval;
|
||||
|
||||
operand = (const struct mips_mapped_int_operand *) operand_base;
|
||||
if (!match_const_int (arg, &sval, operand->int_map[0]))
|
||||
if (!match_const_int (arg, &sval))
|
||||
return FALSE;
|
||||
|
||||
num_vals = 1 << operand_base->size;
|
||||
|
@ -4676,7 +4663,10 @@ match_mapped_int_operand (struct mips_arg_info *arg,
|
|||
if (operand->int_map[uval] == sval)
|
||||
break;
|
||||
if (uval == num_vals)
|
||||
return FALSE;
|
||||
{
|
||||
match_out_of_range (arg);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
insn_insert_operand (arg->insn, operand_base, uval);
|
||||
return TRUE;
|
||||
|
@ -4697,7 +4687,7 @@ match_msb_operand (struct mips_arg_info *arg,
|
|||
max_val = min_val + (1 << operand_base->size) - 1;
|
||||
max_high = operand->opsize;
|
||||
|
||||
if (!match_const_int (arg, &size, 1))
|
||||
if (!match_const_int (arg, &size))
|
||||
return FALSE;
|
||||
|
||||
high = size + arg->last_op_int;
|
||||
|
@ -4705,10 +4695,8 @@ match_msb_operand (struct mips_arg_info *arg,
|
|||
|
||||
if (size < 0 || high > max_high || sval < min_val || sval > max_val)
|
||||
{
|
||||
if (arg->soft_match)
|
||||
return FALSE;
|
||||
report_bad_field (arg->last_op_int, size);
|
||||
sval = min_val;
|
||||
match_out_of_range (arg);
|
||||
return FALSE;
|
||||
}
|
||||
insn_insert_operand (arg->insn, operand_base, sval - min_val);
|
||||
return TRUE;
|
||||
|
@ -4790,7 +4778,7 @@ match_perf_reg_operand (struct mips_arg_info *arg,
|
|||
{
|
||||
offsetT sval;
|
||||
|
||||
if (!match_const_int (arg, &sval, 0))
|
||||
if (!match_const_int (arg, &sval))
|
||||
return FALSE;
|
||||
|
||||
if (sval != 0
|
||||
|
@ -4799,9 +4787,8 @@ match_perf_reg_operand (struct mips_arg_info *arg,
|
|||
&& (strcmp (arg->insn->insn_mo->name, "mfps") == 0
|
||||
|| strcmp (arg->insn->insn_mo->name, "mtps") == 0))))
|
||||
{
|
||||
if (arg->soft_match)
|
||||
return FALSE;
|
||||
as_bad (_("Invalid performance register (%ld)"), (unsigned long) sval);
|
||||
set_insn_error (arg->argnum, _("invalid performance register"));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
insn_insert_operand (arg->insn, operand, sval);
|
||||
|
@ -4817,15 +4804,21 @@ match_addiusp_operand (struct mips_arg_info *arg,
|
|||
offsetT sval;
|
||||
unsigned int uval;
|
||||
|
||||
if (!match_const_int (arg, &sval, -256))
|
||||
if (!match_const_int (arg, &sval))
|
||||
return FALSE;
|
||||
|
||||
if (sval % 4)
|
||||
return FALSE;
|
||||
{
|
||||
match_out_of_range (arg);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
sval /= 4;
|
||||
if (!(sval >= -258 && sval <= 257) || (sval >= -2 && sval <= 1))
|
||||
return FALSE;
|
||||
{
|
||||
match_out_of_range (arg);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
uval = (unsigned int) sval;
|
||||
uval = ((uval >> 1) & ~0xff) | (uval & 0xff);
|
||||
|
@ -4969,9 +4962,7 @@ match_save_restore_list_operand (struct mips_arg_info *arg)
|
|||
unsigned int opcode, args, statics, sregs;
|
||||
unsigned int num_frame_sizes, num_args, num_statics, num_sregs;
|
||||
offsetT frame_size;
|
||||
const char *error;
|
||||
|
||||
error = 0;
|
||||
opcode = arg->insn->insn_opcode;
|
||||
frame_size = 0;
|
||||
num_frame_sizes = 0;
|
||||
|
@ -4985,7 +4976,7 @@ match_save_restore_list_operand (struct mips_arg_info *arg)
|
|||
if (arg->token->type == OT_INTEGER)
|
||||
{
|
||||
/* Handle the frame size. */
|
||||
if (!match_const_int (arg, &frame_size, 0))
|
||||
if (!match_const_int (arg, &frame_size))
|
||||
return FALSE;
|
||||
num_frame_sizes += 1;
|
||||
}
|
||||
|
@ -5079,25 +5070,27 @@ match_save_restore_list_operand (struct mips_arg_info *arg)
|
|||
|
||||
/* Encode frame size. */
|
||||
if (num_frame_sizes == 0)
|
||||
error = _("Missing frame size");
|
||||
else if (num_frame_sizes > 1)
|
||||
error = _("Frame size specified twice");
|
||||
else if ((frame_size & 7) != 0 || frame_size < 0 || frame_size > 0xff * 8)
|
||||
error = _("Invalid frame size");
|
||||
else if (frame_size != 128 || (opcode >> 16) != 0)
|
||||
{
|
||||
set_insn_error (arg->argnum, _("missing frame size"));
|
||||
return FALSE;
|
||||
}
|
||||
if (num_frame_sizes > 1)
|
||||
{
|
||||
set_insn_error (arg->argnum, _("frame size specified twice"));
|
||||
return FALSE;
|
||||
}
|
||||
if ((frame_size & 7) != 0 || frame_size < 0 || frame_size > 0xff * 8)
|
||||
{
|
||||
set_insn_error (arg->argnum, _("invalid frame size"));
|
||||
return FALSE;
|
||||
}
|
||||
if (frame_size != 128 || (opcode >> 16) != 0)
|
||||
{
|
||||
frame_size /= 8;
|
||||
opcode |= (((frame_size & 0xf0) << 16)
|
||||
| (frame_size & 0x0f));
|
||||
}
|
||||
|
||||
if (error)
|
||||
{
|
||||
if (arg->soft_match)
|
||||
return FALSE;
|
||||
as_bad ("%s", error);
|
||||
}
|
||||
|
||||
/* Finally build the instruction. */
|
||||
if ((opcode >> 16) != 0 || frame_size == 0)
|
||||
opcode |= MIPS16_EXTEND;
|
||||
|
@ -5126,10 +5119,9 @@ match_mdmx_imm_reg_operand (struct mips_arg_info *arg,
|
|||
if ((opcode->membership & INSN_5400)
|
||||
&& strcmp (opcode->name, "rzu.ob") == 0)
|
||||
{
|
||||
if (arg->soft_match)
|
||||
return FALSE;
|
||||
as_bad (_("Operand %d of `%s' must be an immediate"),
|
||||
arg->argnum, opcode->name);
|
||||
set_insn_error_i (arg->argnum, _("operand %d must be an immediate"),
|
||||
arg->argnum);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Check whether this is a vector register or a broadcast of
|
||||
|
@ -5141,9 +5133,8 @@ match_mdmx_imm_reg_operand (struct mips_arg_info *arg,
|
|||
return FALSE;
|
||||
if (arg->token->u.reg_element.index > (is_qh ? 3 : 7))
|
||||
{
|
||||
if (arg->soft_match)
|
||||
return FALSE;
|
||||
as_bad (_("Invalid element selector"));
|
||||
set_insn_error (arg->argnum, _("invalid element selector"));
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
uval |= arg->token->u.reg_element.index << (is_qh ? 2 : 1) << 5;
|
||||
|
@ -5155,10 +5146,9 @@ match_mdmx_imm_reg_operand (struct mips_arg_info *arg,
|
|||
&& (strcmp (opcode->name, "sll.ob") == 0
|
||||
|| strcmp (opcode->name, "srl.ob") == 0))
|
||||
{
|
||||
if (arg->soft_match)
|
||||
return FALSE;
|
||||
as_bad (_("Operand %d of `%s' must be scalar"),
|
||||
arg->argnum, opcode->name);
|
||||
set_insn_error_i (arg->argnum, _("operand %d must be scalar"),
|
||||
arg->argnum);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!match_regno (arg, OP_REG_VEC, arg->token->u.regno, ®no))
|
||||
|
@ -5175,13 +5165,12 @@ match_mdmx_imm_reg_operand (struct mips_arg_info *arg,
|
|||
{
|
||||
offsetT sval;
|
||||
|
||||
if (!match_const_int (arg, &sval, 0))
|
||||
if (!match_const_int (arg, &sval))
|
||||
return FALSE;
|
||||
if (sval < 0 || sval > 31)
|
||||
{
|
||||
if (arg->soft_match)
|
||||
return FALSE;
|
||||
report_bad_range (arg->insn, arg->argnum, sval, 0, 31, FALSE);
|
||||
match_out_of_range (arg);
|
||||
return FALSE;
|
||||
}
|
||||
uval |= (sval & 31);
|
||||
if (is_qh)
|
||||
|
@ -5259,7 +5248,10 @@ match_float_constant (struct mips_arg_info *arg, expressionS *imm,
|
|||
The .lit4 and .lit8 sections are only used if permitted by the
|
||||
-G argument. */
|
||||
if (arg->token->type != OT_FLOAT)
|
||||
return FALSE;
|
||||
{
|
||||
set_insn_error (arg->argnum, _("floating-point expression required"));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gas_assert (arg->token->u.flt.length == length);
|
||||
data = arg->token->u.flt.data;
|
||||
|
@ -7058,7 +7050,7 @@ normalize_address_expr (expressionS *ex)
|
|||
static bfd_boolean
|
||||
match_insn (struct mips_cl_insn *insn, const struct mips_opcode *opcode,
|
||||
struct mips_operand_token *tokens, unsigned int opcode_extra,
|
||||
bfd_boolean more_alts, bfd_boolean soft_match)
|
||||
bfd_boolean more_alts)
|
||||
{
|
||||
const char *args;
|
||||
struct mips_arg_info arg;
|
||||
|
@ -7080,7 +7072,6 @@ match_insn (struct mips_cl_insn *insn, const struct mips_opcode *opcode,
|
|||
arg.argnum = 1;
|
||||
arg.last_regno = ILLEGAL_REG;
|
||||
arg.dest_regno = ILLEGAL_REG;
|
||||
arg.soft_match = soft_match;
|
||||
for (args = opcode->args;; ++args)
|
||||
{
|
||||
if (arg.token->type == OT_END)
|
||||
|
@ -7166,32 +7157,11 @@ match_insn (struct mips_cl_insn *insn, const struct mips_opcode *opcode,
|
|||
case '+':
|
||||
switch (args[1])
|
||||
{
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case 'B':
|
||||
case 'C':
|
||||
case 'F':
|
||||
case 'G':
|
||||
case 'H':
|
||||
case 'J':
|
||||
case 'Q':
|
||||
case 'S':
|
||||
case 's':
|
||||
/* If these integer forms come last, there is no other
|
||||
form of the instruction that could match. Prefer to
|
||||
give detailed error messages where possible. */
|
||||
if (args[2] == 0)
|
||||
arg.soft_match = FALSE;
|
||||
break;
|
||||
|
||||
case 'I':
|
||||
/* "+I" is like "I", except that imm2_expr is used. */
|
||||
if (match_const_int (&arg, &imm2_expr.X_add_number, 0))
|
||||
imm2_expr.X_op = O_constant;
|
||||
else
|
||||
set_insn_error (arg.argnum, _("absolute expression required"));
|
||||
if (!match_const_int (&arg, &imm2_expr.X_add_number))
|
||||
return FALSE;
|
||||
imm2_expr.X_op = O_constant;
|
||||
if (HAVE_32BIT_GPRS)
|
||||
normalize_constant_expr (&imm2_expr);
|
||||
++args;
|
||||
|
@ -7203,43 +7173,10 @@ match_insn (struct mips_cl_insn *insn, const struct mips_opcode *opcode,
|
|||
}
|
||||
break;
|
||||
|
||||
case '\'':
|
||||
case ':':
|
||||
case '@':
|
||||
case '^':
|
||||
case '$':
|
||||
case '\\':
|
||||
case '%':
|
||||
case '|':
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '8':
|
||||
case 'B':
|
||||
case 'C':
|
||||
case 'J':
|
||||
case 'O':
|
||||
case 'P':
|
||||
case 'Q':
|
||||
case 'c':
|
||||
case 'h':
|
||||
case 'q':
|
||||
/* If these integer forms come last, there is no other
|
||||
form of the instruction that could match. Prefer to
|
||||
give detailed error messages where possible. */
|
||||
if (args[1] == 0)
|
||||
arg.soft_match = FALSE;
|
||||
break;
|
||||
|
||||
case 'I':
|
||||
if (match_const_int (&arg, &imm_expr.X_add_number, 0))
|
||||
imm_expr.X_op = O_constant;
|
||||
else
|
||||
set_insn_error (arg.argnum, _("absolute expression required"));
|
||||
if (!match_const_int (&arg, &imm_expr.X_add_number))
|
||||
return FALSE;
|
||||
imm_expr.X_op = O_constant;
|
||||
if (HAVE_32BIT_GPRS)
|
||||
normalize_constant_expr (&imm_expr);
|
||||
continue;
|
||||
|
@ -7253,38 +7190,36 @@ match_insn (struct mips_cl_insn *insn, const struct mips_opcode *opcode,
|
|||
offset_expr.X_op = O_constant;
|
||||
offset_expr.X_add_number = 0;
|
||||
}
|
||||
else if (match_expression (&arg, &offset_expr, offset_reloc))
|
||||
normalize_address_expr (&offset_expr);
|
||||
else
|
||||
set_insn_error (arg.argnum, _("absolute expression required"));
|
||||
{
|
||||
if (!match_expression (&arg, &offset_expr, offset_reloc))
|
||||
return FALSE;
|
||||
normalize_address_expr (&offset_expr);
|
||||
}
|
||||
continue;
|
||||
|
||||
case 'F':
|
||||
if (!match_float_constant (&arg, &imm_expr, &offset_expr,
|
||||
8, TRUE))
|
||||
set_insn_error (arg.argnum,
|
||||
_("floating-point expression required"));
|
||||
return FALSE;
|
||||
continue;
|
||||
|
||||
case 'L':
|
||||
if (!match_float_constant (&arg, &imm_expr, &offset_expr,
|
||||
8, FALSE))
|
||||
set_insn_error (arg.argnum,
|
||||
_("floating-point expression required"));
|
||||
return FALSE;
|
||||
continue;
|
||||
|
||||
case 'f':
|
||||
if (!match_float_constant (&arg, &imm_expr, &offset_expr,
|
||||
4, TRUE))
|
||||
set_insn_error (arg.argnum,
|
||||
_("floating-point expression required"));
|
||||
return FALSE;
|
||||
continue;
|
||||
|
||||
case 'l':
|
||||
if (!match_float_constant (&arg, &imm_expr, &offset_expr,
|
||||
4, FALSE))
|
||||
set_insn_error (arg.argnum,
|
||||
_("floating-point expression required"));
|
||||
return FALSE;
|
||||
continue;
|
||||
|
||||
/* ??? This is the traditional behavior, but is flaky if
|
||||
|
@ -7369,7 +7304,7 @@ match_insn (struct mips_cl_insn *insn, const struct mips_opcode *opcode,
|
|||
|
||||
static bfd_boolean
|
||||
match_mips16_insn (struct mips_cl_insn *insn, const struct mips_opcode *opcode,
|
||||
struct mips_operand_token *tokens, bfd_boolean soft_match)
|
||||
struct mips_operand_token *tokens)
|
||||
{
|
||||
const char *args;
|
||||
const struct mips_operand *operand;
|
||||
|
@ -7392,7 +7327,6 @@ match_mips16_insn (struct mips_cl_insn *insn, const struct mips_opcode *opcode,
|
|||
arg.argnum = 1;
|
||||
arg.last_regno = ILLEGAL_REG;
|
||||
arg.dest_regno = ILLEGAL_REG;
|
||||
arg.soft_match = soft_match;
|
||||
relax_char = 0;
|
||||
for (args = opcode->args;; ++args)
|
||||
{
|
||||
|
@ -7477,10 +7411,9 @@ match_mips16_insn (struct mips_cl_insn *insn, const struct mips_opcode *opcode,
|
|||
break;
|
||||
|
||||
case 'I':
|
||||
if (match_const_int (&arg, &imm_expr.X_add_number, 0))
|
||||
imm_expr.X_op = O_constant;
|
||||
else
|
||||
set_insn_error (arg.argnum, _("absolute expression required"));
|
||||
if (!match_const_int (&arg, &imm_expr.X_add_number))
|
||||
return FALSE;
|
||||
imm_expr.X_op = O_constant;
|
||||
if (HAVE_32BIT_GPRS)
|
||||
normalize_constant_expr (&imm_expr);
|
||||
continue;
|
||||
|
@ -13129,7 +13062,7 @@ mips_ip (char *str, struct mips_cl_insn *ip)
|
|||
break;
|
||||
}
|
||||
|
||||
if (match_insn (ip, insn, tokens, opcode_extra, more_alts,
|
||||
if (match_insn (ip, insn, tokens, opcode_extra,
|
||||
more_alts || (wrong_delay_slot_insns
|
||||
&& need_delay_slot_ok)))
|
||||
break;
|
||||
|
@ -13161,34 +13094,34 @@ mips_ip (char *str, struct mips_cl_insn *ip)
|
|||
static void
|
||||
mips16_ip (char *str, struct mips_cl_insn *ip)
|
||||
{
|
||||
char *s;
|
||||
struct mips_opcode *insn;
|
||||
char *end, *s, c;
|
||||
struct mips_opcode *insn, *first;
|
||||
struct mips_operand_token *tokens;
|
||||
|
||||
forced_insn_length = 0;
|
||||
|
||||
for (s = str; ISLOWER (*s); ++s)
|
||||
;
|
||||
switch (*s)
|
||||
end = s;
|
||||
c = *end;
|
||||
switch (c)
|
||||
{
|
||||
case '\0':
|
||||
break;
|
||||
|
||||
case ' ':
|
||||
*s++ = '\0';
|
||||
s++;
|
||||
break;
|
||||
|
||||
case '.':
|
||||
if (s[1] == 't' && s[2] == ' ')
|
||||
{
|
||||
*s = '\0';
|
||||
forced_insn_length = 2;
|
||||
s += 3;
|
||||
break;
|
||||
}
|
||||
else if (s[1] == 'e' && s[2] == ' ')
|
||||
{
|
||||
*s = '\0';
|
||||
forced_insn_length = 4;
|
||||
s += 3;
|
||||
break;
|
||||
|
@ -13202,7 +13135,11 @@ mips16_ip (char *str, struct mips_cl_insn *ip)
|
|||
if (mips_opts.noautoextend && !forced_insn_length)
|
||||
forced_insn_length = 2;
|
||||
|
||||
if ((insn = (struct mips_opcode *) hash_find (mips16_op_hash, str)) == NULL)
|
||||
*end = 0;
|
||||
first = insn = (struct mips_opcode *) hash_find (mips16_op_hash, str);
|
||||
*end = c;
|
||||
|
||||
if (!insn)
|
||||
{
|
||||
set_insn_error (0, _("Unrecognized opcode"));
|
||||
return;
|
||||
|
@ -13217,7 +13154,7 @@ mips16_ip (char *str, struct mips_cl_insn *ip)
|
|||
bfd_boolean ok;
|
||||
bfd_boolean more_alts;
|
||||
|
||||
gas_assert (strcmp (insn->name, str) == 0);
|
||||
gas_assert (strcmp (insn->name, first->name) == 0);
|
||||
|
||||
ok = is_opcode_valid_16 (insn);
|
||||
more_alts = (insn + 1 < &mips16_opcodes[bfd_mips16_num_opcodes]
|
||||
|
@ -13239,7 +13176,7 @@ mips16_ip (char *str, struct mips_cl_insn *ip)
|
|||
}
|
||||
}
|
||||
|
||||
if (match_mips16_insn (ip, insn, tokens, more_alts))
|
||||
if (match_mips16_insn (ip, insn, tokens))
|
||||
break;
|
||||
|
||||
/* Args don't match. */
|
||||
|
|
|
@ -1,3 +1,15 @@
|
|||
2013-08-19 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* gas/mips/ext-ill.l, gas/mips/lui-1.l, gas/mips/mips16e-64.l,
|
||||
gas/mips/mips32r2-ill-fp64.l, gas/mips/mips32r2-ill-nofp.l,
|
||||
gas/mips/mips32r2-ill.l, gas/mips/mips64r2-ill.l,
|
||||
gas/mips/octeon-ill.l, gas/mips/r5900-error-vu0.l,
|
||||
gas/mips/vr5400-ill.l: Adjust expected errors.
|
||||
* gas/mips/micromips-size-0.l,
|
||||
gas/mips/micromips-size-0.s: Likewise. Add new tests.
|
||||
* gas/mips/mips16e-save-err.s, gas/mips/mips16e-save-err.l: New test.
|
||||
* gas/mips/mips.exp: Run it.
|
||||
|
||||
2013-08-19 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* gas/mips/micromips-ill.l: Expect "floating-point expression required"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
.*: Assembler messages:
|
||||
.*:5: Error: Invalid field specification \(position 1, size 0\)
|
||||
.*:5: Error: operand 4 out of range `ext \$2,\$3,1,0'
|
||||
.*:6: Error: Invalid field specification \(position 1, size 0\)
|
||||
.*:7: Error: Invalid field specification \(position 31, size 2\)
|
||||
.*:8: Error: Invalid field specification \(position 1, size 32\)
|
||||
.*:9: Error: Invalid field specification \(position 33, size 0\)
|
||||
.*:7: Error: operand 4 out of range `dextm \$2,\$3,31,2'
|
||||
.*:8: Error: operand 4 out of range `dextm \$2,\$3,1,32'
|
||||
.*:9: Error: operand 4 out of range `dextu \$2,\$3,33,0'
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.*\.s: Assembler messages:
|
||||
.*\.s:5: Error: Operand 2 of `lui' must be in the range \[0x0, 0xffff\], was -1.
|
||||
.*\.s:6: Error: Operand 2 of `lui' must be in the range \[0x0, 0xffff\], was 0x10000.
|
||||
.*\.s:5: Error: operand 2 out of range `lui \$2,-1'
|
||||
.*\.s:6: Error: operand 2 out of range `lui \$2,65536'
|
||||
.*\.s:7: Error: bignum invalid
|
||||
.*\.s:8: Error: register value used as expression
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
.*:108: Warning: Wrong size instruction in a 32-bit branch delay slot
|
||||
.*:110: Warning: Wrong size instruction in a 32-bit branch delay slot
|
||||
.*:112: Error: Unrecognized 32-bit version of microMIPS opcode `addiusp32 256'
|
||||
.*:120: Error: Illegal operands `sll16 \$2,\$3,13'
|
||||
.*:120: Error: operand 3 out of range `sll16 \$2,\$3,13'
|
||||
.*:123: Error: Illegal operands `sll16 \$10,\$11,5'
|
||||
.*:128: Error: Unrecognized 16-bit version of microMIPS opcode `dsll16 \$2,\$3,5'
|
||||
.*:130: Error: Unrecognized 16-bit version of microMIPS opcode `dsll3216 \$2,\$3,5'
|
||||
|
@ -34,3 +34,11 @@
|
|||
.*:135: Error: Unrecognized 16-bit version of microMIPS opcode `dsll3216 \$2,\$3,13'
|
||||
.*:138: Error: Unrecognized 16-bit version of microMIPS opcode `dsll16 \$10,\$11,5'
|
||||
.*:140: Error: Unrecognized 16-bit version of microMIPS opcode `dsll3216 \$10,\$11,5'
|
||||
.*:145: Error: operand 3 out of range `addiu16 \$2,\$4,5'
|
||||
.*:146: Error: operand 3 out of range `addiu16 \$2,\$4,7'
|
||||
.*:149: Error: operand 3 out of range `andi16 \$2,\$4,5'
|
||||
.*:154: Error: operand 1 out of range `addiusp16 4'
|
||||
.*:155: Error: operand 1 out of range `addiusp16 7'
|
||||
.*:157: Error: operand 1 out of range `addiusp16 10'
|
||||
.*:160: Error: operand 1 out of range `addiusp16 1032'
|
||||
.*:162: Error: operand 1 out of range `addiusp16 -1036'
|
||||
|
|
|
@ -140,6 +140,27 @@ foo:
|
|||
dsll3216 $10, $11, 5
|
||||
dsll3232 $10, $11, 5
|
||||
|
||||
# Test out-of-range mapped constants
|
||||
addiu16 $2, $4, 4 # OK
|
||||
addiu16 $2, $4, 5 # error
|
||||
addiu16 $2, $4, 7 # error
|
||||
addiu16 $2, $4, 8 # OK
|
||||
andi16 $2, $4, 4 # OK
|
||||
andi16 $2, $4, 5 # error
|
||||
andi16 $2, $4, 7 # OK
|
||||
andi16 $2, $4, 8 # OK
|
||||
|
||||
# Test invalid ADDIUSP
|
||||
addiusp16 4 # error
|
||||
addiusp16 7 # error
|
||||
addiusp16 8 # OK
|
||||
addiusp16 10 # error
|
||||
addiusp16 12 # OK
|
||||
addiusp16 1028 # OK
|
||||
addiusp16 1032 # error
|
||||
addiusp16 -1032 # OK
|
||||
addiusp16 -1036 # error
|
||||
|
||||
# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ...
|
||||
.align 2
|
||||
.space 8
|
||||
|
|
|
@ -1039,6 +1039,7 @@ if { [istarget mips*-*-vxworks*] } {
|
|||
|
||||
run_dump_test "mips16e-jrc"
|
||||
run_dump_test "mips16e-save"
|
||||
run_list_test "mips16e-save-err" "-march=mips32 -32"
|
||||
run_dump_test "mips16e-64"
|
||||
run_list_test "mips16e-64" "-march=mips32 -32"
|
||||
run_dump_test "mips16-intermix"
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
.*: Assembler messages:
|
||||
.*: Error: Opcode not supported on this processor: .* (.*) `sew'
|
||||
.*: Error: Opcode not supported on this processor: .* (.*) `zew'
|
||||
.*: Error: Opcode not supported on this processor: .* (.*) `sew \$4'
|
||||
.*: Error: Opcode not supported on this processor: .* (.*) `zew \$4'
|
||||
|
|
13
gas/testsuite/gas/mips/mips16e-save-err.l
Normal file
13
gas/testsuite/gas/mips/mips16e-save-err.l
Normal file
|
@ -0,0 +1,13 @@
|
|||
.*: Assembler messages:
|
||||
.*:2: Error: Illegal operands `save \$3,100'
|
||||
.*:3: Error: missing frame size `save \$4'
|
||||
.*:4: Error: frame size specified twice `save \$4,100,200'
|
||||
.*:5: Error: operand 2 must be constant `save \$4,foo'
|
||||
.*:7: Error: invalid frame size `save \$4,1'
|
||||
.*:8: Error: invalid frame size `save \$4,7'
|
||||
.*:10: Error: invalid frame size `save \$4,12'
|
||||
.*:11: Error: invalid frame size `save \$4,2048'
|
||||
.*:12: Error: invalid frame size `save \$4,2052'
|
||||
.*:14: Error: Illegal operands `save \$4,\$6,0'
|
||||
.*:15: Error: Illegal operands `save 0,\$5,\$7'
|
||||
.*:18: Error: Illegal operands `save \$16,\$18,\$20,0'
|
18
gas/testsuite/gas/mips/mips16e-save-err.s
Normal file
18
gas/testsuite/gas/mips/mips16e-save-err.s
Normal file
|
@ -0,0 +1,18 @@
|
|||
.set mips16
|
||||
save $3,100 # error
|
||||
save $4 # error
|
||||
save $4,100,200 # error
|
||||
save $4,foo # error
|
||||
save $4,0 # OK
|
||||
save $4,1 # error
|
||||
save $4,7 # error
|
||||
save $4,8 # OK
|
||||
save $4,12 # error
|
||||
save $4,2048 # OK
|
||||
save $4,2052 # error
|
||||
save $4,0,$7 # error
|
||||
save $4,$6,0 # error
|
||||
save 0,$5,$7 # error
|
||||
save $16,$18,0 # OK
|
||||
save $16,$18,$19,0 # OK
|
||||
save $16,$18,$20,0 # error
|
|
@ -1,13 +1,13 @@
|
|||
.*: Assembler messages:
|
||||
.*:12: Error: Operand 3 of `ext' must be in the range \[0, 31\], was -1.
|
||||
.*:15: Error: Operand 3 of `ext' must be in the range \[0, 31\], was 32.
|
||||
.*:18: Error: Invalid field specification \(position 0, size 0\)
|
||||
.*:21: Error: Invalid field specification \(position 0, size 33\)
|
||||
.*:24: Error: Invalid field specification \(position 0, size 0\)
|
||||
.*:27: Error: Invalid field specification \(position 31, size 2\)
|
||||
.*:30: Error: Operand 3 of `ins' must be in the range \[0, 31\], was -1.
|
||||
.*:33: Error: Operand 3 of `ins' must be in the range \[0, 31\], was 32.
|
||||
.*:36: Error: Invalid field specification \(position 0, size 0\)
|
||||
.*:39: Error: Invalid field specification \(position 0, size 33\)
|
||||
.*:42: Error: Invalid field specification \(position 0, size 0\)
|
||||
.*:45: Error: Invalid field specification \(position 31, size 2\)
|
||||
.*:12: Error: operand 3 out of range `ext \$4,\$5,-1,1'
|
||||
.*:15: Error: operand 3 out of range `ext \$4,\$5,32,1'
|
||||
.*:18: Error: operand 4 out of range `ext \$4,\$5,0,0'
|
||||
.*:21: Error: operand 4 out of range `ext \$4,\$5,0,33'
|
||||
.*:24: Error: operand 4 out of range `ext \$4,\$5,0,0'
|
||||
.*:27: Error: operand 4 out of range `ext \$4,\$5,31,2'
|
||||
.*:30: Error: operand 3 out of range `ins \$4,\$5,-1,1'
|
||||
.*:33: Error: operand 3 out of range `ins \$4,\$5,32,1'
|
||||
.*:36: Error: operand 4 out of range `ins \$4,\$5,0,0'
|
||||
.*:39: Error: operand 4 out of range `ins \$4,\$5,0,33'
|
||||
.*:42: Error: operand 4 out of range `ins \$4,\$5,0,0'
|
||||
.*:45: Error: operand 4 out of range `ins \$4,\$5,31,2'
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
.*: Assembler messages:
|
||||
.*:12: Error: Operand 3 of `ext' must be in the range \[0, 31\], was -1.
|
||||
.*:15: Error: Operand 3 of `ext' must be in the range \[0, 31\], was 32.
|
||||
.*:18: Error: Invalid field specification \(position 0, size 0\)
|
||||
.*:21: Error: Invalid field specification \(position 0, size 33\)
|
||||
.*:24: Error: Invalid field specification \(position 0, size 0\)
|
||||
.*:27: Error: Invalid field specification \(position 31, size 2\)
|
||||
.*:30: Error: Operand 3 of `ins' must be in the range \[0, 31\], was -1.
|
||||
.*:33: Error: Operand 3 of `ins' must be in the range \[0, 31\], was 32.
|
||||
.*:36: Error: Invalid field specification \(position 0, size 0\)
|
||||
.*:39: Error: Invalid field specification \(position 0, size 33\)
|
||||
.*:42: Error: Invalid field specification \(position 0, size 0\)
|
||||
.*:45: Error: Invalid field specification \(position 31, size 2\)
|
||||
.*:12: Error: operand 3 out of range `ext \$4,\$5,-1,1'
|
||||
.*:15: Error: operand 3 out of range `ext \$4,\$5,32,1'
|
||||
.*:18: Error: operand 4 out of range `ext \$4,\$5,0,0'
|
||||
.*:21: Error: operand 4 out of range `ext \$4,\$5,0,33'
|
||||
.*:24: Error: operand 4 out of range `ext \$4,\$5,0,0'
|
||||
.*:27: Error: operand 4 out of range `ext \$4,\$5,31,2'
|
||||
.*:30: Error: operand 3 out of range `ins \$4,\$5,-1,1'
|
||||
.*:33: Error: operand 3 out of range `ins \$4,\$5,32,1'
|
||||
.*:36: Error: operand 4 out of range `ins \$4,\$5,0,0'
|
||||
.*:39: Error: operand 4 out of range `ins \$4,\$5,0,33'
|
||||
.*:42: Error: operand 4 out of range `ins \$4,\$5,0,0'
|
||||
.*:45: Error: operand 4 out of range `ins \$4,\$5,31,2'
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
.*: Assembler messages:
|
||||
.*:12: Error: Operand 3 of `ext' must be in the range \[0, 31\], was -1.
|
||||
.*:15: Error: Operand 3 of `ext' must be in the range \[0, 31\], was 32.
|
||||
.*:18: Error: Invalid field specification \(position 0, size 0\)
|
||||
.*:21: Error: Invalid field specification \(position 0, size 33\)
|
||||
.*:24: Error: Invalid field specification \(position 0, size 0\)
|
||||
.*:27: Error: Invalid field specification \(position 31, size 2\)
|
||||
.*:30: Error: Operand 3 of `ins' must be in the range \[0, 31\], was -1.
|
||||
.*:33: Error: Operand 3 of `ins' must be in the range \[0, 31\], was 32.
|
||||
.*:36: Error: Invalid field specification \(position 0, size 0\)
|
||||
.*:39: Error: Invalid field specification \(position 0, size 33\)
|
||||
.*:42: Error: Invalid field specification \(position 0, size 0\)
|
||||
.*:45: Error: Invalid field specification \(position 31, size 2\)
|
||||
.*:12: Error: operand 3 out of range `ext \$4,\$5,-1,1'
|
||||
.*:15: Error: operand 3 out of range `ext \$4,\$5,32,1'
|
||||
.*:18: Error: operand 4 out of range `ext \$4,\$5,0,0'
|
||||
.*:21: Error: operand 4 out of range `ext \$4,\$5,0,33'
|
||||
.*:24: Error: operand 4 out of range `ext \$4,\$5,0,0'
|
||||
.*:27: Error: operand 4 out of range `ext \$4,\$5,31,2'
|
||||
.*:30: Error: operand 3 out of range `ins \$4,\$5,-1,1'
|
||||
.*:33: Error: operand 3 out of range `ins \$4,\$5,32,1'
|
||||
.*:36: Error: operand 4 out of range `ins \$4,\$5,0,0'
|
||||
.*:39: Error: operand 4 out of range `ins \$4,\$5,0,33'
|
||||
.*:42: Error: operand 4 out of range `ins \$4,\$5,0,0'
|
||||
.*:45: Error: operand 4 out of range `ins \$4,\$5,31,2'
|
||||
.*:54: Warning: Float register should be even, was 1
|
||||
.*:57: Warning: Float register should be even, was 1
|
||||
|
|
|
@ -7,22 +7,22 @@
|
|||
.*:33: Error: Invalid field specification \(position 63, size 2\)
|
||||
.*:34: Error: Invalid field specification \(position 63, size 63\)
|
||||
.*:35: Error: Invalid field specification \(position 63, size 64\)
|
||||
.*:40: Error: Operand 3 of `dextm' must be in the range \[0, 31\], was -1.
|
||||
.*:43: Error: Operand 3 of `dextm' must be in the range \[0, 31\], was 32.
|
||||
.*:46: Error: Invalid field specification \(position 0, size 32\)
|
||||
.*:49: Error: Invalid field specification \(position 0, size 65\)
|
||||
.*:59: Error: Invalid field specification \(position 1, size 64\)
|
||||
.*:61: Error: Invalid field specification \(position 31, size 34\)
|
||||
.*:62: Error: Invalid field specification \(position 31, size 63\)
|
||||
.*:63: Error: Invalid field specification \(position 31, size 64\)
|
||||
.*:68: Error: Operand 3 of `dextu' must be in the range \[32, 63\], was 31.
|
||||
.*:71: Error: Operand 3 of `dextu' must be in the range \[32, 63\], was 64.
|
||||
.*:74: Error: Invalid field specification \(position 32, size 0\)
|
||||
.*:77: Error: Invalid field specification \(position 32, size 33\)
|
||||
.*:87: Error: Invalid field specification \(position 33, size 32\)
|
||||
.*:89: Error: Invalid field specification \(position 63, size 2\)
|
||||
.*:90: Error: Invalid field specification \(position 63, size 31\)
|
||||
.*:91: Error: Invalid field specification \(position 63, size 32\)
|
||||
.*:40: Error: operand 3 out of range `dextm \$4,\$5,-1,33'
|
||||
.*:43: Error: operand 3 out of range `dextm \$4,\$5,32,33'
|
||||
.*:46: Error: operand 4 out of range `dextm \$4,\$5,0,32'
|
||||
.*:49: Error: operand 4 out of range `dextm \$4,\$5,0,65'
|
||||
.*:59: Error: operand 4 out of range `dextm \$4,\$5,1,64'
|
||||
.*:61: Error: operand 4 out of range `dextm \$4,\$5,31,34'
|
||||
.*:62: Error: operand 4 out of range `dextm \$4,\$5,31,63'
|
||||
.*:63: Error: operand 4 out of range `dextm \$4,\$5,31,64'
|
||||
.*:68: Error: operand 3 out of range `dextu \$4,\$5,31,1'
|
||||
.*:71: Error: operand 3 out of range `dextu \$4,\$5,64,1'
|
||||
.*:74: Error: operand 4 out of range `dextu \$4,\$5,32,0'
|
||||
.*:77: Error: operand 4 out of range `dextu \$4,\$5,32,33'
|
||||
.*:87: Error: operand 4 out of range `dextu \$4,\$5,33,32'
|
||||
.*:89: Error: operand 4 out of range `dextu \$4,\$5,63,2'
|
||||
.*:90: Error: operand 4 out of range `dextu \$4,\$5,63,31'
|
||||
.*:91: Error: operand 4 out of range `dextu \$4,\$5,63,32'
|
||||
.*:96: Error: Operand 3 of `dins' must be in the range \[0, 63\], was -1.
|
||||
.*:99: Error: Operand 3 of `dins' must be in the range \[0, 63\], was 64.
|
||||
.*:102: Error: Invalid field specification \(position 0, size 0\)
|
||||
|
@ -31,27 +31,27 @@
|
|||
.*:117: Error: Invalid field specification \(position 63, size 2\)
|
||||
.*:118: Error: Invalid field specification \(position 63, size 63\)
|
||||
.*:119: Error: Invalid field specification \(position 63, size 64\)
|
||||
.*:124: Error: Operand 3 of `dinsm' must be in the range \[0, 31\], was -1.
|
||||
.*:127: Error: Operand 3 of `dinsm' must be in the range \[0, 31\], was 32.
|
||||
.*:130: Error: Invalid field specification \(position 31, size 1\)
|
||||
.*:133: Error: Invalid field specification \(position 0, size 65\)
|
||||
.*:136: Error: Invalid field specification \(position 0, size 2\)
|
||||
.*:137: Error: Invalid field specification \(position 0, size 3\)
|
||||
.*:140: Error: Invalid field specification \(position 1, size 2\)
|
||||
.*:141: Error: Invalid field specification \(position 1, size 3\)
|
||||
.*:143: Error: Invalid field specification \(position 1, size 64\)
|
||||
.*:144: Error: Invalid field specification \(position 30, size 2\)
|
||||
.*:146: Error: Invalid field specification \(position 30, size 63\)
|
||||
.*:147: Error: Invalid field specification \(position 30, size 64\)
|
||||
.*:150: Error: Invalid field specification \(position 31, size 63\)
|
||||
.*:151: Error: Invalid field specification \(position 31, size 64\)
|
||||
.*:156: Error: Operand 3 of `dinsu' must be in the range \[32, 63\], was 31.
|
||||
.*:159: Error: Operand 3 of `dinsu' must be in the range \[32, 63\], was 64.
|
||||
.*:162: Error: Invalid field specification \(position 32, size 0\)
|
||||
.*:165: Error: Invalid field specification \(position 32, size 33\)
|
||||
.*:175: Error: Invalid field specification \(position 33, size 32\)
|
||||
.*:178: Error: Invalid field specification \(position 62, size 31\)
|
||||
.*:179: Error: Invalid field specification \(position 62, size 32\)
|
||||
.*:181: Error: Invalid field specification \(position 63, size 2\)
|
||||
.*:182: Error: Invalid field specification \(position 63, size 31\)
|
||||
.*:183: Error: Invalid field specification \(position 63, size 32\)
|
||||
.*:124: Error: operand 3 out of range `dinsm \$4,\$5,-1,33'
|
||||
.*:127: Error: operand 3 out of range `dinsm \$4,\$5,32,33'
|
||||
.*:130: Error: operand 4 out of range `dinsm \$4,\$5,31,1'
|
||||
.*:133: Error: operand 4 out of range `dinsm \$4,\$5,0,65'
|
||||
.*:136: Error: operand 4 out of range `dinsm \$4,\$5,0,2'
|
||||
.*:137: Error: operand 4 out of range `dinsm \$4,\$5,0,3'
|
||||
.*:140: Error: operand 4 out of range `dinsm \$4,\$5,1,2'
|
||||
.*:141: Error: operand 4 out of range `dinsm \$4,\$5,1,3'
|
||||
.*:143: Error: operand 4 out of range `dinsm \$4,\$5,1,64'
|
||||
.*:144: Error: operand 4 out of range `dinsm \$4,\$5,30,2'
|
||||
.*:146: Error: operand 4 out of range `dinsm \$4,\$5,30,63'
|
||||
.*:147: Error: operand 4 out of range `dinsm \$4,\$5,30,64'
|
||||
.*:150: Error: operand 4 out of range `dinsm \$4,\$5,31,63'
|
||||
.*:151: Error: operand 4 out of range `dinsm \$4,\$5,31,64'
|
||||
.*:156: Error: operand 3 out of range `dinsu \$4,\$5,31,1'
|
||||
.*:159: Error: operand 3 out of range `dinsu \$4,\$5,64,1'
|
||||
.*:162: Error: operand 4 out of range `dinsu \$4,\$5,32,0'
|
||||
.*:165: Error: operand 4 out of range `dinsu \$4,\$5,32,33'
|
||||
.*:175: Error: operand 4 out of range `dinsu \$4,\$5,33,32'
|
||||
.*:178: Error: operand 4 out of range `dinsu \$4,\$5,62,31'
|
||||
.*:179: Error: operand 4 out of range `dinsu \$4,\$5,62,32'
|
||||
.*:181: Error: operand 4 out of range `dinsu \$4,\$5,63,2'
|
||||
.*:182: Error: operand 4 out of range `dinsu \$4,\$5,63,31'
|
||||
.*:183: Error: operand 4 out of range `dinsu \$4,\$5,63,32'
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
.*: Assembler messages:
|
||||
.*:5: Error: Operand 2 of `bbit032' must be in the range \[0, 31\], was 51.
|
||||
.*:7: Error: Operand 2 of `bbit0' must be in the range \[0, 31\], was 71.
|
||||
.*:10: Error: Operand 2 of `bbit132' must be in the range \[0, 31\], was 49.
|
||||
.*:12: Error: Operand 2 of `bbit1' must be in the range \[0, 31\], was 74.
|
||||
.*:15: Error: Invalid field specification \(position 0, size 37\)
|
||||
.*:17: Error: Operand 3 of `cins32' must be in the range \[0, 31\], was 39.
|
||||
.*:18: Error: Invalid field specification \(position 7, size 25\)
|
||||
.*:20: Error: Operand 3 of `cins' must be in the range \[0, 31\], was 64.
|
||||
.*:21: Error: Invalid field specification \(position 50, size 14\)
|
||||
.*:5: Error: operand 2 out of range `bbit032 \$23,51,foo'
|
||||
.*:7: Error: operand 2 out of range `bbit0 \$23,71,foo'
|
||||
.*:10: Error: operand 2 out of range `bbit132 \$23,49,foo'
|
||||
.*:12: Error: operand 2 out of range `bbit1 \$23,74,foo'
|
||||
.*:15: Error: operand 3 out of range `cins \$2,0,37'
|
||||
.*:17: Error: operand 3 out of range `cins32 \$19,\$31,39,12'
|
||||
.*:18: Error: operand 4 out of range `cins32 \$17,\$20,7,25'
|
||||
.*:20: Error: operand 3 out of range `cins \$24,\$10,64,8'
|
||||
.*:21: Error: operand 4 out of range `cins \$21,\$30,50,14'
|
||||
.*:23: Error: Opcode not supported on this processor.*
|
||||
.*:24: Error: Opcode not supported on this processor.*
|
||||
.*:25: Error: Opcode not supported on this processor.*
|
||||
|
@ -28,18 +28,18 @@
|
|||
.*:41: Error: Opcode not supported on this processor.*
|
||||
.*:42: Error: Opcode not supported on this processor.*
|
||||
.*:43: Error: Opcode not supported on this processor.*
|
||||
.*:45: Error: Illegal operands `dmfc2 \$2,0x10000'
|
||||
.*:46: Error: Illegal operands `dmtc2 \$2,0x12345'
|
||||
.*:47: Error: Illegal operands `dmfc2 \$9,\$12'
|
||||
.*:48: Error: Illegal operands `dmfc2 \$4,\$15,4'
|
||||
.*:49: Error: Illegal operands `dmtc2 \$16,\$8'
|
||||
.*:50: Error: Illegal operands `dmtc2 \$22,\$7,\$4'
|
||||
.*:52: Error: Invalid field specification \(position 26, size 32\)
|
||||
.*:54: Error: Operand 3 of `exts32' must be in the range \[0, 31\], was 32.
|
||||
.*:55: Error: Invalid field specification \(position 3, size 29\)
|
||||
.*:57: Error: Operand 3 of `exts' must be in the range \[0, 31\], was 70.
|
||||
.*:58: Error: Invalid field specification \(position 39, size 25\)
|
||||
.*:60: Error: Operand 3 of `seqi' must be in the range \[-512, 511\], was 512.
|
||||
.*:61: Error: Operand 2 of `seqi' must be in the range \[-512, 511\], was -771.
|
||||
.*:62: Error: Operand 3 of `snei' must be in the range \[-512, 511\], was 615.
|
||||
.*:63: Error: Operand 2 of `snei' must be in the range \[-512, 511\], was -513.
|
||||
.*:45: Error: operand 2 out of range `dmfc2 \$2,0x10000'
|
||||
.*:46: Error: operand 2 out of range `dmtc2 \$2,0x12345'
|
||||
.*:47: Error: operand 2 must be constant `dmfc2 \$9,\$12'
|
||||
.*:48: Error: operand 2 must be constant `dmfc2 \$4,\$15,4'
|
||||
.*:49: Error: operand 2 must be constant `dmtc2 \$16,\$8'
|
||||
.*:50: Error: operand 2 must be constant `dmtc2 \$22,\$7,\$4'
|
||||
.*:52: Error: operand 3 out of range `exts \$26,26,32'
|
||||
.*:54: Error: operand 3 out of range `exts32 \$7,\$21,32,10'
|
||||
.*:55: Error: operand 4 out of range `exts32 \$31,\$13,3,29'
|
||||
.*:57: Error: operand 3 out of range `exts \$14,\$29,70,14'
|
||||
.*:58: Error: operand 4 out of range `exts \$20,\$16,39,25'
|
||||
.*:60: Error: operand 3 out of range `seqi \$14,\$13,512'
|
||||
.*:61: Error: operand 2 out of range `seqi \$19,-771'
|
||||
.*:62: Error: operand 3 out of range `snei \$18,\$30,615'
|
||||
.*:63: Error: operand 2 out of range `snei \$17,-513'
|
||||
|
|
|
@ -94,14 +94,14 @@
|
|||
.*: Error: Illegal operands `vaddz\.xyzw \$vf31xyzw,\$vf0xyzw,\$vf0x'
|
||||
.*: Error: Illegal operands `vaddz\.xyzw \$vf31xyzw,\$vf15xyzw,\$vf7y'
|
||||
.*: Error: Illegal operands `vaddz\.xyzw \$vf31xyzw,\$vf31xyzw,\$vf31w'
|
||||
.*: Error: Operand 1 of `vcallms' must be in the range \[0x0, 0x3fff8\], was \-1\.
|
||||
.*: Error: Operand 1 of `vcallms' must be in the range \[0x0, 0x3fff8\], was \-128\.
|
||||
.*: Error: Operand 1 of `vcallms' must be a factor of 8, was 0x1\.
|
||||
.*: Error: Operand 1 of `vcallms' must be a factor of 8, was 0x7\.
|
||||
.*: Error: Operand 1 of `vcallms' must be a factor of 8, was 0x4\.
|
||||
.*: Error: Operand 1 of `vcallms' must be a factor of 8, was 0x2\.
|
||||
.*: Error: Operand 1 of `vcallms' must be in the range \[0x0, 0x3fff8\], was 0x40000\.
|
||||
.*: Error: Operand 1 of `vcallms' must be in the range \[0x0, 0x3fff8\], was 0x40008\.
|
||||
.*: Error: operand 1 out of range `vcallms -1'
|
||||
.*: Error: operand 1 out of range `vcallms -0x0080'
|
||||
.*: Error: operand 1 out of range `vcallms 0x1'
|
||||
.*: Error: operand 1 out of range `vcallms 0x7'
|
||||
.*: Error: operand 1 out of range `vcallms 0x4'
|
||||
.*: Error: operand 1 out of range `vcallms 0x2'
|
||||
.*: Error: operand 1 out of range `vcallms 0x40000'
|
||||
.*: Error: operand 1 out of range `vcallms 0x40008'
|
||||
.*: Error: Illegal operands `vclipw\.xyz \$vf0xyz,\$vf0x'
|
||||
.*: Error: Illegal operands `vclipw\.xyz \$vf0xyz,\$vf31y'
|
||||
.*: Error: Illegal operands `vclipw\.xyz \$vf1xyz,\$vf2z'
|
||||
|
@ -123,11 +123,11 @@
|
|||
.*: Error: Illegal operands `vftoi15\.xyzw \$vf0xyzw,\$vf0xyz'
|
||||
.*: Error: Illegal operands `vftoi15\.y \$vf1y,\$vf2x'
|
||||
.*: Error: Illegal operands `vftoi15\.y \$vf31y,\$vf0w'
|
||||
.*: Error: Operand 3 of `viaddi' must be in the range \[\-16, 15\], was \-17\.
|
||||
.*: Error: Operand 3 of `viaddi' must be in the range \[\-16, 15\], was 16\.
|
||||
.*: Error: Operand 3 of `viaddi' must be in the range \[\-16, 15\], was 17\.
|
||||
.*: Error: Operand 3 of `viaddi' must be in the range \[\-16, 15\], was 32\.
|
||||
.*: Error: Operand 3 of `viaddi' must be in the range \[\-16, 15\], was 31\.
|
||||
.*: Error: operand 3 out of range `viaddi \$vi0,\$vi0,-17'
|
||||
.*: Error: operand 3 out of range `viaddi \$vi1,\$vi2,16'
|
||||
.*: Error: operand 3 out of range `viaddi \$vi31,\$vi0,17'
|
||||
.*: Error: operand 3 out of range `viaddi \$vi31,\$vi15,32'
|
||||
.*: Error: operand 3 out of range `viaddi \$vi31,\$vi31,31'
|
||||
.*: Error: Illegal operands `viand \$vi0xyzw,\$vi0,\$vi0'
|
||||
.*: Error: Illegal operands `viand \$vi0,\$vi0xyzw,\$vi31'
|
||||
.*: Error: Illegal operands `viand \$vi0,\$vi31,\$vi0xyzw'
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
.*: Assembler messages:
|
||||
.*:3: Error: Operand 3 of `sll.ob' must be scalar
|
||||
.*:7: Error: Operand 3 of `srl.ob' must be scalar
|
||||
.*:10: Error: Operand 2 of `rzu.ob' must be an immediate
|
||||
.*:11: Error: Operand 2 of `rzu.ob' must be an immediate
|
||||
.*:3: Error: operand 3 must be scalar `sll.ob \$f2,\$f4,\$f6'
|
||||
.*:7: Error: operand 3 must be scalar `srl.ob \$f2,\$f4,\$f6'
|
||||
.*:10: Error: operand 2 must be an immediate `rzu.ob \$f2,\$f6\[1\]'
|
||||
.*:11: Error: operand 2 must be an immediate `rzu.ob \$f2,\$f6'
|
||||
.*:14: Error: Illegal operands `add.ob \$v2,\$f4,\$f6'
|
||||
.*:15: Error: Illegal operands `add.ob \$f2,\$v4,\$f6'
|
||||
.*:16: Error: Illegal operands `add.ob \$f2,\$f4,\$v6'
|
||||
|
|
Loading…
Reference in a new issue