]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
x86: optimize {,V}PEXTR{D,Q} with immediate of 0
authorJan Beulich <jbeulich@suse.com>
Fri, 21 Jun 2024 12:40:44 +0000 (14:40 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 21 Jun 2024 12:40:44 +0000 (14:40 +0200)
Such are equivalent to simple moves, which are up to 3 bytes shorter to
encode (and perhaps also cheaper to execute).

12 files changed:
gas/config/tc-i386.c
gas/testsuite/gas/i386/optimize-1.d
gas/testsuite/gas/i386/optimize-1.s
gas/testsuite/gas/i386/optimize-1a.d
gas/testsuite/gas/i386/optimize-4.d
gas/testsuite/gas/i386/optimize-5.d
gas/testsuite/gas/i386/x86-64-optimize-pextr.d [new file with mode: 0644]
gas/testsuite/gas/i386/x86-64-optimize-pextr.l [new file with mode: 0644]
gas/testsuite/gas/i386/x86-64-optimize-pextr.s [new file with mode: 0644]
gas/testsuite/gas/i386/x86-64.exp
opcodes/i386-opc.tbl
opcodes/i386-tbl.h

index ae1ef56491c9238efa636272ef05ea81c66f5113..ab52692489749c72799e095d7063e38416b3d6ec 100644 (file)
@@ -5287,6 +5287,44 @@ optimize_encoding (void)
 
       swap_2_operands (1, 2);
     }
+  else if (i.tm.base_opcode == 0x16
+          && i.tm.opcode_space == SPACE_0F3A
+          && i.op[0].imms->X_op == O_constant
+          && i.op[0].imms->X_add_number == 0)
+    {
+      /* Optimize: -O:
+         pextrd $0, %xmmN, ...   -> movd %xmmN, ...
+         pextrq $0, %xmmN, ...   -> movq %xmmN, ...
+         vpextrd $0, %xmmN, ...  -> vmovd %xmmN, ...
+         vpextrq $0, %xmmN, ...  -> vmovq %xmmN, ...
+       */
+      i.tm.opcode_space = SPACE_0F;
+      if (!i.mem_operands
+         || i.tm.opcode_modifier.evex
+         || (i.tm.opcode_modifier.vexw != VEXW1
+             && i.tm.opcode_modifier.size != SIZE64))
+       i.tm.base_opcode = 0x7e;
+      else
+       {
+         i.tm.base_opcode = 0xd6;
+         i.tm.opcode_modifier.size = 0;
+         i.tm.opcode_modifier.vexw
+           = i.tm.opcode_modifier.sse2avx ? VEXW0 : VEXWIG;
+       }
+
+      i.op[0].regs = i.op[1].regs;
+      i.types[0] = i.types[1];
+      i.flags[0] = i.flags[1];
+      i.tm.operand_types[0] = i.tm.operand_types[1];
+
+      i.op[1].regs = i.op[2].regs;
+      i.types[1] = i.types[2];
+      i.flags[1] = i.flags[2];
+      i.tm.operand_types[1] = i.tm.operand_types[2];
+
+      i.operands = 2;
+      i.imm_operands = 0;
+    }
 }
 
 static void
index 23d715c27d5eaab0e729a9cb05d67ff3de73bafb..f496846afe1fb7b9a369eb71588995b13ac7e6ab 100644 (file)
@@ -162,6 +162,10 @@ Disassembly of section .text:
  +[a-f0-9]+:   66 .*   pxor   %xmm2,%xmm2
  +[a-f0-9]+:   c5 .*   vpxor  %xmm2,%xmm2,%xmm0
  +[a-f0-9]+:   c5 .*   vpxor  %ymm2,%ymm2,%ymm0
+ +[a-f0-9]+:   66 .*   movd   %xmm1,%edx
+ +[a-f0-9]+:   66 .*   movd   %xmm1,\(%edx\)
+ +[a-f0-9]+:   c5 .*   vmovd  %xmm1,%edx
+ +[a-f0-9]+:   c5 .*   vmovd  %xmm1,\(%edx\)
  +[a-f0-9]+:   0f ba e0 0f             bt     \$0xf,%eax
  +[a-f0-9]+:   66 0f ba e0 10          bt     \$0x10,%ax
  +[a-f0-9]+:   0f ba f8 0f             btc    \$0xf,%eax
index f80301d9b8ab54acd2818bfb5cb3f5101956f137..ce537582b7c0676d48eae990470e70c18b257fdd 100644 (file)
@@ -189,6 +189,11 @@ _start:
        vpcmpgtq        %xmm2, %xmm2, %xmm0
        vpcmpgtq        %ymm2, %ymm2, %ymm0
 
+       pextrd          $0, %xmm1, %edx
+       pextrd          $0, %xmm1, (%edx)
+       vpextrd         $0, %xmm1, %edx
+       vpextrd         $0, %xmm1, (%edx)
+
        bt      $15, %ax
        bt      $16, %ax
        btc     $15, %ax
index 33c647bf5c63688593216896a4084563875637dc..b039a0de09e922db5bfcc39edab02b44377f4989 100644 (file)
@@ -163,6 +163,10 @@ Disassembly of section .text:
  +[a-f0-9]+:   66 .*   pxor   %xmm2,%xmm2
  +[a-f0-9]+:   c5 .*   vpxor  %xmm2,%xmm2,%xmm0
  +[a-f0-9]+:   c5 .*   vpxor  %ymm2,%ymm2,%ymm0
+ +[a-f0-9]+:   66 .*   movd   %xmm1,%edx
+ +[a-f0-9]+:   66 .*   movd   %xmm1,\(%edx\)
+ +[a-f0-9]+:   c5 .*   vmovd  %xmm1,%edx
+ +[a-f0-9]+:   c5 .*   vmovd  %xmm1,\(%edx\)
  +[a-f0-9]+:   0f ba e0 0f             bt     \$0xf,%eax
  +[a-f0-9]+:   66 0f ba e0 10          bt     \$0x10,%ax
  +[a-f0-9]+:   0f ba f8 0f             btc    \$0xf,%eax
index fa9b95fe8fe11a5d42668af5f739cb1646874ba5..ea2c7612b798cd5edf7fbff893d5f1cf23420ead 100644 (file)
@@ -162,6 +162,10 @@ Disassembly of section .text:
  +[a-f0-9]+:   66 .*   pxor   %xmm2,%xmm2
  +[a-f0-9]+:   c5 .*   vpxor  %xmm2,%xmm2,%xmm0
  +[a-f0-9]+:   c5 .*   vpxor  %ymm2,%ymm2,%ymm0
+ +[a-f0-9]+:   66 .*   movd   %xmm1,%edx
+ +[a-f0-9]+:   66 .*   movd   %xmm1,\(%edx\)
+ +[a-f0-9]+:   c5 .*   vmovd  %xmm1,%edx
+ +[a-f0-9]+:   c5 .*   vmovd  %xmm1,\(%edx\)
  +[a-f0-9]+:   0f ba e0 0f             bt     \$0xf,%eax
  +[a-f0-9]+:   66 0f ba e0 10          bt     \$0x10,%ax
  +[a-f0-9]+:   0f ba f8 0f             btc    \$0xf,%eax
index 36d0ba96e54e33e3ad47e775e3f2c2c01b718bc4..d53d2cc28e277ee61e9667bc33ada0e22f9bca11 100644 (file)
@@ -162,6 +162,10 @@ Disassembly of section .text:
  +[a-f0-9]+:   66 .*   pxor   %xmm2,%xmm2
  +[a-f0-9]+:   c5 .*   vpxor  %xmm2,%xmm2,%xmm0
  +[a-f0-9]+:   c5 .*   vpxor  %ymm2,%ymm2,%ymm0
+ +[a-f0-9]+:   66 .*   movd   %xmm1,%edx
+ +[a-f0-9]+:   66 .*   movd   %xmm1,\(%edx\)
+ +[a-f0-9]+:   c5 .*   vmovd  %xmm1,%edx
+ +[a-f0-9]+:   c5 .*   vmovd  %xmm1,\(%edx\)
  +[a-f0-9]+:   0f ba e0 0f             bt     \$0xf,%eax
  +[a-f0-9]+:   66 0f ba e0 10          bt     \$0x10,%ax
  +[a-f0-9]+:   0f ba f8 0f             btc    \$0xf,%eax
diff --git a/gas/testsuite/gas/i386/x86-64-optimize-pextr.d b/gas/testsuite/gas/i386/x86-64-optimize-pextr.d
new file mode 100644 (file)
index 0000000..2b10b8a
--- /dev/null
@@ -0,0 +1,29 @@
+#as: -O -msse2avx
+#objdump: -drw
+#name: x86-64 PEXTR optimized encoding with -msse2avx
+
+.*: +file format .*
+
+
+Disassembly of section .text:
+
+0+ <pextr>:
+ +[a-f0-9]+:   c5 f9 7e ca             vmovd  %xmm1,%edx
+ +[a-f0-9]+:   c5 f9 7e 0a             vmovd  %xmm1,\(%rdx\)
+ +[a-f0-9]+:   62 f9 7d 08 7e ca       vmovd  %xmm1,%r18d
+ +[a-f0-9]+:   62 f9 7d 08 7e 0a       vmovd  %xmm1,\(%r18\)
+ +[a-f0-9]+:   c5 f9 7e ca             vmovd  %xmm1,%edx
+ +[a-f0-9]+:   c5 f9 7e 0a             vmovd  %xmm1,\(%rdx\)
+ +[a-f0-9]+:   62 e1 7d 08 7e ca       vmovd  %xmm17,%edx
+ +[a-f0-9]+:   62 f9 7d 08 7e ca       vmovd  %xmm1,%r18d
+ +[a-f0-9]+:   62 f9 7d 08 7e 0a       vmovd  %xmm1,\(%r18\)
+ +[a-f0-9]+:   c4 e1 f9 7e ca          vmovq  %xmm1,%rdx
+ +[a-f0-9]+:   c5 f9 d6 0a             vmovq  %xmm1,\(%rdx\)
+ +[a-f0-9]+:   62 f9 fd 08 7e ca       vmovq  %xmm1,%r18
+ +[a-f0-9]+:   62 f9 fd 08 7e 0a       vmovq  %xmm1,\(%r18\)
+ +[a-f0-9]+:   c4 e1 f9 7e ca          vmovq  %xmm1,%rdx
+ +[a-f0-9]+:   c5 f9 d6 0a             vmovq  %xmm1,\(%rdx\)
+ +[a-f0-9]+:   62 e1 fd 08 7e ca       vmovq  %xmm17,%rdx
+ +[a-f0-9]+:   62 f9 fd 08 7e ca       vmovq  %xmm1,%r18
+ +[a-f0-9]+:   62 f9 fd 08 7e 0a       vmovq  %xmm1,\(%r18\)
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-optimize-pextr.l b/gas/testsuite/gas/i386/x86-64-optimize-pextr.l
new file mode 100644 (file)
index 0000000..84e305a
--- /dev/null
@@ -0,0 +1,41 @@
+.*: Assembler messages:
+.*:6: Error: .*
+.*:7: Error: .*
+.*:19: Error: .*
+.*:20: Error: .*
+[      ]*[0-9a-f]+[    ]+\.text
+[      ]*[0-9a-f]+[    ]+pextr:
+[      ]*[0-9a-f]+[    ]+\?\?\?\? 660F7ECA[    ]+pextrd        \$0, %xmm1, %edx
+[      ]*[0-9a-f]+[    ]+\?\?\?\? 660F7E0A[    ]+pextrd        \$0, %xmm1, \(%rdx\)
+[      ]*[0-9a-f]+[    ]+
+[      ]*[0-9a-f]+[    ]+pextrd        \$0, %xmm1, %r18d
+[      ]*[0-9a-f]+[    ]+pextrd        \$0, %xmm1, \(%r18\)
+[      ]*[0-9a-f]+[    ]+
+[      ]*[0-9a-f]+[    ]+\?\?\?\? C5F97ECA[    ]+vpextrd       \$0, %xmm1, %edx
+[      ]*[0-9a-f]+[    ]+\?\?\?\? C5F97E0A[    ]+vpextrd       \$0, %xmm1, \(%rdx\)
+[      ]*[0-9a-f]+[    ]+
+[      ]*[0-9a-f]+[    ]+\?\?\?\? 62E17D08[    ]+vpextrd       \$0, %xmm17, %edx
+[      ]*[0-9a-f]+[    ]+7ECA
+[      ]*[0-9a-f]+[    ]+\?\?\?\? 62F97D08[    ]+vpextrd       \$0, %xmm1, %r18d
+[      ]*[0-9a-f]+[    ]+7ECA
+[      ]*[0-9a-f]+[    ]+\?\?\?\? 62F97D08[    ]+vpextrd       \$0, %xmm1, \(%r18\)
+[      ]*[0-9a-f]+[    ]+7E0A
+[      ]*[0-9a-f]+[    ]+
+[      ]*[0-9a-f]+[    ]+\?\?\?\? 66480F7E[    ]+pextrq        \$0, %xmm1, %rdx
+[      ]*[0-9a-f]+[    ]+CA
+[      ]*[0-9a-f]+[    ]+\?\?\?\? 660FD60A[    ]+pextrq        \$0, %xmm1, \(%rdx\)
+[      ]*[0-9a-f]+[    ]+
+[      ]*[0-9a-f]+[    ]+pextrq        \$0, %xmm1, %r18
+[      ]*[0-9a-f]+[    ]+pextrq        \$0, %xmm1, \(%r18\)
+[      ]*[0-9a-f]+[    ]+
+[      ]*[0-9a-f]+[    ]+\?\?\?\? C4E1F97E[    ]+vpextrq       \$0, %xmm1, %rdx
+[      ]*[0-9a-f]+[    ]+CA
+[      ]*[0-9a-f]+[    ]+\?\?\?\? C5F9D60A[    ]+vpextrq       \$0, %xmm1, \(%rdx\)
+[      ]*[0-9a-f]+[    ]+
+[      ]*[0-9a-f]+[    ]+\?\?\?\? 62E1FD08[    ]+vpextrq       \$0, %xmm17, %rdx
+[      ]*[0-9a-f]+[    ]+7ECA
+[      ]*[0-9a-f]+[    ]+\?\?\?\? 62F9FD08[    ]+vpextrq       \$0, %xmm1, %r18
+[      ]*[0-9a-f]+[    ]+7ECA
+[      ]*[0-9a-f]+[    ]+\?\?\?\? 62F9FD08[    ]+vpextrq       \$0, %xmm1, \(%r18\)
+[      ]*[0-9a-f]+[    ]+7E0A
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-optimize-pextr.s b/gas/testsuite/gas/i386/x86-64-optimize-pextr.s
new file mode 100644 (file)
index 0000000..7ec1605
--- /dev/null
@@ -0,0 +1,27 @@
+       .text
+pextr:
+       pextrd  $0, %xmm1, %edx
+       pextrd  $0, %xmm1, (%rdx)
+
+       pextrd  $0, %xmm1, %r18d
+       pextrd  $0, %xmm1, (%r18)
+
+       vpextrd $0, %xmm1, %edx
+       vpextrd $0, %xmm1, (%rdx)
+
+       vpextrd $0, %xmm17, %edx
+       vpextrd $0, %xmm1, %r18d
+       vpextrd $0, %xmm1, (%r18)
+
+       pextrq  $0, %xmm1, %rdx
+       pextrq  $0, %xmm1, (%rdx)
+
+       pextrq  $0, %xmm1, %r18
+       pextrq  $0, %xmm1, (%r18)
+
+       vpextrq $0, %xmm1, %rdx
+       vpextrq $0, %xmm1, (%rdx)
+
+       vpextrq $0, %xmm17, %rdx
+       vpextrq $0, %xmm1, %r18
+       vpextrq $0, %xmm1, (%r18)
index a8d49cefe8c1034fd5455aec4cbc816c208b181f..b9eedbe5318a126939903f96dcd1bdee7ebab36d 100644 (file)
@@ -583,6 +583,8 @@ run_dump_test "x86-64-optimize-6"
 run_list_test "x86-64-optimize-7a" "-I${srcdir}/$subdir -march=+noavx -al"
 run_dump_test "x86-64-optimize-7b"
 run_list_test "x86-64-optimize-8" "-I${srcdir}/$subdir -march=+noavx2 -al"
+run_list_test "x86-64-optimize-pextr" "-O -aln"
+run_dump_test "x86-64-optimize-pextr"
 run_dump_test "x86-64-apx-ndd-optimize"
 run_dump_test "x86-64-align-branch-1a"
 run_dump_test "x86-64-align-branch-1b"
index ba60206196806cf81d847f172ca8840f8cae847c..bc3e58338dd79b81033f7fd6f167ee093d17a9e5 100644 (file)
@@ -1518,10 +1518,10 @@ pblendw<sse41>, 0x660f3a0e, <sse41:cpu>, Modrm|<sse41:attr>|<sse41:vvvv>|NoSuf,
 pcmpeqq<sse41>, 0x660f3829, <sse41:cpu>, Modrm|<sse41:attr>|<sse41:vvvv>|NoSuf|Optimize, { RegXMM|Unspecified|BaseIndex, RegXMM }
 pextr<bw><SSE41BW>, 0x660f3a14 | <bw:opc>, <SSE41BW:cpu>, RegMem|<SSE41BW:attr>|NoSuf|IgnoreSize|NoRex64, { Imm8, RegXMM, Reg32|Reg64 }
 pextr<bw><SSE41BW>, 0x660f3a14 | <bw:opc>, <SSE41BW:cpu>, Modrm|<SSE41BW:attr>|Disp8MemShift|NoSuf, { Imm8, RegXMM, <bw:elem>|Unspecified|BaseIndex }
-pextrd<SSE41DQ>, 0x660f3a16, <SSE41DQ:cpu>, Modrm|<SSE41DQ:attr>|Disp8MemShift|NoSuf|IgnoreSize, { Imm8, RegXMM, Reg32|Unspecified|BaseIndex }
-pextrq, 0x6616, AVX&x64, Modrm|Vex|Space0F3A|VexW1|NoSuf|SSE2AVX, { Imm8, RegXMM, Reg64|Unspecified|BaseIndex }
-pextrq, 0x6616, AVX512DQ&AVX512VL&x64, Modrm|EVex128|Space0F3A|VexW1|Disp8MemShift=3|NoSuf|SSE2AVX, { Imm8, RegXMM, Reg64|Unspecified|BaseIndex }
-pextrq, 0x660f3a16, SSE4_1&x64, Modrm|Size64|NoSuf, { Imm8, RegXMM, Reg64|Unspecified|BaseIndex }
+pextrd<SSE41DQ>, 0x660f3a16, <SSE41DQ:cpu>, Modrm|<SSE41DQ:attr>|Disp8MemShift|NoSuf|IgnoreSize|Optimize, { Imm8, RegXMM, Reg32|Unspecified|BaseIndex }
+pextrq, 0x6616, AVX&x64, Modrm|Vex|Space0F3A|VexW1|NoSuf|SSE2AVX|Optimize, { Imm8, RegXMM, Reg64|Unspecified|BaseIndex }
+pextrq, 0x6616, AVX512DQ&AVX512VL&x64, Modrm|EVex128|Space0F3A|VexW1|Disp8MemShift=3|NoSuf|SSE2AVX|Optimize, { Imm8, RegXMM, Reg64|Unspecified|BaseIndex }
+pextrq, 0x660f3a16, SSE4_1&x64, Modrm|Size64|NoSuf|Optimize, { Imm8, RegXMM, Reg64|Unspecified|BaseIndex }
 phminposuw<sse41>, 0x660f3841, <sse41:cpu>, Modrm|<sse41:attr>|NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM }
 pinsrb<SSE41BW>, 0x660f3a20, <SSE41BW:cpu>, Modrm|<SSE41BW:attr>|<SSE41BW:vvvv>|NoSuf|IgnoreSize|NoRex64, { Imm8, Reg32|Reg64, RegXMM }
 pinsrb<SSE41BW>, 0x660f3a20, <SSE41BW:cpu>, Modrm|<SSE41BW:attr>|<SSE41BW:vvvv>|Disp8MemShift|NoSuf, { Imm8, Byte|Unspecified|BaseIndex, RegXMM }
@@ -1775,7 +1775,7 @@ vpermilps, 0x660c, AVX|AVX512F, Modrm|Vex|EVexDYN|Masking|Space0F38|Src1VVVV|Vex
 vpermilps, 0x6604, AVX|AVX512F, Modrm|Vex|EVexDYN|Masking|Space0F3A|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM }
 vpermilpd, 0x660d, AVX, Modrm|Vex|Space0F38|Src1VVVV|VexW0|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
 vpermilpd, 0x6605, AVX, Modrm|Vex|Space0F3A|VexW0|CheckOperandSize|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM }
-vpextr<dq>, 0x6616, AVX&<dq:cpu64>, Modrm|Vex|Space0F3A|<dq:vexw64>|NoSuf, { Imm8, RegXMM, <dq:gpr>|Unspecified|BaseIndex }
+vpextr<dq>, 0x6616, AVX&<dq:cpu64>, Modrm|Vex|Space0F3A|<dq:vexw64>|NoSuf|Optimize, { Imm8, RegXMM, <dq:gpr>|Unspecified|BaseIndex }
 vpextrw, 0x66c5, AVX, Load|Modrm|Vex|Space0F|VexWIG|No_bSuf|No_wSuf|No_sSuf, { Imm8, RegXMM, Reg32|Reg64 }
 vpextr<bw>, 0x6614 | <bw:opc>, AVX, RegMem|Vex|Space0F3A|VexWIG|NoSuf, { Imm8, RegXMM, Reg32|Reg64 }
 vpextr<bw>, 0x6614 | <bw:opc>, AVX, Modrm|Vex|Space0F3A|VexWIG|NoSuf, { Imm8, RegXMM, <bw:elem>|Unspecified|BaseIndex }
@@ -2955,7 +2955,7 @@ vextracti32x8, 0x663B, AVX512DQ, Modrm|EVex=1|Masking|Space0F3A|VexW=1|Disp8MemS
 vinsertf32x8, 0x661A, AVX512DQ, Modrm|EVex512|Masking|Space0F3A|Src1VVVV|VexW0|Disp8MemShift=5|NoSuf, { Imm8, RegYMM|Unspecified|BaseIndex, RegZMM, RegZMM }
 vinserti32x8, 0x663A, AVX512DQ, Modrm|EVex512|Masking|Space0F3A|Src1VVVV|VexW0|Disp8MemShift=5|NoSuf, { Imm8, RegYMM|Unspecified|BaseIndex, RegZMM, RegZMM }
 
-vpextr<dq>, 0x6616, AVX512DQ&<dq:cpu64>, Modrm|EVex128|Space0F3A|<dq:vexw64>|Disp8MemShift|NoSuf, { Imm8, RegXMM, <dq:gpr>|Unspecified|BaseIndex }
+vpextr<dq>, 0x6616, AVX512DQ&<dq:cpu64>, Modrm|EVex128|Space0F3A|<dq:vexw64>|Disp8MemShift|NoSuf|Optimize, { Imm8, RegXMM, <dq:gpr>|Unspecified|BaseIndex }
 vpinsr<dq>, 0x6622, AVX512DQ&<dq:cpu64>, Modrm|EVex128|Space0F3A|Src1VVVV|<dq:vexw64>|Disp8MemShift|NoSuf, { Imm8, <dq:gpr>|Unspecified|BaseIndex, RegXMM, RegXMM }
 
 vextractf64x2, 0x6619, AVX512DQ, Modrm|Masking|Space0F3A|VexW=2|Disp8MemShift=4|NoSuf, { Imm8, RegYMM|RegZMM, RegXMM|Unspecified|BaseIndex }
index ac75d278e6a4b9d70f0262717b2eae5f757d988d..974a86c3acac13fc6bc46665551bc51b65733e00 100644 (file)
@@ -17660,7 +17660,7 @@ static const insn_template i386_optab[] =
          0, 0, 0, 0, 1, 0 } } } },
   { MN_pextrd, 0x16, 3, SPACE_0F3A, None,
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+      0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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, 0 } },
@@ -17672,7 +17672,7 @@ static const insn_template i386_optab[] =
          0, 0, 0, 0, 1, 0 } } } },
   { MN_pextrd, 0x16, 3, SPACE_0F3A, None,
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 1, 1, 0, 1, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 1, 1, 0, 1, 2, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0,
       0, 0 },
     { { 34, 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 } },
@@ -17684,7 +17684,7 @@ static const insn_template i386_optab[] =
          0, 0, 0, 0, 1, 0 } } } },
   { MN_pextrd, 0x16, 3, SPACE_0F3A, None,
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1,
       0, 0 },
     { { 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
@@ -17696,7 +17696,7 @@ static const insn_template i386_optab[] =
          0, 0, 0, 0, 1, 0 } } } },
   { MN_pextrq, 0x16, 3, SPACE_0F3A, None,
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 1, 0, 2, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+      0, 0, 0, 1, 0, 2, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1,
       0, 0 },
     { { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 } },
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
@@ -17708,7 +17708,7 @@ static const insn_template i386_optab[] =
          0, 0, 0, 0, 1, 0 } } } },
   { MN_pextrq, 0x16, 3, SPACE_0F3A, None,
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 2, 1, 0, 1, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 2, 1, 0, 1, 2, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0,
       0, 0 },
     { { 34, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 } },
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
@@ -17720,7 +17720,7 @@ static const insn_template i386_optab[] =
          0, 0, 0, 0, 1, 0 } } } },
   { MN_pextrq, 0x16, 3, SPACE_0F3A, None,
     { 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1,
       0, 0 },
     { { 28, 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 } },
@@ -26936,7 +26936,7 @@ static const insn_template i386_optab[] =
          1, 1, 1, 0, 0, 0 } } } },
   { MN_vpextrd, 0x16, 3, SPACE_0F3A, None,
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+      0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 0 } },
@@ -26948,7 +26948,7 @@ static const insn_template i386_optab[] =
          0, 0, 0, 0, 1, 0 } } } },
   { MN_vpextrd, 0x16, 3, SPACE_0F3A, None,
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0,
       0, 0 },
     { { 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
@@ -26960,7 +26960,7 @@ static const insn_template i386_optab[] =
          0, 0, 0, 0, 1, 0 } } } },
   { MN_vpextrq, 0x16, 3, SPACE_0F3A, None,
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 1, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+      0, 0, 0, 1, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1,
       0, 0 },
     { { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 } },
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
@@ -26972,7 +26972,7 @@ static const insn_template i386_optab[] =
          0, 0, 0, 0, 1, 0 } } } },
   { MN_vpextrq, 0x16, 3, SPACE_0F3A, None,
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 2, 1, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 2, 1, 0, 0, 2, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0,
       0, 0 },
     { { 34, 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 } },