diff --git a/gas/ChangeLog b/gas/ChangeLog index a1a4998081f..600871d7e40 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2012-07-31 Jan Beulich + + * config/tc-i386.c (match_template): New local variable + 'specific_error'. Set it from i.error after failed + check_VecOperands or VEX_check_operands. Use it if set in + preference to i.error when actually issuing disagnostic. + 2012-07-30 Nick Clifton * po/gas.pot: Updated template. diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 9bd2f64cdb6..b8c08e83030 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -4015,6 +4015,7 @@ match_template (void) unsigned int j; unsigned int found_cpu_match; unsigned int check_register; + enum i386_error specific_error = 0; #if MAX_OPERANDS != 5 # error "MAX_OPERANDS must be 5." @@ -4311,13 +4312,12 @@ check_reverse: continue; } - /* Check if vector operands are valid. */ - if (check_VecOperands (t)) - continue; - - /* Check if VEX operands are valid. */ - if (VEX_check_operands (t)) - continue; + /* Check if vector and VEX operands are valid. */ + if (check_VecOperands (t) || VEX_check_operands (t)) + { + specific_error = i.error; + continue; + } /* We've found a match; break out of loop. */ break; @@ -4327,7 +4327,7 @@ check_reverse: { /* We found no match. */ const char *err_msg; - switch (i.error) + switch (specific_error ? specific_error : i.error) { default: abort ();