x86: replace adhoc (partly wrong) ambiguous operand checking for MOVSX/MOVZX
authorJan Beulich <jbeulich@suse.com>
Fri, 14 Feb 2020 13:27:28 +0000 (14:27 +0100)
committerJan Beulich <jbeulich@suse.com>
Fri, 14 Feb 2020 13:27:28 +0000 (14:27 +0100)
For these to get treatment consistent with other operand size checking
the special logic shouldn't live in md_assemble(), but process_suffix().
And there's more logic involved than simply zapping the suffix.

Note however that MOVS[BW]* and MOVZ[BW]* still won't be fully
consistent, due to the objection to fold MOVS* templates just like was
done for MOVZ* in c07315e0c6 ("x86: allow suffix-less movzw and 64-bit
movzb").

Note further that it is against my own intentions to have MOVSX/MOVZX
silently default to a byte source in AT&T mode. This should happen only
when the destination register is a 16-bit one. In all other cases there
is an ambiguity, and the user should be warned. But it was explicitly
requested for this to be done in a way inconsistent with everything
else.

Note finally that the assembler change points out (and this patch fixes)
a wrong Intel syntax test introduced by bc31405ebb2c ("x86-64: Properly
encode and decode movsxd"): When source code specifies a 16-bit
destination register, disassembly expectations shouldn't have been to
find a 32-bit one.

32 files changed:
gas/ChangeLog
gas/config/tc-i386.c
gas/testsuite/gas/i386/i386-intel.d
gas/testsuite/gas/i386/i386.d
gas/testsuite/gas/i386/i386.exp
gas/testsuite/gas/i386/i386.s
gas/testsuite/gas/i386/iamcu-1.d
gas/testsuite/gas/i386/iamcu-1.s
gas/testsuite/gas/i386/ilp32/x86-64.d
gas/testsuite/gas/i386/ilp32/x86-64.s
gas/testsuite/gas/i386/k1om.d
gas/testsuite/gas/i386/l1om.d
gas/testsuite/gas/i386/movx16.l [new file with mode: 0644]
gas/testsuite/gas/i386/movx16.s [new file with mode: 0644]
gas/testsuite/gas/i386/movx32.l [new file with mode: 0644]
gas/testsuite/gas/i386/movx32.s [new file with mode: 0644]
gas/testsuite/gas/i386/movx64.l [new file with mode: 0644]
gas/testsuite/gas/i386/movx64.s [new file with mode: 0644]
gas/testsuite/gas/i386/noreg16.d
gas/testsuite/gas/i386/noreg16.s
gas/testsuite/gas/i386/noreg32.d
gas/testsuite/gas/i386/noreg32.s
gas/testsuite/gas/i386/noreg64.d
gas/testsuite/gas/i386/noreg64.s
gas/testsuite/gas/i386/x86-64-movsxd-intel.d
gas/testsuite/gas/i386/x86-64-movsxd.d
gas/testsuite/gas/i386/x86_64-intel.d
gas/testsuite/gas/i386/x86_64.d
gas/testsuite/gas/i386/x86_64.s
opcodes/ChangeLog
opcodes/i386-opc.tbl
opcodes/i386-tbl.h

index 56d50719a2a746fa8df8cfddcc3cfcf72d4ee9d0..39b1a38ca9327d367b37b87139f669c6733371f8 100644 (file)
@@ -1,3 +1,31 @@
+2020-02-14  Jan Beulich  <jbeulich@suse.com>
+
+       PR gas/25438
+       * config/tc-i386.c (md_assemble): Move movsx/movzx special
+       casing ...
+       (process_suffix): ... here. Consider just the first operand
+       initially.
+       (check_long_reg): Drop opcode 0x63 special case again.
+       * testsuite/gas/i386/i386.s, testsuite/gas/i386/iamcu-1.s,
+       testsuite/gas/i386/ilp32/x86-64.s, testsuite/gas/i386/x86_64.s:
+       Move ambiguous operand size tests ...
+       * testsuite/gas/i386/noreg16.s, testsuite/gas/i386/noreg32.s,
+       testsuite/gas/i386/noreg64.s: ... here.
+       * testsuite/gas/i386/i386.d, testsuite/gas/i386/i386-intel.d
+       testsuite/gas/i386/iamcu-1.d, testsuite/gas/i386/ilp32/x86-64.d,
+       testsuite/gas/i386/k1om.d, testsuite/gas/i386/l1om.d,
+       testsuite/gas/i386/movx16.l, testsuite/gas/i386/movx32.l,
+       testsuite/gas/i386/movx64.l, testsuite/gas/i386/noreg16.d,
+       testsuite/gas/i386/noreg32.d, testsuite/gas/i386/noreg64.d,
+       testsuite/gas/i386/x86-64-movsxd.d,
+       testsuite/gas/i386/x86-64-movsxd-intel.d,
+       testsuite/gas/i386/x86_64.d, testsuite/gas/i386/x86_64-intel.d:
+       Adjust expectations.    
+       * testsuite/gas/i386/movx16.s, testsuite/gas/i386/movx16.l,
+       testsuite/gas/i386/movx32.s, testsuite/gas/i386/movx32.l,
+       testsuite/gas/i386/movx64.s, testsuite/gas/i386/movx64.l: New.
+       * testsuite/gas/i386/i386.exp: Run new tests.
+
 2020-02-14  Jan Beulich  <jbeulich@suse.com>
 
        * config/tc-i386.c (process_operands): Also skip segment
index 0e60919e492046ec6a416e29a8e330b4af5d4a4d..9e59ecaedfe4e5da707e96b6ce8a6955937d3fd1 100644 (file)
@@ -4379,22 +4379,6 @@ md_assemble (char *line)
        : as_bad) (_("SSE instruction `%s' is used"), i.tm.name);
     }
 
-  /* Zap movzx and movsx suffix.  The suffix has been set from
-     "word ptr" or "byte ptr" on the source operand in Intel syntax
-     or extracted from mnemonic in AT&T syntax.  But we'll use
-     the destination register to choose the suffix for encoding.  */
-  if ((i.tm.base_opcode & ~9) == 0x0fb6)
-    {
-      /* In Intel syntax, there must be a suffix.  In AT&T syntax, if
-        there is no suffix, the default will be byte extension.  */
-      if (i.reg_operands != 2
-         && !i.suffix
-         && intel_syntax)
-       as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
-
-      i.suffix = 0;
-    }
-
   if (i.tm.opcode_modifier.fwait)
     if (!add_prefix (FWAIT_OPCODE))
       return;
@@ -6311,6 +6295,15 @@ process_suffix (void)
   else if (i.reg_operands
           && (i.operands > 1 || i.types[0].bitfield.class == Reg))
     {
+      unsigned int numop = i.operands;
+
+      /* movsx/movzx want only their source operand considered here, for the
+        ambiguity checking below.  The suffix will be replaced afterwards
+        to represent the destination (register).  */
+      if (((i.tm.base_opcode | 8) == 0xfbe && i.tm.opcode_modifier.w)
+         || (i.tm.base_opcode == 0x63 && i.tm.cpu_flags.bitfield.cpu64))
+       --i.operands;
+
       /* If there's no instruction mnemonic suffix we try to invent one
         based on GPR operands.  */
       if (!i.suffix)
@@ -6339,6 +6332,12 @@ process_suffix (void)
                  continue;
                break;
              }
+
+         /* As an exception, movsx/movzx silently default to a byte source
+            in AT&T mode.  */
+         if ((i.tm.base_opcode | 8) == 0xfbe && i.tm.opcode_modifier.w
+             && !i.suffix && !intel_syntax)
+           i.suffix = BYTE_MNEM_SUFFIX;
        }
       else if (i.suffix == BYTE_MNEM_SUFFIX)
        {
@@ -6385,6 +6384,9 @@ process_suffix (void)
        ;
       else
        abort ();
+
+      /* Undo the movsx/movzx change done above.  */
+      i.operands = numop;
     }
   else if (i.tm.opcode_modifier.defaultsize && !i.suffix)
     {
@@ -6538,6 +6540,10 @@ process_suffix (void)
 
          if (i.tm.opcode_modifier.floatmf)
            i.suffix = SHORT_MNEM_SUFFIX;
+         else if ((i.tm.base_opcode | 8) == 0xfbe
+                  || (i.tm.base_opcode == 0x63
+                      && i.tm.cpu_flags.bitfield.cpu64))
+           /* handled below */;
          else if (evex)
            i.tm.opcode_modifier.evex = evex;
          else if (flag_code == CODE_16BIT)
@@ -6549,6 +6555,32 @@ process_suffix (void)
        }
     }
 
+  if ((i.tm.base_opcode | 8) == 0xfbe
+      || (i.tm.base_opcode == 0x63 && i.tm.cpu_flags.bitfield.cpu64))
+    {
+      /* In Intel syntax, movsx/movzx must have a "suffix" (checked above).
+        In AT&T syntax, if there is no suffix (warned about above), the default
+        will be byte extension.  */
+      if (i.tm.opcode_modifier.w && i.suffix && i.suffix != BYTE_MNEM_SUFFIX)
+       i.tm.base_opcode |= 1;
+
+      /* For further processing, the suffix should represent the destination
+        (register).  This is already the case when one was used with
+        mov[sz][bw]*, but we need to replace it for mov[sz]x, or if there was
+        no suffix to begin with.  */
+      if (i.tm.opcode_modifier.w || i.tm.base_opcode == 0x63 || !i.suffix)
+       {
+         if (i.types[1].bitfield.word)
+           i.suffix = WORD_MNEM_SUFFIX;
+         else if (i.types[1].bitfield.qword)
+           i.suffix = QWORD_MNEM_SUFFIX;
+         else
+           i.suffix = LONG_MNEM_SUFFIX;
+
+         i.tm.opcode_modifier.w = 0;
+       }
+    }
+
   if (!i.tm.opcode_modifier.modrm && i.reg_operands && i.tm.operands < 3)
     i.short_form = (i.tm.operand_types[0].bitfield.class == Reg)
                   != (i.tm.operand_types[1].bitfield.class == Reg);
@@ -6755,9 +6787,7 @@ check_long_reg (void)
             && i.tm.operand_types[op].bitfield.dword)
       {
        if (intel_syntax
-           && (i.tm.opcode_modifier.toqword
-               /* Also convert to QWORD for MOVSXD.  */
-               || i.tm.base_opcode == 0x63)
+           && i.tm.opcode_modifier.toqword
            && i.types[0].bitfield.class != RegSIMD)
          {
            /* Convert to QWORD.  We want REX byte. */
index 1913e8da191b24d9995731b9d9b65bfb03696608..28025ca237a36546421d049b61284d25b305263d 100644 (file)
@@ -14,7 +14,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    66 0f be f0             movsx  si,al
 [      ]*[a-f0-9]+:    0f be f0                movsx  esi,al
 [      ]*[a-f0-9]+:    0f bf f0                movsx  esi,ax
-[      ]*[a-f0-9]+:    0f be 10                movsx  edx,BYTE PTR \[eax\]
 [      ]*[a-f0-9]+:    66 0f be 10             movsx  dx,BYTE PTR \[eax\]
 [      ]*[a-f0-9]+:    66 0f be 10             movsx  dx,BYTE PTR \[eax\]
 [      ]*[a-f0-9]+:    0f be 10                movsx  edx,BYTE PTR \[eax\]
@@ -25,7 +24,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    66 0f b6 f0             movzx  si,al
 [      ]*[a-f0-9]+:    0f b6 f0                movzx  esi,al
 [      ]*[a-f0-9]+:    0f b7 f0                movzx  esi,ax
-[      ]*[a-f0-9]+:    0f b6 10                movzx  edx,BYTE PTR \[eax\]
 [      ]*[a-f0-9]+:    66 0f b6 10             movzx  dx,BYTE PTR \[eax\]
 [      ]*[a-f0-9]+:    66 0f b6 10             movzx  dx,BYTE PTR \[eax\]
 [      ]*[a-f0-9]+:    0f b6 10                movzx  edx,BYTE PTR \[eax\]
index 1c6c4cc3fd5605087f078ec9f0a86fa0c8cc9ac4..6863bb5161888f661b5be9732b0770e93a7e2b58 100644 (file)
@@ -13,7 +13,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    66 0f be f0             movsbw %al,%si
 [      ]*[a-f0-9]+:    0f be f0                movsbl %al,%esi
 [      ]*[a-f0-9]+:    0f bf f0                movswl %ax,%esi
-[      ]*[a-f0-9]+:    0f be 10                movsbl \(%eax\),%edx
 [      ]*[a-f0-9]+:    66 0f be 10             movsbw \(%eax\),%dx
 [      ]*[a-f0-9]+:    66 0f be 10             movsbw \(%eax\),%dx
 [      ]*[a-f0-9]+:    0f be 10                movsbl \(%eax\),%edx
@@ -24,7 +23,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    66 0f b6 f0             movzbw %al,%si
 [      ]*[a-f0-9]+:    0f b6 f0                movzbl %al,%esi
 [      ]*[a-f0-9]+:    0f b7 f0                movzwl %ax,%esi
-[      ]*[a-f0-9]+:    0f b6 10                movzbl \(%eax\),%edx
 [      ]*[a-f0-9]+:    66 0f b6 10             movzbw \(%eax\),%dx
 [      ]*[a-f0-9]+:    66 0f b6 10             movzbw \(%eax\),%dx
 [      ]*[a-f0-9]+:    0f b6 10                movzbl \(%eax\),%edx
index 258fb763360d2f244563ea48f810c8f9996348e9..a06558361464fd456ee4bd67e2156340667a1696 100644 (file)
@@ -133,6 +133,8 @@ if [expr ([istarget "i*86-*-*"] ||  [istarget "x86_64-*-*"]) && [gas_32_check]]
     run_list_test "noreg16"
     run_dump_test "noreg32"
     run_list_test "noreg32"
+    run_list_test "movx16" "-I${srcdir}/$subdir -al"
+    run_list_test "movx32" "-al"
     run_dump_test "addr16"
     run_dump_test "addr32"
     run_dump_test "code16"
@@ -738,6 +740,7 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_64_check]] t
     run_list_test "x86-64-sysenter-amd" "-mamd64"
     run_dump_test "noreg64"
     run_list_test "noreg64"
+    run_list_test "movx64" "-al"
     run_list_test "cvtsi2sX"
     run_dump_test "x86-64-sse4_1"
     run_dump_test "x86-64-sse4_1-intel"
index 7da361f5f8593396abb8257ecfa5c5b87a569463..97bb1a4e3b4cfe8a133a37b9fe345bea70f0fb20 100644 (file)
@@ -9,7 +9,6 @@
        movsx   %al, %si
        movsx   %al, %esi
        movsx   %ax, %esi
-       movsx   (%eax), %edx
        movsx   (%eax), %dx
        movsxb  (%eax), %dx
        movsxb  (%eax), %edx
@@ -21,7 +20,6 @@
        movzx   %al, %si
        movzx   %al, %esi
        movzx   %ax, %esi
-       movzx   (%eax), %edx
        movzx   (%eax), %dx
        movzxb  (%eax), %dx
        movzxb  (%eax), %edx
index 2b1df5de4b7502cfa73c3d49998939d83e57c70e..8a3bc9f8c2d439fc6f4667cc398a008bca72e240 100644 (file)
@@ -10,7 +10,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    66 0f be f0             movsbw %al,%si
 [      ]*[a-f0-9]+:    0f be f0                movsbl %al,%esi
 [      ]*[a-f0-9]+:    0f bf f0                movswl %ax,%esi
-[      ]*[a-f0-9]+:    0f be 10                movsbl \(%eax\),%edx
 [      ]*[a-f0-9]+:    66 0f be 10             movsbw \(%eax\),%dx
 [      ]*[a-f0-9]+:    66 0f be 10             movsbw \(%eax\),%dx
 [      ]*[a-f0-9]+:    0f be 10                movsbl \(%eax\),%edx
@@ -21,7 +20,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    66 0f b6 f0             movzbw %al,%si
 [      ]*[a-f0-9]+:    0f b6 f0                movzbl %al,%esi
 [      ]*[a-f0-9]+:    0f b7 f0                movzwl %ax,%esi
-[      ]*[a-f0-9]+:    0f b6 10                movzbl \(%eax\),%edx
 [      ]*[a-f0-9]+:    66 0f b6 10             movzbw \(%eax\),%dx
 [      ]*[a-f0-9]+:    66 0f b6 10             movzbw \(%eax\),%dx
 [      ]*[a-f0-9]+:    0f b6 10                movzbl \(%eax\),%edx
index b631dfa17ef089bedd2d8b4c0ccdcdf6545b5b11..653b522bda8be1bb7e504c7ca6e133c85b8e185f 100644 (file)
@@ -4,7 +4,6 @@
        movsx   %al, %si
        movsx   %al, %esi
        movsx   %ax, %esi
-       movsx   (%eax), %edx
        movsx   (%eax), %dx
        movsxb  (%eax), %dx
        movsxb  (%eax), %edx
@@ -16,7 +15,6 @@
        movzx   %al, %si
        movzx   %al, %esi
        movzx   %ax, %esi
-       movzx   (%eax), %edx
        movzx   (%eax), %dx
        movzxb  (%eax), %dx
        movzxb  (%eax), %edx
index 33722c90f9c12ef200f590943ecdb29257fa978c..dbc3ceae91454ce99bc94d6d07bcae658e7e55fc 100644 (file)
@@ -162,8 +162,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    0f bf f0                movswl %ax,%esi
 [      ]*[a-f0-9]+:    48 0f bf f0             movswq %ax,%rsi
 [      ]*[a-f0-9]+:    48 63 f0                movslq %eax,%rsi
-[      ]*[a-f0-9]+:    0f be 10                movsbl \(%rax\),%edx
-[      ]*[a-f0-9]+:    48 0f be 10             movsbq \(%rax\),%rdx
 [      ]*[a-f0-9]+:    66 0f be 10             movsbw \(%rax\),%dx
 [      ]*[a-f0-9]+:    0f be 10                movsbl \(%rax\),%edx
 [      ]*[a-f0-9]+:    48 0f be 10             movsbq \(%rax\),%rdx
@@ -175,8 +173,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    48 0f b6 f0             movzbq %al,%rsi
 [      ]*[a-f0-9]+:    0f b7 f0                movzwl %ax,%esi
 [      ]*[a-f0-9]+:    48 0f b7 f0             movzwq %ax,%rsi
-[      ]*[a-f0-9]+:    0f b6 10                movzbl \(%rax\),%edx
-[      ]*[a-f0-9]+:    48 0f b6 10             movzbq \(%rax\),%rdx
 [      ]*[a-f0-9]+:    66 0f b6 10             movzbw \(%rax\),%dx
 [      ]*[a-f0-9]+:    0f b6 10                movzbl \(%rax\),%edx
 [      ]*[a-f0-9]+:    48 0f b6 10             movzbq \(%rax\),%rdx
@@ -220,8 +216,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    9b df e0                fstsw  %ax
 [      ]*[a-f0-9]+:    9b df e0                fstsw  %ax
 [      ]*[a-f0-9]+:    66 0f be 00             movsbw \(%rax\),%ax
-[      ]*[a-f0-9]+:    0f be 00                movsbl \(%rax\),%eax
-[      ]*[a-f0-9]+:    48 0f be 00             movsbq \(%rax\),%rax
 [      ]*[a-f0-9]+:    66 0f be 10             movsbw \(%rax\),%dx
 [      ]*[a-f0-9]+:    0f be 10                movsbl \(%rax\),%edx
 [      ]*[a-f0-9]+:    48 0f be 10             movsbq \(%rax\),%rdx
@@ -230,8 +224,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    48 63 10                movslq \(%rax\),%rdx
 [      ]*[a-f0-9]+:    48 63 00                movslq \(%rax\),%rax
 [      ]*[a-f0-9]+:    66 0f b6 00             movzbw \(%rax\),%ax
-[      ]*[a-f0-9]+:    0f b6 00                movzbl \(%rax\),%eax
-[      ]*[a-f0-9]+:    48 0f b6 00             movzbq \(%rax\),%rax
 [      ]*[a-f0-9]+:    66 0f b6 10             movzbw \(%rax\),%dx
 [      ]*[a-f0-9]+:    0f b6 10                movzbl \(%rax\),%edx
 [      ]*[a-f0-9]+:    48 0f b6 10             movzbq \(%rax\),%rdx
index d1f7ae3b495faae20cade057e974ba93484d005d..92790f5c41cde795065ef977369f49014f12ed6d 100644 (file)
@@ -194,8 +194,6 @@ cmpxchg16b oword ptr [rax]
        movsx   %ax, %esi
        movsx   %ax, %rsi
        movsx   %eax, %rsi
-       movsx   (%rax), %edx
-       movsx   (%rax), %rdx
        movsx   (%rax), %dx
        movsbl  (%rax), %edx
        movsbq  (%rax), %rdx
@@ -208,8 +206,6 @@ cmpxchg16b oword ptr [rax]
        movzx   %al, %rsi
        movzx   %ax, %esi
        movzx   %ax, %rsi
-       movzx   (%rax), %edx
-       movzx   (%rax), %rdx
        movzx   (%rax), %dx
        movzb   (%rax), %edx
        movzb   (%rax), %rdx
@@ -263,8 +259,6 @@ cmpxchg16b oword ptr [rax]
 
 .att_syntax
 movsx (%rax),%ax
-movsx (%rax),%eax
-movsx (%rax),%rax
 movsxb (%rax), %dx
 movsxb (%rax), %edx
 movsxb (%rax), %rdx
@@ -273,8 +267,6 @@ movsxw      (%rax), %rdx
 movsxl (%rax), %rdx
 movsxd (%rax),%rax
 movzx (%rax),%ax
-movzx (%rax),%eax
-movzx (%rax),%rax
 movzxb (%rax), %dx
 movzxb (%rax), %edx
 movzxb (%rax), %rdx
index 7767f5b41887100f40474a5f4aa06ae033a50f42..3d47f746afa189f79fba97496f99a314e98fd30f 100644 (file)
@@ -175,8 +175,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    0f bf f0                movswl %ax,%esi
 [      ]*[a-f0-9]+:    48 0f bf f0             movswq %ax,%rsi
 [      ]*[a-f0-9]+:    48 63 f0                movslq %eax,%rsi
-[      ]*[a-f0-9]+:    0f be 10                movsbl \(%rax\),%edx
-[      ]*[a-f0-9]+:    48 0f be 10             movsbq \(%rax\),%rdx
 [      ]*[a-f0-9]+:    66 0f be 10             movsbw \(%rax\),%dx
 [      ]*[a-f0-9]+:    0f be 10                movsbl \(%rax\),%edx
 [      ]*[a-f0-9]+:    48 0f be 10             movsbq \(%rax\),%rdx
@@ -188,8 +186,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    48 0f b6 f0             movzbq %al,%rsi
 [      ]*[a-f0-9]+:    0f b7 f0                movzwl %ax,%esi
 [      ]*[a-f0-9]+:    48 0f b7 f0             movzwq %ax,%rsi
-[      ]*[a-f0-9]+:    0f b6 10                movzbl \(%rax\),%edx
-[      ]*[a-f0-9]+:    48 0f b6 10             movzbq \(%rax\),%rdx
 [      ]*[a-f0-9]+:    66 0f b6 10             movzbw \(%rax\),%dx
 [      ]*[a-f0-9]+:    0f b6 10                movzbl \(%rax\),%edx
 [      ]*[a-f0-9]+:    48 0f b6 10             movzbq \(%rax\),%rdx
@@ -233,8 +229,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    9b df e0                fstsw  %ax
 [      ]*[a-f0-9]+:    9b df e0                fstsw  %ax
 [      ]*[a-f0-9]+:    66 0f be 00             movsbw \(%rax\),%ax
-[      ]*[a-f0-9]+:    0f be 00                movsbl \(%rax\),%eax
-[      ]*[a-f0-9]+:    48 0f be 00             movsbq \(%rax\),%rax
 [      ]*[a-f0-9]+:    66 0f be 10             movsbw \(%rax\),%dx
 [      ]*[a-f0-9]+:    0f be 10                movsbl \(%rax\),%edx
 [      ]*[a-f0-9]+:    48 0f be 10             movsbq \(%rax\),%rdx
@@ -243,8 +237,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    48 63 10                movslq \(%rax\),%rdx
 [      ]*[a-f0-9]+:    48 63 00                movslq \(%rax\),%rax
 [      ]*[a-f0-9]+:    66 0f b6 00             movzbw \(%rax\),%ax
-[      ]*[a-f0-9]+:    0f b6 00                movzbl \(%rax\),%eax
-[      ]*[a-f0-9]+:    48 0f b6 00             movzbq \(%rax\),%rax
 [      ]*[a-f0-9]+:    66 0f b6 10             movzbw \(%rax\),%dx
 [      ]*[a-f0-9]+:    0f b6 10                movzbl \(%rax\),%edx
 [      ]*[a-f0-9]+:    48 0f b6 10             movzbq \(%rax\),%rdx
index 858d1827f925dafcb6c9a51f85cc1bc657c58b21..76040ff1ebcec6396eab980f64cc8c411b7f5c04 100644 (file)
@@ -175,8 +175,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    0f bf f0                movswl %ax,%esi
 [      ]*[a-f0-9]+:    48 0f bf f0             movswq %ax,%rsi
 [      ]*[a-f0-9]+:    48 63 f0                movslq %eax,%rsi
-[      ]*[a-f0-9]+:    0f be 10                movsbl \(%rax\),%edx
-[      ]*[a-f0-9]+:    48 0f be 10             movsbq \(%rax\),%rdx
 [      ]*[a-f0-9]+:    66 0f be 10             movsbw \(%rax\),%dx
 [      ]*[a-f0-9]+:    0f be 10                movsbl \(%rax\),%edx
 [      ]*[a-f0-9]+:    48 0f be 10             movsbq \(%rax\),%rdx
@@ -188,8 +186,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    48 0f b6 f0             movzbq %al,%rsi
 [      ]*[a-f0-9]+:    0f b7 f0                movzwl %ax,%esi
 [      ]*[a-f0-9]+:    48 0f b7 f0             movzwq %ax,%rsi
-[      ]*[a-f0-9]+:    0f b6 10                movzbl \(%rax\),%edx
-[      ]*[a-f0-9]+:    48 0f b6 10             movzbq \(%rax\),%rdx
 [      ]*[a-f0-9]+:    66 0f b6 10             movzbw \(%rax\),%dx
 [      ]*[a-f0-9]+:    0f b6 10                movzbl \(%rax\),%edx
 [      ]*[a-f0-9]+:    48 0f b6 10             movzbq \(%rax\),%rdx
@@ -233,8 +229,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    9b df e0                fstsw  %ax
 [      ]*[a-f0-9]+:    9b df e0                fstsw  %ax
 [      ]*[a-f0-9]+:    66 0f be 00             movsbw \(%rax\),%ax
-[      ]*[a-f0-9]+:    0f be 00                movsbl \(%rax\),%eax
-[      ]*[a-f0-9]+:    48 0f be 00             movsbq \(%rax\),%rax
 [      ]*[a-f0-9]+:    66 0f be 10             movsbw \(%rax\),%dx
 [      ]*[a-f0-9]+:    0f be 10                movsbl \(%rax\),%edx
 [      ]*[a-f0-9]+:    48 0f be 10             movsbq \(%rax\),%rdx
@@ -243,8 +237,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    48 63 10                movslq \(%rax\),%rdx
 [      ]*[a-f0-9]+:    48 63 00                movslq \(%rax\),%rax
 [      ]*[a-f0-9]+:    66 0f b6 00             movzbw \(%rax\),%ax
-[      ]*[a-f0-9]+:    0f b6 00                movzbl \(%rax\),%eax
-[      ]*[a-f0-9]+:    48 0f b6 00             movzbq \(%rax\),%rax
 [      ]*[a-f0-9]+:    66 0f b6 10             movzbw \(%rax\),%dx
 [      ]*[a-f0-9]+:    0f b6 10                movzbl \(%rax\),%edx
 [      ]*[a-f0-9]+:    48 0f b6 10             movzbq \(%rax\),%rdx
diff --git a/gas/testsuite/gas/i386/movx16.l b/gas/testsuite/gas/i386/movx16.l
new file mode 100644 (file)
index 0000000..cbae9ec
--- /dev/null
@@ -0,0 +1,197 @@
+.*: Assembler messages:
+#...
+[      ]*[1-9][0-9]*[  ]+movsx:
+[      ]*[1-9][0-9]*[  ]+movsx %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsx %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsx %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FBEC8[  ]+movsx %al, %cx
+[      ]*[1-9][0-9]* \?\?\?\? 0FBFC8[  ]+movsx %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsx %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FBEC8[        ]+movsx %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 660FBFC8[        ]+movsx %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsx %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxb        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsxb        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsxb        %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FBEC8[  ]+movsxb        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movsxb        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsxb        %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FBEC8[        ]+movsxb        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movsxb        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsxb        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxw        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsxw        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsxw        %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxw        %al, %cx
+[      ]*[1-9][0-9]* \?\?\?\? 0FBFC8[  ]+movsxw        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsxw        %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxw        %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 660FBFC8[        ]+movsxw        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsxw        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsb %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsb %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsb %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsb %al, %cx
+[      ]*[1-9][0-9]*[  ]+movsb %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsb %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsb %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movsb %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsb %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsbw        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsbw        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsbw        %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FBEC8[  ]+movsbw        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movsbw        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsbw        %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsbw        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movsbw        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsbw        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsbl        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsbl        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsbl        %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsbl        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movsbl        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsbl        %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FBEC8[        ]+movsbl        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movsbl        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsbl        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsw %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsw %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsw %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsw %al, %cx
+[      ]*[1-9][0-9]*[  ]+movsw %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsw %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsw %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movsw %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsw %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movswl        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movswl        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movswl        %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movswl        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movswl        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movswl        %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movswl        %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 660FBFC8[        ]+movswl        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movswl        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzx:
+[      ]*[1-9][0-9]*[  ]+movzx %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzx %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzx %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FB6C8[  ]+movzx %al, %cx
+[      ]*[1-9][0-9]* \?\?\?\? 0FB7C8[  ]+movzx %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzx %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FB6C8[        ]+movzx %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 660FB7C8[        ]+movzx %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzx %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxb        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzxb        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzxb        %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FB6C8[  ]+movzxb        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzxb        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzxb        %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FB6C8[        ]+movzxb        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movzxb        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzxb        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxw        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzxw        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzxw        %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxw        %al, %cx
+[      ]*[1-9][0-9]* \?\?\?\? 0FB7C8[  ]+movzxw        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzxw        %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxw        %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 660FB7C8[        ]+movzxw        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzxw        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzb %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzb %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzb %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FB6C8[  ]+movzb %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzb %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzb %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FB6C8[        ]+movzb %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movzb %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzb %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzbw        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzbw        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzbw        %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FB6C8[  ]+movzbw        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzbw        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzbw        %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzbw        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movzbw        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzbw        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzbl        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzbl        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzbl        %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzbl        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzbl        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzbl        %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FB6C8[        ]+movzbl        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movzbl        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzbl        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzw %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzw %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzw %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzw %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzw %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzw %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzw %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 660FB7C8[        ]+movzw %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzw %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzwl        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzwl        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzwl        %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzwl        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzwl        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzwl        %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzwl        %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 660FB7C8[        ]+movzwl        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzwl        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+#pass
diff --git a/gas/testsuite/gas/i386/movx16.s b/gas/testsuite/gas/i386/movx16.s
new file mode 100644 (file)
index 0000000..e4f415e
--- /dev/null
@@ -0,0 +1,2 @@
+       .code16
+       .include "movx32.s"
diff --git a/gas/testsuite/gas/i386/movx32.l b/gas/testsuite/gas/i386/movx32.l
new file mode 100644 (file)
index 0000000..46ea276
--- /dev/null
@@ -0,0 +1,197 @@
+.*: Assembler messages:
+#...
+[      ]*[1-9][0-9]*[  ]+movsx:
+[      ]*[1-9][0-9]*[  ]+movsx %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsx %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsx %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FBEC8[        ]+movsx %al, %cx
+[      ]*[1-9][0-9]* \?\?\?\? 660FBFC8[        ]+movsx %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsx %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FBEC8[  ]+movsx %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 0FBFC8[  ]+movsx %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsx %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxb        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsxb        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsxb        %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FBEC8[        ]+movsxb        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movsxb        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsxb        %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FBEC8[  ]+movsxb        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movsxb        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsxb        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxw        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsxw        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsxw        %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxw        %al, %cx
+[      ]*[1-9][0-9]* \?\?\?\? 660FBFC8[        ]+movsxw        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsxw        %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxw        %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 0FBFC8[  ]+movsxw        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsxw        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsb %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsb %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsb %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsb %al, %cx
+[      ]*[1-9][0-9]*[  ]+movsb %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsb %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsb %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movsb %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsb %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsbw        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsbw        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsbw        %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FBEC8[        ]+movsbw        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movsbw        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsbw        %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsbw        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movsbw        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsbw        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsbl        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsbl        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsbl        %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsbl        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movsbl        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsbl        %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FBEC8[  ]+movsbl        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movsbl        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsbl        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsw %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsw %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsw %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsw %al, %cx
+[      ]*[1-9][0-9]*[  ]+movsw %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsw %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsw %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movsw %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsw %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movswl        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movswl        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movswl        %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movswl        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movswl        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movswl        %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movswl        %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 0FBFC8[  ]+movswl        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movswl        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzx:
+[      ]*[1-9][0-9]*[  ]+movzx %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzx %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzx %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FB6C8[        ]+movzx %al, %cx
+[      ]*[1-9][0-9]* \?\?\?\? 660FB7C8[        ]+movzx %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzx %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FB6C8[  ]+movzx %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 0FB7C8[  ]+movzx %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzx %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxb        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzxb        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzxb        %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FB6C8[        ]+movzxb        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzxb        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzxb        %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FB6C8[  ]+movzxb        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movzxb        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzxb        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxw        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzxw        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzxw        %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxw        %al, %cx
+[      ]*[1-9][0-9]* \?\?\?\? 660FB7C8[        ]+movzxw        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzxw        %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxw        %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 0FB7C8[  ]+movzxw        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzxw        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzb %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzb %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzb %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FB6C8[        ]+movzb %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzb %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzb %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FB6C8[  ]+movzb %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movzb %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzb %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzbw        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzbw        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzbw        %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FB6C8[        ]+movzbw        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzbw        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzbw        %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzbw        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movzbw        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzbw        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzbl        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzbl        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzbl        %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzbl        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzbl        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzbl        %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FB6C8[  ]+movzbl        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movzbl        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzbl        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzw %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzw %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzw %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzw %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzw %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzw %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzw %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 0FB7C8[  ]+movzw %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzw %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzwl        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzwl        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzwl        %eax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzwl        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzwl        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzwl        %eax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzwl        %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 0FB7C8[  ]+movzwl        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzwl        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+#pass
diff --git a/gas/testsuite/gas/i386/movx32.s b/gas/testsuite/gas/i386/movx32.s
new file mode 100644 (file)
index 0000000..d799d5d
--- /dev/null
@@ -0,0 +1,197 @@
+       .text
+       .psize 0
+movsx:
+       movsx   %al, %cl
+       movsx   %ax, %cl
+       movsx   %eax, %cl
+
+       movsx   %al, %cx
+       movsx   %ax, %cx
+       movsx   %eax, %cx
+
+       movsx   %al, %ecx
+       movsx   %ax, %ecx
+       movsx   %eax, %ecx
+
+       movsxb  %al, %cl
+       movsxb  %ax, %cl
+       movsxb  %eax, %cl
+
+       movsxb  %al, %cx
+       movsxb  %ax, %cx
+       movsxb  %eax, %cx
+
+       movsxb  %al, %ecx
+       movsxb  %ax, %ecx
+       movsxb  %eax, %ecx
+
+       movsxw  %al, %cl
+       movsxw  %ax, %cl
+       movsxw  %eax, %cl
+
+       movsxw  %al, %cx
+       movsxw  %ax, %cx
+       movsxw  %eax, %cx
+
+       movsxw  %al, %ecx
+       movsxw  %ax, %ecx
+       movsxw  %eax, %ecx
+
+       movsb   %al, %cl
+       movsb   %ax, %cl
+       movsb   %eax, %cl
+
+       movsb   %al, %cx
+       movsb   %ax, %cx
+       movsb   %eax, %cx
+
+       movsb   %al, %ecx
+       movsb   %ax, %ecx
+       movsb   %eax, %ecx
+
+       movsbw  %al, %cl
+       movsbw  %ax, %cl
+       movsbw  %eax, %cl
+
+       movsbw  %al, %cx
+       movsbw  %ax, %cx
+       movsbw  %eax, %cx
+
+       movsbw  %al, %ecx
+       movsbw  %ax, %ecx
+       movsbw  %eax, %ecx
+
+       movsbl  %al, %cl
+       movsbl  %ax, %cl
+       movsbl  %eax, %cl
+
+       movsbl  %al, %cx
+       movsbl  %ax, %cx
+       movsbl  %eax, %cx
+
+       movsbl  %al, %ecx
+       movsbl  %ax, %ecx
+       movsbl  %eax, %ecx
+
+       movsw   %al, %cl
+       movsw   %ax, %cl
+       movsw   %eax, %cl
+
+       movsw   %al, %cx
+       movsw   %ax, %cx
+       movsw   %eax, %cx
+
+       movsw   %al, %ecx
+       movsw   %ax, %ecx
+       movsw   %eax, %ecx
+
+       movswl  %al, %cl
+       movswl  %ax, %cl
+       movswl  %eax, %cl
+
+       movswl  %al, %cx
+       movswl  %ax, %cx
+       movswl  %eax, %cx
+
+       movswl  %al, %ecx
+       movswl  %ax, %ecx
+       movswl  %eax, %ecx
+
+movzx:
+       movzx   %al, %cl
+       movzx   %ax, %cl
+       movzx   %eax, %cl
+
+       movzx   %al, %cx
+       movzx   %ax, %cx
+       movzx   %eax, %cx
+
+       movzx   %al, %ecx
+       movzx   %ax, %ecx
+       movzx   %eax, %ecx
+
+       movzxb  %al, %cl
+       movzxb  %ax, %cl
+       movzxb  %eax, %cl
+
+       movzxb  %al, %cx
+       movzxb  %ax, %cx
+       movzxb  %eax, %cx
+
+       movzxb  %al, %ecx
+       movzxb  %ax, %ecx
+       movzxb  %eax, %ecx
+
+       movzxw  %al, %cl
+       movzxw  %ax, %cl
+       movzxw  %eax, %cl
+
+       movzxw  %al, %cx
+       movzxw  %ax, %cx
+       movzxw  %eax, %cx
+
+       movzxw  %al, %ecx
+       movzxw  %ax, %ecx
+       movzxw  %eax, %ecx
+
+       movzb   %al, %cl
+       movzb   %ax, %cl
+       movzb   %eax, %cl
+
+       movzb   %al, %cx
+       movzb   %ax, %cx
+       movzb   %eax, %cx
+
+       movzb   %al, %ecx
+       movzb   %ax, %ecx
+       movzb   %eax, %ecx
+
+       movzbw  %al, %cl
+       movzbw  %ax, %cl
+       movzbw  %eax, %cl
+
+       movzbw  %al, %cx
+       movzbw  %ax, %cx
+       movzbw  %eax, %cx
+
+       movzbw  %al, %ecx
+       movzbw  %ax, %ecx
+       movzbw  %eax, %ecx
+
+       movzbl  %al, %cl
+       movzbl  %ax, %cl
+       movzbl  %eax, %cl
+
+       movzbl  %al, %cx
+       movzbl  %ax, %cx
+       movzbl  %eax, %cx
+
+       movzbl  %al, %ecx
+       movzbl  %ax, %ecx
+       movzbl  %eax, %ecx
+
+       movzw   %al, %cl
+       movzw   %ax, %cl
+       movzw   %eax, %cl
+
+       movzw   %al, %cx
+       movzw   %ax, %cx
+       movzw   %eax, %cx
+
+       movzw   %al, %ecx
+       movzw   %ax, %ecx
+       movzw   %eax, %ecx
+
+       movzwl  %al, %cl
+       movzwl  %ax, %cl
+       movzwl  %eax, %cl
+
+       movzwl  %al, %cx
+       movzwl  %ax, %cx
+       movzwl  %eax, %cx
+
+       movzwl  %al, %ecx
+       movzwl  %ax, %ecx
+       movzwl  %eax, %ecx
+
+       .p2align 4
diff --git a/gas/testsuite/gas/i386/movx64.l b/gas/testsuite/gas/i386/movx64.l
new file mode 100644 (file)
index 0000000..9368fb7
--- /dev/null
@@ -0,0 +1,485 @@
+.*: Assembler messages:
+#...
+[      ]*[1-9][0-9]*[  ]+movsx:
+[      ]*[1-9][0-9]*[  ]+movsx %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsx %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsx %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movsx %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FBEC8[        ]+movsx %al, %cx
+[      ]*[1-9][0-9]* \?\?\?\? 660FBFC8[        ]+movsx %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsx %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movsx %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FBEC8[  ]+movsx %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 0FBFC8[  ]+movsx %ax, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 63C8[    ]+movsx %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsx %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 480FBEC8[        ]+movsx %al, %rcx
+[      ]*[1-9][0-9]* \?\?\?\? 480FBFC8[        ]+movsx %ax, %rcx
+[      ]*[1-9][0-9]* \?\?\?\? 4863C8[  ]+movsx %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movsx %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxb        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsxb        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsxb        %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movsxb        %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FBEC8[        ]+movsxb        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movsxb        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsxb        %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movsxb        %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FBEC8[  ]+movsxb        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movsxb        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsxb        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsxb        %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 480FBEC8[        ]+movsxb        %al, %rcx
+[      ]*[1-9][0-9]*[  ]+movsxb        %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movsxb        %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movsxb        %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxw        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsxw        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsxw        %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movsxw        %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxw        %al, %cx
+[      ]*[1-9][0-9]* \?\?\?\? 660FBFC8[        ]+movsxw        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsxw        %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movsxw        %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxw        %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 0FBFC8[  ]+movsxw        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsxw        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsxw        %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxw        %al, %rcx
+[      ]*[1-9][0-9]* \?\?\?\? 480FBFC8[        ]+movsxw        %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movsxw        %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movsxw        %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxl        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsxl        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsxl        %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movsxl        %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxl        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movsxl        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsxl        %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movsxl        %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxl        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movsxl        %ax, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 63C8[    ]+movsxl        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsxl        %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxl        %al, %rcx
+[      ]*[1-9][0-9]*[  ]+movsxl        %ax, %rcx
+[      ]*[1-9][0-9]* \?\?\?\? 4863C8[  ]+movsxl        %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movsxl        %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxd        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsxd        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsxd        %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movsxd        %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxd        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movsxd        %ax, %cx
+[      ]*[1-9][0-9]* \?\?\?\? 6663C8[  ]+movsxd        %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movsxd        %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxd        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movsxd        %ax, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 63C8[    ]+movsxd        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsxd        %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsxd        %al, %rcx
+[      ]*[1-9][0-9]*[  ]+movsxd        %ax, %rcx
+[      ]*[1-9][0-9]* \?\?\?\? 4863C8[  ]+movsxd        %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movsxd        %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsb %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsb %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsb %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movsb %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsb %al, %cx
+[      ]*[1-9][0-9]*[  ]+movsb %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsb %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movsb %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsb %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movsb %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsb %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsb %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsb %al, %rcx
+[      ]*[1-9][0-9]*[  ]+movsb %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movsb %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movsb %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsbw        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsbw        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsbw        %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movsbw        %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FBEC8[        ]+movsbw        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movsbw        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsbw        %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movsbw        %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsbw        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movsbw        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsbw        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsbw        %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsbw        %al, %rcx
+[      ]*[1-9][0-9]*[  ]+movsbw        %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movsbw        %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movsbw        %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsbl        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsbl        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsbl        %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movsbl        %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsbl        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movsbl        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsbl        %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movsbl        %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FBEC8[  ]+movsbl        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movsbl        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsbl        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsbl        %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsbl        %al, %rcx
+[      ]*[1-9][0-9]*[  ]+movsbl        %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movsbl        %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movsbl        %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsbq        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsbq        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsbq        %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movsbq        %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsbq        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movsbq        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsbq        %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movsbq        %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsbq        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movsbq        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsbq        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsbq        %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 480FBEC8[        ]+movsbq        %al, %rcx
+[      ]*[1-9][0-9]*[  ]+movsbq        %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movsbq        %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movsbq        %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsw %al, %cl
+[      ]*[1-9][0-9]*[  ]+movsw %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movsw %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movsw %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsw %al, %cx
+[      ]*[1-9][0-9]*[  ]+movsw %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movsw %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movsw %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsw %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movsw %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsw %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movsw %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movsw %al, %rcx
+[      ]*[1-9][0-9]*[  ]+movsw %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movsw %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movsw %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movswl        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movswl        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movswl        %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movswl        %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movswl        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movswl        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movswl        %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movswl        %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movswl        %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 0FBFC8[  ]+movswl        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movswl        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movswl        %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movswl        %al, %rcx
+[      ]*[1-9][0-9]*[  ]+movswl        %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movswl        %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movswl        %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movswq        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movswq        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movswq        %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movswq        %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movswq        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movswq        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movswq        %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movswq        %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movswq        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movswq        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movswq        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movswq        %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movswq        %al, %rcx
+[      ]*[1-9][0-9]* \?\?\?\? 480FBFC8[        ]+movswq        %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movswq        %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movswq        %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzx:
+[      ]*[1-9][0-9]*[  ]+movzx %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzx %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzx %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movzx %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FB6C8[        ]+movzx %al, %cx
+[      ]*[1-9][0-9]* \?\?\?\? 660FB7C8[        ]+movzx %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzx %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movzx %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FB6C8[  ]+movzx %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 0FB7C8[  ]+movzx %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzx %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzx %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 480FB6C8[        ]+movzx %al, %rcx
+[      ]*[1-9][0-9]* \?\?\?\? 480FB7C8[        ]+movzx %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzx %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzx %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxb        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzxb        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzxb        %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movzxb        %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FB6C8[        ]+movzxb        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzxb        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzxb        %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movzxb        %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FB6C8[  ]+movzxb        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movzxb        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzxb        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzxb        %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 480FB6C8[        ]+movzxb        %al, %rcx
+[      ]*[1-9][0-9]*[  ]+movzxb        %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzxb        %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzxb        %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxw        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzxw        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzxw        %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movzxw        %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxw        %al, %cx
+[      ]*[1-9][0-9]* \?\?\?\? 660FB7C8[        ]+movzxw        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzxw        %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movzxw        %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxw        %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 0FB7C8[  ]+movzxw        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzxw        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzxw        %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxw        %al, %rcx
+[      ]*[1-9][0-9]* \?\?\?\? 480FB7C8[        ]+movzxw        %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzxw        %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzxw        %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxl        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzxl        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzxl        %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movzxl        %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxl        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzxl        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzxl        %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movzxl        %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxl        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movzxl        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzxl        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzxl        %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxl        %al, %rcx
+[      ]*[1-9][0-9]*[  ]+movzxl        %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzxl        %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzxl        %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxd        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzxd        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzxd        %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movzxd        %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxd        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzxd        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzxd        %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movzxd        %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxd        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movzxd        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzxd        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzxd        %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzxd        %al, %rcx
+[      ]*[1-9][0-9]*[  ]+movzxd        %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzxd        %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzxd        %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzb %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzb %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzb %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movzb %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FB6C8[        ]+movzb %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzb %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzb %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movzb %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FB6C8[  ]+movzb %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movzb %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzb %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzb %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 480FB6C8[        ]+movzb %al, %rcx
+[      ]*[1-9][0-9]*[  ]+movzb %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzb %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzb %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzbw        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzbw        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzbw        %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movzbw        %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 660FB6C8[        ]+movzbw        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzbw        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzbw        %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movzbw        %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzbw        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movzbw        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzbw        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzbw        %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzbw        %al, %rcx
+[      ]*[1-9][0-9]*[  ]+movzbw        %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzbw        %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzbw        %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzbl        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzbl        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzbl        %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movzbl        %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzbl        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzbl        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzbl        %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movzbl        %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 0FB6C8[  ]+movzbl        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movzbl        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzbl        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzbl        %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzbl        %al, %rcx
+[      ]*[1-9][0-9]*[  ]+movzbl        %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzbl        %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzbl        %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzbq        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzbq        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzbq        %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movzbq        %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzbq        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzbq        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzbq        %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movzbq        %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzbq        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movzbq        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzbq        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzbq        %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]* \?\?\?\? 480FB6C8[        ]+movzbq        %al, %rcx
+[      ]*[1-9][0-9]*[  ]+movzbq        %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzbq        %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzbq        %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzw %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzw %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzw %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movzw %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzw %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzw %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzw %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movzw %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzw %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 0FB7C8[  ]+movzw %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzw %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzw %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzw %al, %rcx
+[      ]*[1-9][0-9]* \?\?\?\? 480FB7C8[        ]+movzw %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzw %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzw %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzwl        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzwl        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzwl        %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movzwl        %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzwl        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzwl        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzwl        %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movzwl        %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzwl        %al, %ecx
+[      ]*[1-9][0-9]* \?\?\?\? 0FB7C8[  ]+movzwl        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzwl        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzwl        %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzwl        %al, %rcx
+[      ]*[1-9][0-9]*[  ]+movzwl        %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzwl        %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzwl        %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzwq        %al, %cl
+[      ]*[1-9][0-9]*[  ]+movzwq        %ax, %cl
+[      ]*[1-9][0-9]*[  ]+movzwq        %eax, %cl
+[      ]*[1-9][0-9]*[  ]+movzwq        %rax, %cl
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzwq        %al, %cx
+[      ]*[1-9][0-9]*[  ]+movzwq        %ax, %cx
+[      ]*[1-9][0-9]*[  ]+movzwq        %eax, %cx
+[      ]*[1-9][0-9]*[  ]+movzwq        %rax, %cx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzwq        %al, %ecx
+[      ]*[1-9][0-9]*[  ]+movzwq        %ax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzwq        %eax, %ecx
+[      ]*[1-9][0-9]*[  ]+movzwq        %rax, %ecx
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+movzwq        %al, %rcx
+[      ]*[1-9][0-9]* \?\?\?\? 480FB7C8[        ]+movzwq        %ax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzwq        %eax, %rcx
+[      ]*[1-9][0-9]*[  ]+movzwq        %rax, %rcx
+[      ]*[1-9][0-9]*[  ]*
+#pass
diff --git a/gas/testsuite/gas/i386/movx64.s b/gas/testsuite/gas/i386/movx64.s
new file mode 100644 (file)
index 0000000..1811794
--- /dev/null
@@ -0,0 +1,485 @@
+       .text
+       .psize 0
+movsx:
+       movsx   %al, %cl
+       movsx   %ax, %cl
+       movsx   %eax, %cl
+       movsx   %rax, %cl
+
+       movsx   %al, %cx
+       movsx   %ax, %cx
+       movsx   %eax, %cx
+       movsx   %rax, %cx
+
+       movsx   %al, %ecx
+       movsx   %ax, %ecx
+       movsx   %eax, %ecx
+       movsx   %rax, %ecx
+
+       movsx   %al, %rcx
+       movsx   %ax, %rcx
+       movsx   %eax, %rcx
+       movsx   %rax, %rcx
+
+       movsxb  %al, %cl
+       movsxb  %ax, %cl
+       movsxb  %eax, %cl
+       movsxb  %rax, %cl
+
+       movsxb  %al, %cx
+       movsxb  %ax, %cx
+       movsxb  %eax, %cx
+       movsxb  %rax, %cx
+
+       movsxb  %al, %ecx
+       movsxb  %ax, %ecx
+       movsxb  %eax, %ecx
+       movsxb  %rax, %ecx
+
+       movsxb  %al, %rcx
+       movsxb  %ax, %rcx
+       movsxb  %eax, %rcx
+       movsxb  %rax, %rcx
+
+       movsxw  %al, %cl
+       movsxw  %ax, %cl
+       movsxw  %eax, %cl
+       movsxw  %rax, %cl
+
+       movsxw  %al, %cx
+       movsxw  %ax, %cx
+       movsxw  %eax, %cx
+       movsxw  %rax, %cx
+
+       movsxw  %al, %ecx
+       movsxw  %ax, %ecx
+       movsxw  %eax, %ecx
+       movsxw  %rax, %ecx
+
+       movsxw  %al, %rcx
+       movsxw  %ax, %rcx
+       movsxw  %eax, %rcx
+       movsxw  %rax, %rcx
+
+       movsxl  %al, %cl
+       movsxl  %ax, %cl
+       movsxl  %eax, %cl
+       movsxl  %rax, %cl
+
+       movsxl  %al, %cx
+       movsxl  %ax, %cx
+       movsxl  %eax, %cx
+       movsxl  %rax, %cx
+
+       movsxl  %al, %ecx
+       movsxl  %ax, %ecx
+       movsxl  %eax, %ecx
+       movsxl  %rax, %ecx
+
+       movsxl  %al, %rcx
+       movsxl  %ax, %rcx
+       movsxl  %eax, %rcx
+       movsxl  %rax, %rcx
+
+       movsxd  %al, %cl
+       movsxd  %ax, %cl
+       movsxd  %eax, %cl
+       movsxd  %rax, %cl
+
+       movsxd  %al, %cx
+       movsxd  %ax, %cx
+       movsxd  %eax, %cx
+       movsxd  %rax, %cx
+
+       movsxd  %al, %ecx
+       movsxd  %ax, %ecx
+       movsxd  %eax, %ecx
+       movsxd  %rax, %ecx
+
+       movsxd  %al, %rcx
+       movsxd  %ax, %rcx
+       movsxd  %eax, %rcx
+       movsxd  %rax, %rcx
+
+       movsb   %al, %cl
+       movsb   %ax, %cl
+       movsb   %eax, %cl
+       movsb   %rax, %cl
+
+       movsb   %al, %cx
+       movsb   %ax, %cx
+       movsb   %eax, %cx
+       movsb   %rax, %cx
+
+       movsb   %al, %ecx
+       movsb   %ax, %ecx
+       movsb   %eax, %ecx
+       movsb   %rax, %ecx
+
+       movsb   %al, %rcx
+       movsb   %ax, %rcx
+       movsb   %eax, %rcx
+       movsb   %rax, %rcx
+
+       movsbw  %al, %cl
+       movsbw  %ax, %cl
+       movsbw  %eax, %cl
+       movsbw  %rax, %cl
+
+       movsbw  %al, %cx
+       movsbw  %ax, %cx
+       movsbw  %eax, %cx
+       movsbw  %rax, %cx
+
+       movsbw  %al, %ecx
+       movsbw  %ax, %ecx
+       movsbw  %eax, %ecx
+       movsbw  %rax, %ecx
+
+       movsbw  %al, %rcx
+       movsbw  %ax, %rcx
+       movsbw  %eax, %rcx
+       movsbw  %rax, %rcx
+
+       movsbl  %al, %cl
+       movsbl  %ax, %cl
+       movsbl  %eax, %cl
+       movsbl  %rax, %cl
+
+       movsbl  %al, %cx
+       movsbl  %ax, %cx
+       movsbl  %eax, %cx
+       movsbl  %rax, %cx
+
+       movsbl  %al, %ecx
+       movsbl  %ax, %ecx
+       movsbl  %eax, %ecx
+       movsbl  %rax, %ecx
+
+       movsbl  %al, %rcx
+       movsbl  %ax, %rcx
+       movsbl  %eax, %rcx
+       movsbl  %rax, %rcx
+
+       movsbq  %al, %cl
+       movsbq  %ax, %cl
+       movsbq  %eax, %cl
+       movsbq  %rax, %cl
+
+       movsbq  %al, %cx
+       movsbq  %ax, %cx
+       movsbq  %eax, %cx
+       movsbq  %rax, %cx
+
+       movsbq  %al, %ecx
+       movsbq  %ax, %ecx
+       movsbq  %eax, %ecx
+       movsbq  %rax, %ecx
+
+       movsbq  %al, %rcx
+       movsbq  %ax, %rcx
+       movsbq  %eax, %rcx
+       movsbq  %rax, %rcx
+
+       movsw   %al, %cl
+       movsw   %ax, %cl
+       movsw   %eax, %cl
+       movsw   %rax, %cl
+
+       movsw   %al, %cx
+       movsw   %ax, %cx
+       movsw   %eax, %cx
+       movsw   %rax, %cx
+
+       movsw   %al, %ecx
+       movsw   %ax, %ecx
+       movsw   %eax, %ecx
+       movsw   %rax, %ecx
+
+       movsw   %al, %rcx
+       movsw   %ax, %rcx
+       movsw   %eax, %rcx
+       movsw   %rax, %rcx
+
+       movswl  %al, %cl
+       movswl  %ax, %cl
+       movswl  %eax, %cl
+       movswl  %rax, %cl
+
+       movswl  %al, %cx
+       movswl  %ax, %cx
+       movswl  %eax, %cx
+       movswl  %rax, %cx
+
+       movswl  %al, %ecx
+       movswl  %ax, %ecx
+       movswl  %eax, %ecx
+       movswl  %rax, %ecx
+
+       movswl  %al, %rcx
+       movswl  %ax, %rcx
+       movswl  %eax, %rcx
+       movswl  %rax, %rcx
+
+       movswq  %al, %cl
+       movswq  %ax, %cl
+       movswq  %eax, %cl
+       movswq  %rax, %cl
+
+       movswq  %al, %cx
+       movswq  %ax, %cx
+       movswq  %eax, %cx
+       movswq  %rax, %cx
+
+       movswq  %al, %ecx
+       movswq  %ax, %ecx
+       movswq  %eax, %ecx
+       movswq  %rax, %ecx
+
+       movswq  %al, %rcx
+       movswq  %ax, %rcx
+       movswq  %eax, %rcx
+       movswq  %rax, %rcx
+
+movzx:
+       movzx   %al, %cl
+       movzx   %ax, %cl
+       movzx   %eax, %cl
+       movzx   %rax, %cl
+
+       movzx   %al, %cx
+       movzx   %ax, %cx
+       movzx   %eax, %cx
+       movzx   %rax, %cx
+
+       movzx   %al, %ecx
+       movzx   %ax, %ecx
+       movzx   %eax, %ecx
+       movzx   %rax, %ecx
+
+       movzx   %al, %rcx
+       movzx   %ax, %rcx
+       movzx   %eax, %rcx
+       movzx   %rax, %rcx
+
+       movzxb  %al, %cl
+       movzxb  %ax, %cl
+       movzxb  %eax, %cl
+       movzxb  %rax, %cl
+
+       movzxb  %al, %cx
+       movzxb  %ax, %cx
+       movzxb  %eax, %cx
+       movzxb  %rax, %cx
+
+       movzxb  %al, %ecx
+       movzxb  %ax, %ecx
+       movzxb  %eax, %ecx
+       movzxb  %rax, %ecx
+
+       movzxb  %al, %rcx
+       movzxb  %ax, %rcx
+       movzxb  %eax, %rcx
+       movzxb  %rax, %rcx
+
+       movzxw  %al, %cl
+       movzxw  %ax, %cl
+       movzxw  %eax, %cl
+       movzxw  %rax, %cl
+
+       movzxw  %al, %cx
+       movzxw  %ax, %cx
+       movzxw  %eax, %cx
+       movzxw  %rax, %cx
+
+       movzxw  %al, %ecx
+       movzxw  %ax, %ecx
+       movzxw  %eax, %ecx
+       movzxw  %rax, %ecx
+
+       movzxw  %al, %rcx
+       movzxw  %ax, %rcx
+       movzxw  %eax, %rcx
+       movzxw  %rax, %rcx
+
+       movzxl  %al, %cl
+       movzxl  %ax, %cl
+       movzxl  %eax, %cl
+       movzxl  %rax, %cl
+
+       movzxl  %al, %cx
+       movzxl  %ax, %cx
+       movzxl  %eax, %cx
+       movzxl  %rax, %cx
+
+       movzxl  %al, %ecx
+       movzxl  %ax, %ecx
+       movzxl  %eax, %ecx
+       movzxl  %rax, %ecx
+
+       movzxl  %al, %rcx
+       movzxl  %ax, %rcx
+       movzxl  %eax, %rcx
+       movzxl  %rax, %rcx
+
+       movzxd  %al, %cl
+       movzxd  %ax, %cl
+       movzxd  %eax, %cl
+       movzxd  %rax, %cl
+
+       movzxd  %al, %cx
+       movzxd  %ax, %cx
+       movzxd  %eax, %cx
+       movzxd  %rax, %cx
+
+       movzxd  %al, %ecx
+       movzxd  %ax, %ecx
+       movzxd  %eax, %ecx
+       movzxd  %rax, %ecx
+
+       movzxd  %al, %rcx
+       movzxd  %ax, %rcx
+       movzxd  %eax, %rcx
+       movzxd  %rax, %rcx
+
+       movzb   %al, %cl
+       movzb   %ax, %cl
+       movzb   %eax, %cl
+       movzb   %rax, %cl
+
+       movzb   %al, %cx
+       movzb   %ax, %cx
+       movzb   %eax, %cx
+       movzb   %rax, %cx
+
+       movzb   %al, %ecx
+       movzb   %ax, %ecx
+       movzb   %eax, %ecx
+       movzb   %rax, %ecx
+
+       movzb   %al, %rcx
+       movzb   %ax, %rcx
+       movzb   %eax, %rcx
+       movzb   %rax, %rcx
+
+       movzbw  %al, %cl
+       movzbw  %ax, %cl
+       movzbw  %eax, %cl
+       movzbw  %rax, %cl
+
+       movzbw  %al, %cx
+       movzbw  %ax, %cx
+       movzbw  %eax, %cx
+       movzbw  %rax, %cx
+
+       movzbw  %al, %ecx
+       movzbw  %ax, %ecx
+       movzbw  %eax, %ecx
+       movzbw  %rax, %ecx
+
+       movzbw  %al, %rcx
+       movzbw  %ax, %rcx
+       movzbw  %eax, %rcx
+       movzbw  %rax, %rcx
+
+       movzbl  %al, %cl
+       movzbl  %ax, %cl
+       movzbl  %eax, %cl
+       movzbl  %rax, %cl
+
+       movzbl  %al, %cx
+       movzbl  %ax, %cx
+       movzbl  %eax, %cx
+       movzbl  %rax, %cx
+
+       movzbl  %al, %ecx
+       movzbl  %ax, %ecx
+       movzbl  %eax, %ecx
+       movzbl  %rax, %ecx
+
+       movzbl  %al, %rcx
+       movzbl  %ax, %rcx
+       movzbl  %eax, %rcx
+       movzbl  %rax, %rcx
+
+       movzbq  %al, %cl
+       movzbq  %ax, %cl
+       movzbq  %eax, %cl
+       movzbq  %rax, %cl
+
+       movzbq  %al, %cx
+       movzbq  %ax, %cx
+       movzbq  %eax, %cx
+       movzbq  %rax, %cx
+
+       movzbq  %al, %ecx
+       movzbq  %ax, %ecx
+       movzbq  %eax, %ecx
+       movzbq  %rax, %ecx
+
+       movzbq  %al, %rcx
+       movzbq  %ax, %rcx
+       movzbq  %eax, %rcx
+       movzbq  %rax, %rcx
+
+       movzw   %al, %cl
+       movzw   %ax, %cl
+       movzw   %eax, %cl
+       movzw   %rax, %cl
+
+       movzw   %al, %cx
+       movzw   %ax, %cx
+       movzw   %eax, %cx
+       movzw   %rax, %cx
+
+       movzw   %al, %ecx
+       movzw   %ax, %ecx
+       movzw   %eax, %ecx
+       movzw   %rax, %ecx
+
+       movzw   %al, %rcx
+       movzw   %ax, %rcx
+       movzw   %eax, %rcx
+       movzw   %rax, %rcx
+
+       movzwl  %al, %cl
+       movzwl  %ax, %cl
+       movzwl  %eax, %cl
+       movzwl  %rax, %cl
+
+       movzwl  %al, %cx
+       movzwl  %ax, %cx
+       movzwl  %eax, %cx
+       movzwl  %rax, %cx
+
+       movzwl  %al, %ecx
+       movzwl  %ax, %ecx
+       movzwl  %eax, %ecx
+       movzwl  %rax, %ecx
+
+       movzwl  %al, %rcx
+       movzwl  %ax, %rcx
+       movzwl  %eax, %rcx
+       movzwl  %rax, %rcx
+
+       movzwq  %al, %cl
+       movzwq  %ax, %cl
+       movzwq  %eax, %cl
+       movzwq  %rax, %cl
+
+       movzwq  %al, %cx
+       movzwq  %ax, %cx
+       movzwq  %eax, %cx
+       movzwq  %rax, %cx
+
+       movzwq  %al, %ecx
+       movzwq  %ax, %ecx
+       movzwq  %eax, %ecx
+       movzwq  %rax, %ecx
+
+       movzwq  %al, %rcx
+       movzwq  %ax, %rcx
+       movzwq  %eax, %rcx
+       movzwq  %rax, %rcx
+
+       .p2align 4
index 8a6252eea628b4b6ce50a8090635d63101516003..e127c921588822ead0551e34f05ec02f77169d76 100644 (file)
@@ -75,6 +75,10 @@ Disassembly of section .text:
  *[a-f0-9]+:   8e 07                   mov    \(%bx\),%es
  *[a-f0-9]+:   a5                      movsw  %ds:\(%si\),%es:\(%di\)
  *[a-f0-9]+:   67 a5                   movsw  %ds:\(%esi\),%es:\(%edi\)
+ *[a-f0-9]+:   0f be 07                movsbw \(%bx\),%ax
+ *[a-f0-9]+:   66 0f be 07             movsbl \(%bx\),%eax
+ *[a-f0-9]+:   0f b6 07                movzbw \(%bx\),%ax
+ *[a-f0-9]+:   66 0f b6 07             movzbl \(%bx\),%eax
  *[a-f0-9]+:   f7 27                   mulw   \(%bx\)
  *[a-f0-9]+:   f7 1f                   negw   \(%bx\)
  *[a-f0-9]+:   0f 1f 07                nopw   \(%bx\)
index 743e5faeb6ac851c90bc7e5d73104cbb38384dac..80df3c8e3bc77a8bf6222d62f0d14c0775ab6f48 100644 (file)
@@ -69,6 +69,10 @@ noreg:
        mov     (%bx), %es
        movs
        movs    (%esi), %es:(%edi)
+       movsx   (%bx), %ax
+       movsx   (%bx), %eax
+       movzx   (%bx), %ax
+       movzx   (%bx), %eax
        mul     (%bx)
        neg     (%bx)
        nop     (%bx)
index 1e03f98335c83a93d46ff5ad7ca95e4eb98815bd..6e663babb7da31ed6aacc76bdc8164a9eb149f07 100644 (file)
@@ -80,6 +80,10 @@ Disassembly of section .text:
  *[a-f0-9]+:   8e 00                   mov    \(%eax\),%es
  *[a-f0-9]+:   a5                      movsl  %ds:\(%esi\),%es:\(%edi\)
  *[a-f0-9]+:   a5                      movsl  %ds:\(%esi\),%es:\(%edi\)
+ *[a-f0-9]+:   66 0f be 00             movsbw \(%eax\),%ax
+ *[a-f0-9]+:   0f be 00                movsbl \(%eax\),%eax
+ *[a-f0-9]+:   66 0f b6 00             movzbw \(%eax\),%ax
+ *[a-f0-9]+:   0f b6 00                movzbl \(%eax\),%eax
  *[a-f0-9]+:   f7 20                   mull   \(%eax\)
  *[a-f0-9]+:   f7 18                   negl   \(%eax\)
  *[a-f0-9]+:   0f 1f 00                nopl   \(%eax\)
index 1d1cf6d797135b59b445c49d7b1bf2ce80320a1c..cbde0d4a675ec042a325d2ca7927b7af6863f0d2 100644 (file)
@@ -73,6 +73,10 @@ noreg:
        mov     (%eax), %es
        movs
        movs    (%esi), %es:(%edi)
+       movsx   (%eax), %ax
+       movsx   (%eax), %eax
+       movzx   (%eax), %ax
+       movzx   (%eax), %eax
        mul     (%eax)
        neg     (%eax)
        nop     (%eax)
index 7a9beebd50b9ac919d60ea9d16de6af6086b68ae..e7764f9372d5167af1b550bafb4be1be4da81786 100644 (file)
@@ -84,6 +84,12 @@ Disassembly of section .text:
  *[a-f0-9]+:   8e 00                   mov    \(%rax\),%es
  *[a-f0-9]+:   a5                      movsl  %ds:\(%rsi\),%es:\(%rdi\)
  *[a-f0-9]+:   a5                      movsl  %ds:\(%rsi\),%es:\(%rdi\)
+ *[a-f0-9]+:   66 0f be 00             movsbw \(%rax\),%ax
+ *[a-f0-9]+:   0f be 00                movsbl \(%rax\),%eax
+ *[a-f0-9]+:   48 0f be 00             movsbq \(%rax\),%rax
+ *[a-f0-9]+:   66 0f b6 00             movzbw \(%rax\),%ax
+ *[a-f0-9]+:   0f b6 00                movzbl \(%rax\),%eax
+ *[a-f0-9]+:   48 0f b6 00             movzbq \(%rax\),%rax
  *[a-f0-9]+:   f7 20                   mull   \(%rax\)
  *[a-f0-9]+:   f7 18                   negl   \(%rax\)
  *[a-f0-9]+:   0f 1f 00                nopl   \(%rax\)
index 59b67bc187288c27d150d45c86acc483f01df23a..ab0b5585f6e0c35799871bc1ece295b42e15afba 100644 (file)
@@ -77,6 +77,12 @@ noreg:
        mov     (%rax), %es
        movs
        movs    (%rsi), %es:(%rdi)
+       movsx   (%rax), %ax
+       movsx   (%rax), %eax
+       movsx   (%rax), %rax
+       movzx   (%rax), %ax
+       movzx   (%rax), %eax
+       movzx   (%rax), %rax
        mul     (%rax)
        neg     (%rax)
        nop     (%rax)
index b7f55d41681fd102a82e634d6d9002536bf494b2..0c500ae37862486e69b5115e9e1689207865bc29 100644 (file)
@@ -21,6 +21,6 @@ Disassembly of section .text:
  +[a-f0-9]+:   63 08                   movsxd ecx,DWORD PTR \[rax\]
  +[a-f0-9]+:   63 08                   movsxd ecx,DWORD PTR \[rax\]
  +[a-f0-9]+:   66 63 c8                movsxd cx,eax
- +[a-f0-9]+:   63 08                   movsxd ecx,DWORD PTR \[rax\]
+ +[a-f0-9]+:   66 63 08                movsxd cx,DWORD PTR \[rax\]
  +[a-f0-9]+:   66 63 08                movsxd cx,DWORD PTR \[rax\]
 #pass
index 1881fe2e3131a8f4ca494b1a1efc3d6b759d9462..7ce3f69ce490239a0b0bff6b76bfc87ab4a7c0c6 100644 (file)
@@ -20,6 +20,6 @@ Disassembly of section .text:
  +[a-f0-9]+:   63 08                   movsxd \(%rax\),%ecx
  +[a-f0-9]+:   63 08                   movsxd \(%rax\),%ecx
  +[a-f0-9]+:   66 63 c8                movsxd %eax,%cx
- +[a-f0-9]+:   63 08                   movsxd \(%rax\),%ecx
+ +[a-f0-9]+:   66 63 08                movsxd \(%rax\),%cx
  +[a-f0-9]+:   66 63 08                movsxd \(%rax\),%cx
 #pass
index 8dd8893e79aa9b6283eb859d6aa1864deb559558..2e39348827bc5d3b5665ee284b53ad0db7f60ee7 100644 (file)
@@ -173,8 +173,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    0f bf f0                movsx  esi,ax
 [      ]*[a-f0-9]+:    48 0f bf f0             movsx  rsi,ax
 [      ]*[a-f0-9]+:    48 63 f0                movsxd rsi,eax
-[      ]*[a-f0-9]+:    0f be 10                movsx  edx,BYTE PTR \[rax\]
-[      ]*[a-f0-9]+:    48 0f be 10             movsx  rdx,BYTE PTR \[rax\]
 [      ]*[a-f0-9]+:    66 0f be 10             movsx  dx,BYTE PTR \[rax\]
 [      ]*[a-f0-9]+:    0f be 10                movsx  edx,BYTE PTR \[rax\]
 [      ]*[a-f0-9]+:    48 0f be 10             movsx  rdx,BYTE PTR \[rax\]
@@ -186,8 +184,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    48 0f b6 f0             movzx  rsi,al
 [      ]*[a-f0-9]+:    0f b7 f0                movzx  esi,ax
 [      ]*[a-f0-9]+:    48 0f b7 f0             movzx  rsi,ax
-[      ]*[a-f0-9]+:    0f b6 10                movzx  edx,BYTE PTR \[rax\]
-[      ]*[a-f0-9]+:    48 0f b6 10             movzx  rdx,BYTE PTR \[rax\]
 [      ]*[a-f0-9]+:    66 0f b6 10             movzx  dx,BYTE PTR \[rax\]
 [      ]*[a-f0-9]+:    0f b6 10                movzx  edx,BYTE PTR \[rax\]
 [      ]*[a-f0-9]+:    48 0f b6 10             movzx  rdx,BYTE PTR \[rax\]
@@ -231,8 +227,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    9b df e0                fstsw  ax
 [      ]*[a-f0-9]+:    9b df e0                fstsw  ax
 [      ]*[a-f0-9]+:    66 0f be 00             movsx  ax,BYTE PTR \[rax\]
-[      ]*[a-f0-9]+:    0f be 00                movsx  eax,BYTE PTR \[rax\]
-[      ]*[a-f0-9]+:    48 0f be 00             movsx  rax,BYTE PTR \[rax\]
 [      ]*[a-f0-9]+:    66 0f be 10             movsx  dx,BYTE PTR \[rax\]
 [      ]*[a-f0-9]+:    0f be 10                movsx  edx,BYTE PTR \[rax\]
 [      ]*[a-f0-9]+:    48 0f be 10             movsx  rdx,BYTE PTR \[rax\]
@@ -241,8 +235,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    48 63 10                movsxd rdx,DWORD PTR \[rax\]
 [      ]*[a-f0-9]+:    48 63 00                movsxd rax,DWORD PTR \[rax\]
 [      ]*[a-f0-9]+:    66 0f b6 00             movzx  ax,BYTE PTR \[rax\]
-[      ]*[a-f0-9]+:    0f b6 00                movzx  eax,BYTE PTR \[rax\]
-[      ]*[a-f0-9]+:    48 0f b6 00             movzx  rax,BYTE PTR \[rax\]
 [      ]*[a-f0-9]+:    66 0f b6 10             movzx  dx,BYTE PTR \[rax\]
 [      ]*[a-f0-9]+:    0f b6 10                movzx  edx,BYTE PTR \[rax\]
 [      ]*[a-f0-9]+:    48 0f b6 10             movzx  rdx,BYTE PTR \[rax\]
index 0bdbc79021a0a59581e5b504f102027f501812e2..4a73ddc57f9b1fe8ecbf51731b03511e77220cfc 100644 (file)
@@ -173,8 +173,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    0f bf f0                movswl %ax,%esi
 [      ]*[a-f0-9]+:    48 0f bf f0             movswq %ax,%rsi
 [      ]*[a-f0-9]+:    48 63 f0                movslq %eax,%rsi
-[      ]*[a-f0-9]+:    0f be 10                movsbl \(%rax\),%edx
-[      ]*[a-f0-9]+:    48 0f be 10             movsbq \(%rax\),%rdx
 [      ]*[a-f0-9]+:    66 0f be 10             movsbw \(%rax\),%dx
 [      ]*[a-f0-9]+:    0f be 10                movsbl \(%rax\),%edx
 [      ]*[a-f0-9]+:    48 0f be 10             movsbq \(%rax\),%rdx
@@ -186,8 +184,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    48 0f b6 f0             movzbq %al,%rsi
 [      ]*[a-f0-9]+:    0f b7 f0                movzwl %ax,%esi
 [      ]*[a-f0-9]+:    48 0f b7 f0             movzwq %ax,%rsi
-[      ]*[a-f0-9]+:    0f b6 10                movzbl \(%rax\),%edx
-[      ]*[a-f0-9]+:    48 0f b6 10             movzbq \(%rax\),%rdx
 [      ]*[a-f0-9]+:    66 0f b6 10             movzbw \(%rax\),%dx
 [      ]*[a-f0-9]+:    0f b6 10                movzbl \(%rax\),%edx
 [      ]*[a-f0-9]+:    48 0f b6 10             movzbq \(%rax\),%rdx
@@ -231,8 +227,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    9b df e0                fstsw  %ax
 [      ]*[a-f0-9]+:    9b df e0                fstsw  %ax
 [      ]*[a-f0-9]+:    66 0f be 00             movsbw \(%rax\),%ax
-[      ]*[a-f0-9]+:    0f be 00                movsbl \(%rax\),%eax
-[      ]*[a-f0-9]+:    48 0f be 00             movsbq \(%rax\),%rax
 [      ]*[a-f0-9]+:    66 0f be 10             movsbw \(%rax\),%dx
 [      ]*[a-f0-9]+:    0f be 10                movsbl \(%rax\),%edx
 [      ]*[a-f0-9]+:    48 0f be 10             movsbq \(%rax\),%rdx
@@ -241,8 +235,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    48 63 10                movslq \(%rax\),%rdx
 [      ]*[a-f0-9]+:    48 63 00                movslq \(%rax\),%rax
 [      ]*[a-f0-9]+:    66 0f b6 00             movzbw \(%rax\),%ax
-[      ]*[a-f0-9]+:    0f b6 00                movzbl \(%rax\),%eax
-[      ]*[a-f0-9]+:    48 0f b6 00             movzbq \(%rax\),%rax
 [      ]*[a-f0-9]+:    66 0f b6 10             movzbw \(%rax\),%dx
 [      ]*[a-f0-9]+:    0f b6 10                movzbl \(%rax\),%edx
 [      ]*[a-f0-9]+:    48 0f b6 10             movzbq \(%rax\),%rdx
index 377580be341d31b321e4ecef1b02ca23a73f8de7..da820439a9270cb1144daf282baab44cbf6ff4d3 100644 (file)
@@ -208,8 +208,6 @@ cmpxchg16b oword ptr [rax]
        movsx   %ax, %esi
        movsx   %ax, %rsi
        movsx   %eax, %rsi
-       movsx   (%rax), %edx
-       movsx   (%rax), %rdx
        movsx   (%rax), %dx
        movsbl  (%rax), %edx
        movsbq  (%rax), %rdx
@@ -222,8 +220,6 @@ cmpxchg16b oword ptr [rax]
        movzx   %al, %rsi
        movzx   %ax, %esi
        movzx   %ax, %rsi
-       movzx   (%rax), %edx
-       movzx   (%rax), %rdx
        movzx   (%rax), %dx
        movzb   (%rax), %edx
        movzb   (%rax), %rdx
@@ -277,8 +273,6 @@ cmpxchg16b oword ptr [rax]
 
 .att_syntax
 movsx (%rax),%ax
-movsx (%rax),%eax
-movsx (%rax),%rax
 movsxb (%rax), %dx
 movsxb (%rax), %edx
 movsxb (%rax), %rdx
@@ -287,8 +281,6 @@ movsxw      (%rax), %rdx
 movsxl (%rax), %rdx
 movsxd (%rax),%rax
 movzx (%rax),%ax
-movzx (%rax),%eax
-movzx (%rax),%rax
 movzxb (%rax), %dx
 movzxb (%rax), %edx
 movzxb (%rax), %rdx
index 6b0c17f8ae1f9c20df4ec0791f2840bca9ae4230..a53d646e422aa759ae93ec08d16287340850e190 100644 (file)
@@ -1,3 +1,11 @@
+2020-02-14  Jan Beulich  <jbeulich@suse.com>
+
+       PR gas/25438
+       * i386-opc.tbl (movsx): Fold patterns. Also allow Reg32 as
+       destination for Cpu64-only variant.
+       (movzx): Fold patterns.
+       * i386-tbl.h: Re-generate.
+
 2020-02-13  Jan Beulich  <jbeulich@suse.com>
 
        * i386-gen.c (cpu_flag_init): Move CpuSSE4a from
index 30ac416022bb80e1e0aad677f11619544cc1b86a..6eb7238589e1975405250079a1317526c5ed9b16 100644 (file)
@@ -132,13 +132,9 @@ movswl, 2, 0xfbf, None, 2, Cpu386, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf
 movsbq, 2, 0xfbe, None, 2, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64, { Reg8|Byte|Unspecified|BaseIndex, Reg64 }
 movswq, 2, 0xfbf, None, 2, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64, { Reg16|Word|Unspecified|BaseIndex, Reg64 }
 movslq, 2, 0x63, None, 1, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64, { Reg32|Dword|Unspecified|BaseIndex, Reg64 }
-// Intel Syntax next 3 insns
-movsx, 2, 0xfbe, None, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Reg8|Unspecified|BaseIndex, Reg16|Reg32|Reg64 }
-movsx, 2, 0xfbf, None, 2, Cpu386, Modrm|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Reg16|Unspecified|BaseIndex, Reg32|Reg64 }
-movsx, 2, 0x63, None, 1, Cpu64, Modrm|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64|ATTSyntax, { Reg32|Unspecified|BaseIndex, Reg64 }
-movsx, 2, 0xfbe, None, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { Reg8|Byte|BaseIndex, Reg16|Reg32|Reg64 }
-movsx, 2, 0xfbf, None, 2, Cpu386, Modrm|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { Reg16|Word|BaseIndex, Reg32|Reg64 }
-movsx, 2, 0x63, None, 1, Cpu64, Modrm|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64|IntelSyntax, { Reg32|Dword|BaseIndex, Reg64 }
+// Intel Syntax next 2 insns
+movsx, 2, 0xfbe, None, 2, Cpu386, W|Modrm|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Reg16|Unspecified|BaseIndex, Reg16|Reg32|Reg64 }
+movsx, 2, 0x63, None, 1, Cpu64, Modrm|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Unspecified|BaseIndex, Reg32|Reg64 }
 movsxd, 2, 0x63, None, 1, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Unspecified|BaseIndex, Reg32|Reg64 }
 movsxd, 2, 0x63, None, 1, Cpu64, Amd64|Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Unspecified|BaseIndex, Reg16 }
 movsxd, 2, 0x63, None, 1, Cpu64, Intel64|Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Unspecified|BaseIndex, Reg16 }
@@ -146,12 +142,9 @@ movsxd, 2, 0x63, None, 1, Cpu64, Intel64|Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|N
 // Move with zero extend.
 movzb, 2, 0xfb6, None, 2, Cpu386, Modrm|No_bSuf|No_sSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex, Reg16|Reg32|Reg64 }
 movzw, 2, 0xfb7, None, 2, Cpu386, Modrm|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg16|Word|Unspecified|BaseIndex, Reg32|Reg64 }
-// Intel Syntax next 2 insns (the 64-bit variants are not particulary
+// Intel Syntax next insn (the 64-bit variant is not particulary
 // useful since the zero extend 32->64 is implicit, but we can encode them).
-movzx, 2, 0xfb6, None, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Reg8|Unspecified|BaseIndex, Reg16|Reg32|Reg64 }
-movzx, 2, 0xfb7, None, 2, Cpu386, Modrm|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Reg16|Unspecified|BaseIndex, Reg32|Reg64 }
-movzx, 2, 0xfb6, None, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { Reg8|Byte|BaseIndex, Reg16|Reg32|Reg64 }
-movzx, 2, 0xfb7, None, 2, Cpu386, Modrm|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { Reg16|Word|BaseIndex, Reg32|Reg64 }
+movzx, 2, 0xfb6, None, 2, Cpu386, W|Modrm|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Reg16|Unspecified|BaseIndex, Reg16|Reg32|Reg64 }
 
 // Push instructions.
 push, 1, 0x50, None, 1, CpuNo64, No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Reg32 }
index 6a990569978b7866e2881f6f8080d336a471de53..acc25dad05e000e80da553f1df09c2339e316779 100644 (file)
@@ -351,27 +351,13 @@ const insn_template i386_optab[] =
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
-    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
+    { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
-    { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0,
          0, 0, 0, 0, 1, 0 } },
       { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
          0, 0, 0, 0, 0, 0 } } } },
-  { "movsx", 0xfbf, None, 2, 2,
-    { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
-    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
-    { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
-         0, 0, 0, 0, 1, 0 } },
-      { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
-         0, 0, 0, 0, 0, 0 } } } },
   { "movsx", 0x63, None, 1, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -380,54 +366,12 @@ const insn_template i386_optab[] =
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0,
          0, 0, 0, 0, 1, 0 } },
-      { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
-         0, 0, 0, 0, 0, 0 } } } },
-  { "movsx", 0xfbe, None, 2, 2,
-    { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
-    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
-    { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0 } },
-      { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
-         0, 0, 0, 0, 0, 0 } } } },
-  { "movsx", 0xfbf, None, 2, 2,
-    { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
-    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
-    { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
-         0, 0, 0, 0, 0, 0 } },
       { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
          0, 0, 0, 0, 0, 0 } } } },
-  { "movsx", 0x63, None, 1, 2,
-    { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
-    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
-    { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0,
-         0, 0, 0, 0, 0, 0 } },
-      { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
-         0, 0, 0, 0, 0, 0 } } } },
   { "movsxd", 0x63, None, 1, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -505,55 +449,13 @@ const insn_template i386_optab[] =
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
-    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
-    { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
-         0, 0, 0, 0, 1, 0 } },
-      { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
-         0, 0, 0, 0, 0, 0 } } } },
-  { "movzx", 0xfb7, None, 2, 2,
-    { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
-    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0,
+    { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
-    { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0,
          0, 0, 0, 0, 1, 0 } },
-      { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
-         0, 0, 0, 0, 0, 0 } } } },
-  { "movzx", 0xfb6, None, 2, 2,
-    { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
-    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
-    { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0 } },
       { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
          0, 0, 0, 0, 0, 0 } } } },
-  { "movzx", 0xfb7, None, 2, 2,
-    { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
-    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
-    { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
-         0, 0, 0, 0, 0, 0 } },
-      { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
-         0, 0, 0, 0, 0, 0 } } } },
   { "push", 0x50, None, 1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,