Browse Source

-- Zusammenführen von r47033 bis r47401 in ».«:
C compiler/i386/i386nop.inc
U compiler/i386/i386tab.inc
U compiler/i386/i386atts.inc
U compiler/i386/i386att.inc
C compiler/i8086/i8086nop.inc
U compiler/i8086/i8086tab.inc
U compiler/i8086/i8086atts.inc
U compiler/i8086/i8086att.inc
U compiler/x86/x86ins.dat
C compiler/x86/rax86.pas
U compiler/x86/aasmcpu.pas
U compiler/x86/cpubase.pas
U compiler/x86/agx86att.pas
U compiler/x86/itcpugas.pas
U compiler/x86/rax86att.pas
C compiler/x86_64/x8664nop.inc
U compiler/x86_64/x8664tab.inc
U compiler/x86_64/x8664ats.inc
U compiler/x86_64/x8664att.inc
U compiler/utils/mkx86ins.pp
U tests/utils/avx/asmtestgenerator.pas
U tests/utils/avx/avxopcodes.pas
-- Aufzeichnung der Informationen für Zusammenführung von r47033 bis r47401 in ».«:
U .
Konfliktübersicht:
Textkonflikte: 4
Konfliktübersicht:
Textkonflikte: 4

git-svn-id: trunk@47402 -

florian 4 năm trước cách đây
mục cha
commit
fc960879de

+ 1 - 1
compiler/i386/i386att.inc

@@ -1201,7 +1201,7 @@
 'vcompresspd',
 'vcompressps',
 'vcvtpd2qq',
-'vcvtpd2udq',
+' vcvtpd2udq',
 'vcvtpd2uqq',
 'vcvtps2qq',
 'vcvtps2udq',

+ 11 - 11
compiler/i386/i386atts.inc

@@ -781,8 +781,8 @@ attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
-attsufMM,
-attsufMM,
+attsufMMX,
+attsufMMX,
 attsufNONE,
 attsufNONE,
 attsufNONE,
@@ -793,7 +793,7 @@ attsufINT,
 attsufINT,
 attsufNONE,
 attsufNONE,
-attsufMM,
+attsufMMX,
 attsufNONE,
 attsufNONE,
 attsufNONE,
@@ -1201,14 +1201,17 @@ attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufMMX,
 attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufMMX,
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufMMX,
 attsufNONE,
 attsufNONE,
 attsufNONE,
@@ -1218,6 +1221,9 @@ attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufMMX,
+attsufINT,
+attsufINT,
 attsufNONE,
 attsufNONE,
 attsufNONE,
@@ -1235,14 +1241,8 @@ attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
-attsufNONE,
-attsufNONE,
-attsufNONE,
-attsufNONE,
-attsufNONE,
-attsufNONE,
-attsufNONE,
-attsufNONE,
+attsufINT,
+attsufINT,
 attsufNONE,
 attsufNONE,
 attsufNONE,

+ 1 - 1
compiler/i386/i386nop.inc

@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86ins.dat }
-4150;
+4172;

+ 231 - 77
compiler/i386/i386tab.inc

@@ -10433,7 +10433,7 @@
   (
     opcode  : A_VCVTDQ2PD;
     ops     : 2;
-    optypes : (ot_zmmreg_mz,ot_ymmreg_er,ot_none,ot_none);
+    optypes : (ot_zmmreg_mz,ot_ymmreg,ot_none,ot_none);
     code    : #219#232#233#248#1#230#72;
     flags   : [if_avx512]
   ),
@@ -10493,6 +10493,13 @@
     code    : #232#233#248#1#91#72;
     flags   : [if_avx512]
   ),
+  (
+    opcode  : A_VCVTPD2DQ;
+    ops     : 2;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits256,ot_none,ot_none);
+    code    : #220#232#234#242#244#248#1#230#72;
+    flags   : [if_avx,if_sandybridge,if_tfv]
+  ),
   (
     opcode  : A_VCVTPD2DQ;
     ops     : 2;
@@ -10503,9 +10510,9 @@
   (
     opcode  : A_VCVTPD2DQ;
     ops     : 2;
-    optypes : (ot_xmmreg_mz,ot_ymmrm,ot_none,ot_none);
+    optypes : (ot_xmmreg_mz,ot_ymmreg,ot_none,ot_none);
     code    : #220#232#234#242#244#248#1#230#72;
-    flags   : [if_avx,if_sandybridge,if_tfv]
+    flags   : [if_avx,if_sandybridge]
   ),
   (
     opcode  : A_VCVTPD2DQ;
@@ -10832,7 +10839,7 @@
   (
     opcode  : A_VCVTSI2SD;
     ops     : 3;
-    optypes : (ot_xmmreg,ot_xmmreg_er,ot_reg32,ot_none);
+    optypes : (ot_xmmreg,ot_xmmreg,ot_reg32,ot_none);
     code    : #220#232#242#248#1#42#61#80;
     flags   : [if_avx,if_sandybridge,if_sd]
   ),
@@ -10846,7 +10853,7 @@
   (
     opcode  : A_VCVTSI2SS;
     ops     : 3;
-    optypes : (ot_xmmreg,ot_xmmreg_er,ot_reg32,ot_none);
+    optypes : (ot_xmmreg,ot_xmmreg,ot_reg32,ot_none);
     code    : #219#232#242#248#1#42#61#80;
     flags   : [if_avx,if_sandybridge,if_sd]
   ),
@@ -11232,7 +11239,7 @@
     opcode  : A_VEXTRACTPS;
     ops     : 3;
     optypes : (ot_reg64,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
-    code    : #232#241#250#1#23#65#22;
+    code    : #232#241#242#250#1#23#65#22;
     flags   : [if_avx512]
   ),
   (
@@ -15039,9 +15046,16 @@
   (
     opcode  : A_VPSLLD;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#248#1#114#60#142#22;
-    flags   : [if_avx,if_sandybridge,if_tfv]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSLLD;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#248#1#114#60#142#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSLLD;
@@ -15060,9 +15074,16 @@
   (
     opcode  : A_VPSLLD;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#244#248#1#114#60#142#22;
-    flags   : [if_avx2,if_tfv]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSLLD;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#248#1#114#60#142#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSLLD;
@@ -15151,10 +15172,17 @@
   (
     opcode  : A_VPSLLQ;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#234#241#242#248#1#115#60#142#22;
     flags   : [if_avx,if_sandybridge,if_tfv]
   ),
+  (
+    opcode  : A_VPSLLQ;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#234#241#248#1#115#60#142#22;
+    flags   : [if_avx512,if_tfv]
+  ),
   (
     opcode  : A_VPSLLQ;
     ops     : 3;
@@ -15172,9 +15200,16 @@
   (
     opcode  : A_VPSLLQ;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#234#241#242#244#248#1#115#60#142#22;
-    flags   : [if_avx2,if_tfv]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSLLQ;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#234#241#244#248#1#115#60#142#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSLLQ;
@@ -15214,9 +15249,16 @@
   (
     opcode  : A_VPSLLW;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#248#1#113#60#142#22;
-    flags   : [if_avx,if_sandybridge,if_tfvm]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSLLW;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#248#1#113#60#142#22;
+    flags   : [if_avx512,if_tfvm]
   ),
   (
     opcode  : A_VPSLLW;
@@ -15228,9 +15270,16 @@
   (
     opcode  : A_VPSLLW;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#244#248#1#113#60#142#22;
-    flags   : [if_avx2,if_tfvm]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSLLW;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#248#1#113#60#142#22;
+    flags   : [if_avx512,if_tfvm]
   ),
   (
     opcode  : A_VPSLLW;
@@ -15249,9 +15298,16 @@
   (
     opcode  : A_VPSRAD;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#248#1#114#60#140#22;
-    flags   : [if_avx,if_sandybridge,if_tfv]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSRAD;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#248#1#114#60#140#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSRAD;
@@ -15270,9 +15326,16 @@
   (
     opcode  : A_VPSRAD;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#244#248#1#114#60#140#22;
-    flags   : [if_avx2,if_tfv]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSRAD;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#248#1#114#60#140#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSRAD;
@@ -15312,9 +15375,16 @@
   (
     opcode  : A_VPSRAW;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#248#1#113#60#140#22;
-    flags   : [if_avx,if_sandybridge,if_tfvm]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSRAW;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#248#1#113#60#140#22;
+    flags   : [if_avx512,if_tfvm]
   ),
   (
     opcode  : A_VPSRAW;
@@ -15326,9 +15396,16 @@
   (
     opcode  : A_VPSRAW;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#244#248#1#113#60#140#22;
-    flags   : [if_avx2,if_tfvm]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSRAW;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#248#1#113#60#140#22;
+    flags   : [if_avx512,if_tfvm]
   ),
   (
     opcode  : A_VPSRAW;
@@ -15354,9 +15431,16 @@
   (
     opcode  : A_VPSRLD;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#248#1#114#60#138#22;
-    flags   : [if_avx,if_sandybridge,if_tfv]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSRLD;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#248#1#114#60#138#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSRLD;
@@ -15382,10 +15466,17 @@
   (
     opcode  : A_VPSRLD;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#244#248#1#114#60#138#22;
     flags   : [if_avx2,if_tfv]
   ),
+  (
+    opcode  : A_VPSRLD;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#248#1#114#60#138#22;
+    flags   : [if_avx2,if_tfv]
+  ),
   (
     opcode  : A_VPSRLD;
     ops     : 3;
@@ -15459,9 +15550,16 @@
   (
     opcode  : A_VPSRLQ;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#234#241#242#248#1#115#60#138#22;
-    flags   : [if_avx,if_sandybridge,if_tfv]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSRLQ;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#234#241#248#1#115#60#138#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSRLQ;
@@ -15473,9 +15571,16 @@
   (
     opcode  : A_VPSRLQ;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#234#241#242#244#248#1#115#60#138#22;
-    flags   : [if_avx2,if_tfv]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSRLQ;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#234#241#244#248#1#115#60#138#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSRLQ;
@@ -15515,9 +15620,16 @@
   (
     opcode  : A_VPSRLW;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#248#1#113#60#138#22;
-    flags   : [if_avx,if_sandybridge,if_tfvm]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSRLW;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#248#1#113#60#138#22;
+    flags   : [if_avx512,if_tfvm]
   ),
   (
     opcode  : A_VPSRLW;
@@ -15529,9 +15641,16 @@
   (
     opcode  : A_VPSRLW;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#244#248#1#113#60#138#22;
-    flags   : [if_avx2,if_tfvm]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSRLW;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#248#1#113#60#138#22;
+    flags   : [if_avx512,if_tfvm]
   ),
   (
     opcode  : A_VPSRLW;
@@ -19758,7 +19877,7 @@
     opcode  : A_VFNMADD231SD;
     ops     : 3;
     optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
-    code    : #223#241#242#243#249#1#189#61#80;
+    code    : #223#232#234#241#242#243#249#1#189#61#80;
     flags   : [if_fma,if_t1s]
   ),
   (
@@ -22053,7 +22172,7 @@
   (
     opcode  : A_VCVTUDQ2PD;
     ops     : 2;
-    optypes : (ot_zmmreg_mz,ot_ymmreg_er,ot_none,ot_none);
+    optypes : (ot_zmmreg_mz,ot_ymmreg,ot_none,ot_none);
     code    : #219#232#233#248#1#122#72;
     flags   : [if_avx512]
   ),
@@ -22221,10 +22340,17 @@
   (
     opcode  : A_VCVTUSI2SD;
     ops     : 3;
-    optypes : (ot_xmmreg,ot_xmmreg_er,ot_rm_gpr or ot_bits64,ot_none);
+    optypes : (ot_xmmreg,ot_xmmreg_er,ot_memory or ot_bits64,ot_none);
     code    : #220#232#234#248#1#123#61#80;
     flags   : [if_avx512,if_t1s]
   ),
+  (
+    opcode  : A_VCVTUSI2SD;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg_er,ot_reg64,ot_none);
+    code    : #220#232#234#248#1#123#61#80;
+    flags   : [if_avx512]
+  ),
   (
     opcode  : A_VCVTUSI2SD;
     ops     : 3;
@@ -22687,6 +22813,20 @@
     code    : #232#241#250#1#85#61#80#23;
     flags   : [if_avx512]
   ),
+  (
+    opcode  : A_VFPCLASSPD;
+    ops     : 3;
+    optypes : (ot_kreg_m,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#234#241#244#250#1#102#72#22;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VFPCLASSPD;
+    ops     : 3;
+    optypes : (ot_kreg_m,ot_memory or ot_bits512,ot_immediate or ot_bits8,ot_none);
+    code    : #232#233#234#241#250#1#102#72#22;
+    flags   : [if_avx512,if_tfv]
+  ),
   (
     opcode  : A_VFPCLASSPD;
     ops     : 3;
@@ -22704,9 +22844,9 @@
   (
     opcode  : A_VFPCLASSPD;
     ops     : 3;
-    optypes : (ot_kreg_m,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_kreg_m,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#234#241#244#250#1#102#72#22;
-    flags   : [if_avx512,if_tfv]
+    flags   : [if_avx512]
   ),
   (
     opcode  : A_VFPCLASSPD;
@@ -22718,9 +22858,9 @@
   (
     opcode  : A_VFPCLASSPD;
     ops     : 3;
-    optypes : (ot_kreg_m,ot_zmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_kreg_m,ot_zmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#233#234#241#250#1#102#72#22;
-    flags   : [if_avx512,if_tfv]
+    flags   : [if_avx512]
   ),
   (
     opcode  : A_VFPCLASSPD;
@@ -22729,6 +22869,20 @@
     code    : #232#233#234#241#250#1#102#72#22;
     flags   : [if_avx512,if_bcst8,if_tfv]
   ),
+  (
+    opcode  : A_VFPCLASSPS;
+    ops     : 3;
+    optypes : (ot_kreg_m,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#250#1#102#72#22;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VFPCLASSPS;
+    ops     : 3;
+    optypes : (ot_kreg_m,ot_memory or ot_bits512,ot_immediate or ot_bits8,ot_none);
+    code    : #232#233#241#250#1#102#72#22;
+    flags   : [if_avx512,if_tfv]
+  ),
   (
     opcode  : A_VFPCLASSPS;
     ops     : 3;
@@ -22746,9 +22900,9 @@
   (
     opcode  : A_VFPCLASSPS;
     ops     : 3;
-    optypes : (ot_kreg_m,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_kreg_m,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#244#250#1#102#72#22;
-    flags   : [if_avx512,if_tfv]
+    flags   : [if_avx512]
   ),
   (
     opcode  : A_VFPCLASSPS;
@@ -22760,9 +22914,9 @@
   (
     opcode  : A_VFPCLASSPS;
     ops     : 3;
-    optypes : (ot_kreg_m,ot_zmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_kreg_m,ot_zmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#233#241#250#1#102#72#22;
-    flags   : [if_avx512,if_tfv]
+    flags   : [if_avx512]
   ),
   (
     opcode  : A_VFPCLASSPS;
@@ -28194,21 +28348,21 @@
     ops     : 2;
     optypes : (ot_mem128_m,ot_xmmreg,ot_none,ot_none);
     code    : #232#241#249#1#99#65;
-    flags   : [if_avx512,if_t1s]
+    flags   : [if_avx512,if_t1s8]
   ),
   (
     opcode  : A_VPCOMPRESSB;
     ops     : 2;
     optypes : (ot_mem256_m,ot_ymmreg,ot_none,ot_none);
     code    : #232#241#244#249#1#99#65;
-    flags   : [if_avx512,if_t1s]
+    flags   : [if_avx512,if_t1s8]
   ),
   (
     opcode  : A_VPCOMPRESSB;
     ops     : 2;
     optypes : (ot_mem512_m,ot_zmmreg,ot_none,ot_none);
     code    : #232#233#241#249#1#99#65;
-    flags   : [if_avx512,if_t1s]
+    flags   : [if_avx512,if_t1s8]
   ),
   (
     opcode  : A_VPCOMPRESSB;
@@ -28236,21 +28390,21 @@
     ops     : 2;
     optypes : (ot_mem128_m,ot_xmmreg,ot_none,ot_none);
     code    : #232#234#241#249#1#99#65;
-    flags   : [if_avx512,if_t1s]
+    flags   : [if_avx512,if_t1s16]
   ),
   (
     opcode  : A_VPCOMPRESSW;
     ops     : 2;
     optypes : (ot_mem256_m,ot_ymmreg,ot_none,ot_none);
     code    : #232#234#241#244#249#1#99#65;
-    flags   : [if_avx512,if_t1s]
+    flags   : [if_avx512,if_t1s16]
   ),
   (
     opcode  : A_VPCOMPRESSW;
     ops     : 2;
     optypes : (ot_mem512_m,ot_zmmreg,ot_none,ot_none);
     code    : #232#233#234#241#249#1#99#65;
-    flags   : [if_avx512,if_t1s]
+    flags   : [if_avx512,if_t1s16]
   ),
   (
     opcode  : A_VPCOMPRESSW;
@@ -28444,85 +28598,85 @@
   (
     opcode  : A_VPEXPANDB;
     ops     : 2;
-    optypes : (ot_mem128_m,ot_xmmreg,ot_none,ot_none);
-    code    : #232#241#249#1#98#65;
-    flags   : [if_avx512,if_t1s]
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_none,ot_none);
+    code    : #232#241#249#1#98#72;
+    flags   : [if_avx512,if_t1s8]
   ),
   (
     opcode  : A_VPEXPANDB;
     ops     : 2;
-    optypes : (ot_mem256_m,ot_ymmreg,ot_none,ot_none);
-    code    : #232#241#244#249#1#98#65;
-    flags   : [if_avx512,if_t1s]
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_none,ot_none);
+    code    : #232#241#244#249#1#98#72;
+    flags   : [if_avx512,if_t1s8]
   ),
   (
     opcode  : A_VPEXPANDB;
     ops     : 2;
-    optypes : (ot_mem512_m,ot_zmmreg,ot_none,ot_none);
-    code    : #232#233#241#249#1#98#65;
-    flags   : [if_avx512,if_t1s]
+    optypes : (ot_zmmreg_mz,ot_memory or ot_bits512,ot_none,ot_none);
+    code    : #232#233#241#249#1#98#72;
+    flags   : [if_avx512,if_t1s8]
   ),
   (
     opcode  : A_VPEXPANDB;
     ops     : 2;
     optypes : (ot_xmmreg_mz,ot_xmmreg,ot_none,ot_none);
-    code    : #232#241#249#1#98#65;
+    code    : #232#241#249#1#98#72;
     flags   : [if_avx512]
   ),
   (
     opcode  : A_VPEXPANDB;
     ops     : 2;
     optypes : (ot_ymmreg_mz,ot_ymmreg,ot_none,ot_none);
-    code    : #232#241#244#249#1#98#65;
+    code    : #232#241#244#249#1#98#72;
     flags   : [if_avx512]
   ),
   (
     opcode  : A_VPEXPANDB;
     ops     : 2;
     optypes : (ot_zmmreg_mz,ot_zmmreg,ot_none,ot_none);
-    code    : #232#233#241#249#1#98#65;
+    code    : #232#233#241#249#1#98#72;
     flags   : [if_avx512]
   ),
   (
     opcode  : A_VPEXPANDW;
     ops     : 2;
-    optypes : (ot_mem128_m,ot_xmmreg,ot_none,ot_none);
-    code    : #232#234#241#249#1#98#65;
-    flags   : [if_avx512,if_t1s]
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_none,ot_none);
+    code    : #232#234#241#249#1#98#72;
+    flags   : [if_avx512,if_t1s16]
   ),
   (
     opcode  : A_VPEXPANDW;
     ops     : 2;
-    optypes : (ot_mem256_m,ot_ymmreg,ot_none,ot_none);
-    code    : #232#234#241#244#249#1#98#65;
-    flags   : [if_avx512,if_t1s]
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_none,ot_none);
+    code    : #232#234#241#244#249#1#98#72;
+    flags   : [if_avx512,if_t1s16]
   ),
   (
     opcode  : A_VPEXPANDW;
     ops     : 2;
-    optypes : (ot_mem512_m,ot_zmmreg,ot_none,ot_none);
-    code    : #232#233#234#241#249#1#98#65;
-    flags   : [if_avx512,if_t1s]
+    optypes : (ot_zmmreg_mz,ot_memory or ot_bits512,ot_none,ot_none);
+    code    : #232#233#234#241#249#1#98#72;
+    flags   : [if_avx512,if_t1s16]
   ),
   (
     opcode  : A_VPEXPANDW;
     ops     : 2;
     optypes : (ot_xmmreg_mz,ot_xmmreg,ot_none,ot_none);
-    code    : #232#234#241#249#1#98#65;
+    code    : #232#234#241#249#1#98#72;
     flags   : [if_avx512]
   ),
   (
     opcode  : A_VPEXPANDW;
     ops     : 2;
     optypes : (ot_ymmreg_mz,ot_ymmreg,ot_none,ot_none);
-    code    : #232#234#241#244#249#1#98#65;
+    code    : #232#234#241#244#249#1#98#72;
     flags   : [if_avx512]
   ),
   (
     opcode  : A_VPEXPANDW;
     ops     : 2;
     optypes : (ot_zmmreg_mz,ot_zmmreg,ot_none,ot_none);
-    code    : #232#233#234#241#249#1#98#65;
+    code    : #232#233#234#241#249#1#98#72;
     flags   : [if_avx512]
   ),
   (

+ 1 - 1
compiler/i8086/i8086att.inc

@@ -1215,7 +1215,7 @@
 'vcompresspd',
 'vcompressps',
 'vcvtpd2qq',
-'vcvtpd2udq',
+' vcvtpd2udq',
 'vcvtpd2uqq',
 'vcvtps2qq',
 'vcvtps2udq',

+ 11 - 11
compiler/i8086/i8086atts.inc

@@ -781,8 +781,8 @@ attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
-attsufMM,
-attsufMM,
+attsufMMX,
+attsufMMX,
 attsufNONE,
 attsufNONE,
 attsufNONE,
@@ -793,7 +793,7 @@ attsufINT,
 attsufINT,
 attsufNONE,
 attsufNONE,
-attsufMM,
+attsufMMX,
 attsufNONE,
 attsufNONE,
 attsufNONE,
@@ -1215,14 +1215,17 @@ attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufMMX,
 attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufMMX,
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufMMX,
 attsufNONE,
 attsufNONE,
 attsufNONE,
@@ -1232,6 +1235,9 @@ attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufMMX,
+attsufINT,
+attsufINT,
 attsufNONE,
 attsufNONE,
 attsufNONE,
@@ -1249,14 +1255,8 @@ attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
-attsufNONE,
-attsufNONE,
-attsufNONE,
-attsufNONE,
-attsufNONE,
-attsufNONE,
-attsufNONE,
-attsufNONE,
+attsufINT,
+attsufINT,
 attsufNONE,
 attsufNONE,
 attsufNONE,

+ 1 - 1
compiler/i8086/i8086nop.inc

@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86ins.dat }
-4182;
+4204;

+ 231 - 77
compiler/i8086/i8086tab.inc

@@ -10461,7 +10461,7 @@
   (
     opcode  : A_VCVTDQ2PD;
     ops     : 2;
-    optypes : (ot_zmmreg_mz,ot_ymmreg_er,ot_none,ot_none);
+    optypes : (ot_zmmreg_mz,ot_ymmreg,ot_none,ot_none);
     code    : #219#232#233#248#1#230#72;
     flags   : [if_avx512]
   ),
@@ -10521,6 +10521,13 @@
     code    : #232#233#248#1#91#72;
     flags   : [if_avx512]
   ),
+  (
+    opcode  : A_VCVTPD2DQ;
+    ops     : 2;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits256,ot_none,ot_none);
+    code    : #220#232#234#242#244#248#1#230#72;
+    flags   : [if_avx,if_sandybridge,if_tfv]
+  ),
   (
     opcode  : A_VCVTPD2DQ;
     ops     : 2;
@@ -10531,9 +10538,9 @@
   (
     opcode  : A_VCVTPD2DQ;
     ops     : 2;
-    optypes : (ot_xmmreg_mz,ot_ymmrm,ot_none,ot_none);
+    optypes : (ot_xmmreg_mz,ot_ymmreg,ot_none,ot_none);
     code    : #220#232#234#242#244#248#1#230#72;
-    flags   : [if_avx,if_sandybridge,if_tfv]
+    flags   : [if_avx,if_sandybridge]
   ),
   (
     opcode  : A_VCVTPD2DQ;
@@ -10860,7 +10867,7 @@
   (
     opcode  : A_VCVTSI2SD;
     ops     : 3;
-    optypes : (ot_xmmreg,ot_xmmreg_er,ot_reg32,ot_none);
+    optypes : (ot_xmmreg,ot_xmmreg,ot_reg32,ot_none);
     code    : #220#232#242#248#1#42#61#80;
     flags   : [if_avx,if_sandybridge,if_sd]
   ),
@@ -10874,7 +10881,7 @@
   (
     opcode  : A_VCVTSI2SS;
     ops     : 3;
-    optypes : (ot_xmmreg,ot_xmmreg_er,ot_reg32,ot_none);
+    optypes : (ot_xmmreg,ot_xmmreg,ot_reg32,ot_none);
     code    : #219#232#242#248#1#42#61#80;
     flags   : [if_avx,if_sandybridge,if_sd]
   ),
@@ -11260,7 +11267,7 @@
     opcode  : A_VEXTRACTPS;
     ops     : 3;
     optypes : (ot_reg64,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
-    code    : #232#241#250#1#23#65#22;
+    code    : #232#241#242#250#1#23#65#22;
     flags   : [if_avx512]
   ),
   (
@@ -15067,9 +15074,16 @@
   (
     opcode  : A_VPSLLD;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#248#1#114#60#142#22;
-    flags   : [if_avx,if_sandybridge,if_tfv]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSLLD;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#248#1#114#60#142#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSLLD;
@@ -15088,9 +15102,16 @@
   (
     opcode  : A_VPSLLD;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#244#248#1#114#60#142#22;
-    flags   : [if_avx2,if_tfv]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSLLD;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#248#1#114#60#142#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSLLD;
@@ -15179,10 +15200,17 @@
   (
     opcode  : A_VPSLLQ;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#234#241#242#248#1#115#60#142#22;
     flags   : [if_avx,if_sandybridge,if_tfv]
   ),
+  (
+    opcode  : A_VPSLLQ;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#234#241#248#1#115#60#142#22;
+    flags   : [if_avx512,if_tfv]
+  ),
   (
     opcode  : A_VPSLLQ;
     ops     : 3;
@@ -15200,9 +15228,16 @@
   (
     opcode  : A_VPSLLQ;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#234#241#242#244#248#1#115#60#142#22;
-    flags   : [if_avx2,if_tfv]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSLLQ;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#234#241#244#248#1#115#60#142#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSLLQ;
@@ -15242,9 +15277,16 @@
   (
     opcode  : A_VPSLLW;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#248#1#113#60#142#22;
-    flags   : [if_avx,if_sandybridge,if_tfvm]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSLLW;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#248#1#113#60#142#22;
+    flags   : [if_avx512,if_tfvm]
   ),
   (
     opcode  : A_VPSLLW;
@@ -15256,9 +15298,16 @@
   (
     opcode  : A_VPSLLW;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#244#248#1#113#60#142#22;
-    flags   : [if_avx2,if_tfvm]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSLLW;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#248#1#113#60#142#22;
+    flags   : [if_avx512,if_tfvm]
   ),
   (
     opcode  : A_VPSLLW;
@@ -15277,9 +15326,16 @@
   (
     opcode  : A_VPSRAD;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#248#1#114#60#140#22;
-    flags   : [if_avx,if_sandybridge,if_tfv]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSRAD;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#248#1#114#60#140#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSRAD;
@@ -15298,9 +15354,16 @@
   (
     opcode  : A_VPSRAD;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#244#248#1#114#60#140#22;
-    flags   : [if_avx2,if_tfv]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSRAD;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#248#1#114#60#140#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSRAD;
@@ -15340,9 +15403,16 @@
   (
     opcode  : A_VPSRAW;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#248#1#113#60#140#22;
-    flags   : [if_avx,if_sandybridge,if_tfvm]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSRAW;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#248#1#113#60#140#22;
+    flags   : [if_avx512,if_tfvm]
   ),
   (
     opcode  : A_VPSRAW;
@@ -15354,9 +15424,16 @@
   (
     opcode  : A_VPSRAW;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#244#248#1#113#60#140#22;
-    flags   : [if_avx2,if_tfvm]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSRAW;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#248#1#113#60#140#22;
+    flags   : [if_avx512,if_tfvm]
   ),
   (
     opcode  : A_VPSRAW;
@@ -15382,9 +15459,16 @@
   (
     opcode  : A_VPSRLD;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#248#1#114#60#138#22;
-    flags   : [if_avx,if_sandybridge,if_tfv]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSRLD;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#248#1#114#60#138#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSRLD;
@@ -15410,10 +15494,17 @@
   (
     opcode  : A_VPSRLD;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#244#248#1#114#60#138#22;
     flags   : [if_avx2,if_tfv]
   ),
+  (
+    opcode  : A_VPSRLD;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#248#1#114#60#138#22;
+    flags   : [if_avx2,if_tfv]
+  ),
   (
     opcode  : A_VPSRLD;
     ops     : 3;
@@ -15487,9 +15578,16 @@
   (
     opcode  : A_VPSRLQ;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#234#241#242#248#1#115#60#138#22;
-    flags   : [if_avx,if_sandybridge,if_tfv]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSRLQ;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#234#241#248#1#115#60#138#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSRLQ;
@@ -15501,9 +15599,16 @@
   (
     opcode  : A_VPSRLQ;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#234#241#242#244#248#1#115#60#138#22;
-    flags   : [if_avx2,if_tfv]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSRLQ;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#234#241#244#248#1#115#60#138#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSRLQ;
@@ -15543,9 +15648,16 @@
   (
     opcode  : A_VPSRLW;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#248#1#113#60#138#22;
-    flags   : [if_avx,if_sandybridge,if_tfvm]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSRLW;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#248#1#113#60#138#22;
+    flags   : [if_avx512,if_tfvm]
   ),
   (
     opcode  : A_VPSRLW;
@@ -15557,9 +15669,16 @@
   (
     opcode  : A_VPSRLW;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#244#248#1#113#60#138#22;
-    flags   : [if_avx2,if_tfvm]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSRLW;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#248#1#113#60#138#22;
+    flags   : [if_avx512,if_tfvm]
   ),
   (
     opcode  : A_VPSRLW;
@@ -19982,7 +20101,7 @@
     opcode  : A_VFNMADD231SD;
     ops     : 3;
     optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
-    code    : #223#241#242#243#249#1#189#61#80;
+    code    : #223#232#234#241#242#243#249#1#189#61#80;
     flags   : [if_fma,if_t1s]
   ),
   (
@@ -22277,7 +22396,7 @@
   (
     opcode  : A_VCVTUDQ2PD;
     ops     : 2;
-    optypes : (ot_zmmreg_mz,ot_ymmreg_er,ot_none,ot_none);
+    optypes : (ot_zmmreg_mz,ot_ymmreg,ot_none,ot_none);
     code    : #219#232#233#248#1#122#72;
     flags   : [if_avx512]
   ),
@@ -22445,10 +22564,17 @@
   (
     opcode  : A_VCVTUSI2SD;
     ops     : 3;
-    optypes : (ot_xmmreg,ot_xmmreg_er,ot_rm_gpr or ot_bits64,ot_none);
+    optypes : (ot_xmmreg,ot_xmmreg_er,ot_memory or ot_bits64,ot_none);
     code    : #220#232#234#248#1#123#61#80;
     flags   : [if_avx512,if_t1s]
   ),
+  (
+    opcode  : A_VCVTUSI2SD;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg_er,ot_reg64,ot_none);
+    code    : #220#232#234#248#1#123#61#80;
+    flags   : [if_avx512]
+  ),
   (
     opcode  : A_VCVTUSI2SD;
     ops     : 3;
@@ -22911,6 +23037,20 @@
     code    : #232#241#250#1#85#61#80#23;
     flags   : [if_avx512]
   ),
+  (
+    opcode  : A_VFPCLASSPD;
+    ops     : 3;
+    optypes : (ot_kreg_m,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#234#241#244#250#1#102#72#22;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VFPCLASSPD;
+    ops     : 3;
+    optypes : (ot_kreg_m,ot_memory or ot_bits512,ot_immediate or ot_bits8,ot_none);
+    code    : #232#233#234#241#250#1#102#72#22;
+    flags   : [if_avx512,if_tfv]
+  ),
   (
     opcode  : A_VFPCLASSPD;
     ops     : 3;
@@ -22928,9 +23068,9 @@
   (
     opcode  : A_VFPCLASSPD;
     ops     : 3;
-    optypes : (ot_kreg_m,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_kreg_m,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#234#241#244#250#1#102#72#22;
-    flags   : [if_avx512,if_tfv]
+    flags   : [if_avx512]
   ),
   (
     opcode  : A_VFPCLASSPD;
@@ -22942,9 +23082,9 @@
   (
     opcode  : A_VFPCLASSPD;
     ops     : 3;
-    optypes : (ot_kreg_m,ot_zmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_kreg_m,ot_zmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#233#234#241#250#1#102#72#22;
-    flags   : [if_avx512,if_tfv]
+    flags   : [if_avx512]
   ),
   (
     opcode  : A_VFPCLASSPD;
@@ -22953,6 +23093,20 @@
     code    : #232#233#234#241#250#1#102#72#22;
     flags   : [if_avx512,if_bcst8,if_tfv]
   ),
+  (
+    opcode  : A_VFPCLASSPS;
+    ops     : 3;
+    optypes : (ot_kreg_m,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#250#1#102#72#22;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VFPCLASSPS;
+    ops     : 3;
+    optypes : (ot_kreg_m,ot_memory or ot_bits512,ot_immediate or ot_bits8,ot_none);
+    code    : #232#233#241#250#1#102#72#22;
+    flags   : [if_avx512,if_tfv]
+  ),
   (
     opcode  : A_VFPCLASSPS;
     ops     : 3;
@@ -22970,9 +23124,9 @@
   (
     opcode  : A_VFPCLASSPS;
     ops     : 3;
-    optypes : (ot_kreg_m,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_kreg_m,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#244#250#1#102#72#22;
-    flags   : [if_avx512,if_tfv]
+    flags   : [if_avx512]
   ),
   (
     opcode  : A_VFPCLASSPS;
@@ -22984,9 +23138,9 @@
   (
     opcode  : A_VFPCLASSPS;
     ops     : 3;
-    optypes : (ot_kreg_m,ot_zmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_kreg_m,ot_zmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#233#241#250#1#102#72#22;
-    flags   : [if_avx512,if_tfv]
+    flags   : [if_avx512]
   ),
   (
     opcode  : A_VFPCLASSPS;
@@ -28418,21 +28572,21 @@
     ops     : 2;
     optypes : (ot_mem128_m,ot_xmmreg,ot_none,ot_none);
     code    : #232#241#249#1#99#65;
-    flags   : [if_avx512,if_t1s]
+    flags   : [if_avx512,if_t1s8]
   ),
   (
     opcode  : A_VPCOMPRESSB;
     ops     : 2;
     optypes : (ot_mem256_m,ot_ymmreg,ot_none,ot_none);
     code    : #232#241#244#249#1#99#65;
-    flags   : [if_avx512,if_t1s]
+    flags   : [if_avx512,if_t1s8]
   ),
   (
     opcode  : A_VPCOMPRESSB;
     ops     : 2;
     optypes : (ot_mem512_m,ot_zmmreg,ot_none,ot_none);
     code    : #232#233#241#249#1#99#65;
-    flags   : [if_avx512,if_t1s]
+    flags   : [if_avx512,if_t1s8]
   ),
   (
     opcode  : A_VPCOMPRESSB;
@@ -28460,21 +28614,21 @@
     ops     : 2;
     optypes : (ot_mem128_m,ot_xmmreg,ot_none,ot_none);
     code    : #232#234#241#249#1#99#65;
-    flags   : [if_avx512,if_t1s]
+    flags   : [if_avx512,if_t1s16]
   ),
   (
     opcode  : A_VPCOMPRESSW;
     ops     : 2;
     optypes : (ot_mem256_m,ot_ymmreg,ot_none,ot_none);
     code    : #232#234#241#244#249#1#99#65;
-    flags   : [if_avx512,if_t1s]
+    flags   : [if_avx512,if_t1s16]
   ),
   (
     opcode  : A_VPCOMPRESSW;
     ops     : 2;
     optypes : (ot_mem512_m,ot_zmmreg,ot_none,ot_none);
     code    : #232#233#234#241#249#1#99#65;
-    flags   : [if_avx512,if_t1s]
+    flags   : [if_avx512,if_t1s16]
   ),
   (
     opcode  : A_VPCOMPRESSW;
@@ -28668,85 +28822,85 @@
   (
     opcode  : A_VPEXPANDB;
     ops     : 2;
-    optypes : (ot_mem128_m,ot_xmmreg,ot_none,ot_none);
-    code    : #232#241#249#1#98#65;
-    flags   : [if_avx512,if_t1s]
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_none,ot_none);
+    code    : #232#241#249#1#98#72;
+    flags   : [if_avx512,if_t1s8]
   ),
   (
     opcode  : A_VPEXPANDB;
     ops     : 2;
-    optypes : (ot_mem256_m,ot_ymmreg,ot_none,ot_none);
-    code    : #232#241#244#249#1#98#65;
-    flags   : [if_avx512,if_t1s]
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_none,ot_none);
+    code    : #232#241#244#249#1#98#72;
+    flags   : [if_avx512,if_t1s8]
   ),
   (
     opcode  : A_VPEXPANDB;
     ops     : 2;
-    optypes : (ot_mem512_m,ot_zmmreg,ot_none,ot_none);
-    code    : #232#233#241#249#1#98#65;
-    flags   : [if_avx512,if_t1s]
+    optypes : (ot_zmmreg_mz,ot_memory or ot_bits512,ot_none,ot_none);
+    code    : #232#233#241#249#1#98#72;
+    flags   : [if_avx512,if_t1s8]
   ),
   (
     opcode  : A_VPEXPANDB;
     ops     : 2;
     optypes : (ot_xmmreg_mz,ot_xmmreg,ot_none,ot_none);
-    code    : #232#241#249#1#98#65;
+    code    : #232#241#249#1#98#72;
     flags   : [if_avx512]
   ),
   (
     opcode  : A_VPEXPANDB;
     ops     : 2;
     optypes : (ot_ymmreg_mz,ot_ymmreg,ot_none,ot_none);
-    code    : #232#241#244#249#1#98#65;
+    code    : #232#241#244#249#1#98#72;
     flags   : [if_avx512]
   ),
   (
     opcode  : A_VPEXPANDB;
     ops     : 2;
     optypes : (ot_zmmreg_mz,ot_zmmreg,ot_none,ot_none);
-    code    : #232#233#241#249#1#98#65;
+    code    : #232#233#241#249#1#98#72;
     flags   : [if_avx512]
   ),
   (
     opcode  : A_VPEXPANDW;
     ops     : 2;
-    optypes : (ot_mem128_m,ot_xmmreg,ot_none,ot_none);
-    code    : #232#234#241#249#1#98#65;
-    flags   : [if_avx512,if_t1s]
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_none,ot_none);
+    code    : #232#234#241#249#1#98#72;
+    flags   : [if_avx512,if_t1s16]
   ),
   (
     opcode  : A_VPEXPANDW;
     ops     : 2;
-    optypes : (ot_mem256_m,ot_ymmreg,ot_none,ot_none);
-    code    : #232#234#241#244#249#1#98#65;
-    flags   : [if_avx512,if_t1s]
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_none,ot_none);
+    code    : #232#234#241#244#249#1#98#72;
+    flags   : [if_avx512,if_t1s16]
   ),
   (
     opcode  : A_VPEXPANDW;
     ops     : 2;
-    optypes : (ot_mem512_m,ot_zmmreg,ot_none,ot_none);
-    code    : #232#233#234#241#249#1#98#65;
-    flags   : [if_avx512,if_t1s]
+    optypes : (ot_zmmreg_mz,ot_memory or ot_bits512,ot_none,ot_none);
+    code    : #232#233#234#241#249#1#98#72;
+    flags   : [if_avx512,if_t1s16]
   ),
   (
     opcode  : A_VPEXPANDW;
     ops     : 2;
     optypes : (ot_xmmreg_mz,ot_xmmreg,ot_none,ot_none);
-    code    : #232#234#241#249#1#98#65;
+    code    : #232#234#241#249#1#98#72;
     flags   : [if_avx512]
   ),
   (
     opcode  : A_VPEXPANDW;
     ops     : 2;
     optypes : (ot_ymmreg_mz,ot_ymmreg,ot_none,ot_none);
-    code    : #232#234#241#244#249#1#98#65;
+    code    : #232#234#241#244#249#1#98#72;
     flags   : [if_avx512]
   ),
   (
     opcode  : A_VPEXPANDW;
     ops     : 2;
     optypes : (ot_zmmreg_mz,ot_zmmreg,ot_none,ot_none);
-    code    : #232#233#234#241#249#1#98#65;
+    code    : #232#233#234#241#249#1#98#72;
     flags   : [if_avx512]
   ),
   (

+ 5 - 0
compiler/utils/mkx86ins.pp

@@ -320,6 +320,11 @@ begin
                     dec(attopcode[0]);
                     attsuffix:='attsufMM';
                   end;
+                'N' :
+                  begin
+                    dec(attopcode[0]);
+                    attsuffix:='attsufMMX';
+                  end;
                 'X' :
                   begin
                     dec(attopcode[0]);

+ 13 - 6
compiler/x86/aasmcpu.pas

@@ -505,6 +505,8 @@ interface
         IF_T4,                  { disp8 - tuple - 4 }
         IF_T8,                  { disp8 - tuple - 8 }
         IF_T1S,                 { disp8 - tuple - 1 scalar }
+        IF_T1S8,                { disp8 - tuple - 1 scalar byte }
+        IF_T1S16,               { disp8 - tuple - 1 scalar word }
         IF_T1F32,
         IF_T1F64,
         IF_TMDDUP,
@@ -2128,6 +2130,8 @@ implementation
                       else tuplesize := 4;
               end;
             end
+            else if IF_T1S8 in aInsEntry^.Flags then tuplesize := 1
+            else if IF_T1S16 in aInsEntry^.Flags then tuplesize := 2
             else if IF_T1F32 in aInsEntry^.Flags then tuplesize := 4
             else if IF_T1F64 in aInsEntry^.Flags then tuplesize := 8
             else if IF_T2 in aInsEntry^.Flags then
@@ -2183,12 +2187,15 @@ implementation
           begin
             if aInput.typ = top_ref then
             begin
-              if (aInput.ref^.offset <> 0) and
-                 ((aInput.ref^.offset mod tuplesize) = 0) and
-                 (abs(aInput.ref^.offset) div tuplesize <= 127) then
-              begin
-                aInput.ref^.offset := aInput.ref^.offset div tuplesize;
-                EVEXTupleState := etsIsTuple;
+	      if aInput.ref^.base <> NR_NO then
+	      begin	      
+	        if (aInput.ref^.offset <> 0) and
+                   ((aInput.ref^.offset mod tuplesize) = 0) and
+                   (abs(aInput.ref^.offset) div tuplesize <= 127) then
+                begin
+                  aInput.ref^.offset := aInput.ref^.offset div tuplesize;
+                  EVEXTupleState := etsIsTuple;
+    	        end;  
               end;
             end;
           end;

+ 2 - 0
compiler/x86/agx86att.pas

@@ -395,6 +395,8 @@ interface
                (getregtype(taicpu(hp).oper[0]^.reg)=R_FPUREGISTER)
               ) then
         begin
+          if (gas_needsuffix[op]<>AttSufMMX) or
+	     (taicpu(hp).opsize in [S_XMM,S_YMM]) then
           owner.writer.AsmWrite(gas_opsize2str[taicpu(hp).opsize]);
         end;
 

+ 1 - 1
compiler/x86/cpubase.pas

@@ -509,7 +509,7 @@ implementation
             end;
           R_ADDRESSREGISTER:
             case reg of
-              NR_K0..NR_K7: reg_cgsize:=OS_64;
+              NR_K0..NR_K7: reg_cgsize:=OS_NO;
               else internalerror(2003031801);
             end;
           else

+ 9 - 1
compiler/x86/itcpugas.pas

@@ -29,7 +29,7 @@ interface
       cgbase,cpubase;
 
     type
-      TAttSuffix = (AttSufNONE,AttSufINT,AttSufFPU,AttSufFPUint,AttSufINTdual,AttSufMM);
+      TAttSuffix = (AttSufNONE,AttSufINT,AttSufFPU,AttSufFPUint,AttSufINTdual,AttSufMM,AttSufMMX);
 
     const
       { include mnemonic strings }
@@ -75,6 +75,10 @@ interface
      att_sizemmsuffix : array[0..14] of topsize = (
        S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,{S_NO,}S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_XMM,S_YMM,S_ZMM
      );
+     att_sizemmxsuffix : array[0..14] of topsize = (
+       S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,{S_NO,}S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_XMM,S_NO,S_NO
+     );
+
 {$else x86_64}
      gas_opsize2str : array[topsize] of string[2] = ('',
        'b','w','l','q','bw','bl','wl',
@@ -103,6 +107,10 @@ interface
      att_sizemmsuffix : array[0..12] of topsize = (
        S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_XMM,S_YMM,S_ZMM
      );
+     att_sizemmxsuffix : array[0..12] of topsize = (
+       S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_XMM,S_NO,S_NO
+     );
+
 
 {$endif x86_64}
 

+ 158 - 60
compiler/x86/rax86.pas

@@ -239,7 +239,7 @@ begin
           ;
       end;
     end
-  else if gas_needsuffix[opcode]=AttSufMM then
+  else if gas_needsuffix[opcode] in [AttSufMM, AttSufMMX] then
   begin
     if (opr.typ=OPR_Reference) then
     begin
@@ -544,6 +544,21 @@ begin
                   end;
                 end;
               end;
+            msiMemRegx16y32z64:
+              begin
+                for j := 1 to ops do
+                begin
+                  if operands[j].Opr.Typ = OPR_REGISTER then
+                  begin
+                    case getsubreg(operands[j].opr.reg) of
+                      R_SUBMMX: memrefsize := 16;
+                      R_SUBMMY: memrefsize := 32;
+                      R_SUBMMZ: memrefsize := 64;
+                      else Message(asmr_e_unable_to_determine_reference_size);
+                    end;
+                  end;
+                end;
+              end;
             msiMemRegx32y64:
               begin
                 for j := 1 to ops do
@@ -558,6 +573,21 @@ begin
                   end;
                 end;
               end;
+            msiMemRegx32y64z128:
+              begin
+                for j := 1 to ops do
+                begin
+                  if operands[j].Opr.Typ = OPR_REGISTER then
+                  begin
+                    case getsubreg(operands[j].opr.reg) of
+                      R_SUBMMX: memrefsize := 32;
+                      R_SUBMMY: memrefsize := 64;
+                      R_SUBMMZ: memrefsize := 128;
+                      else Message(asmr_e_unable_to_determine_reference_size);
+                    end;
+                  end;
+                end;
+              end;
            msiMemRegx64y128:
               begin
                 for j := 1 to ops do
@@ -712,7 +742,7 @@ begin
             msiMultiple:
               ;
             else
-              Internalerror(2019081016);
+              Internalerror(2020111001);
           end;
 
           if memrefsize > -1 then
@@ -1402,6 +1432,51 @@ end;
 
 
 procedure Tx86Instruction.SetInstructionOpsize;
+
+  function CheckSSEAVX: Boolean;
+  var
+    i: integer;
+    bBroadcastMemRef: boolean;
+  begin
+    Result := False;
+
+    with MemRefInfo(opcode) do
+    begin
+      if (ExistsSSEAVX) then
+      begin
+        bBroadcastMemRef := false;
+        for i := 1 to ops do
+         bBroadcastMemRef := bBroadcastMemRef or ((tx86operand(operands[i]).vopext and OTVE_VECTOR_BCST) = OTVE_VECTOR_BCST);
+
+        if bBroadcastMemRef then
+        begin
+          opsize := S_NO;
+          result := true;
+        end
+        else
+        begin
+          if MemRefSize in MemRefMultiples - [msiVMemMultiple] then
+          begin
+            case ops of
+              2: begin
+                   opsize:=tx86operand(operands[1]).opsize;
+                   result := true;
+                 end;
+              3: begin
+                   if (tx86operand(operands[1]).opr.typ <> OPR_CONSTANT) then
+                    opsize:=tx86operand(operands[1]).opsize
+                     else opsize:=tx86operand(operands[2]).opsize;
+                   result := true;
+                 end;
+            end;
+          end;
+        end;
+      end;
+    end;
+  end;
+
+var
+  isBCastMemRef: boolean;
 begin
   if opsize<>S_NO then
    exit;
@@ -1422,78 +1497,91 @@ begin
         else
           opsize:=tx86operand(operands[1]).opsize;
       end;
-    2 :
-      begin
-        case opcode of
-          A_MOVZX,A_MOVSX :
-            begin
-              if tx86operand(operands[1]).opsize=S_NO then
-                begin
-                  tx86operand(operands[1]).opsize:=S_B;
-                  if (m_delphi in current_settings.modeswitches) then
-                    Message(asmr_w_unable_to_determine_reference_size_using_byte)
-                  else
-                    Message(asmr_e_unable_to_determine_reference_size);
-                end;
-              case tx86operand(operands[1]).opsize of
-                S_W :
-                  case tx86operand(operands[2]).opsize of
-                    S_L :
-                      opsize:=S_WL;
-{$ifdef x86_64}
-                    S_Q :
-                      opsize:=S_WQ;
-{$endif}
+    2 : begin
+          case opcode of
+            A_MOVZX,A_MOVSX :
+              begin
+                if tx86operand(operands[1]).opsize=S_NO then
+                  begin
+                    tx86operand(operands[1]).opsize:=S_B;
+                    if (m_delphi in current_settings.modeswitches) then
+                      Message(asmr_w_unable_to_determine_reference_size_using_byte)
                     else
-                      ;
+                      Message(asmr_e_unable_to_determine_reference_size);
                   end;
-                S_B :
-                  begin
+                case tx86operand(operands[1]).opsize of
+                  S_W :
                     case tx86operand(operands[2]).opsize of
-                      S_W :
-                        opsize:=S_BW;
                       S_L :
-                        opsize:=S_BL;
-{$ifdef x86_64}
+                        opsize:=S_WL;
+  {$ifdef x86_64}
                       S_Q :
-                        opsize:=S_BQ;
-{$endif}
+                        opsize:=S_WQ;
+  {$endif}
                       else
                         ;
                     end;
-                  end;
-                else
-                  ;
+                  S_B :
+                    begin
+                      case tx86operand(operands[2]).opsize of
+                        S_W :
+                          opsize:=S_BW;
+                        S_L :
+                          opsize:=S_BL;
+  {$ifdef x86_64}
+                        S_Q :
+                          opsize:=S_BQ;
+  {$endif}
+                        else
+                          ;
+                      end;
+                    end;
+                  else
+                    ;
+                end;
               end;
-            end;
-          A_MOVSS,
-          A_VMOVSS,
-          A_MOVD : { movd is a move from a mmx register to a
-                     32 bit register or memory, so no opsize is correct here PM }
-            exit;
-          A_MOVQ :
-            opsize:=S_IQ;
-          A_CVTSI2SS,
-          A_CVTSI2SD,
-          A_OUT :
-            opsize:=tx86operand(operands[1]).opsize;
-          else
-            opsize:=tx86operand(operands[2]).opsize;
+            A_MOVSS,
+            A_VMOVSS,
+            A_MOVD : { movd is a move from a mmx register to a
+                       32 bit register or memory, so no opsize is correct here PM }
+              exit;
+            A_MOVQ :
+              opsize:=S_IQ;
+            //A_VCVTPD2DQ,
+            //A_VCVTPD2PS,
+            //A_VCVTTPD2DQ,
+            //A_VCVTPD2UDQ,
+            //A_VCVTQQ2PS,
+            //A_VCVTTPD2UDQ,
+            //A_VCVTUQQ2PS,
+
+            A_OUT :
+              opsize:=tx86operand(operands[1]).opsize;
+            else
+             if not CheckSSEAVX then
+              opsize:=tx86operand(operands[2]).opsize;
+          end;
         end;
-      end;
     3 :
-      begin
-        case opcode of
-          A_VCVTSI2SS,
-          A_VCVTSI2SD:
-            opsize:=tx86operand(operands[1]).opsize;
-        else
-          opsize:=tx86operand(operands[ops]).opsize;
+        begin
+          //case opcode of
+            //A_VCVTSI2SS,
+            //A_VCVTSI2SD,
+            //A_VCVTUSI2SS,
+            //A_VCVTUSI2SD:
+            //  iops:=tx86operand(operands[1]).opsize;
+            //A_VFPCLASSPD,
+            //A_VFPCLASSPS:
+            //  iops:=tx86operand(operands[2]).opsize;
+            //else
+            begin
+              if not CheckSSEAVX then
+               opsize:=tx86operand(operands[ops]).opsize;
+            end;
+          //end;
         end;
-      end;
     4 :
         opsize:=tx86operand(operands[ops]).opsize;
-
   end;
 end;
 
@@ -1988,7 +2076,17 @@ begin
                                begin
                                  s:=s+'reg';
                                  addsize:=true;
+                               end
+                             else
+                               if getregtype(opr.reg)=R_ADDRESSREGISTER then
+                               begin
+                                 // 14102020 TG TODO CHECK
+                                 if (opr.reg >= NR_K0) and (opr.reg >= NR_K7) then
+                                 begin
+                                   s:=s+'k' + regnr;
+                                 end;
                                end;
+
                            end;
                OPR_LOCAL,
             OPR_REFERENCE: begin

+ 2 - 0
compiler/x86/rax86att.pas

@@ -1041,6 +1041,8 @@ Implementation
                        actopsize:=att_sizefpuintsuffix[sufidx]
                       else if gas_needsuffix[actopcode]=attsufMM then
                        actopsize:=att_sizemmsuffix[sufidx]
+                      else if gas_needsuffix[actopcode]=attsufMMX then
+                       actopsize:=att_sizemmXsuffix[sufidx]
                       else
                        actopsize:=att_sizesuffix[sufidx];
                       { only accept suffix from the same category that the opcode belongs to }

+ 86 - 58
compiler/x86/x86ins.dat

@@ -4158,7 +4158,7 @@ ymmreg_mz,mem128                          \333\350\362\364\370\1\xE6\110
 ymmreg_mz,xmmreg                          \333\350\362\364\370\1\xE6\110            AVX,SANDYBRIDGE
 ymmreg_mz,bmem32                          \333\350\364\370\1\xE6\110                AVX512,BCST4,THV
 zmmreg_mz,mem256                          \333\350\351\370\1\xE6\110                AVX512,THV
-zmmreg_mz,ymmreg_er                       \333\350\351\370\1\xE6\110                AVX512
+zmmreg_mz,ymmreg                          \333\350\351\370\1\xE6\110                AVX512
 zmmreg_mz,bmem32                          \333\350\351\370\1\xE6\110                AVX512,BCST8,THV
 
 
@@ -4174,10 +4174,13 @@ zmmreg_mz,bmem32                          \350\351\370\1\x5B\110
 zmmreg_mz,zmmreg_er                       \350\351\370\1\x5B\110                    AVX512
 
 
-[VCVTPD2DQ,vcvtpd2dqM]
+; VCVTPD2DQ xmmreg_mz,mem256 must come first - map MemRefSize 256bits correct
+;                                              map all other MemrefSize (without broasdcast MemRef) to xmmreg, xmmrm
+[VCVTPD2DQ,vcvtpd2dqN]
 (Ch_Wop2, Ch_Rop1)
+xmmreg_mz,mem256                          \334\350\352\362\364\370\1\xE6\110        AVX,SANDYBRIDGE,TFV
 xmmreg_mz,xmmrm                           \334\350\352\362\370\1\xE6\110            AVX,SANDYBRIDGE,TFV
-xmmreg_mz,ymmrm                           \334\350\352\362\364\370\1\xE6\110        AVX,SANDYBRIDGE,TFV
+xmmreg_mz,ymmreg                           \334\350\352\362\364\370\1\xE6\110       AVX,SANDYBRIDGE
 xmmreg_mz,bmem64                          \334\350\352\370\1\xE6\110                AVX512,BCST2,TFV
 xmmreg_mz,bmem64                          \334\350\352\364\370\1\xE6\110            AVX512,BCST4,TFV
 
@@ -4188,7 +4191,7 @@ ymmreg_mz,zmmreg_er                       \334\350\351\352\370\1\xE6\110
 
 ; VCVTPD2PS xmmreg_mz,mem256 must come first - map MemRefSize 256bits correct
 ;                                              map all other MemrefSize (without broasdcast MemRef) to xmmreg, xmmrm
-[VCVTPD2PS,vcvtpd2psM]
+[VCVTPD2PS,vcvtpd2psN]
 (Ch_Wop2, Ch_Rop1)
 xmmreg_mz,mem256                          \350\352\361\362\364\370\1\x5A\110        AVX,SANDYBRIDGE,TFV
 xmmreg_mz,ymmreg                          \350\352\361\362\364\370\1\x5A\110        AVX,SANDYBRIDGE
@@ -4258,15 +4261,15 @@ xmmreg_mz,xmmreg,xmmreg_er                \334\350\352\362\370\1\x5A\75\120
 
 [VCVTSI2SD,vcvtsi2sdX]
 (Ch_Wop3, Ch_Rop2, Ch_Rop1)
-xmmreg,xmmreg_er,reg32                    \334\350\362\370\1\x2A\75\120             AVX,SANDYBRIDGE,SD
+xmmreg,xmmreg,reg32                       \334\350\362\370\1\x2A\75\120             AVX,SANDYBRIDGE,SD
 xmmreg,xmmreg,mem32                       \334\350\362\370\1\x2A\75\120             AVX,SANDYBRIDGE,SD,T1S
 xmmreg,xmmreg_er,reg64                    \334\350\352\362\363\370\1\x2A\75\120     AVX,SANDYBRIDGE,X86_64
-xmmreg,xmmreg,mem64                       \334\350\352\362\363\370\1\x2A\75\120     AVX,SANDYBRIDGE,X86_64,T1S
+xmmreg,xmmreg_er,mem64                    \334\350\352\362\363\370\1\x2A\75\120     AVX,SANDYBRIDGE,X86_64,T1S
 
 
 [VCVTSI2SS,vcvtsi2ssX]
 (Ch_Wop3, Ch_Rop2, Ch_Rop1)
-xmmreg,xmmreg_er,reg32                    \333\350\362\370\1\x2A\75\120             AVX,SANDYBRIDGE,SD
+xmmreg,xmmreg,reg32                       \333\350\362\370\1\x2A\75\120             AVX,SANDYBRIDGE,SD
 xmmreg,xmmreg,mem32                       \333\350\362\370\1\x2A\75\120             AVX,SANDYBRIDGE,SD,T1S
 xmmreg,xmmreg_er,reg64                    \333\350\352\362\363\370\1\x2A\75\120     AVX,SANDYBRIDGE,X86_64
 xmmreg,xmmreg_er,mem64                    \333\350\352\362\363\370\1\x2A\75\120     AVX,SANDYBRIDGE,X86_64,T1S
@@ -4287,7 +4290,7 @@ reg64,xmmreg_er                           \333\350\352\362\363\370\1\x2D\110
 
 ; VCVTTPD2DQ xmmreg_mz,mem256 must come first - map MemRefSize 256bits correct
 ;                                               map all other MemrefSize (without broasdcast MemRef) to xmmreg, xmmrm
-[VCVTTPD2DQ,vcvttpd2dqM]
+[VCVTTPD2DQ,vcvttpd2dqN]
 (Ch_Wop2, Ch_Rop1)
 xmmreg_mz,mem256                          \350\352\361\362\364\370\1\xE6\110        AVX,SANDYBRIDGE,AVX512,TFV
 xmmreg_mz,ymmreg                          \350\352\361\362\364\370\1\xE6\110        AVX,SANDYBRIDGE
@@ -4376,7 +4379,7 @@ xmmrm,ymmreg,imm8                    \361\362\364\372\1\x19\101\26        AVX,SA
 (Ch_All)
 mem32,xmmreg,imm8                         \350\361\362\372\1\x17\101\26             AVX,SANDYBRIDGE,T1S
 reg32,xmmreg,imm8                         \350\361\362\372\1\x17\101\26             AVX,SANDYBRIDGE
-reg64,xmmreg,imm8                         \350\361\372\1\x17\101\26                 AVX512
+reg64,xmmreg,imm8                         \350\361\362\372\1\x17\101\26             AVX512
 
 
 
@@ -5479,10 +5482,12 @@ ymmreg,ymmreg,ymmrm                  \361\362\364\371\1\x09\75\120        AVX2
 
 [VPSLLD]
 (Ch_Rop1, Ch_Rop2, Ch_Wop3)
-xmmreg_mz,xmmrm,imm8                      \350\361\362\370\1\x72\74\216\26          AVX,SANDYBRIDGE,TFV
+xmmreg_mz,xmmreg,imm8                     \350\361\362\370\1\x72\74\216\26          AVX,SANDYBRIDGE
+xmmreg_mz,mem128,imm8                     \350\361\370\1\x72\74\216\26              AVX512,TFV
 xmmreg_mz,bmem32,imm8                     \350\361\370\1\x72\74\216\26              AVX512,TFV
 xmmreg_mz,xmmreg,xmmrm                    \350\361\362\370\1\xF2\75\120             AVX,SANDYBRIDGE,TMEM128
-ymmreg_mz,ymmrm,imm8                      \350\361\362\364\370\1\x72\74\216\26      AVX2,TFV
+ymmreg_mz,ymmreg,imm8                     \350\361\362\364\370\1\x72\74\216\26      AVX2
+ymmreg_mz,mem256,imm8                     \350\361\364\370\1\x72\74\216\26          AVX512,TFV
 ymmreg_mz,bmem32,imm8                     \350\361\364\370\1\x72\74\216\26          AVX512,TFV
 ymmreg_mz,ymmreg,xmmrm                    \350\361\362\364\370\1\xF2\75\120         AVX2,TMEM128
 zmmreg_mz,zmmreg,xmmrm                    \350\351\361\370\1\xF2\75\120             AVX512,TMEM128
@@ -5503,10 +5508,12 @@ zmmreg,zmmreg,imm8                        \350\351\361\370\1\x73\74\217\26
 [VPSLLQ]
 (Ch_Rop1, Ch_Rop2, Ch_Wop3)
 xmmreg_mz,xmmreg,xmmrm                    \350\352\361\362\370\1\xF3\75\120         AVX,SANDYBRIDGE,TMEM128
-xmmreg_mz,xmmrm,imm8                      \350\352\361\362\370\1\x73\74\216\26      AVX,SANDYBRIDGE,TFV
+xmmreg_mz,xmmreg,imm8                     \350\352\361\362\370\1\x73\74\216\26      AVX,SANDYBRIDGE,TFV
+xmmreg_mz,mem128,imm8                     \350\352\361\370\1\x73\74\216\26          AVX512,TFV
 xmmreg_mz,bmem64,imm8                     \350\352\361\370\1\x73\74\216\26          AVX512,TFV
 ymmreg_mz,ymmreg,xmmrm                    \350\352\361\362\364\370\1\xF3\75\120     AVX2,TMEM128
-ymmreg_mz,ymmrm,imm8                      \350\352\361\362\364\370\1\x73\74\216\26  AVX2,TFV
+ymmreg_mz,ymmreg,imm8                     \350\352\361\362\364\370\1\x73\74\216\26  AVX2
+ymmreg_mz,mem256,imm8                     \350\352\361\364\370\1\x73\74\216\26      AVX512,TFV
 ymmreg_mz,bmem64,imm8                     \350\352\361\364\370\1\x73\74\216\26      AVX512,TFV
 zmmreg_mz,zmmreg,xmmrm                    \350\351\352\361\370\1\xF3\75\120         AVX512,TMEM128
 zmmreg_mz,zmmrm,imm8                      \350\351\352\361\370\1\x73\74\216\26      AVX512,TFV
@@ -5516,19 +5523,23 @@ zmmreg_mz,bmem64,imm8                     \350\351\352\361\370\1\x73\74\216\26
 [VPSLLW]
 (Ch_Rop1, Ch_Rop2, Ch_Wop3)
 xmmreg_mz,xmmreg,xmmrm                    \350\361\362\370\1\xF1\75\120             AVX,SANDYBRIDGE,TMEM128
-xmmreg_mz,xmmrm,imm8                      \350\361\362\370\1\x71\74\216\26          AVX,SANDYBRIDGE,TFVM
+xmmreg_mz,xmmreg,imm8                     \350\361\362\370\1\x71\74\216\26          AVX,SANDYBRIDGE
+xmmreg_mz,mem128,imm8                     \350\361\370\1\x71\74\216\26              AVX512,TFVM
 ymmreg_mz,ymmreg,xmmrm                    \350\361\362\364\370\1\xF1\75\120         AVX2,TMEM128
-ymmreg_mz,ymmrm,imm8                      \350\361\362\364\370\1\x71\74\216\26      AVX2,TFVM
+ymmreg_mz,ymmreg,imm8                     \350\361\362\364\370\1\x71\74\216\26      AVX2
+ymmreg_mz,mem256,imm8                     \350\361\364\370\1\x71\74\216\26          AVX512,TFVM
 zmmreg_mz,zmmreg,xmmrm                    \350\351\361\370\1\xF1\75\120             AVX512,TMEM128
 zmmreg_mz,zmmrm,imm8                      \350\351\361\370\1\x71\74\216\26          AVX512,TFVM
 
 
 [VPSRAD]
 (Ch_Rop1, Ch_Rop2, Ch_Wop3)
-xmmreg_mz,xmmrm,imm8                      \350\361\362\370\1\x72\74\214\26          AVX,SANDYBRIDGE,TFV
+xmmreg_mz,xmmreg,imm8                     \350\361\362\370\1\x72\74\214\26          AVX,SANDYBRIDGE
+xmmreg_mz,mem128,imm8                     \350\361\370\1\x72\74\214\26              AVX512,TFV
 xmmreg_mz,bmem32,imm8                     \350\361\370\1\x72\74\214\26              AVX512,TFV
 xmmreg_mz,xmmreg,xmmrm                    \350\361\362\370\1\xE2\75\120             AVX,SANDYBRIDGE,TMEM128
-ymmreg_mz,ymmrm,imm8                      \350\361\362\364\370\1\x72\74\214\26      AVX2,TFV
+ymmreg_mz,ymmreg,imm8                     \350\361\362\364\370\1\x72\74\214\26      AVX2
+ymmreg_mz,mem256,imm8                     \350\361\364\370\1\x72\74\214\26          AVX512,TFV
 ymmreg_mz,bmem32,imm8                     \350\361\364\370\1\x72\74\214\26          AVX512,TFV
 ymmreg_mz,ymmreg,xmmrm                    \350\361\362\364\370\1\xE2\75\120         AVX2,TMEM128
 zmmreg_mz,zmmreg,xmmrm                    \350\351\361\370\1\xE2\75\120             AVX512,TMEM128
@@ -5538,9 +5549,11 @@ zmmreg_mz,bmem32,imm8                     \350\351\361\370\1\x72\74\214\26
 
 [VPSRAW]
 (Ch_Rop1, Ch_Rop2, Ch_Wop3)
-xmmreg_mz,xmmrm,imm8                      \350\361\362\370\1\x71\74\214\26          AVX,SANDYBRIDGE,TFVM
+xmmreg_mz,xmmreg,imm8                     \350\361\362\370\1\x71\74\214\26          AVX,SANDYBRIDGE
+xmmreg_mz,mem128,imm8                     \350\361\370\1\x71\74\214\26              AVX512,TFVM
 xmmreg_mz,xmmreg,xmmrm                    \350\361\362\370\1\xE1\75\120             AVX,SANDYBRIDGE,TMEM128
-ymmreg_mz,ymmrm,imm8                      \350\361\362\364\370\1\x71\74\214\26      AVX2,TFVM
+ymmreg_mz,ymmreg,imm8                     \350\361\362\364\370\1\x71\74\214\26      AVX2
+ymmreg_mz,mem256,imm8                     \350\361\364\370\1\x71\74\214\26          AVX512,TFVM
 ymmreg_mz,ymmreg,xmmrm                    \350\361\362\364\370\1\xE1\75\120         AVX2,TMEM128
 zmmreg_mz,zmmreg,xmmrm                    \350\351\361\370\1\xE1\75\120             AVX512,TMEM128
 zmmreg_mz,zmmrm,imm8                      \350\351\361\370\1\x71\74\214\26          AVX512,TFVM
@@ -5548,11 +5561,13 @@ zmmreg_mz,zmmrm,imm8                      \350\351\361\370\1\x71\74\214\26
 
 [VPSRLD]
 (Ch_Rop1, Ch_Rop2, Ch_Wop3)
-xmmreg_mz,xmmrm,imm8                      \350\361\362\370\1\x72\74\212\26          AVX,SANDYBRIDGE,TFV
+xmmreg_mz,xmmreg,imm8                     \350\361\362\370\1\x72\74\212\26          AVX,SANDYBRIDGE
+xmmreg_mz,mem128,imm8                     \350\361\370\1\x72\74\212\26              AVX512,TFV
 xmmreg_mz,bmem32,imm8                     \350\361\370\1\x72\74\212\26              AVX512,TFV
 xmmreg_mz,xmmreg,xmmrm                    \350\361\362\370\1\xD2\75\120             AVX,SANDYBRIDGE,TMEM128
 ymmreg_mz,ymmreg,xmmrm                    \350\361\362\364\370\1\xD2\75\120         AVX2,TMEM128
-ymmreg_mz,ymmrm,imm8                      \350\361\362\364\370\1\x72\74\212\26      AVX2,TFV
+ymmreg_mz,ymmreg,imm8                     \350\361\362\364\370\1\x72\74\212\26      AVX2,TFV
+ymmreg_mz,mem256,imm8                     \350\361\364\370\1\x72\74\212\26      AVX2,TFV
 ymmreg_mz,bmem32,imm8                     \350\361\364\370\1\x72\74\212\26          AVX512,TFV
 zmmreg_mz,zmmreg,xmmrm                    \350\351\361\370\1\xD2\75\120             AVX512,TMEM128
 zmmreg_mz,zmmrm,imm8                      \350\351\361\370\1\x72\74\212\26          AVX512,TFV
@@ -5572,9 +5587,11 @@ zmmreg,zmmrm,imm8                         \350\351\361\370\1\x73\74\213\26
 [VPSRLQ]
 (Ch_Rop1, Ch_Rop2, Ch_Wop3)
 xmmreg_mz,xmmreg,xmmrm                    \350\352\361\362\370\1\xD3\75\120         AVX,SANDYBRIDGE,TMEM128
-xmmreg_mz,xmmrm,imm8                      \350\352\361\362\370\1\x73\74\212\26      AVX,SANDYBRIDGE,TFV
+xmmreg_mz,xmmreg,imm8                     \350\352\361\362\370\1\x73\74\212\26      AVX,SANDYBRIDGE
+xmmreg_mz,mem128,imm8                     \350\352\361\370\1\x73\74\212\26          AVX512,TFV
 xmmreg_mz,bmem64,imm8                     \350\352\361\370\1\x73\74\212\26          AVX512,TFV
-ymmreg_mz,ymmrm,imm8                      \350\352\361\362\364\370\1\x73\74\212\26  AVX2,TFV
+ymmreg_mz,ymmreg,imm8                     \350\352\361\362\364\370\1\x73\74\212\26  AVX2
+ymmreg_mz,mem256,imm8                     \350\352\361\364\370\1\x73\74\212\26      AVX512,TFV
 ymmreg_mz,bmem64,imm8                     \350\352\361\364\370\1\x73\74\212\26      AVX512,TFV
 ymmreg_mz,ymmreg,xmmrm                    \350\352\361\362\364\370\1\xD3\75\120     AVX2,TMEM128
 zmmreg_mz,zmmreg,xmmrm                    \350\351\352\361\370\1\xD3\75\120         AVX512,TMEM128
@@ -5584,9 +5601,11 @@ zmmreg_mz,bmem64,imm8                     \350\351\352\361\370\1\x73\74\212\26
 
 [VPSRLW]
 (Ch_Rop1, Ch_Rop2, Ch_Wop3)
-xmmreg_mz,xmmrm,imm8                      \350\361\362\370\1\x71\74\212\26          AVX,SANDYBRIDGE,TFVM
+xmmreg_mz,xmmreg,imm8                     \350\361\362\370\1\x71\74\212\26          AVX,SANDYBRIDGE
+xmmreg_mz,mem128,imm8                     \350\361\370\1\x71\74\212\26              AVX512,TFVM
 xmmreg_mz,xmmreg,xmmrm                    \350\361\362\370\1\xD1\75\120             AVX,SANDYBRIDGE,TMEM128
-ymmreg_mz,ymmrm,imm8                      \350\361\362\364\370\1\x71\74\212\26      AVX2,TFVM
+ymmreg_mz,ymmreg,imm8                     \350\361\362\364\370\1\x71\74\212\26      AVX2
+ymmreg_mz,mem256,imm8                     \350\361\364\370\1\x71\74\212\26          AVX512,TFVM
 ymmreg_mz,ymmreg,xmmrm                    \350\361\362\364\370\1\xD1\75\120         AVX2,TMEM128
 zmmreg_mz,zmmreg,xmmrm                    \350\351\361\370\1\xD1\75\120             AVX512,TMEM128
 zmmreg_mz,zmmrm,imm8                      \350\351\361\370\1\x71\74\212\26          AVX512,TFVM
@@ -6779,7 +6798,7 @@ zmmreg_mz,zmmreg,bmem32                   \350\351\361\371\1\xBC\75\120
 
 [VFNMADD231SD]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
-xmmreg,xmmreg,xmmrm                       \337\361\362\363\371\1\xBD\75\120         FMA,T1S
+xmmreg,xmmreg,xmmrm                       \337\350\352\361\362\363\371\1\xBD\75\120 FMA,T1S
 xmmreg_mz,xmmreg,xmmreg_er                \350\352\361\362\363\371\1\xBD\75\120     FMA
 
 [VFNMADD231SS]
@@ -7305,7 +7324,7 @@ zmmreg_mz,mem512                          \350\351\352\361\370\1\x7B\110
 zmmreg_mz,bmem64                          \350\351\352\361\370\1\x7B\110            AVX512,TFV
 zmmreg_mz,zmmreg_er                       \350\351\352\361\370\1\x7B\110            AVX512
 
-[VCVTPD2UDQ]
+[VCVTPD2UDQ, vcvtpd2udqN]
 (Ch_Wop2, Ch_Rop1)
 xmmreg_mz,mem128                          \350\352\370\1\x79\110                    AVX512,TFV
 xmmreg_mz,mem256                          \350\352\364\370\1\x79\110                AVX512,TFV
@@ -7369,7 +7388,7 @@ zmmreg_mz,mem512                          \333\350\351\352\370\1\xE6\110
 zmmreg_mz,bmem64                          \333\350\351\352\370\1\xE6\110            AVX512,TFV
 zmmreg_mz,zmmreg_er                       \333\350\351\352\370\1\xE6\110            AVX512
 
-[VCVTQQ2PS]
+[VCVTQQ2PS,vcvtqq2psN]
 (Ch_Wop2, Ch_Rop1)
 xmmreg_mz,mem128                          \350\352\370\1\x5B\110                    AVX512,TFV
 xmmreg_mz,mem256                          \350\352\364\370\1\x5B\110                AVX512,TFV
@@ -7405,7 +7424,7 @@ zmmreg_mz,mem512                          \350\351\352\361\370\1\x7A\110
 zmmreg_mz,bmem64                          \350\351\352\361\370\1\x7A\110            AVX512,TFV
 zmmreg_mz,zmmreg_sae                      \350\351\352\361\370\1\x7A\110            AVX512
 
-[VCVTTPD2UDQ]
+[VCVTTPD2UDQ,vcvttpd2udqN]
 (Ch_Wop2, Ch_Rop1)
 xmmreg_mz,mem128                          \350\352\370\1\x78\110                    AVX512,TFV
 xmmreg_mz,mem256                          \350\352\364\370\1\x78\110                AVX512,TFV
@@ -7482,7 +7501,7 @@ ymmreg_mz,xmmrm                           \333\350\364\370\1\x7A\110
 ymmreg_mz,bmem32                          \333\350\364\370\1\x7A\110                AVX512,BCST4,THV
 zmmreg_mz,mem256                          \333\350\351\370\1\x7A\110                AVX512,THV
 zmmreg_mz,bmem32                          \333\350\351\370\1\x7A\110                AVX512,BCST8,THV
-zmmreg_mz,ymmreg_er                       \333\350\351\370\1\x7A\110                AVX512
+zmmreg_mz,ymmreg                          \333\350\351\370\1\x7A\110                AVX512
 
 [VCVTUDQ2PS]
 (Ch_Wop2, Ch_Rop1)
@@ -7504,7 +7523,7 @@ zmmreg_mz,mem512                          \333\350\351\352\370\1\x7A\110
 zmmreg_mz,bmem64                          \333\350\351\352\370\1\x7A\110            AVX512,TFV
 zmmreg_mz,zmmreg_er                       \333\350\351\352\370\1\x7A\110            AVX512
 
-[VCVTUQQ2PS]
+[VCVTUQQ2PS,vcvtuqq2psN]
 (Ch_Wop2, Ch_Rop1)
 xmmreg_mz,mem128                          \334\350\352\370\1\x7A\110                AVX512,TFV
 xmmreg_mz,mem256                          \334\350\352\364\370\1\x7A\110            AVX512,TFV
@@ -7516,12 +7535,13 @@ ymmreg_mz,mem512                          \334\350\351\352\370\1\x7A\110
 ymmreg_mz,bmem64                          \334\350\351\352\370\1\x7A\110            AVX512,BCST8,TFV
 ymmreg_mz,zmmreg_er                       \334\350\351\352\370\1\x7A\110            AVX512
 
-[VCVTUSI2SD]
+[VCVTUSI2SD,vcvtusi2sdX]
 (Ch_Wop2, Ch_Rop1)
-xmmreg,xmmreg_er,rm64                     \334\350\352\370\1\x7B\75\120                AVX512,T1S
+xmmreg,xmmreg_er,mem64                     \334\350\352\370\1\x7B\75\120               AVX512,T1S
+xmmreg,xmmreg_er,reg64                     \334\350\352\370\1\x7B\75\120               AVX512
 xmmreg,xmmreg_er,rm32                     \334\350\370\1\x7B\75\120                    AVX512,T1S
 
-[VCVTUSI2SS]
+[VCVTUSI2SS,vcvtusi2ssX]
 (Ch_Wop2, Ch_Rop1)
 xmmreg,xmmreg_er,rm64                     \333\350\352\370\1\x7B\75\120                AVX512,T1S
 xmmreg,xmmreg_er,rm32                     \333\350\370\1\x7B\75\120                    AVX512,T1S
@@ -7641,22 +7661,30 @@ xmmreg_mz,xmmreg,mem32,imm8               \350\361\372\1\x55\75\120\27
 xmmreg_mz,xmmreg,xmmreg_sae,imm8          \350\361\372\1\x55\75\120\27              AVX512
 
 
-[VFPCLASSPD]
+; VFPCLASSPD kreg_m,mem256 and mem512 must come first - map MemRefSize 256,512bits correct
+;                                              map all other MemrefSize (without broasdcast MemRef) to kreg_m, xmmrm
+[VFPCLASSPD,vfpclasspdX]
 (Ch_All)
+kreg_m,mem256,imm8                        \350\352\361\364\372\1\x66\110\26         AVX512,TFV
+kreg_m,mem512,imm8                        \350\351\352\361\372\1\x66\110\26         AVX512,TFV
 kreg_m,xmmrm,imm8                         \350\352\361\372\1\x66\110\26             AVX512,TFV
 kreg_m,bmem64,imm8                        \350\352\361\372\1\x66\110\26             AVX512,BCST2,TFV
-kreg_m,ymmrm,imm8                         \350\352\361\364\372\1\x66\110\26         AVX512,TFV
+kreg_m,ymmreg,imm8                        \350\352\361\364\372\1\x66\110\26         AVX512
 kreg_m,bmem64,imm8                        \350\352\361\364\372\1\x66\110\26         AVX512,BCST4,TFV
-kreg_m,zmmrm,imm8                         \350\351\352\361\372\1\x66\110\26         AVX512,TFV
+kreg_m,zmmreg,imm8                        \350\351\352\361\372\1\x66\110\26         AVX512
 kreg_m,bmem64,imm8                        \350\351\352\361\372\1\x66\110\26         AVX512,BCST8,TFV
 
-[VFPCLASSPS]
+; VFPCLASSPS kreg_m,mem256 and mem512 must come first - map MemRefSize 256,512bits correct
+;                                              map all other MemrefSize (without broasdcast MemRef) to kreg_m, xmmrm
+[VFPCLASSPS,vfpclasspsX]
 (Ch_All)
+kreg_m,mem256,imm8                        \350\361\364\372\1\x66\110\26             AVX512,TFV
+kreg_m,mem512,imm8                        \350\351\361\372\1\x66\110\26             AVX512,TFV
 kreg_m,xmmrm,imm8                         \350\361\372\1\x66\110\26                 AVX512,TFV
 kreg_m,bmem32,imm8                        \350\361\372\1\x66\110\26                 AVX512,BCST4,TFV
-kreg_m,ymmrm,imm8                         \350\361\364\372\1\x66\110\26             AVX512,TFV
+kreg_m,ymmreg,imm8                        \350\361\364\372\1\x66\110\26             AVX512
 kreg_m,bmem32,imm8                        \350\361\364\372\1\x66\110\26             AVX512,BCST8,TFV
-kreg_m,zmmrm,imm8                         \350\351\361\372\1\x66\110\26             AVX512,TFV
+kreg_m,zmmreg,imm8                        \350\351\361\372\1\x66\110\26             AVX512
 kreg_m,bmem32,imm8                        \350\351\361\372\1\x66\110\26             AVX512,BCST16,TFV
 
 [VFPCLASSSD]
@@ -8946,18 +8974,18 @@ zmmreg_mz,zmmreg,bmem64,imm8              \350\351\352\361\372\1\x43\75\120\27
 
 [VPCOMPRESSB]
 (Ch_All)
-mem128_m,xmmreg                           \350\361\371\1\x63\101                    AVX512,T1S
-mem256_m,ymmreg                           \350\361\364\371\1\x63\101                AVX512,T1S
-mem512_m,zmmreg                           \350\351\361\371\1\x63\101                AVX512,T1S
+mem128_m,xmmreg                           \350\361\371\1\x63\101                    AVX512,T1S8
+mem256_m,ymmreg                           \350\361\364\371\1\x63\101                AVX512,T1S8
+mem512_m,zmmreg                           \350\351\361\371\1\x63\101                AVX512,T1S8
 xmmreg_mz,xmmreg                          \350\361\371\1\x63\101                    AVX512
 ymmreg_mz,ymmreg                          \350\361\364\371\1\x63\101                AVX512
 zmmreg_mz,zmmreg                          \350\351\361\371\1\x63\101                AVX512
 
 [VPCOMPRESSW]
 (Ch_All)
-mem128_m,xmmreg                           \350\352\361\371\1\x63\101                AVX512,T1S
-mem256_m,ymmreg                           \350\352\361\364\371\1\x63\101            AVX512,T1S
-mem512_m,zmmreg                           \350\351\352\361\371\1\x63\101            AVX512,T1S
+mem128_m,xmmreg                           \350\352\361\371\1\x63\101                AVX512,T1S16
+mem256_m,ymmreg                           \350\352\361\364\371\1\x63\101            AVX512,T1S16
+mem512_m,zmmreg                           \350\351\352\361\371\1\x63\101            AVX512,T1S16
 xmmreg_mz,xmmreg                          \350\352\361\371\1\x63\101                AVX512
 ymmreg_mz,ymmreg                          \350\352\361\364\371\1\x63\101            AVX512
 zmmreg_mz,zmmreg                          \350\351\352\361\371\1\x63\101            AVX512
@@ -9000,21 +9028,21 @@ zmmreg_mz,zmmreg,bmem32                   \350\351\361\371\1\x53\75\120
 
 [VPEXPANDB]
 (Ch_All)
-mem128_m,xmmreg                           \350\361\371\1\x62\101                    AVX512,T1S
-mem256_m,ymmreg                           \350\361\364\371\1\x62\101                AVX512,T1S
-mem512_m,zmmreg                           \350\351\361\371\1\x62\101                AVX512,T1S
-xmmreg_mz,xmmreg                          \350\361\371\1\x62\101                    AVX512
-ymmreg_mz,ymmreg                          \350\361\364\371\1\x62\101                AVX512
-zmmreg_mz,zmmreg                          \350\351\361\371\1\x62\101                AVX512
+xmmreg_mz,mem128                          \350\361\371\1\x62\110                    AVX512,T1S8
+ymmreg_mz,mem256                          \350\361\364\371\1\x62\110                AVX512,T1S8
+zmmreg_mz,mem512                          \350\351\361\371\1\x62\110                AVX512,T1S8
+xmmreg_mz,xmmreg                          \350\361\371\1\x62\110                    AVX512
+ymmreg_mz,ymmreg                          \350\361\364\371\1\x62\110                AVX512
+zmmreg_mz,zmmreg                          \350\351\361\371\1\x62\110                AVX512
 
 [VPEXPANDW]
 (Ch_All)
-mem128_m,xmmreg                           \350\352\361\371\1\x62\101                AVX512,T1S
-mem256_m,ymmreg                           \350\352\361\364\371\1\x62\101            AVX512,T1S
-mem512_m,zmmreg                           \350\351\352\361\371\1\x62\101            AVX512,T1S
-xmmreg_mz,xmmreg                          \350\352\361\371\1\x62\101                AVX512
-ymmreg_mz,ymmreg                          \350\352\361\364\371\1\x62\101            AVX512
-zmmreg_mz,zmmreg                          \350\351\352\361\371\1\x62\101            AVX512
+xmmreg_mz,mem128                          \350\352\361\371\1\x62\110                AVX512,T1S16
+ymmreg_mz,mem256                          \350\352\361\364\371\1\x62\110            AVX512,T1S16
+zmmreg_mz,mem512                          \350\351\352\361\371\1\x62\110            AVX512,T1S16
+xmmreg_mz,xmmreg                          \350\352\361\371\1\x62\110                AVX512
+ymmreg_mz,ymmreg                          \350\352\361\364\371\1\x62\110            AVX512
+zmmreg_mz,zmmreg                          \350\351\352\361\371\1\x62\110            AVX512
 
 [VPOPCNTB]
 (Ch_All)

+ 11 - 11
compiler/x86_64/x8664ats.inc

@@ -777,8 +777,8 @@ attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
-attsufMM,
-attsufMM,
+attsufMMX,
+attsufMMX,
 attsufNONE,
 attsufNONE,
 attsufNONE,
@@ -789,7 +789,7 @@ attsufINT,
 attsufINT,
 attsufNONE,
 attsufNONE,
-attsufMM,
+attsufMMX,
 attsufNONE,
 attsufNONE,
 attsufNONE,
@@ -1197,14 +1197,17 @@ attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufMMX,
 attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufMMX,
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufMMX,
 attsufNONE,
 attsufNONE,
 attsufNONE,
@@ -1214,6 +1217,9 @@ attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufMMX,
+attsufINT,
+attsufINT,
 attsufNONE,
 attsufNONE,
 attsufNONE,
@@ -1231,14 +1237,8 @@ attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
-attsufNONE,
-attsufNONE,
-attsufNONE,
-attsufNONE,
-attsufNONE,
-attsufNONE,
-attsufNONE,
-attsufNONE,
+attsufINT,
+attsufINT,
 attsufNONE,
 attsufNONE,
 attsufNONE,

+ 1 - 1
compiler/x86_64/x8664att.inc

@@ -1197,7 +1197,7 @@
 'vcompresspd',
 'vcompressps',
 'vcvtpd2qq',
-'vcvtpd2udq',
+' vcvtpd2udq',
 'vcvtpd2uqq',
 'vcvtps2qq',
 'vcvtps2udq',

+ 1 - 1
compiler/x86_64/x8664nop.inc

@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86ins.dat }
-4214;
+4236;

+ 232 - 78
compiler/x86_64/x8664tab.inc

@@ -10734,7 +10734,7 @@
   (
     opcode  : A_VCVTDQ2PD;
     ops     : 2;
-    optypes : (ot_zmmreg_mz,ot_ymmreg_er,ot_none,ot_none);
+    optypes : (ot_zmmreg_mz,ot_ymmreg,ot_none,ot_none);
     code    : #219#232#233#248#1#230#72;
     flags   : [if_avx512]
   ),
@@ -10794,6 +10794,13 @@
     code    : #232#233#248#1#91#72;
     flags   : [if_avx512]
   ),
+  (
+    opcode  : A_VCVTPD2DQ;
+    ops     : 2;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits256,ot_none,ot_none);
+    code    : #220#232#234#242#244#248#1#230#72;
+    flags   : [if_avx,if_sandybridge,if_tfv]
+  ),
   (
     opcode  : A_VCVTPD2DQ;
     ops     : 2;
@@ -10804,9 +10811,9 @@
   (
     opcode  : A_VCVTPD2DQ;
     ops     : 2;
-    optypes : (ot_xmmreg_mz,ot_ymmrm,ot_none,ot_none);
+    optypes : (ot_xmmreg_mz,ot_ymmreg,ot_none,ot_none);
     code    : #220#232#234#242#244#248#1#230#72;
-    flags   : [if_avx,if_sandybridge,if_tfv]
+    flags   : [if_avx,if_sandybridge]
   ),
   (
     opcode  : A_VCVTPD2DQ;
@@ -11133,7 +11140,7 @@
   (
     opcode  : A_VCVTSI2SD;
     ops     : 3;
-    optypes : (ot_xmmreg,ot_xmmreg_er,ot_reg32,ot_none);
+    optypes : (ot_xmmreg,ot_xmmreg,ot_reg32,ot_none);
     code    : #220#232#242#248#1#42#61#80;
     flags   : [if_avx,if_sandybridge,if_sd]
   ),
@@ -11154,14 +11161,14 @@
   (
     opcode  : A_VCVTSI2SD;
     ops     : 3;
-    optypes : (ot_xmmreg,ot_xmmreg,ot_memory or ot_bits64,ot_none);
+    optypes : (ot_xmmreg,ot_xmmreg_er,ot_memory or ot_bits64,ot_none);
     code    : #220#232#234#242#243#248#1#42#61#80;
     flags   : [if_avx,if_sandybridge,if_x86_64,if_t1s]
   ),
   (
     opcode  : A_VCVTSI2SS;
     ops     : 3;
-    optypes : (ot_xmmreg,ot_xmmreg_er,ot_reg32,ot_none);
+    optypes : (ot_xmmreg,ot_xmmreg,ot_reg32,ot_none);
     code    : #219#232#242#248#1#42#61#80;
     flags   : [if_avx,if_sandybridge,if_sd]
   ),
@@ -11561,7 +11568,7 @@
     opcode  : A_VEXTRACTPS;
     ops     : 3;
     optypes : (ot_reg64,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
-    code    : #232#241#250#1#23#65#22;
+    code    : #232#241#242#250#1#23#65#22;
     flags   : [if_avx512]
   ),
   (
@@ -15382,9 +15389,16 @@
   (
     opcode  : A_VPSLLD;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#248#1#114#60#142#22;
-    flags   : [if_avx,if_sandybridge,if_tfv]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSLLD;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#248#1#114#60#142#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSLLD;
@@ -15403,9 +15417,16 @@
   (
     opcode  : A_VPSLLD;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#244#248#1#114#60#142#22;
-    flags   : [if_avx2,if_tfv]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSLLD;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#248#1#114#60#142#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSLLD;
@@ -15494,10 +15515,17 @@
   (
     opcode  : A_VPSLLQ;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#234#241#242#248#1#115#60#142#22;
     flags   : [if_avx,if_sandybridge,if_tfv]
   ),
+  (
+    opcode  : A_VPSLLQ;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#234#241#248#1#115#60#142#22;
+    flags   : [if_avx512,if_tfv]
+  ),
   (
     opcode  : A_VPSLLQ;
     ops     : 3;
@@ -15515,9 +15543,16 @@
   (
     opcode  : A_VPSLLQ;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#234#241#242#244#248#1#115#60#142#22;
-    flags   : [if_avx2,if_tfv]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSLLQ;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#234#241#244#248#1#115#60#142#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSLLQ;
@@ -15557,9 +15592,16 @@
   (
     opcode  : A_VPSLLW;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#248#1#113#60#142#22;
-    flags   : [if_avx,if_sandybridge,if_tfvm]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSLLW;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#248#1#113#60#142#22;
+    flags   : [if_avx512,if_tfvm]
   ),
   (
     opcode  : A_VPSLLW;
@@ -15571,9 +15613,16 @@
   (
     opcode  : A_VPSLLW;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#244#248#1#113#60#142#22;
-    flags   : [if_avx2,if_tfvm]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSLLW;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#248#1#113#60#142#22;
+    flags   : [if_avx512,if_tfvm]
   ),
   (
     opcode  : A_VPSLLW;
@@ -15592,9 +15641,16 @@
   (
     opcode  : A_VPSRAD;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#248#1#114#60#140#22;
-    flags   : [if_avx,if_sandybridge,if_tfv]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSRAD;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#248#1#114#60#140#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSRAD;
@@ -15613,9 +15669,16 @@
   (
     opcode  : A_VPSRAD;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#244#248#1#114#60#140#22;
-    flags   : [if_avx2,if_tfv]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSRAD;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#248#1#114#60#140#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSRAD;
@@ -15655,9 +15718,16 @@
   (
     opcode  : A_VPSRAW;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#248#1#113#60#140#22;
-    flags   : [if_avx,if_sandybridge,if_tfvm]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSRAW;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#248#1#113#60#140#22;
+    flags   : [if_avx512,if_tfvm]
   ),
   (
     opcode  : A_VPSRAW;
@@ -15669,9 +15739,16 @@
   (
     opcode  : A_VPSRAW;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#244#248#1#113#60#140#22;
-    flags   : [if_avx2,if_tfvm]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSRAW;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#248#1#113#60#140#22;
+    flags   : [if_avx512,if_tfvm]
   ),
   (
     opcode  : A_VPSRAW;
@@ -15697,9 +15774,16 @@
   (
     opcode  : A_VPSRLD;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#248#1#114#60#138#22;
-    flags   : [if_avx,if_sandybridge,if_tfv]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSRLD;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#248#1#114#60#138#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSRLD;
@@ -15725,10 +15809,17 @@
   (
     opcode  : A_VPSRLD;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#244#248#1#114#60#138#22;
     flags   : [if_avx2,if_tfv]
   ),
+  (
+    opcode  : A_VPSRLD;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#248#1#114#60#138#22;
+    flags   : [if_avx2,if_tfv]
+  ),
   (
     opcode  : A_VPSRLD;
     ops     : 3;
@@ -15802,9 +15893,16 @@
   (
     opcode  : A_VPSRLQ;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#234#241#242#248#1#115#60#138#22;
-    flags   : [if_avx,if_sandybridge,if_tfv]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSRLQ;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#234#241#248#1#115#60#138#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSRLQ;
@@ -15816,9 +15914,16 @@
   (
     opcode  : A_VPSRLQ;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#234#241#242#244#248#1#115#60#138#22;
-    flags   : [if_avx2,if_tfv]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSRLQ;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#234#241#244#248#1#115#60#138#22;
+    flags   : [if_avx512,if_tfv]
   ),
   (
     opcode  : A_VPSRLQ;
@@ -15858,9 +15963,16 @@
   (
     opcode  : A_VPSRLW;
     ops     : 3;
-    optypes : (ot_xmmreg_mz,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_xmmreg_mz,ot_xmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#248#1#113#60#138#22;
-    flags   : [if_avx,if_sandybridge,if_tfvm]
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPSRLW;
+    ops     : 3;
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#248#1#113#60#138#22;
+    flags   : [if_avx512,if_tfvm]
   ),
   (
     opcode  : A_VPSRLW;
@@ -15872,9 +15984,16 @@
   (
     opcode  : A_VPSRLW;
     ops     : 3;
-    optypes : (ot_ymmreg_mz,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_ymmreg_mz,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#242#244#248#1#113#60#138#22;
-    flags   : [if_avx2,if_tfvm]
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPSRLW;
+    ops     : 3;
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#248#1#113#60#138#22;
+    flags   : [if_avx512,if_tfvm]
   ),
   (
     opcode  : A_VPSRLW;
@@ -20206,7 +20325,7 @@
     opcode  : A_VFNMADD231SD;
     ops     : 3;
     optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
-    code    : #223#241#242#243#249#1#189#61#80;
+    code    : #223#232#234#241#242#243#249#1#189#61#80;
     flags   : [if_fma,if_t1s]
   ),
   (
@@ -22501,7 +22620,7 @@
   (
     opcode  : A_VCVTUDQ2PD;
     ops     : 2;
-    optypes : (ot_zmmreg_mz,ot_ymmreg_er,ot_none,ot_none);
+    optypes : (ot_zmmreg_mz,ot_ymmreg,ot_none,ot_none);
     code    : #219#232#233#248#1#122#72;
     flags   : [if_avx512]
   ),
@@ -22669,10 +22788,17 @@
   (
     opcode  : A_VCVTUSI2SD;
     ops     : 3;
-    optypes : (ot_xmmreg,ot_xmmreg_er,ot_rm_gpr or ot_bits64,ot_none);
+    optypes : (ot_xmmreg,ot_xmmreg_er,ot_memory or ot_bits64,ot_none);
     code    : #220#232#234#248#1#123#61#80;
     flags   : [if_avx512,if_t1s]
   ),
+  (
+    opcode  : A_VCVTUSI2SD;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg_er,ot_reg64,ot_none);
+    code    : #220#232#234#248#1#123#61#80;
+    flags   : [if_avx512]
+  ),
   (
     opcode  : A_VCVTUSI2SD;
     ops     : 3;
@@ -23135,6 +23261,20 @@
     code    : #232#241#250#1#85#61#80#23;
     flags   : [if_avx512]
   ),
+  (
+    opcode  : A_VFPCLASSPD;
+    ops     : 3;
+    optypes : (ot_kreg_m,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#234#241#244#250#1#102#72#22;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VFPCLASSPD;
+    ops     : 3;
+    optypes : (ot_kreg_m,ot_memory or ot_bits512,ot_immediate or ot_bits8,ot_none);
+    code    : #232#233#234#241#250#1#102#72#22;
+    flags   : [if_avx512,if_tfv]
+  ),
   (
     opcode  : A_VFPCLASSPD;
     ops     : 3;
@@ -23152,9 +23292,9 @@
   (
     opcode  : A_VFPCLASSPD;
     ops     : 3;
-    optypes : (ot_kreg_m,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_kreg_m,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#234#241#244#250#1#102#72#22;
-    flags   : [if_avx512,if_tfv]
+    flags   : [if_avx512]
   ),
   (
     opcode  : A_VFPCLASSPD;
@@ -23166,9 +23306,9 @@
   (
     opcode  : A_VFPCLASSPD;
     ops     : 3;
-    optypes : (ot_kreg_m,ot_zmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_kreg_m,ot_zmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#233#234#241#250#1#102#72#22;
-    flags   : [if_avx512,if_tfv]
+    flags   : [if_avx512]
   ),
   (
     opcode  : A_VFPCLASSPD;
@@ -23177,6 +23317,20 @@
     code    : #232#233#234#241#250#1#102#72#22;
     flags   : [if_avx512,if_bcst8,if_tfv]
   ),
+  (
+    opcode  : A_VFPCLASSPS;
+    ops     : 3;
+    optypes : (ot_kreg_m,ot_memory or ot_bits256,ot_immediate or ot_bits8,ot_none);
+    code    : #232#241#244#250#1#102#72#22;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VFPCLASSPS;
+    ops     : 3;
+    optypes : (ot_kreg_m,ot_memory or ot_bits512,ot_immediate or ot_bits8,ot_none);
+    code    : #232#233#241#250#1#102#72#22;
+    flags   : [if_avx512,if_tfv]
+  ),
   (
     opcode  : A_VFPCLASSPS;
     ops     : 3;
@@ -23194,9 +23348,9 @@
   (
     opcode  : A_VFPCLASSPS;
     ops     : 3;
-    optypes : (ot_kreg_m,ot_ymmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_kreg_m,ot_ymmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#241#244#250#1#102#72#22;
-    flags   : [if_avx512,if_tfv]
+    flags   : [if_avx512]
   ),
   (
     opcode  : A_VFPCLASSPS;
@@ -23208,9 +23362,9 @@
   (
     opcode  : A_VFPCLASSPS;
     ops     : 3;
-    optypes : (ot_kreg_m,ot_zmmrm,ot_immediate or ot_bits8,ot_none);
+    optypes : (ot_kreg_m,ot_zmmreg,ot_immediate or ot_bits8,ot_none);
     code    : #232#233#241#250#1#102#72#22;
-    flags   : [if_avx512,if_tfv]
+    flags   : [if_avx512]
   ),
   (
     opcode  : A_VFPCLASSPS;
@@ -28642,21 +28796,21 @@
     ops     : 2;
     optypes : (ot_mem128_m,ot_xmmreg,ot_none,ot_none);
     code    : #232#241#249#1#99#65;
-    flags   : [if_avx512,if_t1s]
+    flags   : [if_avx512,if_t1s8]
   ),
   (
     opcode  : A_VPCOMPRESSB;
     ops     : 2;
     optypes : (ot_mem256_m,ot_ymmreg,ot_none,ot_none);
     code    : #232#241#244#249#1#99#65;
-    flags   : [if_avx512,if_t1s]
+    flags   : [if_avx512,if_t1s8]
   ),
   (
     opcode  : A_VPCOMPRESSB;
     ops     : 2;
     optypes : (ot_mem512_m,ot_zmmreg,ot_none,ot_none);
     code    : #232#233#241#249#1#99#65;
-    flags   : [if_avx512,if_t1s]
+    flags   : [if_avx512,if_t1s8]
   ),
   (
     opcode  : A_VPCOMPRESSB;
@@ -28684,21 +28838,21 @@
     ops     : 2;
     optypes : (ot_mem128_m,ot_xmmreg,ot_none,ot_none);
     code    : #232#234#241#249#1#99#65;
-    flags   : [if_avx512,if_t1s]
+    flags   : [if_avx512,if_t1s16]
   ),
   (
     opcode  : A_VPCOMPRESSW;
     ops     : 2;
     optypes : (ot_mem256_m,ot_ymmreg,ot_none,ot_none);
     code    : #232#234#241#244#249#1#99#65;
-    flags   : [if_avx512,if_t1s]
+    flags   : [if_avx512,if_t1s16]
   ),
   (
     opcode  : A_VPCOMPRESSW;
     ops     : 2;
     optypes : (ot_mem512_m,ot_zmmreg,ot_none,ot_none);
     code    : #232#233#234#241#249#1#99#65;
-    flags   : [if_avx512,if_t1s]
+    flags   : [if_avx512,if_t1s16]
   ),
   (
     opcode  : A_VPCOMPRESSW;
@@ -28892,85 +29046,85 @@
   (
     opcode  : A_VPEXPANDB;
     ops     : 2;
-    optypes : (ot_mem128_m,ot_xmmreg,ot_none,ot_none);
-    code    : #232#241#249#1#98#65;
-    flags   : [if_avx512,if_t1s]
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_none,ot_none);
+    code    : #232#241#249#1#98#72;
+    flags   : [if_avx512,if_t1s8]
   ),
   (
     opcode  : A_VPEXPANDB;
     ops     : 2;
-    optypes : (ot_mem256_m,ot_ymmreg,ot_none,ot_none);
-    code    : #232#241#244#249#1#98#65;
-    flags   : [if_avx512,if_t1s]
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_none,ot_none);
+    code    : #232#241#244#249#1#98#72;
+    flags   : [if_avx512,if_t1s8]
   ),
   (
     opcode  : A_VPEXPANDB;
     ops     : 2;
-    optypes : (ot_mem512_m,ot_zmmreg,ot_none,ot_none);
-    code    : #232#233#241#249#1#98#65;
-    flags   : [if_avx512,if_t1s]
+    optypes : (ot_zmmreg_mz,ot_memory or ot_bits512,ot_none,ot_none);
+    code    : #232#233#241#249#1#98#72;
+    flags   : [if_avx512,if_t1s8]
   ),
   (
     opcode  : A_VPEXPANDB;
     ops     : 2;
     optypes : (ot_xmmreg_mz,ot_xmmreg,ot_none,ot_none);
-    code    : #232#241#249#1#98#65;
+    code    : #232#241#249#1#98#72;
     flags   : [if_avx512]
   ),
   (
     opcode  : A_VPEXPANDB;
     ops     : 2;
     optypes : (ot_ymmreg_mz,ot_ymmreg,ot_none,ot_none);
-    code    : #232#241#244#249#1#98#65;
+    code    : #232#241#244#249#1#98#72;
     flags   : [if_avx512]
   ),
   (
     opcode  : A_VPEXPANDB;
     ops     : 2;
     optypes : (ot_zmmreg_mz,ot_zmmreg,ot_none,ot_none);
-    code    : #232#233#241#249#1#98#65;
+    code    : #232#233#241#249#1#98#72;
     flags   : [if_avx512]
   ),
   (
     opcode  : A_VPEXPANDW;
     ops     : 2;
-    optypes : (ot_mem128_m,ot_xmmreg,ot_none,ot_none);
-    code    : #232#234#241#249#1#98#65;
-    flags   : [if_avx512,if_t1s]
+    optypes : (ot_xmmreg_mz,ot_memory or ot_bits128,ot_none,ot_none);
+    code    : #232#234#241#249#1#98#72;
+    flags   : [if_avx512,if_t1s16]
   ),
   (
     opcode  : A_VPEXPANDW;
     ops     : 2;
-    optypes : (ot_mem256_m,ot_ymmreg,ot_none,ot_none);
-    code    : #232#234#241#244#249#1#98#65;
-    flags   : [if_avx512,if_t1s]
+    optypes : (ot_ymmreg_mz,ot_memory or ot_bits256,ot_none,ot_none);
+    code    : #232#234#241#244#249#1#98#72;
+    flags   : [if_avx512,if_t1s16]
   ),
   (
     opcode  : A_VPEXPANDW;
     ops     : 2;
-    optypes : (ot_mem512_m,ot_zmmreg,ot_none,ot_none);
-    code    : #232#233#234#241#249#1#98#65;
-    flags   : [if_avx512,if_t1s]
+    optypes : (ot_zmmreg_mz,ot_memory or ot_bits512,ot_none,ot_none);
+    code    : #232#233#234#241#249#1#98#72;
+    flags   : [if_avx512,if_t1s16]
   ),
   (
     opcode  : A_VPEXPANDW;
     ops     : 2;
     optypes : (ot_xmmreg_mz,ot_xmmreg,ot_none,ot_none);
-    code    : #232#234#241#249#1#98#65;
+    code    : #232#234#241#249#1#98#72;
     flags   : [if_avx512]
   ),
   (
     opcode  : A_VPEXPANDW;
     ops     : 2;
     optypes : (ot_ymmreg_mz,ot_ymmreg,ot_none,ot_none);
-    code    : #232#234#241#244#249#1#98#65;
+    code    : #232#234#241#244#249#1#98#72;
     flags   : [if_avx512]
   ),
   (
     opcode  : A_VPEXPANDW;
     ops     : 2;
     optypes : (ot_zmmreg_mz,ot_zmmreg,ot_none,ot_none);
-    code    : #232#233#234#241#249#1#98#65;
+    code    : #232#233#234#241#249#1#98#72;
     flags   : [if_avx512]
   ),
   (

+ 129 - 7
tests/utils/avx/asmtestgenerator.pas

@@ -210,6 +210,8 @@ type
       IF_T4,                  { disp8 - tuple - 4 }
       IF_T8,                  { disp8 - tuple - 8 }
       IF_T1S,                 { disp8 - tuple - 1 scalar }
+      IF_T1S8,
+      IF_T1S16,
       IF_T1F32,
       IF_T1F64,
       IF_TMDDUP,
@@ -565,11 +567,6 @@ begin
                        ;
 
 
-          //TG TODO delete
-          if aInst = 'vpmovw2m' then
-          begin
-            sSuffix := sSuffix;
-          end;
 
           for il_Op := 1 to 4 do
           begin
@@ -632,6 +629,15 @@ begin
                   Item.Values.Add('XMM18' + sSuffix);
                   Item.Values.Add('XMM27' + sSuffix);
                   Item.Values.Add('XMM31' + sSuffix);
+
+                  if sSuffix <> '' then
+                  begin
+                    Item.Values.Add('XMM0');
+                    Item.Values.Add('XMM9');
+                    Item.Values.Add('XMM18');
+                    Item.Values.Add('XMM27');
+                    Item.Values.Add('XMM31');
+                  end;    
                 end
                 else
                 begin
@@ -640,6 +646,15 @@ begin
                   Item.Values.Add('XMM8' + sSuffix);
                   Item.Values.Add('XMM12' + sSuffix);
                   Item.Values.Add('XMM15' + sSuffix);
+
+                  if sSuffix <> '' then
+                  begin
+                    Item.Values.Add('XMM0');
+                    Item.Values.Add('XMM4');
+                    Item.Values.Add('XMM8');
+                    Item.Values.Add('XMM12');
+                    Item.Values.Add('XMM15');
+                  end;    
                 end;
               end;
             end
@@ -677,17 +692,26 @@ begin
                 if FAVX512 then
                 begin
                   Item.Values.Add('XMM0' + sSuffix);
+                  Item.Values.Add('XMM0');
                   Item.Values.Add('XMM9' + sSuffix);
+                  Item.Values.Add('XMM9');
                   Item.Values.Add('XMM18' + sSuffix);
+                  Item.Values.Add('XMM18');
                   Item.Values.Add('XMM27' + sSuffix);
+                  Item.Values.Add('XMM27');
                   Item.Values.Add('XMM31' + sSuffix);
+                  Item.Values.Add('XMM31');
                 end
                 else
                 begin
                   Item.Values.Add('XMM0' + sSuffix);
+                  Item.Values.Add('XMM0');
                   Item.Values.Add('XMM4' + sSuffix);
+                  Item.Values.Add('XMM4');
                   Item.Values.Add('XMM8' + sSuffix);
+                  Item.Values.Add('XMM8');
                   Item.Values.Add('XMM12' + sSuffix);
+                  Item.Values.Add('XMM15');
                   Item.Values.Add('XMM15' + sSuffix);
                 end;
 
@@ -733,18 +757,28 @@ begin
                 if FAVX512 then
                 begin
                   Item.Values.Add('XMM0' + sSuffix);
+                  Item.Values.Add('XMM0');
                   Item.Values.Add('XMM9' + sSuffix);
+                  Item.Values.Add('XMM9');
                   Item.Values.Add('XMM18' + sSuffix);
+                  Item.Values.Add('XMM18');
                   Item.Values.Add('XMM27' + sSuffix);
+                  Item.Values.Add('XMM27');
                   Item.Values.Add('XMM31' + sSuffix);
+                  Item.Values.Add('XMM31');
                 end
                 else
                 begin
                   Item.Values.Add('XMM0' + sSuffix);
+                  Item.Values.Add('XMM0');
                   Item.Values.Add('XMM4' + sSuffix);
+                  Item.Values.Add('XMM4');
                   Item.Values.Add('XMM8' + sSuffix);
+                  Item.Values.Add('XMM8');
                   Item.Values.Add('XMM12' + sSuffix);
+                  Item.Values.Add('XMM12');
                   Item.Values.Add('XMM15' + sSuffix);
+                  Item.Values.Add('XMM15');
                 end;
 
                 //Item.Values.Add('[RIP]');
@@ -793,18 +827,28 @@ begin
                 if FAVX512 then
                 begin
                   Item.Values.Add('XMM0' + sSuffix);
+                  Item.Values.Add('XMM0');
                   Item.Values.Add('XMM9' + sSuffix);
+                  Item.Values.Add('XMM9');
                   Item.Values.Add('XMM18' + sSuffix);
+                  Item.Values.Add('XMM18');
                   Item.Values.Add('XMM27' + sSuffix);
+                  Item.Values.Add('XMM27');
                   Item.Values.Add('XMM31' + sSuffix);
+                  Item.Values.Add('XMM31');
                 end
                 else
                 begin
                   Item.Values.Add('XMM0' + sSuffix);
+                  Item.Values.Add('XMM0');
                   Item.Values.Add('XMM4' + sSuffix);
+                  Item.Values.Add('XMM4');
                   Item.Values.Add('XMM8' + sSuffix);
+                  Item.Values.Add('XMM8');
                   Item.Values.Add('XMM12' + sSuffix);
+                  Item.Values.Add('XMM12');
                   Item.Values.Add('XMM15' + sSuffix);
+                  Item.Values.Add('XMM15');
                 end;
 
                 //Item.Values.Add('[RIP]');
@@ -855,6 +899,15 @@ begin
                   Item.Values.Add('YMM18' + sSuffix);
                   Item.Values.Add('YMM27' + sSuffix);
                   Item.Values.Add('YMM31' + sSuffix);
+                  
+                  if sSuffix <> '' then
+                  begin
+                    Item.Values.Add('YMM0');
+                    Item.Values.Add('YMM9');
+                    Item.Values.Add('YMM18');
+                    Item.Values.Add('YMM27');
+                    Item.Values.Add('YMM31');                      
+                  end;
                 end
                 else
                 begin
@@ -863,6 +916,15 @@ begin
                   Item.Values.Add('YMM8' + sSuffix);
                   Item.Values.Add('YMM12' + sSuffix);
                   Item.Values.Add('YMM15' + sSuffix);
+
+                  if sSuffix <> '' then
+                  begin
+                    Item.Values.Add('YMM0');
+                    Item.Values.Add('YMM4');
+                    Item.Values.Add('YMM8');
+                    Item.Values.Add('YMM12');
+                    Item.Values.Add('YMM15');
+                  end;    
                 end;
               end;
             end
@@ -903,8 +965,17 @@ begin
                   Item.Values.Add('YMM0' + sSuffix);
                   Item.Values.Add('YMM9' + sSuffix);
                   Item.Values.Add('YMM18' + sSuffix);
-                  Item.Values.Add('YMM27' + sSuffix);
+                  Item.Values.Add('YMM27' +  sSuffix);
                   Item.Values.Add('YMM31' + sSuffix);
+
+                  if sSuffix <> '' then
+                  begin
+                    Item.Values.Add('YMM0');
+                    Item.Values.Add('YMM9');
+                    Item.Values.Add('YMM18');
+                    Item.Values.Add('YMM27');
+                    Item.Values.Add('YMM31');
+                  end;    
                 end
                 else
                 begin
@@ -913,6 +984,15 @@ begin
                   Item.Values.Add('YMM8' + sSuffix);
                   Item.Values.Add('YMM12' + sSuffix);
                   Item.Values.Add('YMM15' + sSuffix);
+
+                  if sSuffix <> '' then
+                  begin
+                    Item.Values.Add('YMM0');
+                    Item.Values.Add('YMM4');
+                    Item.Values.Add('YMM8');
+                    Item.Values.Add('YMM12');
+                    Item.Values.Add('YMM15');
+                  end;    
                 end;
 
                 MemRegBaseIndexCombi(sl_prefix, '', FReg64Base, FReg64Index, Item.Values);
@@ -960,6 +1040,15 @@ begin
                   Item.Values.Add('ZMM18' + sSuffix);
                   Item.Values.Add('ZMM27' + sSuffix);
                   Item.Values.Add('ZMM31' + sSuffix);
+
+                  if sSuffix <> '' then
+                  begin
+                    Item.Values.Add('ZMM0');
+                    Item.Values.Add('ZMM9');
+                    Item.Values.Add('ZMM18');
+                    Item.Values.Add('ZMM27');
+                    Item.Values.Add('ZMM31');
+                  end;    
                 end
                 else
                 begin
@@ -1010,6 +1099,15 @@ begin
                   Item.Values.Add('ZMM18' + sSuffix);
                   Item.Values.Add('ZMM27' + sSuffix);
                   Item.Values.Add('ZMM31' + sSuffix);
+
+                  if sSuffix <> '' then
+                  begin
+                    Item.Values.Add('ZMM0');
+                    Item.Values.Add('ZMM9');
+                    Item.Values.Add('ZMM18');
+                    Item.Values.Add('ZMM27');
+                    Item.Values.Add('ZMM31');
+                  end;    
                 end
                 else
                 begin
@@ -1280,11 +1378,15 @@ begin
 
               if x64 then
               begin
-                VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg64Base, FReg64XMMIndex, Item.Values);
+		VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg64Base, FReg64XMMIndex, Item.Values);
+		if sSuffix <> '' then
+ 		 VectorMemRegBaseIndexCombi(sl_prefix, '', FReg64Base, FReg64XMMIndex, Item.Values);
               end
               else
               begin
                 VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg32Base, FReg32XMMIndex, Item.Values);
+		if sSuffix <> '' then
+                 VectorMemRegBaseIndexCombi(sl_prefix, '', FReg32Base, FReg32XMMIndex, Item.Values);
               end;
             end
             else if AnsiSameText(sl_Operand, 'XMEM64') or
@@ -1311,10 +1413,14 @@ begin
               if x64 then
               begin
                 VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg64Base, FReg64XMMIndex, Item.Values);
+                if sSuffix <> '' then
+ 		 VectorMemRegBaseIndexCombi(sl_prefix, '', FReg64Base, FReg64XMMIndex, Item.Values);
               end
               else
               begin
                 VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg32Base, FReg32XMMIndex, Item.Values);
+                if sSuffix <> '' then
+ 		 VectorMemRegBaseIndexCombi(sl_prefix, '', FReg32Base, FReg32XMMIndex, Item.Values);
               end;
 
             end
@@ -1342,10 +1448,14 @@ begin
               if x64 then
               begin
                 VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg64Base, FReg64YMMIndex, Item.Values);
+                if sSuffix <> '' then
+		 VectorMemRegBaseIndexCombi(sl_prefix, '', FReg64Base, FReg64YMMIndex, Item.Values);
               end
               else
               begin
                 VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg32Base, FReg32YMMIndex, Item.Values);
+                if sSuffix <> '' then
+		 VectorMemRegBaseIndexCombi(sl_prefix, '', FReg32Base, FReg32YMMIndex, Item.Values);
               end;
 
             end
@@ -1373,10 +1483,14 @@ begin
               if x64 then
               begin
                 VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg64Base, FReg64YMMIndex, Item.Values);
+		if sSuffix <> '' then
+                 VectorMemRegBaseIndexCombi(sl_prefix, '', FReg64Base, FReg64YMMIndex, Item.Values);
               end
               else
               begin
                 VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg32Base, FReg32YMMIndex, Item.Values);
+                if sSuffix <> '' then
+		 VectorMemRegBaseIndexCombi(sl_prefix, '', FReg32Base, FReg32YMMIndex, Item.Values);
               end;
 
             end
@@ -1404,10 +1518,14 @@ begin
               if x64 then
               begin
                 VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg64Base, FReg64ZMMIndex, Item.Values);
+		if sSuffix <> '' then
+                 VectorMemRegBaseIndexCombi(sl_prefix, '', FReg64Base, FReg64ZMMIndex, Item.Values);
               end
               else
               begin
                 VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg32Base, FReg32ZMMIndex, Item.Values);
+		if sSuffix <> '' then
+                 VectorMemRegBaseIndexCombi(sl_prefix, '', FReg32Base, FReg32ZMMIndex, Item.Values);
               end;
 
             end
@@ -1435,10 +1553,14 @@ begin
               if x64 then
               begin
                 VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg64Base, FReg64ZMMIndex, Item.Values);
+		if sSuffix <> '' then
+                 VectorMemRegBaseIndexCombi(sl_prefix, '', FReg64Base, FReg64ZMMIndex, Item.Values);
               end
               else
               begin
                 VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg32Base, FReg32ZMMIndex, Item.Values);
+                if sSuffix <> '' then
+		 VectorMemRegBaseIndexCombi(sl_prefix, '', FReg32Base, FReg32ZMMIndex, Item.Values);
               end;
 
             end

+ 36 - 70
tests/utils/avx/avxopcodes.pas

@@ -34,12 +34,21 @@ uses SysUtils, AsmTestGenerator, Dialogs;
 { TAVXTestGenerator }
 
 constructor TAVXTestGenerator.Create;
+var
+  i: integer;	
 begin
   inherited;
 
   FOpCodeList := TStringList.Create;
+  FOpCodeList.Duplicates := dupIgnore;
+  FOpCodeList.Sorted := true;
 
   Init;
+
+
+  FOpCodeList.Sorted := false;
+  for i := 0 to FOpCodeList.Count - 1 do
+   FOpCodeList[i] := AnsiLowerCase(FOpCodeList[i]);
 end;
 
 destructor TAVXTestGenerator.Destroy;
@@ -423,7 +432,7 @@ begin
   FOpCodeList.Add('vcvtdq2pd,1,1,1,YMMREG_MZ,XMMREG,,');
   FOpCodeList.Add('vcvtdq2pd,1,1,1,YMMREG_MZ,4B32,,');
   FOpCodeList.Add('vcvtdq2pd,1,1,1,ZMMREG_MZ,MEM256,,');
-  FOpCodeList.Add('vcvtdq2pd,1,1,1,ZMMREG_MZ,YMMREG_ER,,');
+  FOpCodeList.Add('vcvtdq2pd,1,1,1,ZMMREG_MZ,YMMREG,,');
   FOpCodeList.Add('vcvtdq2pd,1,1,1,ZMMREG_MZ,8B32,,');
 
   FOpCodeList.Add('vcvtdq2ps,1,1,1,XMMREG_MZ,XMMRM,,');
@@ -441,7 +450,7 @@ begin
   FOpCodeList.Add('vcvtpd2dq,1,1,1,XMMREG_MZ,YMMREG,,');
   FOpCodeList.Add('vcvtpd2dq,1,1,1,YMMREG_MZ,MEM512,,');
   FOpCodeList.Add('vcvtpd2dq,1,1,1,YMMREG_MZ,8B64,,');
-  FOpCodeList.Add('vcvtpd2dq,1,1,1,YMMREG_MZ,ZMMREG_ER,,');
+  FOpCodeList.Add('vcvtpd2dq,1,1,1,YMMREG_MZ,ZMMREG,,');
   FOpCodeList.Add('vcvtpd2ps,1,1,1,XMMREG_MZ,MEM128,,');
   FOpCodeList.Add('vcvtpd2ps,1,1,1,XMMREG_MZ,MEM256,,');
   FOpCodeList.Add('vcvtpd2ps,1,1,1,XMMREG_MZ,XMMREG,,');
@@ -487,9 +496,11 @@ begin
   FOpCodeList.Add('vcvtsd2si,1,1,1,REG64,XMMREG_ER,,');
   FOpCodeList.Add('vcvtsd2ss,1,1,1,XMMREG_MZ,XMMREG,MEM64,');
   FOpCodeList.Add('vcvtsd2ss,1,1,1,XMMREG_MZ,XMMREG,XMMREG_ER,');
-  FOpCodeList.Add('vcvtsi2sd,1,1,1,XMMREG,XMMREG_ER,REG32,');
+  FOpCodeList.Add('vcvtsi2sd,1,1,1,XMMREG,XMMREG,REG32,');
+  FOpCodeList.Add('vcvtsi2sd,1,1,1,XMMREG,XMMREG,MEM32,');
   FOpCodeList.Add('vcvtsi2sd,0,1,1,XMMREG,XMMREG_ER,REG64,');
-  FOpCodeList.Add('vcvtsi2ss,1,1,1,XMMREG,XMMREG_ER,REG32,');
+  FOpCodeList.Add('vcvtsi2sd,0,1,1,XMMREG,XMMREG,MEM64,');
+  FOpCodeList.Add('vcvtsi2ss,1,1,1,XMMREG,XMMREG,REG32,');
   FOpCodeList.Add('vcvtsi2ss,0,1,1,XMMREG,XMMREG_ER,REG64,');
   FOpCodeList.Add('vcvtss2sd,1,1,1,XMMREG_MZ,XMMREG,MEM32,');
   FOpCodeList.Add('vcvtss2sd,1,1,1,XMMREG_MZ,XMMREG,XMMREG_SAE,');
@@ -1389,18 +1400,18 @@ begin
   FOpCodeList.Add('vpbroadcastb,1,1,1,XMMREG_MZ,REG8,,');
   FOpCodeList.Add('vpbroadcastb,1,1,1,XMMREG_MZ,REG32,,');
   FOpCodeList.Add('vpbroadcastb,1,1,1,XMMREG_MZ,REG64,,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,XMMREG_MZ,REG16,,');
+  //FOpCodeList.Add('vpbroadcastb,1,1,1,XMMREG_MZ,REG16,,');
   FOpCodeList.Add('vpbroadcastb,1,1,1,YMMREG_MZ,MEM8,,');
   FOpCodeList.Add('vpbroadcastb,1,1,1,YMMREG_MZ,XMMREG,,');
   FOpCodeList.Add('vpbroadcastb,1,1,1,YMMREG_MZ,REG8,,');
   FOpCodeList.Add('vpbroadcastb,1,1,1,YMMREG_MZ,REG32,,');
   FOpCodeList.Add('vpbroadcastb,1,1,1,YMMREG_MZ,REG64,,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,YMMREG_MZ,REG16,,');
+  //FOpCodeList.Add('vpbroadcastb,1,1,1,YMMREG_MZ,REG16,,');
   FOpCodeList.Add('vpbroadcastb,1,1,1,ZMMREG_MZ,MEM8,,');
   FOpCodeList.Add('vpbroadcastb,1,1,1,ZMMREG_MZ,REG8,,');
   FOpCodeList.Add('vpbroadcastb,1,1,1,ZMMREG_MZ,REG32,,');
   FOpCodeList.Add('vpbroadcastb,1,1,1,ZMMREG_MZ,REG64,,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,ZMMREG_MZ,REG16,,');
+  //FOpCodeList.Add('vpbroadcastb,1,1,1,ZMMREG_MZ,REG16,,');
   FOpCodeList.Add('vpbroadcastb,1,1,1,ZMMREG_MZ,XMMREG,,');
   FOpCodeList.Add('vpbroadcastd,1,1,1,XMMREG_MZ,MEM32,,');
   FOpCodeList.Add('vpbroadcastd,1,1,1,XMMREG_MZ,XMMREG,,');
@@ -1547,8 +1558,8 @@ begin
   FOpCodeList.Add('vfmadd213pd,1,1,0,YMMREG,YMMREG,YMMRM,');
   FOpCodeList.Add('vfmadd231pd,1,1,0,XMMREG,XMMREG,XMMRM,');
   FOpCodeList.Add('vfmadd231pd,1,1,0,YMMREG,YMMREG,YMMRM,');
-  FOpCodeList.Add('vfmaddpd,1,1,0,XMMREG,XMMREG,XMMRM,XMMREG');
-  FOpCodeList.Add('vfmaddpd,1,1,0,XMMREG,XMMREG,XMMREG,XMMRM');
+  //FOpCodeList.Add('vfmaddpd,1,1,0,XMMREG,XMMREG,XMMRM,XMMREG');
+  //FOpCodeList.Add('vfmaddpd,1,1,0,XMMREG,XMMREG,XMMREG,XMMRM');
   FOpCodeList.Add('vfmadd132ps,1,1,0,XMMREG,XMMREG,XMMRM,');
   FOpCodeList.Add('vfmadd132ps,1,1,0,YMMREG,YMMREG,YMMRM,');
   FOpCodeList.Add('vfmadd213ps,1,1,0,XMMREG,XMMREG,XMMRM,');
@@ -1888,7 +1899,7 @@ begin
   FOpCodeList.Add('vcvtudq2pd,1,1,1,ymmreg_mz,4b32,,');
   FOpCodeList.Add('vcvtudq2pd,1,1,1,zmmreg_mz,mem256,,');
   FOpCodeList.Add('vcvtudq2pd,1,1,1,zmmreg_mz,8b32,,');
-  FOpCodeList.Add('vcvtudq2pd,1,1,1,zmmreg_mz,ymmreg_er,,');
+  FOpCodeList.Add('vcvtudq2pd,1,1,1,zmmreg_mz,ymmreg,,');
   FOpCodeList.Add('vcvtudq2ps,1,1,1,xmmreg_mz,xmmrm,,');
   FOpCodeList.Add('vcvtudq2ps,1,1,1,xmmreg_mz,4b32,,');
   FOpCodeList.Add('vcvtudq2ps,1,1,1,ymmreg_mz,ymmrm,,');
@@ -2439,24 +2450,6 @@ begin
   FOpCodeList.Add('vpblendmw,1,1,1,xmmreg_mz,xmmreg,xmmrm,');
   FOpCodeList.Add('vpblendmw,1,1,1,ymmreg_mz,ymmreg,ymmrm,');
   FOpCodeList.Add('vpblendmw,1,1,1,zmmreg_mz,zmmreg,zmmrm,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,xmmreg_mz,mem8,,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,xmmreg_mz,reg16,,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,xmmreg_mz,reg32,,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,xmmreg_mz,reg64,,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,xmmreg_mz,reg8,,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,xmmreg_mz,xmmreg,,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,ymmreg_mz,mem8,,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,ymmreg_mz,reg16,,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,ymmreg_mz,reg32,,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,ymmreg_mz,reg64,,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,ymmreg_mz,reg8,,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,ymmreg_mz,xmmreg,,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,zmmreg_mz,mem8,,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,zmmreg_mz,reg16,,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,zmmreg_mz,reg32,,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,zmmreg_mz,reg64,,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,zmmreg_mz,reg8,,');
-  FOpCodeList.Add('vpbroadcastb,1,1,1,zmmreg_mz,xmmreg,,');
   FOpCodeList.Add('vpbroadcastd,1,1,1,xmmreg_mz,mem32,,');
   FOpCodeList.Add('vpbroadcastd,1,1,1,xmmreg_mz,reg32,,');
   FOpCodeList.Add('vpbroadcastd,1,1,1,xmmreg_mz,xmmreg,,');
@@ -2481,21 +2474,6 @@ begin
   FOpCodeList.Add('vpbroadcastq,1,1,1,zmmreg_mz,mem64,,');
   FOpCodeList.Add('vpbroadcastq,1,1,1,zmmreg_mz,reg64,,');
   FOpCodeList.Add('vpbroadcastq,1,1,1,zmmreg_mz,xmmreg,,');
-  FOpCodeList.Add('vpbroadcastw,1,1,1,xmmreg_mz,mem16,,');
-  FOpCodeList.Add('vpbroadcastw,1,1,1,xmmreg_mz,reg16,,');
-  FOpCodeList.Add('vpbroadcastw,1,1,1,xmmreg_mz,reg32,,');
-  FOpCodeList.Add('vpbroadcastw,1,1,1,xmmreg_mz,reg64,,');
-  FOpCodeList.Add('vpbroadcastw,1,1,1,xmmreg_mz,xmmreg,,');
-  FOpCodeList.Add('vpbroadcastw,1,1,1,ymmreg_mz,mem16,,');
-  FOpCodeList.Add('vpbroadcastw,1,1,1,ymmreg_mz,reg16,,');
-  FOpCodeList.Add('vpbroadcastw,1,1,1,ymmreg_mz,reg32,,');
-  FOpCodeList.Add('vpbroadcastw,1,1,1,ymmreg_mz,reg64,,');
-  FOpCodeList.Add('vpbroadcastw,1,1,1,ymmreg_mz,xmmreg,,');
-  FOpCodeList.Add('vpbroadcastw,1,1,1,zmmreg_mz,mem16,,');
-  FOpCodeList.Add('vpbroadcastw,1,1,1,zmmreg_mz,reg16,,');
-  FOpCodeList.Add('vpbroadcastw,1,1,1,zmmreg_mz,reg32,,');
-  FOpCodeList.Add('vpbroadcastw,1,1,1,zmmreg_mz,reg64,,');
-  FOpCodeList.Add('vpbroadcastw,1,1,1,zmmreg_mz,xmmreg,,');
   FOpCodeList.Add('vpcmpb,1,1,1,kreg_m,xmmreg,xmmrm,imm8');
   FOpCodeList.Add('vpcmpb,1,1,1,kreg_m,ymmreg,ymmrm,imm8');
   FOpCodeList.Add('vpcmpb,1,1,1,kreg_m,zmmreg,zmmrm,imm8');
@@ -3182,15 +3160,15 @@ begin
   FOpCodeList.Add('VPDPWSSDS,1,1,1,ymmreg_mz,ymmreg,8B32,');
   FOpCodeList.Add('VPDPWSSDS,1,1,1,zmmreg_mz,zmmreg,zmmrm,');
   FOpCodeList.Add('VPDPWSSDS,1,1,1,zmmreg_mz,zmmreg,16B32,');
-  FOpCodeList.Add('VPEXPANDB,1,1,1,mem128_m,xmmreg,,');
-  FOpCodeList.Add('VPEXPANDB,1,1,1,mem256_m,ymmreg,,');
-  FOpCodeList.Add('VPEXPANDB,1,1,1,mem512_m,zmmreg,,');
+  FOpCodeList.Add('VPEXPANDB,1,1,1,xmmreg_mz,mem128,,');
+  FOpCodeList.Add('VPEXPANDB,1,1,1,ymmreg_mz,mem256,,');
+  FOpCodeList.Add('VPEXPANDB,1,1,1,zmmreg_mz,mem512,,');
   FOpCodeList.Add('VPEXPANDB,1,1,1,xmmreg_mz,xmmreg,,');
   FOpCodeList.Add('VPEXPANDB,1,1,1,ymmreg_mz,ymmreg,,');
   FOpCodeList.Add('VPEXPANDB,1,1,1,zmmreg_mz,zmmreg,,');
-  FOpCodeList.Add('VPEXPANDW,1,1,1,mem128_m,xmmreg,,');
-  FOpCodeList.Add('VPEXPANDW,1,1,1,mem256_m,ymmreg,,');
-  FOpCodeList.Add('VPEXPANDW,1,1,1,mem512_m,zmmreg,,');
+  FOpCodeList.Add('VPEXPANDW,1,1,1,xmmreg_mz,mem128,,');
+  FOpCodeList.Add('VPEXPANDW,1,1,1,ymmreg_mz,mem256,,');
+  FOpCodeList.Add('VPEXPANDW,1,1,1,zmmreg_mz,mem512,,');
   FOpCodeList.Add('VPEXPANDW,1,1,1,xmmreg_mz,xmmreg,,');
   FOpCodeList.Add('VPEXPANDW,1,1,1,ymmreg_mz,ymmreg,,');
   FOpCodeList.Add('VPEXPANDW,1,1,1,zmmreg_mz,zmmreg,,');
@@ -3276,6 +3254,7 @@ function TAVXTestGenerator.InternalMakeTestFiles(aX64, aAVX512, aSAE: boolean; a
 var
   i: integer;
   sData: string;
+  sDestFile: string;
   sl: TStringList;
   slAsm: TStringList;
   LastOpCode: String;
@@ -3316,20 +3295,6 @@ begin
         NewOpCode := ansilowercase(sl[0]);
         if NewOpCode <> '' then
         begin
-          if NewOpCode <> LastOpCode then
-          begin
-            if LastOpCode <> '' then
-            begin
-              SaveFile(slAsm, LastOpCode, aDestPath, aFileExt, aHeaderList, aFooterList);
-              writeln(format('%s%s%s', [aDestPath, LastOpCode, aFileExt]));
-
-              slAsm.Clear;
-              LastOpCode := NewOpCode;
-            end
-            else LastOpCode := NewOpCode;
-          end;
-
-
           if (not(aX64) and (sl[1] = '1')) or // i386
              (aX64 and (sl[2] = '1')) then    // x86_64
           begin
@@ -3341,16 +3306,17 @@ begin
               slAsm.Add('    ' + sl[0]);
             end
             else TAsmTestGenerator.CalcTestData(aX64, aAVX512 and (sl[3] = '1'), aSAE, sl[0], sl[4], sl[5], sl[6], sl[7], slAsm);
+
+	    sDestFile := format('%s_%d%s', [NewOpcode, i, trim(copy(sl[4],1,1) + copy(sl[5],1,1) + copy(sl[6],1,1) + copy(sl[7],1,1))]);
+
+
+            SaveFile(slAsm, sDestFile, aDestPath, aFileExt, aHeaderList, aFooterList);
+            writeln(format('%s%s%s', [aDestPath, sDestFile, aFileExt]));
+
+            slAsm.Clear;
           end;
         end;
       end;
-
-      if NewOpCode <> '' then
-      begin
-        SaveFile(slAsm, NewOpCode, aDestPath, aFileExt, aHeaderList, aFooterList);
-        writeln(format('%s%s%s', [aDestPath, NewOpCode, aFileExt]));
-      end;
-
     finally
       FreeAndNil(slAsm);
     end;