Handle prefixes before fwait

0x9b (fwait) is both an instruction and an opcode prefix.  When 0x9b is
treated as an instruction, we need to handle any prefixes before it.
This patch handles it properly.

gas/testsuite/

	PR binutils/16891
	* gas/i386/opcode.s: Add test for fwait with prefix.
	* gas/i386/opcode-intel.d: Updated.
	* gas/i386/opcode-suffix.d: Likewise.
	* gas/i386/opcode.d: Likewise.

opcodes/

	PR binutils/16891
	* i386-dis.c (print_insn): Handle prefixes before fwait.
This commit is contained in:
H.J. Lu
2014-05-01 09:39:51 -07:00
parent f8c2a73c88
commit 86a80a50f2
7 changed files with 29 additions and 1 deletions

@ -1,3 +1,11 @@
2014-05-01 H.J. Lu <hongjiu.lu@intel.com>
PR binutils/16891
* gas/i386/opcode.s: Add test for fwait with prefix.
* gas/i386/opcode-intel.d: Updated.
* gas/i386/opcode-suffix.d: Likewise.
* gas/i386/opcode.d: Likewise.
2014-04-23 Will Newton <will.newton@linaro.org> 2014-04-23 Will Newton <will.newton@linaro.org>
* gas/arm/backslash-at.d: Fix dump output regexps for * gas/arm/backslash-at.d: Fix dump output regexps for

@ -592,4 +592,6 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: 0f 4b 90 90 90 90 90 cmovnp edx,DWORD PTR \[eax-0x6f6f6f70\] [ ]*[a-f0-9]+: 0f 4b 90 90 90 90 90 cmovnp edx,DWORD PTR \[eax-0x6f6f6f70\]
[ ]*[a-f0-9]+: 66 0f 4a 90 90 90 90 90 cmovp dx,WORD PTR \[eax-0x6f6f6f70\] [ ]*[a-f0-9]+: 66 0f 4a 90 90 90 90 90 cmovp dx,WORD PTR \[eax-0x6f6f6f70\]
[ ]*[a-f0-9]+: 66 0f 4b 90 90 90 90 90 cmovnp dx,WORD PTR \[eax-0x6f6f6f70\] [ ]*[a-f0-9]+: 66 0f 4b 90 90 90 90 90 cmovnp dx,WORD PTR \[eax-0x6f6f6f70\]
[ ]*[a-f0-9]+: 26 9b [ ]*es fwait
[ ]*[a-f0-9]+: 9b [ ]*fwait
#pass #pass

@ -592,4 +592,6 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: 0f 4b 90 90 90 90 90 cmovnpl -0x6f6f6f70\(%eax\),%edx [ ]*[a-f0-9]+: 0f 4b 90 90 90 90 90 cmovnpl -0x6f6f6f70\(%eax\),%edx
[ ]*[a-f0-9]+: 66 0f 4a 90 90 90 90 90 cmovpw -0x6f6f6f70\(%eax\),%dx [ ]*[a-f0-9]+: 66 0f 4a 90 90 90 90 90 cmovpw -0x6f6f6f70\(%eax\),%dx
[ ]*[a-f0-9]+: 66 0f 4b 90 90 90 90 90 cmovnpw -0x6f6f6f70\(%eax\),%dx [ ]*[a-f0-9]+: 66 0f 4b 90 90 90 90 90 cmovnpw -0x6f6f6f70\(%eax\),%dx
[ ]*[a-f0-9]+: 26 9b [ ]*es fwait
[ ]*[a-f0-9]+: 9b [ ]*fwait
#pass #pass

@ -591,4 +591,6 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: 0f 4b 90 90 90 90 90 cmovnp -0x6f6f6f70\(%eax\),%edx [ ]*[a-f0-9]+: 0f 4b 90 90 90 90 90 cmovnp -0x6f6f6f70\(%eax\),%edx
[ ]*[a-f0-9]+: 66 0f 4a 90 90 90 90 90 cmovp -0x6f6f6f70\(%eax\),%dx [ ]*[a-f0-9]+: 66 0f 4a 90 90 90 90 90 cmovp -0x6f6f6f70\(%eax\),%dx
[ ]*[a-f0-9]+: 66 0f 4b 90 90 90 90 90 cmovnp -0x6f6f6f70\(%eax\),%dx [ ]*[a-f0-9]+: 66 0f 4b 90 90 90 90 90 cmovnp -0x6f6f6f70\(%eax\),%dx
[ ]*[a-f0-9]+: 26 9b [ ]*es fwait
[ ]*[a-f0-9]+: 9b [ ]*fwait
#pass #pass

@ -589,3 +589,6 @@ foo:
cmovpo 0x90909090(%eax),%edx cmovpo 0x90909090(%eax),%edx
cmovpe 0x90909090(%eax),%dx cmovpe 0x90909090(%eax),%dx
cmovpo 0x90909090(%eax),%dx cmovpo 0x90909090(%eax),%dx
es fwait
fwait

@ -1,3 +1,8 @@
2014-05-01 H.J. Lu <hongjiu.lu@intel.com>
PR binutils/16891
* i386-dis.c (print_insn): Handle prefixes before fwait.
2014-04-26 Alan Modra <amodra@gmail.com> 2014-04-26 Alan Modra <amodra@gmail.com>
* po/POTFILES.in: Regenerate. * po/POTFILES.in: Regenerate.

@ -12548,8 +12548,14 @@ print_insn (bfd_vma pc, disassemble_info *info)
if (((prefixes & PREFIX_FWAIT) if (((prefixes & PREFIX_FWAIT)
&& ((*codep < 0xd8) || (*codep > 0xdf)))) && ((*codep < 0xd8) || (*codep > 0xdf))))
{ {
/* Handle prefixes before fwait. */
for (i = 0;
i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
i++)
(*info->fprintf_func) (info->stream, "%s ",
prefix_name (all_prefixes[i], sizeflag));
(*info->fprintf_func) (info->stream, "fwait"); (*info->fprintf_func) (info->stream, "fwait");
return 1; return i + 1;
} }
if (*codep == 0x0f) if (*codep == 0x0f)