From: Jan Beulich Date: Fri, 26 Jun 2020 14:44:31 +0000 (+0200) Subject: x86: make I disassembler macro available for new use X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d1c361252ba4902046fd7725f880fa166e88e3e4;p=binutils-gdb.git x86: make I disassembler macro available for new use The {Q|Q} construct on lgdt/lidt and the slightly different {Q|IQ} struck me as odd when encountering. Realizing they both have the same effect, let's free up the I macro by using the former form of construct where needed (there aren't that many uses overall). With there now being several multi-character macros also re-do "alt" handling slightly: Terminate it when finding the closing brace, rather than after the next single character. Also set the flag only when actually in Intel syntax mode. --- diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index dfc94fbfbbe..8cb59605217 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,10 @@ +2020-06-26 Jan Beulich + + * i386-dis.c: Adjust description of I macro. + (x86_64_table): Drop use of I. + (float_mem): Replace use of I. + (putop): Remove handling of I. Adjust setting/clearing of "alt". + 2020-06-26 Jan Beulich * i386-dis.c: (print_insn): Avoid straight assignment to diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index f57409dd17a..e1ebb485535 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -2250,8 +2250,7 @@ struct dis386 { 'F' => print 'w' or 'l' depending on address size prefix (loop insns) 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns) 'H' => print ",pt" or ",pn" branch hint - 'I' => honor following macro letter even in Intel mode (implemented only - for some of the macro letters) + 'I' unused. 'J' unused. 'K' => print 'd' or 'q' if rex prefix is present. 'L' => print 'l' if suffix_always is true @@ -6918,13 +6917,13 @@ static const struct dis386 x86_64_table[][2] = { /* X86_64_0F01_REG_0 */ { - { "sgdt{Q|IQ}", { M }, 0 }, + { "sgdt{Q|Q}", { M }, 0 }, { "sgdt", { M }, 0 }, }, /* X86_64_0F01_REG_1 */ { - { "sidt{Q|IQ}", { M }, 0 }, + { "sidt{Q|Q}", { M }, 0 }, { "sidt", { M }, 0 }, }, @@ -12323,9 +12322,9 @@ static const char *float_mem[] = { "(bad)", "fst{s|}", "fstp{s|}", - "fldenvIC", + "fldenv{C|C}", "fldcw", - "fNstenvIC", + "fNstenv{C|C}", "fNstcw", /* da */ "fiadd{l|}", @@ -12359,9 +12358,9 @@ static const char *float_mem[] = { "fisttp{ll|}", "fst{l||}", "fstp{l|}", - "frstorIC", + "frstor{C|C}", "(bad)", - "fNsaveIC", + "fNsave{C|C}", "fNstsw", /* de */ "fiadd{s|}", @@ -12735,11 +12734,9 @@ putop (const char *in_template, int sizeflag) while (*++p != '|') if (*p == '}' || *p == '\0') abort (); + alt = 1; } - /* Fall through. */ - case 'I': - alt = 1; - continue; + break; case '|': while (*++p != '}') { @@ -12748,6 +12745,7 @@ putop (const char *in_template, int sizeflag) } break; case '}': + alt = 0; break; case 'A': if (intel_syntax) @@ -13283,7 +13281,6 @@ putop (const char *in_template, int sizeflag) } break; } - alt = 0; } *obufp = 0; mnemonicendp = obufp;