Only print prefixes before fwait

gas/testsuite/

	* gas/i386/prefix.s: Add another fwait test.
	* gas/i386/prefix.d: Updated.

opcodes/

	* i386-dis.c (fwait_prefix): New.
	(ckprefix): Set fwait_prefix.
	(print_insn): Properly print prefixes before fwait.
This commit is contained in:
H.J. Lu 2014-06-10 11:16:41 -07:00
parent b71c404358
commit d9949a3673
5 changed files with 20 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2014-06-10 H.J. Lu <hongjiu.lu@intel.com>
* gas/i386/prefix.s: Add another fwait test.
* gas/i386/prefix.d: Updated.
2014-06-09 Nick Clifton <nickc@redhat.com>
* gas/msp430/msp430x.d: Update to match revised assembler output.

View File

@ -12,6 +12,8 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: 9b 67 df e0 addr16 fstsw %ax
[ ]*[a-f0-9]+: 36 67 66 f3 a7 repz cmpsw %es:\(%di\),%ss:\(%si\)
[ ]*[a-f0-9]+: 26 9b es fwait
[ ]*[a-f0-9]+: 9b fwait
[ ]*[a-f0-9]+: 65 c7 05 00 00 00 00 00 00 00 00 movl \$0x0,%gs:0x0
[ ]*[a-f0-9]+: 66 f2 0f 38 17 data16 \(bad\)
[ ]*[a-f0-9]+: f2 66 0f 54 repnz \(bad\)
[ ]*[a-f0-9]+: f2 0f 54 repnz \(bad\)

View File

@ -4,6 +4,9 @@
es fwait
fwait
movl $0,%gs:fpu_owner_task
.byte 0x66
.byte 0xf2
.byte 0x0f

View File

@ -1,3 +1,9 @@
2014-06-10 H.J. Lu <hongjiu.lu@intel.com>
* i386-dis.c (fwait_prefix): New.
(ckprefix): Set fwait_prefix.
(print_insn): Properly print prefixes before fwait.
2014-06-07 Alan Modra <amodra@gmail.com>
* ppc-opc.c (UISIGNOPT): Define and use with cmpli.

View File

@ -2883,6 +2883,7 @@ static int last_data_prefix;
static int last_addr_prefix;
static int last_rex_prefix;
static int last_seg_prefix;
static int fwait_prefix;
/* The PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is mandatory. */
static int mandatory_prefix;
/* The active segment register prefix. */
@ -11631,6 +11632,7 @@ ckprefix (void)
last_addr_prefix = -1;
last_rex_prefix = -1;
last_seg_prefix = -1;
fwait_prefix = -1;
active_seg_prefix = 0;
for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
all_prefixes[i] = 0;
@ -11720,6 +11722,7 @@ ckprefix (void)
/* fwait is really an instruction. If there are prefixes
before the fwait, they belong to the fwait, *not* to the
following instruction. */
fwait_prefix = i;
if (prefixes || rex)
{
prefixes |= PREFIX_FWAIT;
@ -12569,8 +12572,7 @@ print_insn (bfd_vma pc, disassemble_info *info)
&& ((*codep < 0xd8) || (*codep > 0xdf))))
{
/* Handle prefixes before fwait. */
for (i = 0;
i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
for (i = 0; i < fwait_prefix && all_prefixes[i];
i++)
(*info->fprintf_func) (info->stream, "%s ",
prefix_name (all_prefixes[i], sizeflag));