From d9949a367352c66b7d90ca32bdbd5cac38c14b53 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 10 Jun 2014 11:16:41 -0700 Subject: [PATCH] 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. --- gas/testsuite/ChangeLog | 5 +++++ gas/testsuite/gas/i386/prefix.d | 2 ++ gas/testsuite/gas/i386/prefix.s | 3 +++ opcodes/ChangeLog | 6 ++++++ opcodes/i386-dis.c | 6 ++++-- 5 files changed, 20 insertions(+), 2 deletions(-) diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 768c26b..43a37e3 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 d9f0ae2..a334ab8 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 07020ea..9f90afa 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 6e3d6c9..581e5db 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 3c48428..24406f3 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)); -- 2.7.4