x86: make AES/PCMULQDQ respectively prereqs of VAES/VPCMULQDQ
authorJan Beulich <jbeulich@suse.com>
Thu, 14 Sep 2023 06:40:58 +0000 (08:40 +0200)
committerJan Beulich <jbeulich@suse.com>
Thu, 14 Sep 2023 06:40:58 +0000 (08:40 +0200)
These probably should have been put in place already anyway, but they're
very much wanted in order to then put AVX10.1 support on top. Note that
to avoid reverse dependencies towards SSE (just like we already do for
AVX and XOP), add_isa_dependencies() needs some further tweaking.

While there also address a related anomaly: Disabling AES but neither
AVX nor VAES (similarly for {,V}PCLMULQDQ) would better keep the 128-bit
VEX-encoded forms available. Note that for this the VAES insns are moved
past the AVX+AES ones, to avoid the property-11 test suddenly failing.
The test really is wrong, but let's not also make things inconsistent:
Without the movement, YMM use would be correctly recorded for the
128-bit forms simply because the first template already matches, as long
as VAES wasn't disabled.  Yet it still wouldn't be if only AVX+AES were
enabled. Nor would behavior here then be the same as for VPCLMUL* insns.

opcodes/i386-gen.c
opcodes/i386-init.h
opcodes/i386-opc.tbl
opcodes/i386-tbl.h

index b32585563efe4f875d2d39daece9bfcf49f64484..68427b00e9f68edf3722802526f5d9fe318cfb69 100644 (file)
@@ -229,9 +229,9 @@ static const dependency isa_dependencies[] =
   { "GFNI",
     "SSE2" },
   { "VAES",
-    "AVX2" },
+    "AVX2|AES" },
   { "VPCLMULQDQ",
-    "AVX2" },
+    "AVX2|PCLMULQDQ" },
   { "SEV_ES",
     "SVME" },
   { "SNP",
@@ -712,7 +712,8 @@ add_isa_dependencies (bitfield *flags, const char *f, int value,
   unsigned int i;
   char *str = NULL;
   const char *isa = f;
-  bool is_isa = false, is_avx = false;
+  static bool is_avx;
+  bool is_isa = false, orig_is_avx = is_avx;
 
   /* Need to find base entry for references to auxiliary ones.  */
   if (strchr (f, ':'))
@@ -732,7 +733,7 @@ add_isa_dependencies (bitfield *flags, const char *f, int value,
            && reverse > Cpu686)
          isa_reverse_deps[i][reverse] = 1;
        is_isa = true;
-       if (i == CpuAVX || i == CpuXOP)
+       if (i == CpuAVX || i == CpuXOP || i == CpuVAES || i == CpuVPCLMULQDQ)
          is_avx = true;
        break;
       }
@@ -740,7 +741,10 @@ add_isa_dependencies (bitfield *flags, const char *f, int value,
 
   /* Do not turn off dependencies.  */
   if (is_isa && !value)
-    return;
+    {
+      is_avx = orig_is_avx;
+      return;
+    }
 
   for (i = 0; i < ARRAY_SIZE (isa_dependencies); ++i)
     if (strcasecmp (isa_dependencies[i].name, f) == 0)
@@ -765,11 +769,14 @@ add_isa_dependencies (bitfield *flags, const char *f, int value,
        if (reverse < ARRAY_SIZE (isa_reverse_deps[0]))
          isa_reverse_deps[reverse][reverse] = 1;
 
+       is_avx = orig_is_avx;
        return;
       }
 
   if (!is_isa)
     fail ("unknown bitfield: %s\n", f);
+
+  is_avx = orig_is_avx;
 }
 
 static void
index ca6d3e48a52630d30cce4131326fc25bcf868770..6c6af654f743867d01e73658fac69f258c6cce32 100644 (file)
 
 #define CPU_VAES_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, \
-      0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \
+      0, 0, 1, 0, 0, 1, 0, 1, 1, 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, 0, 0, 0, \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
 
 #define CPU_VPCLMULQDQ_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, \
-      0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \
+      0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
-      0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
       0, 0, 0, 0, 0 } }
 
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
-      0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
       0, 0, 0, 0, 0 } }
 
index 5e18d0299f2ac82e15a3be800fa774d05751d3a8..038152364b791c6edb70b77ef7e55daede1bd766 100644 (file)
@@ -1441,13 +1441,6 @@ aesenclast<aes>, 0x660f38dd, <aes:cpu>AES, Modrm|<aes:attr>|<aes:vvvv>|NoSuf, {
 aesimc<aes>, 0x660f38db, <aes:cpu>AES, Modrm|<aes:attr>|NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM }
 aeskeygenassist<aes>, 0x660f3adf, <aes:cpu>AES, Modrm|<aes:attr>|NoSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM }
 
-// VAES
-
-vaesdec, 0x66de, VAES, Modrm|Vex256|Space0F38|VexVVVV|VexWIG|NoSuf, { RegYMM|Unspecified|BaseIndex, RegYMM, RegYMM }
-vaesdeclast, 0x66df, VAES, Modrm|Vex256|Space0F38|VexVVVV|VexWIG|NoSuf, { RegYMM|Unspecified|BaseIndex, RegYMM, RegYMM }
-vaesenc, 0x66dc, VAES, Modrm|Vex256|Space0F38|VexVVVV|VexWIG|NoSuf, { RegYMM|Unspecified|BaseIndex, RegYMM, RegYMM }
-vaesenclast, 0x66dd, VAES, Modrm|Vex256|Space0F38|VexVVVV|VexWIG|NoSuf, { RegYMM|Unspecified|BaseIndex, RegYMM, RegYMM }
-
 // PCLMULQDQ
 
 <pclmul:cpu:attr, $avx:AVX|:Vex128|VexW0|SSE2AVX|VexVVVV, $sse::>
@@ -2065,13 +2058,22 @@ vsm4rnds4, 0xf2da, SM4, Modrm|Space0F38|Vex|VexVVVV|VexW0|CheckOperandSize|NoSuf
 
 // SM4 instructions end.
 
+// VAES
+
+vaesdec, 0x66de, VAES, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM }
+vaesdeclast, 0x66df, VAES, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM }
+vaesenc, 0x66dc, VAES, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM }
+vaesenclast, 0x66dd, VAES, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM }
+
+// VAES instructions end
+
 // VPCLMULQDQ instructions
 
-vpclmulqdq, 0x6644, VPCLMULQDQ, Modrm|Vex256|Space0F3A|VexWIG|VexVVVV|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpclmullqlqdq, 0x6644/0x00, VPCLMULQDQ, Modrm|Vex256|Space0F3A|VexWIG|VexVVVV|NoSuf|ImmExt, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpclmulhqlqdq, 0x6644/0x01, VPCLMULQDQ, Modrm|Vex256|Space0F3A|VexWIG|VexVVVV|NoSuf|ImmExt, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpclmullqhqdq, 0x6644/0x10, VPCLMULQDQ, Modrm|Vex256|Space0F3A|VexWIG|VexVVVV|NoSuf|ImmExt, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
-vpclmulhqhqdq, 0x6644/0x11, VPCLMULQDQ, Modrm|Vex256|Space0F3A|VexWIG|VexVVVV|NoSuf|ImmExt, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM }
+vpclmulqdq, 0x6644, VPCLMULQDQ, Modrm|Vex|Space0F3A|VexWIG|VexVVVV|CheckOperandSize|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpclmullqlqdq, 0x6644/0x00, VPCLMULQDQ, Modrm|Vex|Space0F3A|VexWIG|VexVVVV|CheckOperandSize|NoSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpclmulhqlqdq, 0x6644/0x01, VPCLMULQDQ, Modrm|Vex|Space0F3A|VexWIG|VexVVVV|CheckOperandSize|NoSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpclmullqhqdq, 0x6644/0x10, VPCLMULQDQ, Modrm|Vex|Space0F3A|VexWIG|VexVVVV|CheckOperandSize|NoSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
+vpclmulhqhqdq, 0x6644/0x11, VPCLMULQDQ, Modrm|Vex|Space0F3A|VexWIG|VexVVVV|CheckOperandSize|NoSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }
 
 // VPCLMULQDQ instructions end
 
index dfe4e5ecce5fdb9ed78d5564a724af226f2d67af..3054056e407c04ea192e20a52bb9d6cfce77123c 100644 (file)
@@ -10840,126 +10840,6 @@ static const insn_template i386_optab[] =
          1, 0, 0, 0, 1, 0 } },
       { { 7, 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 } } } },
-  { MN_vaesdec, 0xde, 3, SPACE_0F38, None,
-    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 2, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
-    { { 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
-    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
-         0, 1, 0, 0, 1, 0 } },
-      { { 7, 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 } },
-      { { 7, 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 } } } },
-  { MN_vaesdec, 0xde, 3, SPACE_0F38, 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, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
-    { { 39, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
-    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
-         1, 0, 0, 0, 1, 0 } },
-      { { 7, 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 } },
-      { { 7, 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 } } } },
-  { MN_vaesdec, 0xde, 3, SPACE_0F38, None,
-    { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0 },
-    { { 112, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 } },
-    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
-         1, 1, 1, 0, 1, 0 } },
-      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         1, 1, 1, 0, 0, 0 } },
-      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         1, 1, 1, 0, 0, 0 } } } },
-  { MN_vaesdeclast, 0xdf, 3, SPACE_0F38, None,
-    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 2, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
-    { { 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
-    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
-         0, 1, 0, 0, 1, 0 } },
-      { { 7, 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 } },
-      { { 7, 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 } } } },
-  { MN_vaesdeclast, 0xdf, 3, SPACE_0F38, 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, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
-    { { 39, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
-    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
-         1, 0, 0, 0, 1, 0 } },
-      { { 7, 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 } },
-      { { 7, 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 } } } },
-  { MN_vaesdeclast, 0xdf, 3, SPACE_0F38, None,
-    { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0 },
-    { { 112, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 } },
-    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
-         1, 1, 1, 0, 1, 0 } },
-      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         1, 1, 1, 0, 0, 0 } },
-      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         1, 1, 1, 0, 0, 0 } } } },
-  { MN_vaesenc, 0xdc, 3, SPACE_0F38, None,
-    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 2, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
-    { { 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
-    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
-         0, 1, 0, 0, 1, 0 } },
-      { { 7, 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 } },
-      { { 7, 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 } } } },
-  { MN_vaesenc, 0xdc, 3, SPACE_0F38, 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, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
-    { { 39, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
-    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
-         1, 0, 0, 0, 1, 0 } },
-      { { 7, 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 } },
-      { { 7, 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 } } } },
-  { MN_vaesenc, 0xdc, 3, SPACE_0F38, None,
-    { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0 },
-    { { 112, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 } },
-    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
-         1, 1, 1, 0, 1, 0 } },
-      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         1, 1, 1, 0, 0, 0 } },
-      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         1, 1, 1, 0, 0, 0 } } } },
-  { MN_vaesenclast, 0xdd, 3, SPACE_0F38, None,
-    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 2, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
-    { { 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
-    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
-         0, 1, 0, 0, 1, 0 } },
-      { { 7, 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 } },
-      { { 7, 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 } } } },
-  { MN_vaesenclast, 0xdd, 3, SPACE_0F38, 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, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
-    { { 39, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
-    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
-         1, 0, 0, 0, 1, 0 } },
-      { { 7, 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 } },
-      { { 7, 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 } } } },
-  { MN_vaesenclast, 0xdd, 3, SPACE_0F38, None,
-    { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0 },
-    { { 112, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 } },
-    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
-         1, 1, 1, 0, 1, 0 } },
-      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         1, 1, 1, 0, 0, 0 } },
-      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         1, 1, 1, 0, 0, 0 } } } },
   { MN_pclmulqdq, 0x44, 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, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
@@ -20894,6 +20774,126 @@ static const insn_template i386_optab[] =
          0, 0, 0, 0, 1, 0 } },
       { { 7, 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 } } } },
+  { MN_vaesdec, 0xde, 3, SPACE_0F38, 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, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { 39, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
+    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
+         1, 0, 0, 0, 1, 0 } },
+      { { 7, 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 } },
+      { { 7, 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 } } } },
+  { MN_vaesdec, 0xde, 3, SPACE_0F38, None,
+    { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+      0, 0, 0, 1, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
+         1, 1, 0, 0, 1, 0 } },
+      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         1, 1, 0, 0, 0, 0 } },
+      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         1, 1, 0, 0, 0, 0 } } } },
+  { MN_vaesdec, 0xde, 3, SPACE_0F38, None,
+    { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0 },
+    { { 112, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 } },
+    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
+         1, 1, 1, 0, 1, 0 } },
+      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         1, 1, 1, 0, 0, 0 } },
+      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         1, 1, 1, 0, 0, 0 } } } },
+  { MN_vaesdeclast, 0xdf, 3, SPACE_0F38, 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, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { 39, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
+    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
+         1, 0, 0, 0, 1, 0 } },
+      { { 7, 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 } },
+      { { 7, 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 } } } },
+  { MN_vaesdeclast, 0xdf, 3, SPACE_0F38, None,
+    { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+      0, 0, 0, 1, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
+         1, 1, 0, 0, 1, 0 } },
+      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         1, 1, 0, 0, 0, 0 } },
+      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         1, 1, 0, 0, 0, 0 } } } },
+  { MN_vaesdeclast, 0xdf, 3, SPACE_0F38, None,
+    { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0 },
+    { { 112, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 } },
+    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
+         1, 1, 1, 0, 1, 0 } },
+      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         1, 1, 1, 0, 0, 0 } },
+      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         1, 1, 1, 0, 0, 0 } } } },
+  { MN_vaesenc, 0xdc, 3, SPACE_0F38, 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, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { 39, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
+    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
+         1, 0, 0, 0, 1, 0 } },
+      { { 7, 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 } },
+      { { 7, 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 } } } },
+  { MN_vaesenc, 0xdc, 3, SPACE_0F38, None,
+    { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+      0, 0, 0, 1, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
+         1, 1, 0, 0, 1, 0 } },
+      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         1, 1, 0, 0, 0, 0 } },
+      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         1, 1, 0, 0, 0, 0 } } } },
+  { MN_vaesenc, 0xdc, 3, SPACE_0F38, None,
+    { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0 },
+    { { 112, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 } },
+    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
+         1, 1, 1, 0, 1, 0 } },
+      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         1, 1, 1, 0, 0, 0 } },
+      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         1, 1, 1, 0, 0, 0 } } } },
+  { MN_vaesenclast, 0xdd, 3, SPACE_0F38, 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, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { 39, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
+    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
+         1, 0, 0, 0, 1, 0 } },
+      { { 7, 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 } },
+      { { 7, 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 } } } },
+  { MN_vaesenclast, 0xdd, 3, SPACE_0F38, None,
+    { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+      0, 0, 0, 1, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
+         1, 1, 0, 0, 1, 0 } },
+      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         1, 1, 0, 0, 0, 0 } },
+      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         1, 1, 0, 0, 0, 0 } } } },
+  { MN_vaesenclast, 0xdd, 3, SPACE_0F38, None,
+    { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0 },
+    { { 112, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 } },
+    { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
+         1, 1, 1, 0, 1, 0 } },
+      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         1, 1, 1, 0, 0, 0 } },
+      { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         1, 1, 1, 0, 0, 0 } } } },
   { MN_vaesimc, 0xdb, 2, SPACE_0F38, 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, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
@@ -20925,17 +20925,17 @@ static const insn_template i386_optab[] =
       { { 7, 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 } } } },
   { MN_vpclmulqdq, 0x44, 4, 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, 2, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+      0, 0, 0, 1, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { 113, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0 } },
       { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
-         0, 1, 0, 0, 1, 0 } },
+         1, 1, 0, 0, 1, 0 } },
       { { 7, 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 } },
+         1, 1, 0, 0, 0, 0 } },
       { { 7, 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 } } } },
+         1, 1, 0, 0, 0, 0 } } } },
   { MN_vpclmulqdq, 0x44, 4, SPACE_0F3A, None,
     { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0 },
@@ -20959,15 +20959,15 @@ static const insn_template i386_optab[] =
       { { 7, 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 } } } },
   { MN_vpclmullqlqdq, 0x44, 3, SPACE_0F3A, 0x00,
-    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 1, 0, 2, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+      0, 1, 0, 1, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
     { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
-         0, 1, 0, 0, 1, 0 } },
+         1, 1, 0, 0, 1, 0 } },
       { { 7, 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 } },
+         1, 1, 0, 0, 0, 0 } },
       { { 7, 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 } } } },
+         1, 1, 0, 0, 0, 0 } } } },
   { MN_vpclmullqlqdq, 0x44, 3, SPACE_0F3A, 0x00,
     { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
       0, 1, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0 },
@@ -20989,15 +20989,15 @@ static const insn_template i386_optab[] =
       { { 7, 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 } } } },
   { MN_vpclmulhqlqdq, 0x44, 3, SPACE_0F3A, 0x01,
-    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 1, 0, 2, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+      0, 1, 0, 1, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
     { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
-         0, 1, 0, 0, 1, 0 } },
+         1, 1, 0, 0, 1, 0 } },
       { { 7, 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 } },
+         1, 1, 0, 0, 0, 0 } },
       { { 7, 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 } } } },
+         1, 1, 0, 0, 0, 0 } } } },
   { MN_vpclmulhqlqdq, 0x44, 3, SPACE_0F3A, 0x01,
     { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
       0, 1, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0 },
@@ -21019,15 +21019,15 @@ static const insn_template i386_optab[] =
       { { 7, 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 } } } },
   { MN_vpclmullqhqdq, 0x44, 3, SPACE_0F3A, 0x10,
-    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 1, 0, 2, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+      0, 1, 0, 1, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
     { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
-         0, 1, 0, 0, 1, 0 } },
+         1, 1, 0, 0, 1, 0 } },
       { { 7, 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 } },
+         1, 1, 0, 0, 0, 0 } },
       { { 7, 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 } } } },
+         1, 1, 0, 0, 0, 0 } } } },
   { MN_vpclmullqhqdq, 0x44, 3, SPACE_0F3A, 0x10,
     { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
       0, 1, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0 },
@@ -21049,15 +21049,15 @@ static const insn_template i386_optab[] =
       { { 7, 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 } } } },
   { MN_vpclmulhqhqdq, 0x44, 3, SPACE_0F3A, 0x11,
-    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-      0, 1, 0, 2, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+      0, 1, 0, 1, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
     { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
-         0, 1, 0, 0, 1, 0 } },
+         1, 1, 0, 0, 1, 0 } },
       { { 7, 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 } },
+         1, 1, 0, 0, 0, 0 } },
       { { 7, 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 } } } },
+         1, 1, 0, 0, 0, 0 } } } },
   { MN_vpclmulhqhqdq, 0x44, 3, SPACE_0F3A, 0x11,
     { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
       0, 1, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0 },
@@ -33902,9 +33902,11 @@ static const insn_template *const i386_op_sets[] =
   i386_optab + 1450,
   i386_optab + 1452,
   i386_optab + 1454,
-  i386_optab + 1457,
+  i386_optab + 1456,
+  i386_optab + 1458,
   i386_optab + 1460,
-  i386_optab + 1463,
+  i386_optab + 1462,
+  i386_optab + 1464,
   i386_optab + 1466,
   i386_optab + 1468,
   i386_optab + 1470,
@@ -33912,24 +33914,24 @@ static const insn_template *const i386_op_sets[] =
   i386_optab + 1474,
   i386_optab + 1476,
   i386_optab + 1478,
+  i386_optab + 1479,
   i386_optab + 1480,
   i386_optab + 1482,
   i386_optab + 1484,
   i386_optab + 1486,
   i386_optab + 1488,
+  i386_optab + 1489,
   i386_optab + 1490,
   i386_optab + 1491,
   i386_optab + 1492,
-  i386_optab + 1494,
+  i386_optab + 1493,
   i386_optab + 1496,
-  i386_optab + 1498,
-  i386_optab + 1500,
+  i386_optab + 1499,
   i386_optab + 1501,
-  i386_optab + 1502,
   i386_optab + 1503,
-  i386_optab + 1504,
   i386_optab + 1505,
-  i386_optab + 1508,
+  i386_optab + 1507,
+  i386_optab + 1509,
   i386_optab + 1511,
   i386_optab + 1513,
   i386_optab + 1515,
@@ -34115,50 +34117,50 @@ static const insn_template *const i386_op_sets[] =
   i386_optab + 1875,
   i386_optab + 1877,
   i386_optab + 1879,
-  i386_optab + 1881,
-  i386_optab + 1883,
-  i386_optab + 1885,
-  i386_optab + 1887,
-  i386_optab + 1889,
+  i386_optab + 1884,
+  i386_optab + 1886,
   i386_optab + 1891,
-  i386_optab + 1896,
-  i386_optab + 1898,
-  i386_optab + 1903,
-  i386_optab + 1905,
-  i386_optab + 1907,
-  i386_optab + 1912,
-  i386_optab + 1914,
-  i386_optab + 1916,
-  i386_optab + 1918,
-  i386_optab + 1923,
-  i386_optab + 1925,
+  i386_optab + 1893,
+  i386_optab + 1895,
+  i386_optab + 1900,
+  i386_optab + 1902,
+  i386_optab + 1904,
+  i386_optab + 1906,
+  i386_optab + 1911,
+  i386_optab + 1913,
+  i386_optab + 1915,
+  i386_optab + 1917,
+  i386_optab + 1921,
   i386_optab + 1927,
   i386_optab + 1929,
-  i386_optab + 1933,
-  i386_optab + 1939,
-  i386_optab + 1941,
+  i386_optab + 1934,
+  i386_optab + 1936,
+  i386_optab + 1938,
+  i386_optab + 1940,
+  i386_optab + 1942,
+  i386_optab + 1944,
   i386_optab + 1946,
   i386_optab + 1948,
   i386_optab + 1950,
   i386_optab + 1952,
+  i386_optab + 1953,
   i386_optab + 1954,
-  i386_optab + 1956,
-  i386_optab + 1958,
+  i386_optab + 1955,
+  i386_optab + 1959,
   i386_optab + 1960,
+  i386_optab + 1961,
   i386_optab + 1962,
+  i386_optab + 1963,
   i386_optab + 1964,
-  i386_optab + 1965,
   i386_optab + 1966,
   i386_optab + 1967,
+  i386_optab + 1968,
+  i386_optab + 1969,
   i386_optab + 1971,
-  i386_optab + 1972,
   i386_optab + 1973,
-  i386_optab + 1974,
   i386_optab + 1975,
-  i386_optab + 1976,
-  i386_optab + 1978,
+  i386_optab + 1977,
   i386_optab + 1979,
-  i386_optab + 1980,
   i386_optab + 1981,
   i386_optab + 1983,
   i386_optab + 1985,
@@ -34166,35 +34168,35 @@ static const insn_template *const i386_op_sets[] =
   i386_optab + 1989,
   i386_optab + 1991,
   i386_optab + 1993,
-  i386_optab + 1995,
-  i386_optab + 1997,
-  i386_optab + 1999,
+  i386_optab + 1996,
+  i386_optab + 2000,
   i386_optab + 2001,
-  i386_optab + 2003,
-  i386_optab + 2005,
+  i386_optab + 2002,
+  i386_optab + 2004,
   i386_optab + 2008,
   i386_optab + 2012,
-  i386_optab + 2013,
   i386_optab + 2014,
-  i386_optab + 2016,
-  i386_optab + 2020,
+  i386_optab + 2018,
+  i386_optab + 2022,
+  i386_optab + 2023,
   i386_optab + 2024,
   i386_optab + 2026,
+  i386_optab + 2028,
   i386_optab + 2030,
-  i386_optab + 2034,
-  i386_optab + 2035,
-  i386_optab + 2036,
+  i386_optab + 2032,
   i386_optab + 2038,
-  i386_optab + 2040,
   i386_optab + 2042,
-  i386_optab + 2044,
+  i386_optab + 2046,
+  i386_optab + 2048,
   i386_optab + 2050,
+  i386_optab + 2052,
   i386_optab + 2054,
-  i386_optab + 2058,
-  i386_optab + 2060,
-  i386_optab + 2062,
-  i386_optab + 2064,
-  i386_optab + 2066,
+  i386_optab + 2055,
+  i386_optab + 2057,
+  i386_optab + 2059,
+  i386_optab + 2061,
+  i386_optab + 2063,
+  i386_optab + 2065,
   i386_optab + 2067,
   i386_optab + 2069,
   i386_optab + 2071,
@@ -34212,47 +34214,47 @@ static const insn_template *const i386_op_sets[] =
   i386_optab + 2095,
   i386_optab + 2097,
   i386_optab + 2099,
+  i386_optab + 2100,
   i386_optab + 2101,
   i386_optab + 2103,
   i386_optab + 2105,
+  i386_optab + 2106,
   i386_optab + 2107,
-  i386_optab + 2109,
-  i386_optab + 2111,
-  i386_optab + 2112,
+  i386_optab + 2110,
   i386_optab + 2113,
-  i386_optab + 2115,
-  i386_optab + 2117,
-  i386_optab + 2118,
+  i386_optab + 2116,
   i386_optab + 2119,
-  i386_optab + 2122,
+  i386_optab + 2121,
+  i386_optab + 2123,
   i386_optab + 2125,
-  i386_optab + 2128,
+  i386_optab + 2127,
+  i386_optab + 2129,
   i386_optab + 2131,
+  i386_optab + 2132,
   i386_optab + 2133,
-  i386_optab + 2135,
-  i386_optab + 2137,
-  i386_optab + 2139,
-  i386_optab + 2141,
-  i386_optab + 2143,
+  i386_optab + 2134,
+  i386_optab + 2138,
+  i386_optab + 2142,
   i386_optab + 2144,
-  i386_optab + 2145,
   i386_optab + 2146,
-  i386_optab + 2150,
-  i386_optab + 2154,
+  i386_optab + 2152,
   i386_optab + 2156,
+  i386_optab + 2157,
   i386_optab + 2158,
-  i386_optab + 2164,
-  i386_optab + 2168,
+  i386_optab + 2159,
+  i386_optab + 2160,
+  i386_optab + 2161,
+  i386_optab + 2162,
+  i386_optab + 2163,
+  i386_optab + 2167,
   i386_optab + 2169,
-  i386_optab + 2170,
   i386_optab + 2171,
-  i386_optab + 2172,
-  i386_optab + 2173,
-  i386_optab + 2174,
   i386_optab + 2175,
+  i386_optab + 2177,
   i386_optab + 2179,
   i386_optab + 2181,
   i386_optab + 2183,
+  i386_optab + 2185,
   i386_optab + 2187,
   i386_optab + 2189,
   i386_optab + 2191,
@@ -34262,127 +34264,125 @@ static const insn_template *const i386_op_sets[] =
   i386_optab + 2199,
   i386_optab + 2201,
   i386_optab + 2203,
-  i386_optab + 2205,
-  i386_optab + 2207,
+  i386_optab + 2204,
   i386_optab + 2209,
-  i386_optab + 2211,
-  i386_optab + 2213,
-  i386_optab + 2215,
-  i386_optab + 2216,
-  i386_optab + 2221,
-  i386_optab + 2226,
-  i386_optab + 2231,
-  i386_optab + 2236,
-  i386_optab + 2241,
-  i386_optab + 2246,
-  i386_optab + 2251,
-  i386_optab + 2256,
-  i386_optab + 2261,
+  i386_optab + 2214,
+  i386_optab + 2219,
+  i386_optab + 2224,
+  i386_optab + 2229,
+  i386_optab + 2234,
+  i386_optab + 2239,
+  i386_optab + 2244,
+  i386_optab + 2249,
+  i386_optab + 2254,
+  i386_optab + 2259,
+  i386_optab + 2264,
   i386_optab + 2266,
-  i386_optab + 2271,
+  i386_optab + 2268,
+  i386_optab + 2270,
+  i386_optab + 2272,
+  i386_optab + 2274,
   i386_optab + 2276,
   i386_optab + 2278,
-  i386_optab + 2280,
-  i386_optab + 2282,
-  i386_optab + 2284,
-  i386_optab + 2286,
-  i386_optab + 2288,
+  i386_optab + 2279,
+  i386_optab + 2281,
+  i386_optab + 2283,
+  i386_optab + 2285,
+  i386_optab + 2287,
+  i386_optab + 2289,
   i386_optab + 2290,
   i386_optab + 2291,
-  i386_optab + 2293,
-  i386_optab + 2295,
-  i386_optab + 2297,
-  i386_optab + 2299,
-  i386_optab + 2301,
+  i386_optab + 2292,
+  i386_optab + 2296,
+  i386_optab + 2300,
   i386_optab + 2302,
-  i386_optab + 2303,
-  i386_optab + 2304,
-  i386_optab + 2308,
-  i386_optab + 2312,
+  i386_optab + 2306,
+  i386_optab + 2310,
   i386_optab + 2314,
   i386_optab + 2318,
   i386_optab + 2322,
-  i386_optab + 2326,
+  i386_optab + 2324,
+  i386_optab + 2328,
   i386_optab + 2330,
+  i386_optab + 2332,
   i386_optab + 2334,
   i386_optab + 2336,
+  i386_optab + 2338,
   i386_optab + 2340,
   i386_optab + 2342,
   i386_optab + 2344,
-  i386_optab + 2346,
-  i386_optab + 2348,
-  i386_optab + 2350,
-  i386_optab + 2352,
-  i386_optab + 2354,
-  i386_optab + 2356,
+  i386_optab + 2345,
+  i386_optab + 2347,
+  i386_optab + 2349,
+  i386_optab + 2351,
+  i386_optab + 2353,
+  i386_optab + 2355,
   i386_optab + 2357,
   i386_optab + 2359,
   i386_optab + 2361,
+  i386_optab + 2362,
   i386_optab + 2363,
+  i386_optab + 2364,
   i386_optab + 2365,
+  i386_optab + 2366,
   i386_optab + 2367,
+  i386_optab + 2368,
   i386_optab + 2369,
-  i386_optab + 2371,
-  i386_optab + 2373,
+  i386_optab + 2370,
+  i386_optab + 2372,
   i386_optab + 2374,
-  i386_optab + 2375,
   i386_optab + 2376,
-  i386_optab + 2377,
   i386_optab + 2378,
-  i386_optab + 2379,
   i386_optab + 2380,
-  i386_optab + 2381,
   i386_optab + 2382,
-  i386_optab + 2384,
-  i386_optab + 2386,
-  i386_optab + 2388,
-  i386_optab + 2390,
+  i386_optab + 2383,
+  i386_optab + 2385,
+  i386_optab + 2387,
+  i386_optab + 2389,
+  i386_optab + 2391,
   i386_optab + 2392,
-  i386_optab + 2394,
+  i386_optab + 2393,
   i386_optab + 2395,
   i386_optab + 2397,
   i386_optab + 2399,
   i386_optab + 2401,
   i386_optab + 2403,
-  i386_optab + 2404,
   i386_optab + 2405,
   i386_optab + 2407,
   i386_optab + 2409,
+  i386_optab + 2410,
   i386_optab + 2411,
+  i386_optab + 2412,
   i386_optab + 2413,
-  i386_optab + 2415,
-  i386_optab + 2417,
+  i386_optab + 2416,
   i386_optab + 2419,
-  i386_optab + 2421,
   i386_optab + 2422,
-  i386_optab + 2423,
-  i386_optab + 2424,
   i386_optab + 2425,
+  i386_optab + 2426,
   i386_optab + 2428,
   i386_optab + 2431,
-  i386_optab + 2434,
+  i386_optab + 2433,
+  i386_optab + 2436,
   i386_optab + 2437,
   i386_optab + 2438,
   i386_optab + 2440,
-  i386_optab + 2443,
-  i386_optab + 2445,
+  i386_optab + 2442,
+  i386_optab + 2444,
+  i386_optab + 2446,
   i386_optab + 2448,
-  i386_optab + 2449,
   i386_optab + 2450,
   i386_optab + 2452,
-  i386_optab + 2454,
-  i386_optab + 2456,
-  i386_optab + 2458,
+  i386_optab + 2455,
   i386_optab + 2460,
-  i386_optab + 2462,
-  i386_optab + 2464,
-  i386_optab + 2467,
-  i386_optab + 2472,
-  i386_optab + 2477,
-  i386_optab + 2482,
-  i386_optab + 2487,
-  i386_optab + 2490,
-  i386_optab + 2495,
+  i386_optab + 2465,
+  i386_optab + 2470,
+  i386_optab + 2475,
+  i386_optab + 2478,
+  i386_optab + 2483,
+  i386_optab + 2488,
+  i386_optab + 2491,
+  i386_optab + 2494,
+  i386_optab + 2497,
   i386_optab + 2500,
   i386_optab + 2501,
   i386_optab + 2502,