gas/testsuite/
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 12 Nov 2009 02:13:06 +0000 (02:13 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 12 Nov 2009 02:13:06 +0000 (02:13 +0000)
2009-11-11  H.J. Lu  <hongjiu.lu@intel.com>

* gas/i386/prefix.d: Swap order of ADDR and REP prefixes.
* gas/i386/rep.d: Likewise.
* gas/i386/x86-64-rep.d: Likewise.

opcodes/

2009-11-11  H.J. Lu  <hongjiu.lu@intel.com>

* i386-dis.c (all_prefixes): New.
(ckprefix): Set all_prefixes.
(print_insn): Print all_prefixes instead of lock_prefix,
repz_prefix, repnz_prefix, addr_prefix and data_prefix.

gas/testsuite/ChangeLog
gas/testsuite/gas/i386/prefix.d
gas/testsuite/gas/i386/rep.d
gas/testsuite/gas/i386/x86-64-rep.d
opcodes/ChangeLog
opcodes/i386-dis.c

index 931e92cb9717857167e36ced6c773f5fd9c17bfd..ea1fd5148ea7d7f8e7cee7990a2d5107b46bdfa9 100644 (file)
@@ -1,3 +1,9 @@
+2009-11-11  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * gas/i386/prefix.d: Swap order of ADDR and REP prefixes.
+       * gas/i386/rep.d: Likewise.
+       * gas/i386/x86-64-rep.d: Likewise.
+
 2009-11-06  Sebastian Pop  <sebastian.pop@amd.com>
 
        * gas/i386/x86-64-lwp.s: Updated to also contain patterns
index 0cb79ff844b3b8f4335919d4c8c46ecc84dfb95f..517906d609198c5932fe92adcbb6fbf6942902df 100644 (file)
@@ -10,5 +10,5 @@ Disassembly of section .text:
    5:  9b df e0 [      ]*fstsw  %ax
    8:  9b df e0 [      ]*fstsw  %ax
    b:  9b 67 df e0 [   ]*addr16 fstsw %ax
-   f:  36 67 66 f3 a7 [        ]*repz addr16 cmpsw %es:\(%di\),%ss:\(%si\)
+   f:  36 67 66 f3 a7 [        ]*addr16 repz cmpsw %es:\(%di\),%ss:\(%si\)
 #pass
index 2799248639408862672f5a93ffbdb4575ecfe17c..0e0e3741ad96f46f5fc274259ed22e14ab57613e 100644 (file)
@@ -27,25 +27,25 @@ Disassembly of section .text:
   2b:  f3 ab[  ]+rep stos %eax,%es:\(%edi\)
   2d:  f3 a7[  ]+repz cmpsl %es:\(%edi\),%ds:\(%esi\)
   2f:  f3 af[  ]+repz scas %es:\(%edi\),%eax
-  31:  67 f3 6c[       ]+rep addr16 insb \(%dx\),%es:\(%di\)
-  34:  67 f3 6e[       ]+rep addr16 outsb %ds:\(%si\),\(%dx\)
-  37:  67 f3 a4[       ]+rep addr16 movsb %ds:\(%si\),%es:\(%di\)
-  3a:  67 f3 ac[       ]+rep addr16 lods %ds:\(%si\),%al
-  3d:  67 f3 aa[       ]+rep addr16 stos %al,%es:\(%di\)
-  40:  67 f3 a6[       ]+repz addr16 cmpsb %es:\(%di\),%ds:\(%si\)
-  43:  67 f3 ae[       ]+repz addr16 scas %es:\(%di\),%al
-  46:  67 66 f3 6d[    ]+rep addr16 insw \(%dx\),%es:\(%di\)
-  4a:  67 66 f3 6f[    ]+rep addr16 outsw %ds:\(%si\),\(%dx\)
-  4e:  67 66 f3 a5[    ]+rep addr16 movsw %ds:\(%si\),%es:\(%di\)
-  52:  67 66 f3 ad[    ]+rep addr16 lods %ds:\(%si\),%ax
-  56:  67 66 f3 ab[    ]+rep addr16 stos %ax,%es:\(%di\)
-  5a:  67 66 f3 a7[    ]+repz addr16 cmpsw %es:\(%di\),%ds:\(%si\)
-  5e:  67 66 f3 af[    ]+repz addr16 scas %es:\(%di\),%ax
-  62:  67 f3 6d[       ]+rep addr16 insl \(%dx\),%es:\(%di\)
-  65:  67 f3 6f[       ]+rep addr16 outsl %ds:\(%si\),\(%dx\)
-  68:  67 f3 a5[       ]+rep addr16 movsl %ds:\(%si\),%es:\(%di\)
-  6b:  67 f3 ad[       ]+rep addr16 lods %ds:\(%si\),%eax
-  6e:  67 f3 ab[       ]+rep addr16 stos %eax,%es:\(%di\)
-  71:  67 f3 a7[       ]+repz addr16 cmpsl %es:\(%di\),%ds:\(%si\)
-  74:  67 f3 af[       ]+repz addr16 scas %es:\(%di\),%eax
+  31:  67 f3 6c[       ]+addr16 rep insb \(%dx\),%es:\(%di\)
+  34:  67 f3 6e[       ]+addr16 rep outsb %ds:\(%si\),\(%dx\)
+  37:  67 f3 a4[       ]+addr16 rep movsb %ds:\(%si\),%es:\(%di\)
+  3a:  67 f3 ac[       ]+addr16 rep lods %ds:\(%si\),%al
+  3d:  67 f3 aa[       ]+addr16 rep stos %al,%es:\(%di\)
+  40:  67 f3 a6[       ]+addr16 repz cmpsb %es:\(%di\),%ds:\(%si\)
+  43:  67 f3 ae[       ]+addr16 repz scas %es:\(%di\),%al
+  46:  67 66 f3 6d[    ]+addr16 rep insw \(%dx\),%es:\(%di\)
+  4a:  67 66 f3 6f[    ]+addr16 rep outsw %ds:\(%si\),\(%dx\)
+  4e:  67 66 f3 a5[    ]+addr16 rep movsw %ds:\(%si\),%es:\(%di\)
+  52:  67 66 f3 ad[    ]+addr16 rep lods %ds:\(%si\),%ax
+  56:  67 66 f3 ab[    ]+addr16 rep stos %ax,%es:\(%di\)
+  5a:  67 66 f3 a7[    ]+addr16 repz cmpsw %es:\(%di\),%ds:\(%si\)
+  5e:  67 66 f3 af[    ]+addr16 repz scas %es:\(%di\),%ax
+  62:  67 f3 6d[       ]+addr16 rep insl \(%dx\),%es:\(%di\)
+  65:  67 f3 6f[       ]+addr16 rep outsl %ds:\(%si\),\(%dx\)
+  68:  67 f3 a5[       ]+addr16 rep movsl %ds:\(%si\),%es:\(%di\)
+  6b:  67 f3 ad[       ]+addr16 rep lods %ds:\(%si\),%eax
+  6e:  67 f3 ab[       ]+addr16 rep stos %eax,%es:\(%di\)
+  71:  67 f3 a7[       ]+addr16 repz cmpsl %es:\(%di\),%ds:\(%si\)
+  74:  67 f3 af[       ]+addr16 repz scas %es:\(%di\),%eax
        ...
index 66fc03636c58539b95a46453e9b56c0e2e36d164..d3f2acfdc62348f741e896621b64e6d2b684c693 100644 (file)
@@ -32,30 +32,30 @@ Disassembly of section .text:
   37:  f3 48 ab[       ]+rep stos %rax,%es:\(%rdi\)
   3a:  f3 48 a7[       ]+repz cmpsq %es:\(%rdi\),%ds:\(%rsi\)
   3d:  f3 48 af[       ]+repz scas %es:\(%rdi\),%rax
-  40:  67 f3 6c[       ]+rep addr32 insb \(%dx\),%es:\(%edi\)
-  43:  67 f3 6e[       ]+rep addr32 outsb %ds:\(%esi\),\(%dx\)
-  46:  67 f3 a4[       ]+rep addr32 movsb %ds:\(%esi\),%es:\(%edi\)
-  49:  67 f3 ac[       ]+rep addr32 lods %ds:\(%esi\),%al
-  4c:  67 f3 aa[       ]+rep addr32 stos %al,%es:\(%edi\)
-  4f:  67 f3 a6[       ]+repz addr32 cmpsb %es:\(%edi\),%ds:\(%esi\)
-  52:  67 f3 ae[       ]+repz addr32 scas %es:\(%edi\),%al
-  55:  67 66 f3 6d[    ]+rep addr32 insw \(%dx\),%es:\(%edi\)
-  59:  67 66 f3 6f[    ]+rep addr32 outsw %ds:\(%esi\),\(%dx\)
-  5d:  67 66 f3 a5[    ]+rep addr32 movsw %ds:\(%esi\),%es:\(%edi\)
-  61:  67 66 f3 ad[    ]+rep addr32 lods %ds:\(%esi\),%ax
-  65:  67 66 f3 ab[    ]+rep addr32 stos %ax,%es:\(%edi\)
-  69:  67 66 f3 a7[    ]+repz addr32 cmpsw %es:\(%edi\),%ds:\(%esi\)
-  6d:  67 66 f3 af[    ]+repz addr32 scas %es:\(%edi\),%ax
-  71:  67 f3 6d[       ]+rep addr32 insl \(%dx\),%es:\(%edi\)
-  74:  67 f3 6f[       ]+rep addr32 outsl %ds:\(%esi\),\(%dx\)
-  77:  67 f3 a5[       ]+rep addr32 movsl %ds:\(%esi\),%es:\(%edi\)
-  7a:  67 f3 ad[       ]+rep addr32 lods %ds:\(%esi\),%eax
-  7d:  67 f3 ab[       ]+rep addr32 stos %eax,%es:\(%edi\)
-  80:  67 f3 a7[       ]+repz addr32 cmpsl %es:\(%edi\),%ds:\(%esi\)
-  83:  67 f3 af[       ]+repz addr32 scas %es:\(%edi\),%eax
-  86:  67 f3 48 a5[    ]+rep addr32 movsq %ds:\(%esi\),%es:\(%edi\)
-  8a:  67 f3 48 ad[    ]+rep addr32 lods %ds:\(%esi\),%rax
-  8e:  67 f3 48 ab[    ]+rep addr32 stos %rax,%es:\(%edi\)
-  92:  67 f3 48 a7[    ]+repz addr32 cmpsq %es:\(%edi\),%ds:\(%esi\)
-  96:  67 f3 48 af[    ]+repz addr32 scas %es:\(%edi\),%rax
+  40:  67 f3 6c[       ]+addr32 rep insb \(%dx\),%es:\(%edi\)
+  43:  67 f3 6e[       ]+addr32 rep outsb %ds:\(%esi\),\(%dx\)
+  46:  67 f3 a4[       ]+addr32 rep movsb %ds:\(%esi\),%es:\(%edi\)
+  49:  67 f3 ac[       ]+addr32 rep lods %ds:\(%esi\),%al
+  4c:  67 f3 aa[       ]+addr32 rep stos %al,%es:\(%edi\)
+  4f:  67 f3 a6[       ]+addr32 repz cmpsb %es:\(%edi\),%ds:\(%esi\)
+  52:  67 f3 ae[       ]+addr32 repz scas %es:\(%edi\),%al
+  55:  67 66 f3 6d[    ]+addr32 rep insw \(%dx\),%es:\(%edi\)
+  59:  67 66 f3 6f[    ]+addr32 rep outsw %ds:\(%esi\),\(%dx\)
+  5d:  67 66 f3 a5[    ]+addr32 rep movsw %ds:\(%esi\),%es:\(%edi\)
+  61:  67 66 f3 ad[    ]+addr32 rep lods %ds:\(%esi\),%ax
+  65:  67 66 f3 ab[    ]+addr32 rep stos %ax,%es:\(%edi\)
+  69:  67 66 f3 a7[    ]+addr32 repz cmpsw %es:\(%edi\),%ds:\(%esi\)
+  6d:  67 66 f3 af[    ]+addr32 repz scas %es:\(%edi\),%ax
+  71:  67 f3 6d[       ]+addr32 rep insl \(%dx\),%es:\(%edi\)
+  74:  67 f3 6f[       ]+addr32 rep outsl %ds:\(%esi\),\(%dx\)
+  77:  67 f3 a5[       ]+addr32 rep movsl %ds:\(%esi\),%es:\(%edi\)
+  7a:  67 f3 ad[       ]+addr32 rep lods %ds:\(%esi\),%eax
+  7d:  67 f3 ab[       ]+addr32 rep stos %eax,%es:\(%edi\)
+  80:  67 f3 a7[       ]+addr32 repz cmpsl %es:\(%edi\),%ds:\(%esi\)
+  83:  67 f3 af[       ]+addr32 repz scas %es:\(%edi\),%eax
+  86:  67 f3 48 a5[    ]+addr32 rep movsq %ds:\(%esi\),%es:\(%edi\)
+  8a:  67 f3 48 ad[    ]+addr32 rep lods %ds:\(%esi\),%rax
+  8e:  67 f3 48 ab[    ]+addr32 rep stos %rax,%es:\(%edi\)
+  92:  67 f3 48 a7[    ]+addr32 repz cmpsq %es:\(%edi\),%ds:\(%esi\)
+  96:  67 f3 48 af[    ]+addr32 repz scas %es:\(%edi\),%rax
 #pass
index e0f48e973cd5a12ad908fe07ddb67661bef414dc..90d297c617937a093d2f64dad26ebbf527c12c0e 100644 (file)
@@ -1,3 +1,10 @@
+2009-11-11  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * i386-dis.c (all_prefixes): New.
+       (ckprefix): Set all_prefixes.
+       (print_insn): Print all_prefixes instead of lock_prefix,
+       repz_prefix, repnz_prefix, addr_prefix and data_prefix.
+
 2009-11-11  Nick Clifton  <nickc@redhat.com>
 
        PR binutils/10924
index b411c830eef0c6b602b6666303a8cdcb0e51c886..a8bfa0f3433df56df7aee62fc7f19432ed154b9c 100644 (file)
@@ -1997,6 +1997,7 @@ static const char *data_prefix;
 static const char *addr_prefix;
 static const char *repz_prefix;
 static const char *repnz_prefix;
+static const char **all_prefixes[5];
 static disassemble_info *the_info;
 static struct
   {
@@ -9572,13 +9573,16 @@ static const struct dis386 rm_table[][8] = {
 static void
 ckprefix (void)
 {
-  int newrex;
+  int newrex, i;
   rex = 0;
   rex_original = 0;
   rex_ignored = 0;
   prefixes = 0;
   used_prefixes = 0;
   rex_used = 0;
+  for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
+    all_prefixes[i] = 0;
+  i = 0;
   while (1)
     {
       FETCH_DATA (the_info, codep + 1);
@@ -9608,12 +9612,27 @@ ckprefix (void)
              return;
          break;
        case 0xf3:
+         if ((prefixes & PREFIX_REPZ) == 0)
+           {
+             all_prefixes[i] = &repz_prefix;
+             i++;
+           }
          prefixes |= PREFIX_REPZ;
          break;
        case 0xf2:
+         if ((prefixes & PREFIX_REPNZ) == 0)
+           {
+             all_prefixes[i] = &repnz_prefix;
+             i++;
+           }
          prefixes |= PREFIX_REPNZ;
          break;
        case 0xf0:
+         if ((prefixes & PREFIX_LOCK) == 0)
+           {
+             all_prefixes[i] = &lock_prefix;
+             i++;
+           }
          prefixes |= PREFIX_LOCK;
          break;
        case 0x2e:
@@ -9635,9 +9654,19 @@ ckprefix (void)
          prefixes |= PREFIX_GS;
          break;
        case 0x66:
+         if ((prefixes & PREFIX_DATA) == 0)
+           {
+             all_prefixes[i] = &data_prefix;
+             i++;
+           }
          prefixes |= PREFIX_DATA;
          break;
        case 0x67:
+         if ((prefixes & PREFIX_ADDR) == 0)
+           {
+             all_prefixes[i] = &addr_prefix;
+             i++;
+           }
          prefixes |= PREFIX_ADDR;
          break;
        case FWAIT_OPCODE:
@@ -10437,16 +10466,9 @@ print_insn (bfd_vma pc, disassemble_info *info)
 
   prefix_obuf[0] = 0;
   prefix_obufp = prefix_obuf;
-  if (lock_prefix)
-    prefix_obufp = stpcpy (prefix_obufp, lock_prefix);
-  if (repz_prefix)
-    prefix_obufp = stpcpy (prefix_obufp, repz_prefix);
-  if (repnz_prefix)
-    prefix_obufp = stpcpy (prefix_obufp, repnz_prefix);
-  if (addr_prefix)
-    prefix_obufp = stpcpy (prefix_obufp, addr_prefix);
-  if (data_prefix)
-    prefix_obufp = stpcpy (prefix_obufp, data_prefix);
+  for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
+    if (all_prefixes[i] && *all_prefixes[i])
+      prefix_obufp = stpcpy (prefix_obufp, *all_prefixes[i]);
 
   if (prefix_obuf[0] != 0)
     (*info->fprintf_func) (info->stream, "%s", prefix_obuf);