X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=opcodes%2Fi386-gen.c;h=1c5082ea0dcededd03a07f4624629090f63e0f65;hb=507916b8551f6227da9fe8071267c164a3014b79;hp=0c7ea10e2324461070f9bca0c025b3e1dabc12e2;hpb=74fb338f4689b1072a5933102fe1f08caab5bac6;p=deliverable%2Fbinutils-gdb.git diff --git a/opcodes/i386-gen.c b/opcodes/i386-gen.c index 0c7ea10e23..1c5082ea0d 100644 --- a/opcodes/i386-gen.c +++ b/opcodes/i386-gen.c @@ -1107,6 +1107,8 @@ process_i386_opcode_modifier (FILE *table, char *mod, char **opnd, int lineno) if (strcmp (mod, "0")) { + unsigned int have_w = 0, bwlq_suf = 0xf; + last = mod + strlen (mod); for (next = mod; next && next < last; ) { @@ -1120,8 +1122,30 @@ process_i386_opcode_modifier (FILE *table, char *mod, char **opnd, int lineno) lineno); if (strcasecmp(str, "IsString") == 0) active_isstring = 1; + + if (strcasecmp(str, "W") == 0) + have_w = 1; + + if (strcasecmp(str, "No_bSuf") == 0) + bwlq_suf &= ~1; + if (strcasecmp(str, "No_wSuf") == 0) + bwlq_suf &= ~2; + if (strcasecmp(str, "No_lSuf") == 0) + bwlq_suf &= ~4; + if (strcasecmp(str, "No_qSuf") == 0) + bwlq_suf &= ~8; } } + + if (have_w && !bwlq_suf) + fail ("%s: %d: stray W modifier\n", filename, lineno); + if (have_w && !(bwlq_suf & 1)) + fprintf (stderr, "%s: %d: W modifier without Byte operand(s)\n", + filename, lineno); + if (have_w && !(bwlq_suf & ~1)) + fprintf (stderr, + "%s: %d: W modifier without Word/Dword/Qword operand(s)\n", + filename, lineno); } output_opcode_modifier (table, modifiers, ARRAY_SIZE (modifiers)); }