From: H.J. Lu Date: Tue, 10 Jun 2014 18:16:41 +0000 (-0700) Subject: Only print prefixes before fwait X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d9949a367352c66b7d90ca32bdbd5cac38c14b53;p=binutils-gdb.git 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. --- diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 768c26b0d4f..43a37e36fa7 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-06-10 H.J. Lu + + * gas/i386/prefix.s: Add another fwait test. + * gas/i386/prefix.d: Updated. + 2014-06-09 Nick Clifton * gas/msp430/msp430x.d: Update to match revised assembler output. diff --git a/gas/testsuite/gas/i386/prefix.d b/gas/testsuite/gas/i386/prefix.d index d9f0ae2e787..a334ab8e4ac 100644 --- a/gas/testsuite/gas/i386/prefix.d +++ b/gas/testsuite/gas/i386/prefix.d @@ -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\) diff --git a/gas/testsuite/gas/i386/prefix.s b/gas/testsuite/gas/i386/prefix.s index 07020ead08c..9f90afab6bf 100644 --- a/gas/testsuite/gas/i386/prefix.s +++ b/gas/testsuite/gas/i386/prefix.s @@ -4,6 +4,9 @@ es fwait + fwait + movl $0,%gs:fpu_owner_task + .byte 0x66 .byte 0xf2 .byte 0x0f diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 6e3d6c97cbc..581e5db0782 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,9 @@ +2014-06-10 H.J. Lu + + * i386-dis.c (fwait_prefix): New. + (ckprefix): Set fwait_prefix. + (print_insn): Properly print prefixes before fwait. + 2014-06-07 Alan Modra * ppc-opc.c (UISIGNOPT): Define and use with cmpli. diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index 3c484284726..24406f3eb98 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -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));