diff options
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 7 | ||||
-rw-r--r-- | gas/config/tc-i386.c | 16 |
2 files changed, 15 insertions, 8 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index a1a4998..600871d 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2012-07-31 Jan Beulich <jbeulich@suse.com> + + * 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 <nickc@redhat.com> * po/gas.pot: Updated template. diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 9bd2f64..b8c08e8 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 (); |