diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2013-08-19 19:26:11 +0000 |
---|---|---|
committer | Richard Sandiford <rdsandiford@googlemail.com> | 2013-08-19 19:26:11 +0000 |
commit | 1a00e61226b3ff5d9be22992b7c4bf15bda6edb2 (patch) | |
tree | 869bff5cc416d2e1cc1793ddb6a847664dcba939 /gas | |
parent | e3de51ce1105cd1d8bfbbe6e298233098822996a (diff) | |
download | gdb-1a00e61226b3ff5d9be22992b7c4bf15bda6edb2.zip gdb-1a00e61226b3ff5d9be22992b7c4bf15bda6edb2.tar.gz gdb-1a00e61226b3ff5d9be22992b7c4bf15bda6edb2.tar.bz2 |
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.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 20 | ||||
-rw-r--r-- | gas/config/tc-mips.c | 289 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 12 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/ext-ill.l | 8 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/lui-1.l | 4 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/micromips-size-0.l | 10 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/micromips-size-0.s | 21 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/mips.exp | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/mips16e-64.l | 4 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/mips16e-save-err.l | 13 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/mips16e-save-err.s | 18 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/mips32r2-ill-fp64.l | 24 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/mips32r2-ill-nofp.l | 24 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/mips32r2-ill.l | 24 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/mips64r2-ill.l | 80 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/octeon-ill.l | 48 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/r5900-error-vu0.l | 26 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/vr5400-ill.l | 8 |
18 files changed, 332 insertions, 302 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index daeace0..d6ab086 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,25 @@ 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. (mips_insn_error): New struct. (insn_error): Change to a mips_insn_error. diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index f51ae85..afa86be 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -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. */ diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index b8d15d0..128facd 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,5 +1,17 @@ 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" 2013-08-06 Jürgen Urban <JuergenUrban@gmx.de> diff --git a/gas/testsuite/gas/mips/ext-ill.l b/gas/testsuite/gas/mips/ext-ill.l index b61f03c..606c047 100644 --- a/gas/testsuite/gas/mips/ext-ill.l +++ b/gas/testsuite/gas/mips/ext-ill.l @@ -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' diff --git a/gas/testsuite/gas/mips/lui-1.l b/gas/testsuite/gas/mips/lui-1.l index 464bd75..d2f0c2d 100644 --- a/gas/testsuite/gas/mips/lui-1.l +++ b/gas/testsuite/gas/mips/lui-1.l @@ -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 diff --git a/gas/testsuite/gas/mips/micromips-size-0.l b/gas/testsuite/gas/mips/micromips-size-0.l index e7238b0..e34d83b 100644 --- a/gas/testsuite/gas/mips/micromips-size-0.l +++ b/gas/testsuite/gas/mips/micromips-size-0.l @@ -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' diff --git a/gas/testsuite/gas/mips/micromips-size-0.s b/gas/testsuite/gas/mips/micromips-size-0.s index c58e543..bc2588d 100644 --- a/gas/testsuite/gas/mips/micromips-size-0.s +++ b/gas/testsuite/gas/mips/micromips-size-0.s @@ -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 diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp index d4a0410..4538aca 100644 --- a/gas/testsuite/gas/mips/mips.exp +++ b/gas/testsuite/gas/mips/mips.exp @@ -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" diff --git a/gas/testsuite/gas/mips/mips16e-64.l b/gas/testsuite/gas/mips/mips16e-64.l index 1202212..378959a 100644 --- a/gas/testsuite/gas/mips/mips16e-64.l +++ b/gas/testsuite/gas/mips/mips16e-64.l @@ -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' diff --git a/gas/testsuite/gas/mips/mips16e-save-err.l b/gas/testsuite/gas/mips/mips16e-save-err.l new file mode 100644 index 0000000..3403fc7 --- /dev/null +++ b/gas/testsuite/gas/mips/mips16e-save-err.l @@ -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' diff --git a/gas/testsuite/gas/mips/mips16e-save-err.s b/gas/testsuite/gas/mips/mips16e-save-err.s new file mode 100644 index 0000000..afed6c6 --- /dev/null +++ b/gas/testsuite/gas/mips/mips16e-save-err.s @@ -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 diff --git a/gas/testsuite/gas/mips/mips32r2-ill-fp64.l b/gas/testsuite/gas/mips/mips32r2-ill-fp64.l index 3e0e30e..adffffd 100644 --- a/gas/testsuite/gas/mips/mips32r2-ill-fp64.l +++ b/gas/testsuite/gas/mips/mips32r2-ill-fp64.l @@ -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' diff --git a/gas/testsuite/gas/mips/mips32r2-ill-nofp.l b/gas/testsuite/gas/mips/mips32r2-ill-nofp.l index 3e0e30e..adffffd 100644 --- a/gas/testsuite/gas/mips/mips32r2-ill-nofp.l +++ b/gas/testsuite/gas/mips/mips32r2-ill-nofp.l @@ -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' diff --git a/gas/testsuite/gas/mips/mips32r2-ill.l b/gas/testsuite/gas/mips/mips32r2-ill.l index 7f9bedc..48cc783 100644 --- a/gas/testsuite/gas/mips/mips32r2-ill.l +++ b/gas/testsuite/gas/mips/mips32r2-ill.l @@ -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 diff --git a/gas/testsuite/gas/mips/mips64r2-ill.l b/gas/testsuite/gas/mips/mips64r2-ill.l index 6cc6b35..aa32a44 100644 --- a/gas/testsuite/gas/mips/mips64r2-ill.l +++ b/gas/testsuite/gas/mips/mips64r2-ill.l @@ -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' diff --git a/gas/testsuite/gas/mips/octeon-ill.l b/gas/testsuite/gas/mips/octeon-ill.l index 6ff4fde..1664e31 100644 --- a/gas/testsuite/gas/mips/octeon-ill.l +++ b/gas/testsuite/gas/mips/octeon-ill.l @@ -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' diff --git a/gas/testsuite/gas/mips/r5900-error-vu0.l b/gas/testsuite/gas/mips/r5900-error-vu0.l index d012caa..b462d95 100644 --- a/gas/testsuite/gas/mips/r5900-error-vu0.l +++ b/gas/testsuite/gas/mips/r5900-error-vu0.l @@ -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' diff --git a/gas/testsuite/gas/mips/vr5400-ill.l b/gas/testsuite/gas/mips/vr5400-ill.l index 0554c8a..065e5c1 100644 --- a/gas/testsuite/gas/mips/vr5400-ill.l +++ b/gas/testsuite/gas/mips/vr5400-ill.l @@ -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' |