Some compiler x86 assembler improvements

1) patch for fpc 3.3.1 (attachment: mkx86ins_version_bump.patch)
compiler/utils/mkx86ins.pp
Version bumped from 1.6.1 to 1.6.2
There has been changes to code, so version has to represent that.

2) Patch to enable ENTER asm instruction (attachment: enable_asm_instr_enter.patch)
same for fpc 3.3.1 and fixes 3.2

3) patch for fpc 3.3.1 compiler/x86/x86ins.dat (attachment: x86ins_4_fpc331.patch)
3.1)
Rename 3DNow instruction (fixed long lasting typo in mnemonic).
PMULHRWA  --> PMULHRW
3.2)
Add vpclmullqlqdq, vpclmulhqlqdq, vpclmullqhqdq, vpclmulhqhqdq.
3.3)
Fix "typo" for SHA1MSG2


4) patch asm instructions for fixes 3.2 (attachment: x86ins_4_fixes32.patch)
add missing instructions of BMI1, BMI2, ADX, CMUL, SHA, XSAVE, MOVBE
no "code" changes, only x86ins.dat and generated files with mkx86ins
Some instructions deliberately have wrong tags in order to make no changes beside x86ins.dat.


5) patch prof of concept back port asm instructions to fpc 3.0.4 (attachment: x86ins_4_fpc304.patch)
add missing instructions of BMI1, BMI2, ADX, CMUL, SHA, XSAVE, MOVBE, RAND
no "code" changes, but const maxinfolen = 8; to maxinfolen = 9;
x86ins.dat and generated files with mkx86ins
I did this to make an argument that it's safe to add asm instructions to fpc 3.2.3
Engine, that supports those instruction, is in production for a while now.

 
diff -ru a/compiler/x86/aasmcpu.pas b/compiler/x86/aasmcpu.pas
--- a/compiler/x86/aasmcpu.pas	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/x86/aasmcpu.pas	2024-05-16 22:49:29.290239056 +0000
@@ -1664,8 +1664,9 @@
                   else
                   begin
                     { allow 2nd, 3rd or 4th operand being a constant and expect no size for shuf* etc. }
-                    { further, allow AAD and AAM with imm. operand }
+                    { further, allow ENTER, AAD and AAM with imm. operand }
                     if (opsize=S_NO) and not((i in [1,2,3])
+                      or ((i=0) and (opcode in [A_ENTER]))
 {$ifndef x86_64}
                       or ((i=0) and (opcode in [A_AAD,A_AAM]))
 {$endif x86_64}
diff -ru u/compiler/i386/i386att.inc v/compiler/i386/i386att.inc
--- u/compiler/i386/i386att.inc	2021-07-18 13:32:23.955521000 +0000
+++ v/compiler/i386/i386att.inc	2024-05-16 15:20:21.135532388 +0000
@@ -254,7 +254,7 @@
 'pmaddwd',
 'pmagw',
 'pmulhriw',
-'pmulhrwa',
+'pmulhrw',
 'pmulhrwc',
 'pmulhw',
 'pmullw',
@@ -797,6 +797,10 @@
 'vpblendvb',
 'vpblendw',
 'vpclmulqdq',
+'vpclmullqlqdq',
+'vpclmulhqlqdq',
+'vpclmullqhqdq',
+'vpclmulhqhqdq',
 'vpcmpeqb',
 'vpcmpeqd',
 'vpcmpeqq',
@@ -931,11 +935,26 @@
 'vzeroupper',
 'andn',
 'bextr',
+'blsi',
+'blsmsk',
+'blsr',
 'tzcnt',
+'bzhi',
+'mulx',
+'pdep',
+'pext',
 'rorx',
 'sarx',
 'shlx',
 'shrx',
+'movbe',
+'pclmulqdq',
+'pclmullqlqdq',
+'pclmulhqlqdq',
+'pclmullqhqdq',
+'pclmulhqhqdq',
+'adcx',
+'adox',
 'vbroadcasti128',
 'vextracti128',
 'vinserti128',
@@ -1016,5 +1035,23 @@
 'vfnmsub231sd',
 'vfnmsub132ss',
 'vfnmsub213ss',
-'vfnmsub231ss'
+'vfnmsub231ss',
+'rdrand',
+'rdseed',
+'xgetbv',
+'xsetbv',
+'xsave',
+'xsave64',
+'xrstor',
+'xrstor64',
+'xsaveopt',
+'xsaveopt64',
+'prefetchwt1',
+'sha1rnds4',
+'sha1nexte',
+'sha1msg1',
+'sha1msg2',
+'sha256rnds2',
+'sha256msg1',
+'sha256msg2'
 );
diff -ru u/compiler/i386/i386atts.inc v/compiler/i386/i386atts.inc
--- u/compiler/i386/i386atts.inc	2021-07-18 13:32:23.951521000 +0000
+++ v/compiler/i386/i386atts.inc	2024-05-16 15:20:21.135532388 +0000
@@ -947,11 +947,14 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufINT,
 attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufINT,
+attsufINT,
 attsufNONE,
 attsufNONE,
 attsufNONE,
@@ -1013,6 +1016,40 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufINT,
+attsufNONE,
+attsufNONE,
+attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
diff -ru u/compiler/i386/i386int.inc v/compiler/i386/i386int.inc
--- u/compiler/i386/i386int.inc	2021-07-18 13:32:23.955521000 +0000
+++ v/compiler/i386/i386int.inc	2024-05-16 15:20:21.135532388 +0000
@@ -254,7 +254,7 @@
 'pmaddwd',
 'pmagw',
 'pmulhriw',
-'pmulhrwa',
+'pmulhrw',
 'pmulhrwc',
 'pmulhw',
 'pmullw',
@@ -797,6 +797,10 @@
 'vpblendvb',
 'vpblendw',
 'vpclmulqdq',
+'vpclmullqlqdq',
+'vpclmulhqlqdq',
+'vpclmullqhqdq',
+'vpclmulhqhqdq',
 'vpcmpeqb',
 'vpcmpeqd',
 'vpcmpeqq',
@@ -931,11 +935,26 @@
 'vzeroupper',
 'andn',
 'bextr',
+'blsi',
+'blsmsk',
+'blsr',
 'tzcnt',
+'bzhi',
+'mulx',
+'pdep',
+'pext',
 'rorx',
 'sarx',
 'shlx',
 'shrx',
+'movbe',
+'pclmulqdq',
+'pclmullqlqdq',
+'pclmulhqlqdq',
+'pclmullqhqdq',
+'pclmulhqhqdq',
+'adcx',
+'adox',
 'vbroadcasti128',
 'vextracti128',
 'vinserti128',
@@ -1016,5 +1035,23 @@
 'vfnmsub231sd',
 'vfnmsub132ss',
 'vfnmsub213ss',
-'vfnmsub231ss'
+'vfnmsub231ss',
+'rdrand',
+'rdseed',
+'xgetbv',
+'xsetbv',
+'xsave',
+'xsave64',
+'xrstor',
+'xrstor64',
+'xsaveopt',
+'xsaveopt64',
+'prefetchwt1',
+'sha1rnds4',
+'sha1nexte',
+'sha1msg1',
+'sha1msg2',
+'sha256rnds2',
+'sha256msg1',
+'sha256msg2'
 );
diff -ru u/compiler/i386/i386nop.inc v/compiler/i386/i386nop.inc
--- u/compiler/i386/i386nop.inc	2021-07-18 13:32:23.955521000 +0000
+++ v/compiler/i386/i386nop.inc	2024-05-16 15:20:21.135532388 +0000
@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86ins.dat }
-1926;
+1969;
diff -ru u/compiler/i386/i386op.inc v/compiler/i386/i386op.inc
--- u/compiler/i386/i386op.inc	2021-07-18 13:32:23.951521000 +0000
+++ v/compiler/i386/i386op.inc	2024-05-16 15:20:21.135532388 +0000
@@ -254,7 +254,7 @@
 A_PMADDWD,
 A_PMAGW,
 A_PMULHRIW,
-A_PMULHRWA,
+A_PMULHRW,
 A_PMULHRWC,
 A_PMULHW,
 A_PMULLW,
@@ -797,6 +797,10 @@
 A_VPBLENDVB,
 A_VPBLENDW,
 A_VPCLMULQDQ,
+A_VPCLMULLQLQDQ,
+A_VPCLMULHQLQDQ,
+A_VPCLMULLQHQDQ,
+A_VPCLMULHQHQDQ,
 A_VPCMPEQB,
 A_VPCMPEQD,
 A_VPCMPEQQ,
@@ -931,11 +935,26 @@
 A_VZEROUPPER,
 A_ANDN,
 A_BEXTR,
+A_BLSI,
+A_BLSMSK,
+A_BLSR,
 A_TZCNT,
+A_BZHI,
+A_MULX,
+A_PDEP,
+A_PEXT,
 A_RORX,
 A_SARX,
 A_SHLX,
 A_SHRX,
+A_MOVBE,
+A_PCLMULQDQ,
+A_PCLMULLQLQDQ,
+A_PCLMULHQLQDQ,
+A_PCLMULLQHQDQ,
+A_PCLMULHQHQDQ,
+A_ADCX,
+A_ADOX,
 A_VBROADCASTI128,
 A_VEXTRACTI128,
 A_VINSERTI128,
@@ -1016,5 +1035,23 @@
 A_VFNMSUB231SD,
 A_VFNMSUB132SS,
 A_VFNMSUB213SS,
-A_VFNMSUB231SS
+A_VFNMSUB231SS,
+A_RDRAND,
+A_RDSEED,
+A_XGETBV,
+A_XSETBV,
+A_XSAVE,
+A_XSAVE64,
+A_XRSTOR,
+A_XRSTOR64,
+A_XSAVEOPT,
+A_XSAVEOPT64,
+A_PREFETCHWT1,
+A_SHA1RNDS4,
+A_SHA1NEXTE,
+A_SHA1MSG1,
+A_SHA1MSG2,
+A_SHA256RNDS2,
+A_SHA256MSG1,
+A_SHA256MSG2
 );
diff -ru u/compiler/i386/i386prop.inc v/compiler/i386/i386prop.inc
--- u/compiler/i386/i386prop.inc	2021-07-18 13:32:23.951521000 +0000
+++ v/compiler/i386/i386prop.inc	2024-05-16 15:20:21.135532388 +0000
@@ -797,6 +797,10 @@
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_Wop3, Ch_Rop2, Ch_Rop1)),
+(Ch: (Ch_Wop3, Ch_Rop2, Ch_Rop1)),
+(Ch: (Ch_Wop3, Ch_Rop2, Ch_Rop1)),
+(Ch: (Ch_Wop3, Ch_Rop2, Ch_Rop1)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
@@ -931,11 +935,26 @@
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
 (Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
+(Ch: (Ch_Rop1, Ch_Wop2, Ch_None)),
+(Ch: (Ch_Rop1, Ch_Wop2, Ch_None)),
+(Ch: (Ch_Rop1, Ch_Wop2, Ch_None)),
 (Ch: (Ch_Wop2, Ch_WFlags, Ch_Rop1)),
+(Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
+(Ch: (Ch_Rop1, Ch_Wop2, Ch_Wop3)),
+(Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
+(Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
 (Ch: (Ch_Rop1, Ch_Wop2, Ch_None)),
 (Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
 (Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
 (Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
+(Ch: (Ch_Rop1, Ch_Wop2, Ch_None)),
+(Ch: (Ch_Mop3, Ch_Rop2, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Rop1, Ch_Mop2, Ch_None)),
+(Ch: (Ch_Rop1, Ch_Mop2, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
@@ -1016,5 +1035,23 @@
 (Ch: (Ch_Mop3, Ch_Rop2, Ch_Rop1)),
 (Ch: (Ch_Mop3, Ch_Rop2, Ch_Rop1)),
 (Ch: (Ch_Mop3, Ch_Rop2, Ch_Rop1)),
-(Ch: (Ch_Mop3, Ch_Rop2, Ch_Rop1))
+(Ch: (Ch_Mop3, Ch_Rop2, Ch_Rop1)),
+(Ch: (Ch_Wop1, Ch_WFlags, Ch_None)),
+(Ch: (Ch_Wop1, Ch_WFlags, Ch_None)),
+(Ch: (Ch_WEAX, Ch_WEDX, Ch_RECX)),
+(Ch: (Ch_REAX, Ch_REDX, Ch_RECX)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None))
 );
diff -ru u/compiler/i386/i386tab.inc v/compiler/i386/i386tab.inc
--- u/compiler/i386/i386tab.inc	2021-07-18 13:32:23.955521000 +0000
+++ v/compiler/i386/i386tab.inc	2024-05-16 15:20:21.135532388 +0000
@@ -3865,7 +3865,7 @@
     flags   : if_pent or if_mmx or if_sm or if_cyrix
   ),
   (
-    opcode  : A_PMULHRWA;
+    opcode  : A_PMULHRW;
     ops     : 2;
     optypes : (ot_mmxreg,ot_mmxrm,ot_none,ot_none);
     code    : #2#15#15#72#1#183;
@@ -10375,6 +10375,69 @@
     flags   : if_avx or if_sandybridge
   ),
   (
+    opcode  : A_VPCLMULQDQ;
+    ops     : 4;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_immediate or ot_bits8);
+    code    : #241#242#244#250#1#68#61#80#23;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#0;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#0;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#16;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#16;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#1;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#1;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#17;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#17;
+    flags   : if_avx2
+  ),
+  (
     opcode  : A_VPCMPEQB;
     ops     : 3;
     optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
@@ -12454,6 +12517,27 @@
     flags   : if_bmi1
   ),
   (
+    opcode  : A_BLSI;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #242#249#1#243#60#139;
+    flags   : if_bmi1 or if_prot
+  ),
+  (
+    opcode  : A_BLSMSK;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #242#249#1#243#60#138;
+    flags   : if_bmi1 or if_prot
+  ),
+  (
+    opcode  : A_BLSR;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #242#249#1#243#60#137;
+    flags   : if_bmi1 or if_prot
+  ),
+  (
     opcode  : A_TZCNT;
     ops     : 2;
     optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_rm_gpr,ot_none,ot_none);
@@ -12461,6 +12545,34 @@
     flags   : if_bmi1 or if_sm
   ),
   (
+    opcode  : A_BZHI;
+    ops     : 3;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
+    code    : #242#249#1#245#62#72;
+    flags   : if_bmi2 or if_prot
+  ),
+  (
+    opcode  : A_MULX;
+    ops     : 3;
+    optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
+    code    : #220#242#249#1#246#61#80;
+    flags   : if_bmi2 or if_prot
+  ),
+  (
+    opcode  : A_PDEP;
+    ops     : 3;
+    optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
+    code    : #220#242#249#1#245#61#80;
+    flags   : if_bmi2 or if_prot
+  ),
+  (
+    opcode  : A_PEXT;
+    ops     : 3;
+    optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
+    code    : #219#242#249#1#245#61#80;
+    flags   : if_bmi2 or if_prot
+  ),
+  (
     opcode  : A_RORX;
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_immediate or ot_bits8,ot_none);
@@ -12489,6 +12601,69 @@
     flags   : if_bmi2
   ),
   (
+    opcode  : A_MOVBE;
+    ops     : 2;
+    optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_memory or ot_bits16 or ot_bits32 or ot_bits64,ot_none,ot_none);
+    code    : #208#3#15#56#240#72;
+    flags   : if_bmi2 or if_sm
+  ),
+  (
+    opcode  : A_MOVBE;
+    ops     : 2;
+    optypes : (ot_memory or ot_bits16 or ot_bits32 or ot_bits64,ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none);
+    code    : #209#3#15#56#241#65;
+    flags   : if_bmi2 or if_sm
+  ),
+  (
+    opcode  : A_PCLMULQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    code    : #241#3#15#58#68#72#22;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_PCLMULLQLQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#0;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_PCLMULHQLQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#16;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_PCLMULLQHQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#1;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_PCLMULHQHQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#17;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_ADCX;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #241#3#15#56#246#72;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_ADOX;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #219#3#15#56#246#72;
+    flags   : if_bmi2
+  ),
+  (
     opcode  : A_VBROADCASTI128;
     ops     : 2;
     optypes : (ot_ymmreg,ot_memory or ot_bits128,ot_none,ot_none);
@@ -13481,5 +13656,131 @@
     optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
     code    : #241#242#249#1#191#61#80;
     flags   : if_fma
+  ),
+  (
+    opcode  : A_RDRAND;
+    ops     : 1;
+    optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none,ot_none);
+    code    : #208#2#15#199#134;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_RDSEED;
+    ops     : 1;
+    optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none,ot_none);
+    code    : #208#2#15#199#135;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_XGETBV;
+    ops     : 0;
+    optypes : (ot_none,ot_none,ot_none,ot_none);
+    code    : #3#15#1#208;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XSETBV;
+    ops     : 0;
+    optypes : (ot_none,ot_none,ot_none,ot_none);
+    code    : #3#15#1#209;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XSAVE;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#174#132;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XSAVE64;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #214#2#15#174#132;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XRSTOR;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#174#133;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XRSTOR64;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #214#2#15#174#133;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XSAVEOPT;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#174#134;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XSAVEOPT64;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #214#2#15#174#134;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_PREFETCHWT1;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#13#130;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA1RNDS4;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_immediate,ot_none);
+    code    : #3#15#58#204#72#22;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA1NEXTE;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#200#72;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA1MSG1;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#201#72;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA1MSG2;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#202#72;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA256RNDS2;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#203#72;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA256MSG1;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#204#72;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA256MSG2;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#205#72;
+    flags   : if_bmi2
   )
 );
diff -ru u/compiler/i8086/i8086att.inc v/compiler/i8086/i8086att.inc
--- u/compiler/i8086/i8086att.inc	2021-07-18 13:32:26.215544000 +0000
+++ v/compiler/i8086/i8086att.inc	2024-05-16 15:20:09.807401795 +0000
@@ -254,7 +254,7 @@
 'pmaddwd',
 'pmagw',
 'pmulhriw',
-'pmulhrwa',
+'pmulhrw',
 'pmulhrwc',
 'pmulhw',
 'pmullw',
@@ -797,6 +797,10 @@
 'vpblendvb',
 'vpblendw',
 'vpclmulqdq',
+'vpclmullqlqdq',
+'vpclmulhqlqdq',
+'vpclmullqhqdq',
+'vpclmulhqhqdq',
 'vpcmpeqb',
 'vpcmpeqd',
 'vpcmpeqq',
@@ -931,11 +935,26 @@
 'vzeroupper',
 'andn',
 'bextr',
+'blsi',
+'blsmsk',
+'blsr',
 'tzcnt',
+'bzhi',
+'mulx',
+'pdep',
+'pext',
 'rorx',
 'sarx',
 'shlx',
 'shrx',
+'movbe',
+'pclmulqdq',
+'pclmullqlqdq',
+'pclmulhqlqdq',
+'pclmullqhqdq',
+'pclmulhqhqdq',
+'adcx',
+'adox',
 'vbroadcasti128',
 'vextracti128',
 'vinserti128',
@@ -1030,5 +1049,23 @@
 'vfnmsub231sd',
 'vfnmsub132ss',
 'vfnmsub213ss',
-'vfnmsub231ss'
+'vfnmsub231ss',
+'rdrand',
+'rdseed',
+'xgetbv',
+'xsetbv',
+'xsave',
+'xsave64',
+'xrstor',
+'xrstor64',
+'xsaveopt',
+'xsaveopt64',
+'prefetchwt1',
+'sha1rnds4',
+'sha1nexte',
+'sha1msg1',
+'sha1msg2',
+'sha256rnds2',
+'sha256msg1',
+'sha256msg2'
 );
diff -ru u/compiler/i8086/i8086atts.inc v/compiler/i8086/i8086atts.inc
--- u/compiler/i8086/i8086atts.inc	2021-07-18 13:32:26.215544000 +0000
+++ v/compiler/i8086/i8086atts.inc	2024-05-16 15:20:09.807401795 +0000
@@ -947,11 +947,14 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufINT,
 attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufINT,
+attsufINT,
 attsufNONE,
 attsufNONE,
 attsufNONE,
@@ -1027,6 +1030,40 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufINT,
+attsufNONE,
+attsufNONE,
+attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
diff -ru u/compiler/i8086/i8086int.inc v/compiler/i8086/i8086int.inc
--- u/compiler/i8086/i8086int.inc	2021-07-18 13:32:26.215544000 +0000
+++ v/compiler/i8086/i8086int.inc	2024-05-16 15:20:09.807401795 +0000
@@ -254,7 +254,7 @@
 'pmaddwd',
 'pmagw',
 'pmulhriw',
-'pmulhrwa',
+'pmulhrw',
 'pmulhrwc',
 'pmulhw',
 'pmullw',
@@ -797,6 +797,10 @@
 'vpblendvb',
 'vpblendw',
 'vpclmulqdq',
+'vpclmullqlqdq',
+'vpclmulhqlqdq',
+'vpclmullqhqdq',
+'vpclmulhqhqdq',
 'vpcmpeqb',
 'vpcmpeqd',
 'vpcmpeqq',
@@ -931,11 +935,26 @@
 'vzeroupper',
 'andn',
 'bextr',
+'blsi',
+'blsmsk',
+'blsr',
 'tzcnt',
+'bzhi',
+'mulx',
+'pdep',
+'pext',
 'rorx',
 'sarx',
 'shlx',
 'shrx',
+'movbe',
+'pclmulqdq',
+'pclmullqlqdq',
+'pclmulhqlqdq',
+'pclmullqhqdq',
+'pclmulhqhqdq',
+'adcx',
+'adox',
 'vbroadcasti128',
 'vextracti128',
 'vinserti128',
@@ -1030,5 +1049,23 @@
 'vfnmsub231sd',
 'vfnmsub132ss',
 'vfnmsub213ss',
-'vfnmsub231ss'
+'vfnmsub231ss',
+'rdrand',
+'rdseed',
+'xgetbv',
+'xsetbv',
+'xsave',
+'xsave64',
+'xrstor',
+'xrstor64',
+'xsaveopt',
+'xsaveopt64',
+'prefetchwt1',
+'sha1rnds4',
+'sha1nexte',
+'sha1msg1',
+'sha1msg2',
+'sha256rnds2',
+'sha256msg1',
+'sha256msg2'
 );
diff -ru u/compiler/i8086/i8086nop.inc v/compiler/i8086/i8086nop.inc
--- u/compiler/i8086/i8086nop.inc	2021-07-18 13:32:26.223544000 +0000
+++ v/compiler/i8086/i8086nop.inc	2024-05-16 15:20:09.807401795 +0000
@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86ins.dat }
-1954;
+1997;
diff -ru u/compiler/i8086/i8086op.inc v/compiler/i8086/i8086op.inc
--- u/compiler/i8086/i8086op.inc	2021-07-18 13:32:26.215544000 +0000
+++ v/compiler/i8086/i8086op.inc	2024-05-16 15:20:09.807401795 +0000
@@ -254,7 +254,7 @@
 A_PMADDWD,
 A_PMAGW,
 A_PMULHRIW,
-A_PMULHRWA,
+A_PMULHRW,
 A_PMULHRWC,
 A_PMULHW,
 A_PMULLW,
@@ -797,6 +797,10 @@
 A_VPBLENDVB,
 A_VPBLENDW,
 A_VPCLMULQDQ,
+A_VPCLMULLQLQDQ,
+A_VPCLMULHQLQDQ,
+A_VPCLMULLQHQDQ,
+A_VPCLMULHQHQDQ,
 A_VPCMPEQB,
 A_VPCMPEQD,
 A_VPCMPEQQ,
@@ -931,11 +935,26 @@
 A_VZEROUPPER,
 A_ANDN,
 A_BEXTR,
+A_BLSI,
+A_BLSMSK,
+A_BLSR,
 A_TZCNT,
+A_BZHI,
+A_MULX,
+A_PDEP,
+A_PEXT,
 A_RORX,
 A_SARX,
 A_SHLX,
 A_SHRX,
+A_MOVBE,
+A_PCLMULQDQ,
+A_PCLMULLQLQDQ,
+A_PCLMULHQLQDQ,
+A_PCLMULLQHQDQ,
+A_PCLMULHQHQDQ,
+A_ADCX,
+A_ADOX,
 A_VBROADCASTI128,
 A_VEXTRACTI128,
 A_VINSERTI128,
@@ -1030,5 +1049,23 @@
 A_VFNMSUB231SD,
 A_VFNMSUB132SS,
 A_VFNMSUB213SS,
-A_VFNMSUB231SS
+A_VFNMSUB231SS,
+A_RDRAND,
+A_RDSEED,
+A_XGETBV,
+A_XSETBV,
+A_XSAVE,
+A_XSAVE64,
+A_XRSTOR,
+A_XRSTOR64,
+A_XSAVEOPT,
+A_XSAVEOPT64,
+A_PREFETCHWT1,
+A_SHA1RNDS4,
+A_SHA1NEXTE,
+A_SHA1MSG1,
+A_SHA1MSG2,
+A_SHA256RNDS2,
+A_SHA256MSG1,
+A_SHA256MSG2
 );
diff -ru u/compiler/i8086/i8086prop.inc v/compiler/i8086/i8086prop.inc
--- u/compiler/i8086/i8086prop.inc	2021-07-18 13:32:26.211544000 +0000
+++ v/compiler/i8086/i8086prop.inc	2024-05-16 15:20:09.807401795 +0000
@@ -797,6 +797,10 @@
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_Wop3, Ch_Rop2, Ch_Rop1)),
+(Ch: (Ch_Wop3, Ch_Rop2, Ch_Rop1)),
+(Ch: (Ch_Wop3, Ch_Rop2, Ch_Rop1)),
+(Ch: (Ch_Wop3, Ch_Rop2, Ch_Rop1)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
@@ -931,11 +935,26 @@
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
 (Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
+(Ch: (Ch_Rop1, Ch_Wop2, Ch_None)),
+(Ch: (Ch_Rop1, Ch_Wop2, Ch_None)),
+(Ch: (Ch_Rop1, Ch_Wop2, Ch_None)),
 (Ch: (Ch_Wop2, Ch_WFlags, Ch_Rop1)),
+(Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
+(Ch: (Ch_Rop1, Ch_Wop2, Ch_Wop3)),
+(Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
+(Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
 (Ch: (Ch_Rop1, Ch_Wop2, Ch_None)),
 (Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
 (Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
 (Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
+(Ch: (Ch_Rop1, Ch_Wop2, Ch_None)),
+(Ch: (Ch_Mop3, Ch_Rop2, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Rop1, Ch_Mop2, Ch_None)),
+(Ch: (Ch_Rop1, Ch_Mop2, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
@@ -1030,5 +1049,23 @@
 (Ch: (Ch_Mop3, Ch_Rop2, Ch_Rop1)),
 (Ch: (Ch_Mop3, Ch_Rop2, Ch_Rop1)),
 (Ch: (Ch_Mop3, Ch_Rop2, Ch_Rop1)),
-(Ch: (Ch_Mop3, Ch_Rop2, Ch_Rop1))
+(Ch: (Ch_Mop3, Ch_Rop2, Ch_Rop1)),
+(Ch: (Ch_Wop1, Ch_WFlags, Ch_None)),
+(Ch: (Ch_Wop1, Ch_WFlags, Ch_None)),
+(Ch: (Ch_WEAX, Ch_WEDX, Ch_RECX)),
+(Ch: (Ch_REAX, Ch_REDX, Ch_RECX)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None))
 );
diff -ru u/compiler/i8086/i8086tab.inc v/compiler/i8086/i8086tab.inc
--- u/compiler/i8086/i8086tab.inc	2021-07-18 13:32:26.559547000 +0000
+++ v/compiler/i8086/i8086tab.inc	2024-05-16 15:20:09.807401795 +0000
@@ -3865,7 +3865,7 @@
     flags   : if_pent or if_mmx or if_sm or if_cyrix
   ),
   (
-    opcode  : A_PMULHRWA;
+    opcode  : A_PMULHRW;
     ops     : 2;
     optypes : (ot_mmxreg,ot_mmxrm,ot_none,ot_none);
     code    : #2#15#15#72#1#183;
@@ -10375,6 +10375,69 @@
     flags   : if_avx or if_sandybridge
   ),
   (
+    opcode  : A_VPCLMULQDQ;
+    ops     : 4;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_immediate or ot_bits8);
+    code    : #241#242#244#250#1#68#61#80#23;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#0;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#0;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#16;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#16;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#1;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#1;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#17;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#17;
+    flags   : if_avx2
+  ),
+  (
     opcode  : A_VPCMPEQB;
     ops     : 3;
     optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
@@ -12454,6 +12517,27 @@
     flags   : if_bmi1
   ),
   (
+    opcode  : A_BLSI;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #242#249#1#243#60#139;
+    flags   : if_bmi1 or if_prot
+  ),
+  (
+    opcode  : A_BLSMSK;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #242#249#1#243#60#138;
+    flags   : if_bmi1 or if_prot
+  ),
+  (
+    opcode  : A_BLSR;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #242#249#1#243#60#137;
+    flags   : if_bmi1 or if_prot
+  ),
+  (
     opcode  : A_TZCNT;
     ops     : 2;
     optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_rm_gpr,ot_none,ot_none);
@@ -12461,6 +12545,34 @@
     flags   : if_bmi1 or if_sm
   ),
   (
+    opcode  : A_BZHI;
+    ops     : 3;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
+    code    : #242#249#1#245#62#72;
+    flags   : if_bmi2 or if_prot
+  ),
+  (
+    opcode  : A_MULX;
+    ops     : 3;
+    optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
+    code    : #220#242#249#1#246#61#80;
+    flags   : if_bmi2 or if_prot
+  ),
+  (
+    opcode  : A_PDEP;
+    ops     : 3;
+    optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
+    code    : #220#242#249#1#245#61#80;
+    flags   : if_bmi2 or if_prot
+  ),
+  (
+    opcode  : A_PEXT;
+    ops     : 3;
+    optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
+    code    : #219#242#249#1#245#61#80;
+    flags   : if_bmi2 or if_prot
+  ),
+  (
     opcode  : A_RORX;
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_immediate or ot_bits8,ot_none);
@@ -12489,6 +12601,69 @@
     flags   : if_bmi2
   ),
   (
+    opcode  : A_MOVBE;
+    ops     : 2;
+    optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_memory or ot_bits16 or ot_bits32 or ot_bits64,ot_none,ot_none);
+    code    : #208#3#15#56#240#72;
+    flags   : if_bmi2 or if_sm
+  ),
+  (
+    opcode  : A_MOVBE;
+    ops     : 2;
+    optypes : (ot_memory or ot_bits16 or ot_bits32 or ot_bits64,ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none);
+    code    : #209#3#15#56#241#65;
+    flags   : if_bmi2 or if_sm
+  ),
+  (
+    opcode  : A_PCLMULQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    code    : #241#3#15#58#68#72#22;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_PCLMULLQLQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#0;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_PCLMULHQLQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#16;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_PCLMULLQHQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#1;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_PCLMULHQHQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#17;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_ADCX;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #241#3#15#56#246#72;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_ADOX;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #219#3#15#56#246#72;
+    flags   : if_bmi2
+  ),
+  (
     opcode  : A_VBROADCASTI128;
     ops     : 2;
     optypes : (ot_ymmreg,ot_memory or ot_bits128,ot_none,ot_none);
@@ -13677,5 +13852,131 @@
     optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
     code    : #241#242#249#1#191#61#80;
     flags   : if_fma
+  ),
+  (
+    opcode  : A_RDRAND;
+    ops     : 1;
+    optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none,ot_none);
+    code    : #208#2#15#199#134;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_RDSEED;
+    ops     : 1;
+    optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none,ot_none);
+    code    : #208#2#15#199#135;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_XGETBV;
+    ops     : 0;
+    optypes : (ot_none,ot_none,ot_none,ot_none);
+    code    : #3#15#1#208;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XSETBV;
+    ops     : 0;
+    optypes : (ot_none,ot_none,ot_none,ot_none);
+    code    : #3#15#1#209;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XSAVE;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#174#132;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XSAVE64;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #214#2#15#174#132;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XRSTOR;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#174#133;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XRSTOR64;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #214#2#15#174#133;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XSAVEOPT;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#174#134;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XSAVEOPT64;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #214#2#15#174#134;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_PREFETCHWT1;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#13#130;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA1RNDS4;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_immediate,ot_none);
+    code    : #3#15#58#204#72#22;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA1NEXTE;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#200#72;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA1MSG1;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#201#72;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA1MSG2;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#202#72;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA256RNDS2;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#203#72;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA256MSG1;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#204#72;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA256MSG2;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#205#72;
+    flags   : if_bmi2
   )
 );
diff -ru u/compiler/x86/aasmcpu.pas v/compiler/x86/aasmcpu.pas
--- u/compiler/x86/aasmcpu.pas	2021-07-18 13:32:26.211544000 +0000
+++ v/compiler/x86/aasmcpu.pas	2024-05-16 15:27:07.632219274 +0000
@@ -188,7 +188,7 @@
 {$elseif defined(i8086)}
       instabentries = {$i i8086nop.inc}
 {$endif}
-      maxinfolen    = 8;
+      maxinfolen    = 9;
       MaxInsChanges = 3; { Max things a instruction can change }
 
     type
diff -ru u/compiler/x86/x86ins.dat v/compiler/x86/x86ins.dat
--- u/compiler/x86/x86ins.dat	2021-07-18 13:32:26.423546000 +0000
+++ v/compiler/x86/x86ins.dat	2024-05-16 15:43:40.815670310 +0000
@@ -1379,7 +1379,7 @@
 (Ch_All, Ch_None, Ch_None)
 mmxreg,mmxrm          \2\x0F\x5D\110                  PENT,MMX,SM,CYRIX
 
-[PMULHRWA]
+[PMULHRW]
 (Ch_All, Ch_None, Ch_None)
 mmxreg,mmxrm          \2\x0F\x0F\110\1\xB7            PENT,3DNOW,SM
 
@@ -4108,6 +4108,27 @@
 [VPCLMULQDQ]
 (Ch_All, Ch_None, Ch_None)
 xmmreg,xmmreg,xmmrm,imm8             \361\362\372\1\x44\75\120\27         AVX,SANDYBRIDGE
+ymmreg,ymmreg,ymmrm,imm8             \361\362\364\372\1\x44\75\120\27     AVX2
+
+[VPCLMULLQLQDQ]
+(Ch_Wop3, Ch_Rop2, Ch_Rop1)
+xmmreg,xmmreg,xmmrm                 \361\362\372\1\x44\75\120\1\x00         AVX,SANDYBRIDGE
+ymmreg,ymmreg,ymmrm                 \361\362\364\372\1\x44\75\120\1\x00     AVX2
+
+[VPCLMULHQLQDQ]
+(Ch_Wop3, Ch_Rop2, Ch_Rop1)
+xmmreg,xmmreg,xmmrm                 \361\362\372\1\x44\75\120\1\x10         AVX,SANDYBRIDGE
+ymmreg,ymmreg,ymmrm                 \361\362\364\372\1\x44\75\120\1\x10     AVX2
+
+[VPCLMULLQHQDQ]
+(Ch_Wop3, Ch_Rop2, Ch_Rop1)
+xmmreg,xmmreg,xmmrm                 \361\362\372\1\x44\75\120\1\x01         AVX,SANDYBRIDGE
+ymmreg,ymmreg,ymmrm                 \361\362\364\372\1\x44\75\120\1\x01     AVX2
+
+[VPCLMULHQHQDQ]
+(Ch_Wop3, Ch_Rop2, Ch_Rop1)
+xmmreg,xmmreg,xmmrm                 \361\362\372\1\x44\75\120\1\x11         AVX,SANDYBRIDGE
+ymmreg,ymmreg,ymmrm                 \361\362\364\372\1\x44\75\120\1\x11     AVX2
 
 [VPCMPEQB]
 (Ch_All, Ch_None, Ch_None)
@@ -4819,6 +4840,21 @@
 reg32,rm32,reg32                      \362\371\1\xf7\76\110               BMI1
 reg64,rm64,reg64                      \362\363\371\1\xf7\76\110           BMI1,X86_64
 
+[BLSI]
+(Ch_Rop1, Ch_Wop2, Ch_None)
+reg32,rm32                            \362\371\1\xf3\74\213               BMI1,PROT
+reg64,rm64                            \362\363\371\1\xf3\74\213           BMI1,PROT,X86_64
+
+[BLSMSK]
+(Ch_Rop1, Ch_Wop2, Ch_None)
+reg32,rm32                            \362\371\1\xf3\74\212               BMI1,PROT
+reg64,rm64                            \362\363\371\1\xf3\74\212           BMI1,PROT,X86_64
+
+[BLSR]
+(Ch_Rop1, Ch_Wop2, Ch_None)
+reg32,rm32                            \362\371\1\xf3\74\211               BMI1,PROT
+reg64,rm64                            \362\363\371\1\xf3\74\211           BMI1,PROT,X86_64
+
 [TZCNT]
 (Ch_Wop2, Ch_WFlags, Ch_Rop1)
 reg16|32|64,regmem                    \320\333\2\x0F\xBC\110              BMI1,SM
@@ -4826,6 +4862,25 @@
 ;*******************************************************************************
 ;********** BMI2 ***************************************************************
 ;*******************************************************************************
+[BZHI]
+(Ch_Rop1, Ch_Rop2, Ch_Wop3)
+reg32,rm32,reg32                      \362\371\1\xf5\76\110               BMI2,PROT
+reg64,rm64,reg64                      \362\363\371\1\xf5\76\110           BMI2,PROT,X86_64
+
+[MULX]
+(Ch_Rop1, Ch_Wop2, Ch_Wop3)
+reg32,reg32,rm32                      \334\362\371\1\xf6\75\120           BMI2,PROT
+reg64,reg64,rm64                      \334\362\363\371\1\xf6\75\120       BMI2,PROT,X86_64
+
+[PDEP]
+(Ch_Rop1, Ch_Rop2, Ch_Wop3)
+reg32,reg32,rm32                      \334\362\371\1\xf5\75\120           BMI2,PROT
+reg64,reg64,rm64                      \334\362\363\371\1\xf5\75\120       BMI2,PROT,X86_64
+
+[PEXT]
+(Ch_Rop1, Ch_Rop2, Ch_Wop3)
+reg32,reg32,rm32                      \333\362\371\1\xf5\75\120           BMI2,PROT
+reg64,reg64,rm64                      \333\362\363\371\1\xf5\75\120       BMI2,PROT,X86_64
 
 [RORX]
 (Ch_Rop1, Ch_Wop2, Ch_None)
@@ -4847,6 +4902,48 @@
 reg32,rm32,reg32                      \334\362\371\1\xf7\76\110           BMI2
 reg64,rm64,reg64                      \334\362\363\371\1\xf7\76\110       BMI2,X86_64
 
+[MOVBE,movbeX]
+(Ch_Rop1, Ch_Wop2, Ch_None)
+reg16|32|64,mem16|32|64              \320\3\xf\x38\xf0\110           BMI2,SM
+mem16|32|64,reg16|32|64              \321\3\xf\x38\xf1\101           BMI2,SM
+
+;*******************************************************************************
+;********* CLMUL ***************************************************************
+;*******************************************************************************
+
+[PCLMULQDQ]
+(Ch_Mop3, Ch_Rop2, Ch_None)
+xmmreg,xmmrm,imm8                    \361\3\xf\x3A\x44\110\26        AVX,SANDYBRIDGE
+
+[PCLMULLQLQDQ]
+(Ch_Mop2, Ch_Rop1, Ch_None)
+xmmreg,xmmrm                         \361\3\xf\x3A\x44\110\1\x00     AVX,SANDYBRIDGE
+
+[PCLMULHQLQDQ]
+(Ch_Mop2, Ch_Rop1, Ch_None)
+xmmreg,xmmrm                         \361\3\xf\x3A\x44\110\1\x10     AVX,SANDYBRIDGE
+
+[PCLMULLQHQDQ]
+(Ch_Mop2, Ch_Rop1, Ch_None)
+xmmreg,xmmrm                         \361\3\xf\x3A\x44\110\1\x01     AVX,SANDYBRIDGE
+
+[PCLMULHQHQDQ]
+(Ch_Mop2, Ch_Rop1, Ch_None)
+xmmreg,xmmrm                         \361\3\xf\x3A\x44\110\1\x11     AVX,SANDYBRIDGE
+
+;*******************************************************************************
+;********** ADX ****************************************************************
+;*******************************************************************************
+
+[ADCX,adcxX]
+(Ch_Rop1, Ch_Mop2, Ch_None)
+reg32,rm32                            \361\3\xf\x38\xf6\110               BMI2
+reg64,rm64                            \361\326\3\xf\x38\xf6\110           BMI2,X86_64
+
+[ADOX,adoxX]
+(Ch_Rop1, Ch_Mop2, Ch_None)
+reg32,rm32                            \333\3\xf\x38\xf6\110               BMI2
+reg64,rm64                            \333\326\3\xf\x38\xf6\110           BMI2,X86_64
 
 ;*******************************************************************************
 ;********** AVX2 ***************************************************************
@@ -5316,3 +5413,88 @@
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
 xmmreg,xmmreg,xmmrm                  \361\362\371\1\xBF\75\120            FMA
 
+;*******************************************************************************
+;********** RAND ***************************************************************
+;*******************************************************************************
+[RDRAND]
+(Ch_Wop1, Ch_WFlags, Ch_None)
+reg16|32|64                          \320\2\x0F\xC7\206                   BMI2
+
+[RDSEED]
+(Ch_Wop1, Ch_WFlags, Ch_None)
+reg16|32|64                          \320\2\x0F\xC7\207                   BMI2
+
+;*******************************************************************************
+;********** XSAVE **************************************************************
+;*******************************************************************************
+[XGETBV]
+(Ch_WEAX, Ch_WEDX, Ch_RECX)
+void                  \3\x0F\x01\xD0                                      AVX2
+
+[XSETBV]
+(Ch_REAX, Ch_REDX, Ch_RECX)
+void                  \3\x0F\x01\xD1                                      AVX2
+
+[XSAVE]
+(Ch_All, Ch_None, Ch_None)
+mem                   \2\x0F\xAE\204                                      AVX2
+
+[XSAVE64]
+(Ch_All, Ch_None, Ch_None)
+mem                   \326\2\x0F\xAE\204                                  AVX2
+
+[XRSTOR]
+(Ch_All, Ch_None, Ch_None)
+mem                   \2\x0F\xAE\205                                      AVX2
+
+[XRSTOR64]
+(Ch_All, Ch_None, Ch_None)
+mem                   \326\2\x0F\xAE\205                                  AVX2
+
+[XSAVEOPT]
+(Ch_All, Ch_None, Ch_None)
+mem                   \2\x0F\xAE\206                                      AVX2
+
+[XSAVEOPT64]
+(Ch_All, Ch_None, Ch_None)
+mem                   \326\2\x0F\xAE\206                                  AVX2
+
+;*******************************************************************************
+;********** PREFETCHWT1 ********************************************************
+;*******************************************************************************
+[PREFETCHWT1,prefetchwt1X]
+(Ch_All, Ch_None, Ch_None)
+mem                   \2\x0F\x0D\202                                      BMI2
+
+;*******************************************************************************
+;********* SHA *****************************************************************
+;*******************************************************************************
+
+[SHA1RNDS4]
+(Ch_Mop2, Ch_Rop1, Ch_None)
+xmmreg,xmmrm,imm                          \3\x0F\x3A\xCC\110\26                     BMI2
+
+[SHA1NEXTE]
+(Ch_Mop2, Ch_Rop1, Ch_None)
+xmmreg,xmmrm                              \3\x0F\x38\xC8\110                        BMI2
+
+[SHA1MSG1]
+(Ch_Mop2, Ch_Rop1, Ch_None)
+xmmreg,xmmrm                              \3\x0F\x38\xC9\110                        BMI2
+
+[SHA1MSG2]
+(Ch_Mop2, Ch_Rop1, Ch_None)
+xmmreg,xmmrm                              \3\x0F\x38\xCA\110                        BMI2
+
+[SHA256RNDS2]
+; reads also xmm0 ! 
+(Ch_Mop2, Ch_Rop1, Ch_None)
+xmmreg,xmmrm                              \3\x0F\x38\xCB\110                        BMI2
+
+[SHA256MSG1]
+(Ch_Mop2, Ch_Rop1, Ch_None)
+xmmreg,xmmrm                              \3\x0F\x38\xCC\110                        BMI2
+
+[SHA256MSG2]
+(Ch_Mop2, Ch_Rop1, Ch_None)
+xmmreg,xmmrm                              \3\x0F\x38\xCD\110                        BMI2
diff -ru u/compiler/x86_64/x8664ats.inc v/compiler/x86_64/x8664ats.inc
--- u/compiler/x86_64/x8664ats.inc	2021-07-18 13:32:26.819550000 +0000
+++ v/compiler/x86_64/x8664ats.inc	2024-05-16 15:19:47.271141978 +0000
@@ -941,11 +941,14 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufINT,
 attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufINT,
+attsufINT,
 attsufNONE,
 attsufNONE,
 attsufNONE,
@@ -1007,6 +1010,40 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufINT,
+attsufNONE,
+attsufNONE,
+attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
diff -ru u/compiler/x86_64/x8664att.inc v/compiler/x86_64/x8664att.inc
--- u/compiler/x86_64/x8664att.inc	2021-07-18 13:32:26.555547000 +0000
+++ v/compiler/x86_64/x8664att.inc	2024-05-16 15:19:47.271141978 +0000
@@ -245,7 +245,7 @@
 'pmaddwd',
 'pmagw',
 'pmulhriw',
-'pmulhrwa',
+'pmulhrw',
 'pmulhrwc',
 'pmulhw',
 'pmullw',
@@ -791,6 +791,10 @@
 'vpblendvb',
 'vpblendw',
 'vpclmulqdq',
+'vpclmullqlqdq',
+'vpclmulhqlqdq',
+'vpclmullqhqdq',
+'vpclmulhqhqdq',
 'vpcmpeqb',
 'vpcmpeqd',
 'vpcmpeqq',
@@ -925,11 +929,26 @@
 'vzeroupper',
 'andn',
 'bextr',
+'blsi',
+'blsmsk',
+'blsr',
 'tzcnt',
+'bzhi',
+'mulx',
+'pdep',
+'pext',
 'rorx',
 'sarx',
 'shlx',
 'shrx',
+'movbe',
+'pclmulqdq',
+'pclmullqlqdq',
+'pclmulhqlqdq',
+'pclmullqhqdq',
+'pclmulhqhqdq',
+'adcx',
+'adox',
 'vbroadcasti128',
 'vextracti128',
 'vinserti128',
@@ -1010,5 +1029,23 @@
 'vfnmsub231sd',
 'vfnmsub132ss',
 'vfnmsub213ss',
-'vfnmsub231ss'
+'vfnmsub231ss',
+'rdrand',
+'rdseed',
+'xgetbv',
+'xsetbv',
+'xsave',
+'xsave64',
+'xrstor',
+'xrstor64',
+'xsaveopt',
+'xsaveopt64',
+'prefetchwt1',
+'sha1rnds4',
+'sha1nexte',
+'sha1msg1',
+'sha1msg2',
+'sha256rnds2',
+'sha256msg1',
+'sha256msg2'
 );
diff -ru u/compiler/x86_64/x8664int.inc v/compiler/x86_64/x8664int.inc
--- u/compiler/x86_64/x8664int.inc	2021-07-18 13:32:26.819550000 +0000
+++ v/compiler/x86_64/x8664int.inc	2024-05-16 15:19:47.271141978 +0000
@@ -245,7 +245,7 @@
 'pmaddwd',
 'pmagw',
 'pmulhriw',
-'pmulhrwa',
+'pmulhrw',
 'pmulhrwc',
 'pmulhw',
 'pmullw',
@@ -791,6 +791,10 @@
 'vpblendvb',
 'vpblendw',
 'vpclmulqdq',
+'vpclmullqlqdq',
+'vpclmulhqlqdq',
+'vpclmullqhqdq',
+'vpclmulhqhqdq',
 'vpcmpeqb',
 'vpcmpeqd',
 'vpcmpeqq',
@@ -925,11 +929,26 @@
 'vzeroupper',
 'andn',
 'bextr',
+'blsi',
+'blsmsk',
+'blsr',
 'tzcnt',
+'bzhi',
+'mulx',
+'pdep',
+'pext',
 'rorx',
 'sarx',
 'shlx',
 'shrx',
+'movbe',
+'pclmulqdq',
+'pclmullqlqdq',
+'pclmulhqlqdq',
+'pclmullqhqdq',
+'pclmulhqhqdq',
+'adcx',
+'adox',
 'vbroadcasti128',
 'vextracti128',
 'vinserti128',
@@ -1010,5 +1029,23 @@
 'vfnmsub231sd',
 'vfnmsub132ss',
 'vfnmsub213ss',
-'vfnmsub231ss'
+'vfnmsub231ss',
+'rdrand',
+'rdseed',
+'xgetbv',
+'xsetbv',
+'xsave',
+'xsave64',
+'xrstor',
+'xrstor64',
+'xsaveopt',
+'xsaveopt64',
+'prefetchwt1',
+'sha1rnds4',
+'sha1nexte',
+'sha1msg1',
+'sha1msg2',
+'sha256rnds2',
+'sha256msg1',
+'sha256msg2'
 );
diff -ru u/compiler/x86_64/x8664nop.inc v/compiler/x86_64/x8664nop.inc
--- u/compiler/x86_64/x8664nop.inc	2021-07-18 13:32:26.823550000 +0000
+++ v/compiler/x86_64/x8664nop.inc	2024-05-16 15:19:47.271141978 +0000
@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86ins.dat }
-1947;
+1999;
diff -ru u/compiler/x86_64/x8664op.inc v/compiler/x86_64/x8664op.inc
--- u/compiler/x86_64/x8664op.inc	2021-07-18 13:32:26.551547000 +0000
+++ v/compiler/x86_64/x8664op.inc	2024-05-16 15:19:47.271141978 +0000
@@ -245,7 +245,7 @@
 A_PMADDWD,
 A_PMAGW,
 A_PMULHRIW,
-A_PMULHRWA,
+A_PMULHRW,
 A_PMULHRWC,
 A_PMULHW,
 A_PMULLW,
@@ -791,6 +791,10 @@
 A_VPBLENDVB,
 A_VPBLENDW,
 A_VPCLMULQDQ,
+A_VPCLMULLQLQDQ,
+A_VPCLMULHQLQDQ,
+A_VPCLMULLQHQDQ,
+A_VPCLMULHQHQDQ,
 A_VPCMPEQB,
 A_VPCMPEQD,
 A_VPCMPEQQ,
@@ -925,11 +929,26 @@
 A_VZEROUPPER,
 A_ANDN,
 A_BEXTR,
+A_BLSI,
+A_BLSMSK,
+A_BLSR,
 A_TZCNT,
+A_BZHI,
+A_MULX,
+A_PDEP,
+A_PEXT,
 A_RORX,
 A_SARX,
 A_SHLX,
 A_SHRX,
+A_MOVBE,
+A_PCLMULQDQ,
+A_PCLMULLQLQDQ,
+A_PCLMULHQLQDQ,
+A_PCLMULLQHQDQ,
+A_PCLMULHQHQDQ,
+A_ADCX,
+A_ADOX,
 A_VBROADCASTI128,
 A_VEXTRACTI128,
 A_VINSERTI128,
@@ -1010,5 +1029,23 @@
 A_VFNMSUB231SD,
 A_VFNMSUB132SS,
 A_VFNMSUB213SS,
-A_VFNMSUB231SS
+A_VFNMSUB231SS,
+A_RDRAND,
+A_RDSEED,
+A_XGETBV,
+A_XSETBV,
+A_XSAVE,
+A_XSAVE64,
+A_XRSTOR,
+A_XRSTOR64,
+A_XSAVEOPT,
+A_XSAVEOPT64,
+A_PREFETCHWT1,
+A_SHA1RNDS4,
+A_SHA1NEXTE,
+A_SHA1MSG1,
+A_SHA1MSG2,
+A_SHA256RNDS2,
+A_SHA256MSG1,
+A_SHA256MSG2
 );
diff -ru u/compiler/x86_64/x8664pro.inc v/compiler/x86_64/x8664pro.inc
--- u/compiler/x86_64/x8664pro.inc	2021-07-18 13:32:26.423546000 +0000
+++ v/compiler/x86_64/x8664pro.inc	2024-05-16 15:19:47.271141978 +0000
@@ -791,6 +791,10 @@
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_Wop3, Ch_Rop2, Ch_Rop1)),
+(Ch: (Ch_Wop3, Ch_Rop2, Ch_Rop1)),
+(Ch: (Ch_Wop3, Ch_Rop2, Ch_Rop1)),
+(Ch: (Ch_Wop3, Ch_Rop2, Ch_Rop1)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
@@ -925,11 +929,26 @@
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
 (Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
+(Ch: (Ch_Rop1, Ch_Wop2, Ch_None)),
+(Ch: (Ch_Rop1, Ch_Wop2, Ch_None)),
+(Ch: (Ch_Rop1, Ch_Wop2, Ch_None)),
 (Ch: (Ch_Wop2, Ch_WFlags, Ch_Rop1)),
+(Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
+(Ch: (Ch_Rop1, Ch_Wop2, Ch_Wop3)),
+(Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
+(Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
 (Ch: (Ch_Rop1, Ch_Wop2, Ch_None)),
 (Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
 (Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
 (Ch: (Ch_Rop1, Ch_Rop2, Ch_Wop3)),
+(Ch: (Ch_Rop1, Ch_Wop2, Ch_None)),
+(Ch: (Ch_Mop3, Ch_Rop2, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Rop1, Ch_Mop2, Ch_None)),
+(Ch: (Ch_Rop1, Ch_Mop2, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
@@ -1010,5 +1029,23 @@
 (Ch: (Ch_Mop3, Ch_Rop2, Ch_Rop1)),
 (Ch: (Ch_Mop3, Ch_Rop2, Ch_Rop1)),
 (Ch: (Ch_Mop3, Ch_Rop2, Ch_Rop1)),
-(Ch: (Ch_Mop3, Ch_Rop2, Ch_Rop1))
+(Ch: (Ch_Mop3, Ch_Rop2, Ch_Rop1)),
+(Ch: (Ch_Wop1, Ch_WFlags, Ch_None)),
+(Ch: (Ch_Wop1, Ch_WFlags, Ch_None)),
+(Ch: (Ch_WEAX, Ch_WEDX, Ch_RECX)),
+(Ch: (Ch_REAX, Ch_REDX, Ch_RECX)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
+(Ch: (Ch_Mop2, Ch_Rop1, Ch_None))
 );
diff -ru u/compiler/x86_64/x8664tab.inc v/compiler/x86_64/x8664tab.inc
--- u/compiler/x86_64/x8664tab.inc	2021-07-18 13:32:26.819550000 +0000
+++ v/compiler/x86_64/x8664tab.inc	2024-05-16 15:19:47.271141978 +0000
@@ -3795,7 +3795,7 @@
     flags   : if_pent or if_mmx or if_sm or if_cyrix
   ),
   (
-    opcode  : A_PMULHRWA;
+    opcode  : A_PMULHRW;
     ops     : 2;
     optypes : (ot_mmxreg,ot_mmxrm,ot_none,ot_none);
     code    : #2#15#15#72#1#183;
@@ -10480,6 +10480,69 @@
     flags   : if_avx or if_sandybridge
   ),
   (
+    opcode  : A_VPCLMULQDQ;
+    ops     : 4;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_immediate or ot_bits8);
+    code    : #241#242#244#250#1#68#61#80#23;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#0;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#0;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#16;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#16;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#1;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#1;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#17;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#17;
+    flags   : if_avx2
+  ),
+  (
     opcode  : A_VPCMPEQB;
     ops     : 3;
     optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
@@ -12573,6 +12636,48 @@
     flags   : if_bmi1 or if_x86_64
   ),
   (
+    opcode  : A_BLSI;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #242#249#1#243#60#139;
+    flags   : if_bmi1 or if_prot
+  ),
+  (
+    opcode  : A_BLSI;
+    ops     : 2;
+    optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_none,ot_none);
+    code    : #242#243#249#1#243#60#139;
+    flags   : if_bmi1 or if_prot or if_x86_64
+  ),
+  (
+    opcode  : A_BLSMSK;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #242#249#1#243#60#138;
+    flags   : if_bmi1 or if_prot
+  ),
+  (
+    opcode  : A_BLSMSK;
+    ops     : 2;
+    optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_none,ot_none);
+    code    : #242#243#249#1#243#60#138;
+    flags   : if_bmi1 or if_prot or if_x86_64
+  ),
+  (
+    opcode  : A_BLSR;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #242#249#1#243#60#137;
+    flags   : if_bmi1 or if_prot
+  ),
+  (
+    opcode  : A_BLSR;
+    ops     : 2;
+    optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_none,ot_none);
+    code    : #242#243#249#1#243#60#137;
+    flags   : if_bmi1 or if_prot or if_x86_64
+  ),
+  (
     opcode  : A_TZCNT;
     ops     : 2;
     optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_rm_gpr,ot_none,ot_none);
@@ -12580,6 +12685,62 @@
     flags   : if_bmi1 or if_sm
   ),
   (
+    opcode  : A_BZHI;
+    ops     : 3;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
+    code    : #242#249#1#245#62#72;
+    flags   : if_bmi2 or if_prot
+  ),
+  (
+    opcode  : A_BZHI;
+    ops     : 3;
+    optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_reg64,ot_none);
+    code    : #242#243#249#1#245#62#72;
+    flags   : if_bmi2 or if_prot or if_x86_64
+  ),
+  (
+    opcode  : A_MULX;
+    ops     : 3;
+    optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
+    code    : #220#242#249#1#246#61#80;
+    flags   : if_bmi2 or if_prot
+  ),
+  (
+    opcode  : A_MULX;
+    ops     : 3;
+    optypes : (ot_reg64,ot_reg64,ot_rm_gpr or ot_bits64,ot_none);
+    code    : #220#242#243#249#1#246#61#80;
+    flags   : if_bmi2 or if_prot or if_x86_64
+  ),
+  (
+    opcode  : A_PDEP;
+    ops     : 3;
+    optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
+    code    : #220#242#249#1#245#61#80;
+    flags   : if_bmi2 or if_prot
+  ),
+  (
+    opcode  : A_PDEP;
+    ops     : 3;
+    optypes : (ot_reg64,ot_reg64,ot_rm_gpr or ot_bits64,ot_none);
+    code    : #220#242#243#249#1#245#61#80;
+    flags   : if_bmi2 or if_prot or if_x86_64
+  ),
+  (
+    opcode  : A_PEXT;
+    ops     : 3;
+    optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
+    code    : #219#242#249#1#245#61#80;
+    flags   : if_bmi2 or if_prot
+  ),
+  (
+    opcode  : A_PEXT;
+    ops     : 3;
+    optypes : (ot_reg64,ot_reg64,ot_rm_gpr or ot_bits64,ot_none);
+    code    : #219#242#243#249#1#245#61#80;
+    flags   : if_bmi2 or if_prot or if_x86_64
+  ),
+  (
     opcode  : A_RORX;
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_immediate or ot_bits8,ot_none);
@@ -12636,6 +12797,83 @@
     flags   : if_bmi2 or if_x86_64
   ),
   (
+    opcode  : A_MOVBE;
+    ops     : 2;
+    optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_memory or ot_bits16 or ot_bits32 or ot_bits64,ot_none,ot_none);
+    code    : #208#3#15#56#240#72;
+    flags   : if_bmi2 or if_sm
+  ),
+  (
+    opcode  : A_MOVBE;
+    ops     : 2;
+    optypes : (ot_memory or ot_bits16 or ot_bits32 or ot_bits64,ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none);
+    code    : #209#3#15#56#241#65;
+    flags   : if_bmi2 or if_sm
+  ),
+  (
+    opcode  : A_PCLMULQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    code    : #241#3#15#58#68#72#22;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_PCLMULLQLQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#0;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_PCLMULHQLQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#16;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_PCLMULLQHQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#1;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_PCLMULHQHQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#17;
+    flags   : if_avx or if_sandybridge
+  ),
+  (
+    opcode  : A_ADCX;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #241#3#15#56#246#72;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_ADCX;
+    ops     : 2;
+    optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_none,ot_none);
+    code    : #241#214#3#15#56#246#72;
+    flags   : if_bmi2 or if_x86_64
+  ),
+  (
+    opcode  : A_ADOX;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #219#3#15#56#246#72;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_ADOX;
+    ops     : 2;
+    optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_none,ot_none);
+    code    : #219#214#3#15#56#246#72;
+    flags   : if_bmi2 or if_x86_64
+  ),
+  (
     opcode  : A_VBROADCASTI128;
     ops     : 2;
     optypes : (ot_ymmreg,ot_memory or ot_bits128,ot_none,ot_none);
@@ -13628,5 +13866,131 @@
     optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
     code    : #241#242#249#1#191#61#80;
     flags   : if_fma
+  ),
+  (
+    opcode  : A_RDRAND;
+    ops     : 1;
+    optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none,ot_none);
+    code    : #208#2#15#199#134;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_RDSEED;
+    ops     : 1;
+    optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none,ot_none);
+    code    : #208#2#15#199#135;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_XGETBV;
+    ops     : 0;
+    optypes : (ot_none,ot_none,ot_none,ot_none);
+    code    : #3#15#1#208;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XSETBV;
+    ops     : 0;
+    optypes : (ot_none,ot_none,ot_none,ot_none);
+    code    : #3#15#1#209;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XSAVE;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#174#132;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XSAVE64;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #214#2#15#174#132;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XRSTOR;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#174#133;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XRSTOR64;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #214#2#15#174#133;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XSAVEOPT;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#174#134;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_XSAVEOPT64;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #214#2#15#174#134;
+    flags   : if_avx2
+  ),
+  (
+    opcode  : A_PREFETCHWT1;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#13#130;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA1RNDS4;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_immediate,ot_none);
+    code    : #3#15#58#204#72#22;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA1NEXTE;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#200#72;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA1MSG1;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#201#72;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA1MSG2;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#202#72;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA256RNDS2;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#203#72;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA256MSG1;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#204#72;
+    flags   : if_bmi2
+  ),
+  (
+    opcode  : A_SHA256MSG2;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#205#72;
+    flags   : if_bmi2
   )
 );
diff -ru a/compiler/i386/i386att.inc b/compiler/i386/i386att.inc
--- a/compiler/i386/i386att.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/i386/i386att.inc	2024-05-16 04:37:35.934890000 +0000
@@ -254,7 +254,7 @@
 'pmaddwd',
 'pmagw',
 'pmulhriw',
-'pmulhrwa',
+'pmulhrw',
 'pmulhrwc',
 'pmulhw',
 'pmullw',
@@ -875,6 +875,10 @@
 'vpblendvb',
 'vpblendw',
 'vpclmulqdq',
+'vpclmullqlqdq',
+'vpclmulhqlqdq',
+'vpclmullqhqdq',
+'vpclmulhqhqdq',
 'vpcmpeqb',
 'vpcmpeqd',
 'vpcmpeqq',
@@ -1009,11 +1013,26 @@
 'vzeroupper',
 'andn',
 'bextr',
+'blsi',
+'blsmsk',
+'blsr',
 'tzcnt',
+'bzhi',
+'mulx',
+'pdep',
+'pext',
 'rorx',
 'sarx',
 'shlx',
 'shrx',
+'movbe',
+'pclmulqdq',
+'pclmullqlqdq',
+'pclmulhqlqdq',
+'pclmullqhqdq',
+'pclmulhqhqdq',
+'adcx',
+'adox',
 'vbroadcasti128',
 'vextracti128',
 'vinserti128',
@@ -1112,5 +1131,19 @@
 'rdrand',
 'rdseed',
 'xgetbv',
-'prefetchwt1'
+'xsetbv',
+'xsave',
+'xsave64',
+'xrstor',
+'xrstor64',
+'xsaveopt',
+'xsaveopt64',
+'prefetchwt1',
+'sha1rnds4',
+'sha1nexte',
+'sha1msg1',
+'sha1msg2',
+'sha256rnds2',
+'sha256msg1',
+'sha256msg2'
 );
diff -ru a/compiler/i386/i386atts.inc b/compiler/i386/i386atts.inc
--- a/compiler/i386/i386atts.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/i386/i386atts.inc	2024-05-16 04:37:35.934890000 +0000
@@ -1025,6 +1025,23 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufINT,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufINT,
+attsufINT,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
@@ -1105,6 +1122,22 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufINT,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
 attsufINT,
 attsufNONE,
 attsufNONE,
@@ -1112,5 +1145,5 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
-attsufINT
+attsufNONE
 );
diff -ru a/compiler/i386/i386int.inc b/compiler/i386/i386int.inc
--- a/compiler/i386/i386int.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/i386/i386int.inc	2024-05-16 04:37:35.934890000 +0000
@@ -254,7 +254,7 @@
 'pmaddwd',
 'pmagw',
 'pmulhriw',
-'pmulhrwa',
+'pmulhrw',
 'pmulhrwc',
 'pmulhw',
 'pmullw',
@@ -875,6 +875,10 @@
 'vpblendvb',
 'vpblendw',
 'vpclmulqdq',
+'vpclmullqlqdq',
+'vpclmulhqlqdq',
+'vpclmullqhqdq',
+'vpclmulhqhqdq',
 'vpcmpeqb',
 'vpcmpeqd',
 'vpcmpeqq',
@@ -1009,11 +1013,26 @@
 'vzeroupper',
 'andn',
 'bextr',
+'blsi',
+'blsmsk',
+'blsr',
 'tzcnt',
+'bzhi',
+'mulx',
+'pdep',
+'pext',
 'rorx',
 'sarx',
 'shlx',
 'shrx',
+'movbe',
+'pclmulqdq',
+'pclmullqlqdq',
+'pclmulhqlqdq',
+'pclmullqhqdq',
+'pclmulhqhqdq',
+'adcx',
+'adox',
 'vbroadcasti128',
 'vextracti128',
 'vinserti128',
@@ -1112,5 +1131,19 @@
 'rdrand',
 'rdseed',
 'xgetbv',
-'prefetchwt1'
+'xsetbv',
+'xsave',
+'xsave64',
+'xrstor',
+'xrstor64',
+'xsaveopt',
+'xsaveopt64',
+'prefetchwt1',
+'sha1rnds4',
+'sha1nexte',
+'sha1msg1',
+'sha1msg2',
+'sha256rnds2',
+'sha256msg1',
+'sha256msg2'
 );
diff -ru a/compiler/i386/i386nop.inc b/compiler/i386/i386nop.inc
--- a/compiler/i386/i386nop.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/i386/i386nop.inc	2024-05-16 04:37:35.934890000 +0000
@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86ins.dat }
-2117;
+2156;
diff -ru a/compiler/i386/i386op.inc b/compiler/i386/i386op.inc
--- a/compiler/i386/i386op.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/i386/i386op.inc	2024-05-16 04:37:35.934890000 +0000
@@ -254,7 +254,7 @@
 A_PMADDWD,
 A_PMAGW,
 A_PMULHRIW,
-A_PMULHRWA,
+A_PMULHRW,
 A_PMULHRWC,
 A_PMULHW,
 A_PMULLW,
@@ -875,6 +875,10 @@
 A_VPBLENDVB,
 A_VPBLENDW,
 A_VPCLMULQDQ,
+A_VPCLMULLQLQDQ,
+A_VPCLMULHQLQDQ,
+A_VPCLMULLQHQDQ,
+A_VPCLMULHQHQDQ,
 A_VPCMPEQB,
 A_VPCMPEQD,
 A_VPCMPEQQ,
@@ -1009,11 +1013,26 @@
 A_VZEROUPPER,
 A_ANDN,
 A_BEXTR,
+A_BLSI,
+A_BLSMSK,
+A_BLSR,
 A_TZCNT,
+A_BZHI,
+A_MULX,
+A_PDEP,
+A_PEXT,
 A_RORX,
 A_SARX,
 A_SHLX,
 A_SHRX,
+A_MOVBE,
+A_PCLMULQDQ,
+A_PCLMULLQLQDQ,
+A_PCLMULHQLQDQ,
+A_PCLMULLQHQDQ,
+A_PCLMULHQHQDQ,
+A_ADCX,
+A_ADOX,
 A_VBROADCASTI128,
 A_VEXTRACTI128,
 A_VINSERTI128,
@@ -1112,5 +1131,19 @@
 A_RDRAND,
 A_RDSEED,
 A_XGETBV,
-A_PREFETCHWT1
+A_XSETBV,
+A_XSAVE,
+A_XSAVE64,
+A_XRSTOR,
+A_XRSTOR64,
+A_XSAVEOPT,
+A_XSAVEOPT64,
+A_PREFETCHWT1,
+A_SHA1RNDS4,
+A_SHA1NEXTE,
+A_SHA1MSG1,
+A_SHA1MSG2,
+A_SHA256RNDS2,
+A_SHA256MSG1,
+A_SHA256MSG2
 );
diff -ru a/compiler/i386/i386prop.inc b/compiler/i386/i386prop.inc
--- a/compiler/i386/i386prop.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/i386/i386prop.inc	2024-05-16 04:37:35.934890000 +0000
@@ -875,6 +875,10 @@
 (Ch: [Ch_All]),
 (Ch: [Ch_All]),
 (Ch: [Ch_All]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_All]),
 (Ch: [Ch_All]),
 (Ch: [Ch_All]),
@@ -1009,11 +1013,26 @@
 (Ch: [Ch_All]),
 (Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
 (Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
+(Ch: [Ch_Rop1, Ch_Wop2, Ch_W0OverflowFlag, Ch_WCarryFlag, Ch_WSignFlag, Ch_WZeroFlag, Ch_WUParityFlag, Ch_WUAuxiliaryFlag]),
+(Ch: [Ch_Rop1, Ch_Wop2, Ch_W0OverflowFlag, Ch_WCarryFlag, Ch_WSignFlag, Ch_W0ZeroFlag, Ch_WUParityFlag, Ch_WUAuxiliaryFlag]),
+(Ch: [Ch_Rop1, Ch_Wop2, Ch_W0OverflowFlag, Ch_WCarryFlag, Ch_WSignFlag, Ch_WZeroFlag, Ch_WUParityFlag, Ch_WUAuxiliaryFlag]),
 (Ch: [Ch_Wop2, Ch_WFlags, Ch_Rop1]),
+(Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
+(Ch: [Ch_REDX, Ch_Rop1, Ch_Wop2, Ch_Wop3]),
+(Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
+(Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
 (Ch: [Ch_Rop1, Ch_Wop2]),
 (Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
 (Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
 (Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
+(Ch: [Ch_Rop1, Ch_Wop2]),
+(Ch: [Ch_Mop3, Ch_Rop2]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Rop1, Ch_Mop2, Ch_RWCarryFlag]),
+(Ch: [Ch_Rop1, Ch_Mop2, Ch_RWOverflowFlag]),
 (Ch: [Ch_All]),
 (Ch: [Ch_All]),
 (Ch: [Ch_All]),
@@ -1112,5 +1131,19 @@
 (Ch: [Ch_Wop1, Ch_WFlags]),
 (Ch: [Ch_Wop1, Ch_WFlags]),
 (Ch: [Ch_WEAX, Ch_WEDX, Ch_RECX]),
-(Ch: [Ch_All])
+(Ch: [Ch_REAX, Ch_REDX, Ch_RECX]),
+(Ch: [Ch_All]),
+(Ch: [Ch_All]),
+(Ch: [Ch_All]),
+(Ch: [Ch_All]),
+(Ch: [Ch_All]),
+(Ch: [Ch_All]),
+(Ch: [Ch_All]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1])
 );
diff -ru a/compiler/i386/i386tab.inc b/compiler/i386/i386tab.inc
--- a/compiler/i386/i386tab.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/i386/i386tab.inc	2024-05-16 04:37:35.934890000 +0000
@@ -3865,7 +3865,7 @@
     flags   : [if_pent,if_mmx,if_sm,if_cyrix]
   ),
   (
-    opcode  : A_PMULHRWA;
+    opcode  : A_PMULHRW;
     ops     : 2;
     optypes : (ot_mmxreg,ot_mmxrm,ot_none,ot_none);
     code    : #2#15#15#72#1#183;
@@ -11530,6 +11530,69 @@
     flags   : [if_avx,if_sandybridge]
   ),
   (
+    opcode  : A_VPCLMULQDQ;
+    ops     : 4;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_immediate or ot_bits8);
+    code    : #241#242#244#250#1#68#61#80#23;
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#0;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#0;
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#16;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#16;
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#1;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#1;
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#17;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#17;
+    flags   : [if_avx2]
+  ),
+  (
     opcode  : A_VPCMPEQB;
     ops     : 3;
     optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
@@ -13609,6 +13672,27 @@
     flags   : [if_bmi1,if_prot]
   ),
   (
+    opcode  : A_BLSI;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #242#249#1#243#60#139;
+    flags   : [if_bmi1,if_prot]
+  ),
+  (
+    opcode  : A_BLSMSK;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #242#249#1#243#60#138;
+    flags   : [if_bmi1,if_prot]
+  ),
+  (
+    opcode  : A_BLSR;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #242#249#1#243#60#137;
+    flags   : [if_bmi1,if_prot]
+  ),
+  (
     opcode  : A_TZCNT;
     ops     : 2;
     optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_rm_gpr,ot_none,ot_none);
@@ -13616,6 +13700,34 @@
     flags   : [if_bmi1,if_sm]
   ),
   (
+    opcode  : A_BZHI;
+    ops     : 3;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
+    code    : #242#249#1#245#62#72;
+    flags   : [if_bmi2,if_prot]
+  ),
+  (
+    opcode  : A_MULX;
+    ops     : 3;
+    optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
+    code    : #220#242#249#1#246#61#80;
+    flags   : [if_bmi2,if_prot]
+  ),
+  (
+    opcode  : A_PDEP;
+    ops     : 3;
+    optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
+    code    : #220#242#249#1#245#61#80;
+    flags   : [if_bmi2,if_prot]
+  ),
+  (
+    opcode  : A_PEXT;
+    ops     : 3;
+    optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
+    code    : #219#242#249#1#245#61#80;
+    flags   : [if_bmi2,if_prot]
+  ),
+  (
     opcode  : A_RORX;
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_immediate or ot_bits8,ot_none);
@@ -13644,6 +13756,69 @@
     flags   : [if_bmi2,if_prot]
   ),
   (
+    opcode  : A_MOVBE;
+    ops     : 2;
+    optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_memory or ot_bits16 or ot_bits32 or ot_bits64,ot_none,ot_none);
+    code    : #208#3#15#56#240#72;
+    flags   : [if_bmi2,if_sm]
+  ),
+  (
+    opcode  : A_MOVBE;
+    ops     : 2;
+    optypes : (ot_memory or ot_bits16 or ot_bits32 or ot_bits64,ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none);
+    code    : #209#3#15#56#241#65;
+    flags   : [if_bmi2,if_sm]
+  ),
+  (
+    opcode  : A_PCLMULQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    code    : #241#3#15#58#68#72#22;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULLQLQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#0;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULHQLQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#16;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULLQHQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#1;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULHQHQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#17;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_ADCX;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #241#3#15#56#246#72;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_ADOX;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #219#3#15#56#246#72;
+    flags   : [if_bmi2]
+  ),
+  (
     opcode  : A_VBROADCASTI128;
     ops     : 2;
     optypes : (ot_ymmreg,ot_memory or ot_bits128,ot_none,ot_none);
@@ -14813,10 +14988,108 @@
     flags   : [if_xsave]
   ),
   (
+    opcode  : A_XSETBV;
+    ops     : 0;
+    optypes : (ot_none,ot_none,ot_none,ot_none);
+    code    : #3#15#1#209;
+    flags   : [if_xsave]
+  ),
+  (
+    opcode  : A_XSAVE;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#174#132;
+    flags   : [if_xsave]
+  ),
+  (
+    opcode  : A_XSAVE64;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #214#2#15#174#132;
+    flags   : [if_xsave]
+  ),
+  (
+    opcode  : A_XRSTOR;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#174#133;
+    flags   : [if_xsave]
+  ),
+  (
+    opcode  : A_XRSTOR64;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #214#2#15#174#133;
+    flags   : [if_xsave]
+  ),
+  (
+    opcode  : A_XSAVEOPT;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#174#134;
+    flags   : [if_xsave]
+  ),
+  (
+    opcode  : A_XSAVEOPT64;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #214#2#15#174#134;
+    flags   : [if_xsave]
+  ),
+  (
     opcode  : A_PREFETCHWT1;
     ops     : 1;
     optypes : (ot_memory,ot_none,ot_none,ot_none);
     code    : #2#15#13#130;
     flags   : [if_prefetchwt1]
+  ),
+  (
+    opcode  : A_SHA1RNDS4;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_immediate,ot_none);
+    code    : #3#15#58#204#72#22;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_SHA1NEXTE;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#200#72;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_SHA1MSG1;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#201#72;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_SHA1MSG2;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#202#72;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_SHA256RNDS2;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#203#72;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_SHA256MSG1;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#204#72;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_SHA256MSG2;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#205#72;
+    flags   : [if_bmi2]
   )
 );
diff -ru a/compiler/i8086/i8086att.inc b/compiler/i8086/i8086att.inc
--- a/compiler/i8086/i8086att.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/i8086/i8086att.inc	2024-05-16 04:37:23.062742000 +0000
@@ -254,7 +254,7 @@
 'pmaddwd',
 'pmagw',
 'pmulhriw',
-'pmulhrwa',
+'pmulhrw',
 'pmulhrwc',
 'pmulhw',
 'pmullw',
@@ -875,6 +875,10 @@
 'vpblendvb',
 'vpblendw',
 'vpclmulqdq',
+'vpclmullqlqdq',
+'vpclmulhqlqdq',
+'vpclmullqhqdq',
+'vpclmulhqhqdq',
 'vpcmpeqb',
 'vpcmpeqd',
 'vpcmpeqq',
@@ -1009,11 +1013,26 @@
 'vzeroupper',
 'andn',
 'bextr',
+'blsi',
+'blsmsk',
+'blsr',
 'tzcnt',
+'bzhi',
+'mulx',
+'pdep',
+'pext',
 'rorx',
 'sarx',
 'shlx',
 'shrx',
+'movbe',
+'pclmulqdq',
+'pclmullqlqdq',
+'pclmulhqlqdq',
+'pclmullqhqdq',
+'pclmulhqhqdq',
+'adcx',
+'adox',
 'vbroadcasti128',
 'vextracti128',
 'vinserti128',
@@ -1126,5 +1145,19 @@
 'rdrand',
 'rdseed',
 'xgetbv',
-'prefetchwt1'
+'xsetbv',
+'xsave',
+'xsave64',
+'xrstor',
+'xrstor64',
+'xsaveopt',
+'xsaveopt64',
+'prefetchwt1',
+'sha1rnds4',
+'sha1nexte',
+'sha1msg1',
+'sha1msg2',
+'sha256rnds2',
+'sha256msg1',
+'sha256msg2'
 );
diff -ru a/compiler/i8086/i8086atts.inc b/compiler/i8086/i8086atts.inc
--- a/compiler/i8086/i8086atts.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/i8086/i8086atts.inc	2024-05-16 04:37:23.062742000 +0000
@@ -1025,6 +1025,23 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufINT,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufINT,
+attsufINT,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
@@ -1119,6 +1136,22 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufINT,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
 attsufINT,
 attsufNONE,
 attsufNONE,
@@ -1126,5 +1159,5 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
-attsufINT
+attsufNONE
 );
diff -ru a/compiler/i8086/i8086int.inc b/compiler/i8086/i8086int.inc
--- a/compiler/i8086/i8086int.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/i8086/i8086int.inc	2024-05-16 04:37:23.062742000 +0000
@@ -254,7 +254,7 @@
 'pmaddwd',
 'pmagw',
 'pmulhriw',
-'pmulhrwa',
+'pmulhrw',
 'pmulhrwc',
 'pmulhw',
 'pmullw',
@@ -875,6 +875,10 @@
 'vpblendvb',
 'vpblendw',
 'vpclmulqdq',
+'vpclmullqlqdq',
+'vpclmulhqlqdq',
+'vpclmullqhqdq',
+'vpclmulhqhqdq',
 'vpcmpeqb',
 'vpcmpeqd',
 'vpcmpeqq',
@@ -1009,11 +1013,26 @@
 'vzeroupper',
 'andn',
 'bextr',
+'blsi',
+'blsmsk',
+'blsr',
 'tzcnt',
+'bzhi',
+'mulx',
+'pdep',
+'pext',
 'rorx',
 'sarx',
 'shlx',
 'shrx',
+'movbe',
+'pclmulqdq',
+'pclmullqlqdq',
+'pclmulhqlqdq',
+'pclmullqhqdq',
+'pclmulhqhqdq',
+'adcx',
+'adox',
 'vbroadcasti128',
 'vextracti128',
 'vinserti128',
@@ -1126,5 +1145,19 @@
 'rdrand',
 'rdseed',
 'xgetbv',
-'prefetchwt1'
+'xsetbv',
+'xsave',
+'xsave64',
+'xrstor',
+'xrstor64',
+'xsaveopt',
+'xsaveopt64',
+'prefetchwt1',
+'sha1rnds4',
+'sha1nexte',
+'sha1msg1',
+'sha1msg2',
+'sha256rnds2',
+'sha256msg1',
+'sha256msg2'
 );
diff -ru a/compiler/i8086/i8086nop.inc b/compiler/i8086/i8086nop.inc
--- a/compiler/i8086/i8086nop.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/i8086/i8086nop.inc	2024-05-16 04:37:23.062742000 +0000
@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86ins.dat }
-2149;
+2188;
diff -ru a/compiler/i8086/i8086op.inc b/compiler/i8086/i8086op.inc
--- a/compiler/i8086/i8086op.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/i8086/i8086op.inc	2024-05-16 04:37:23.062742000 +0000
@@ -254,7 +254,7 @@
 A_PMADDWD,
 A_PMAGW,
 A_PMULHRIW,
-A_PMULHRWA,
+A_PMULHRW,
 A_PMULHRWC,
 A_PMULHW,
 A_PMULLW,
@@ -875,6 +875,10 @@
 A_VPBLENDVB,
 A_VPBLENDW,
 A_VPCLMULQDQ,
+A_VPCLMULLQLQDQ,
+A_VPCLMULHQLQDQ,
+A_VPCLMULLQHQDQ,
+A_VPCLMULHQHQDQ,
 A_VPCMPEQB,
 A_VPCMPEQD,
 A_VPCMPEQQ,
@@ -1009,11 +1013,26 @@
 A_VZEROUPPER,
 A_ANDN,
 A_BEXTR,
+A_BLSI,
+A_BLSMSK,
+A_BLSR,
 A_TZCNT,
+A_BZHI,
+A_MULX,
+A_PDEP,
+A_PEXT,
 A_RORX,
 A_SARX,
 A_SHLX,
 A_SHRX,
+A_MOVBE,
+A_PCLMULQDQ,
+A_PCLMULLQLQDQ,
+A_PCLMULHQLQDQ,
+A_PCLMULLQHQDQ,
+A_PCLMULHQHQDQ,
+A_ADCX,
+A_ADOX,
 A_VBROADCASTI128,
 A_VEXTRACTI128,
 A_VINSERTI128,
@@ -1126,5 +1145,19 @@
 A_RDRAND,
 A_RDSEED,
 A_XGETBV,
-A_PREFETCHWT1
+A_XSETBV,
+A_XSAVE,
+A_XSAVE64,
+A_XRSTOR,
+A_XRSTOR64,
+A_XSAVEOPT,
+A_XSAVEOPT64,
+A_PREFETCHWT1,
+A_SHA1RNDS4,
+A_SHA1NEXTE,
+A_SHA1MSG1,
+A_SHA1MSG2,
+A_SHA256RNDS2,
+A_SHA256MSG1,
+A_SHA256MSG2
 );
diff -ru a/compiler/i8086/i8086prop.inc b/compiler/i8086/i8086prop.inc
--- a/compiler/i8086/i8086prop.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/i8086/i8086prop.inc	2024-05-16 04:37:23.062742000 +0000
@@ -875,6 +875,10 @@
 (Ch: [Ch_All]),
 (Ch: [Ch_All]),
 (Ch: [Ch_All]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_All]),
 (Ch: [Ch_All]),
 (Ch: [Ch_All]),
@@ -1009,11 +1013,26 @@
 (Ch: [Ch_All]),
 (Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
 (Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
+(Ch: [Ch_Rop1, Ch_Wop2, Ch_W0OverflowFlag, Ch_WCarryFlag, Ch_WSignFlag, Ch_WZeroFlag, Ch_WUParityFlag, Ch_WUAuxiliaryFlag]),
+(Ch: [Ch_Rop1, Ch_Wop2, Ch_W0OverflowFlag, Ch_WCarryFlag, Ch_WSignFlag, Ch_W0ZeroFlag, Ch_WUParityFlag, Ch_WUAuxiliaryFlag]),
+(Ch: [Ch_Rop1, Ch_Wop2, Ch_W0OverflowFlag, Ch_WCarryFlag, Ch_WSignFlag, Ch_WZeroFlag, Ch_WUParityFlag, Ch_WUAuxiliaryFlag]),
 (Ch: [Ch_Wop2, Ch_WFlags, Ch_Rop1]),
+(Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
+(Ch: [Ch_REDX, Ch_Rop1, Ch_Wop2, Ch_Wop3]),
+(Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
+(Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
 (Ch: [Ch_Rop1, Ch_Wop2]),
 (Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
 (Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
 (Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
+(Ch: [Ch_Rop1, Ch_Wop2]),
+(Ch: [Ch_Mop3, Ch_Rop2]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Rop1, Ch_Mop2, Ch_RWCarryFlag]),
+(Ch: [Ch_Rop1, Ch_Mop2, Ch_RWOverflowFlag]),
 (Ch: [Ch_All]),
 (Ch: [Ch_All]),
 (Ch: [Ch_All]),
@@ -1126,5 +1145,19 @@
 (Ch: [Ch_Wop1, Ch_WFlags]),
 (Ch: [Ch_Wop1, Ch_WFlags]),
 (Ch: [Ch_WEAX, Ch_WEDX, Ch_RECX]),
-(Ch: [Ch_All])
+(Ch: [Ch_REAX, Ch_REDX, Ch_RECX]),
+(Ch: [Ch_All]),
+(Ch: [Ch_All]),
+(Ch: [Ch_All]),
+(Ch: [Ch_All]),
+(Ch: [Ch_All]),
+(Ch: [Ch_All]),
+(Ch: [Ch_All]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1])
 );
diff -ru a/compiler/i8086/i8086tab.inc b/compiler/i8086/i8086tab.inc
--- a/compiler/i8086/i8086tab.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/i8086/i8086tab.inc	2024-05-16 04:37:23.062742000 +0000
@@ -3879,7 +3879,7 @@
     flags   : [if_pent,if_mmx,if_sm,if_cyrix]
   ),
   (
-    opcode  : A_PMULHRWA;
+    opcode  : A_PMULHRW;
     ops     : 2;
     optypes : (ot_mmxreg,ot_mmxrm,ot_none,ot_none);
     code    : #2#15#15#72#1#183;
@@ -11558,6 +11558,69 @@
     flags   : [if_avx,if_sandybridge]
   ),
   (
+    opcode  : A_VPCLMULQDQ;
+    ops     : 4;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_immediate or ot_bits8);
+    code    : #241#242#244#250#1#68#61#80#23;
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#0;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#0;
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#16;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#16;
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#1;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#1;
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#17;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#17;
+    flags   : [if_avx2]
+  ),
+  (
     opcode  : A_VPCMPEQB;
     ops     : 3;
     optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
@@ -13637,6 +13700,27 @@
     flags   : [if_bmi1,if_prot]
   ),
   (
+    opcode  : A_BLSI;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #242#249#1#243#60#139;
+    flags   : [if_bmi1,if_prot]
+  ),
+  (
+    opcode  : A_BLSMSK;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #242#249#1#243#60#138;
+    flags   : [if_bmi1,if_prot]
+  ),
+  (
+    opcode  : A_BLSR;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #242#249#1#243#60#137;
+    flags   : [if_bmi1,if_prot]
+  ),
+  (
     opcode  : A_TZCNT;
     ops     : 2;
     optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_rm_gpr,ot_none,ot_none);
@@ -13644,6 +13728,34 @@
     flags   : [if_bmi1,if_sm]
   ),
   (
+    opcode  : A_BZHI;
+    ops     : 3;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
+    code    : #242#249#1#245#62#72;
+    flags   : [if_bmi2,if_prot]
+  ),
+  (
+    opcode  : A_MULX;
+    ops     : 3;
+    optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
+    code    : #220#242#249#1#246#61#80;
+    flags   : [if_bmi2,if_prot]
+  ),
+  (
+    opcode  : A_PDEP;
+    ops     : 3;
+    optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
+    code    : #220#242#249#1#245#61#80;
+    flags   : [if_bmi2,if_prot]
+  ),
+  (
+    opcode  : A_PEXT;
+    ops     : 3;
+    optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
+    code    : #219#242#249#1#245#61#80;
+    flags   : [if_bmi2,if_prot]
+  ),
+  (
     opcode  : A_RORX;
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_immediate or ot_bits8,ot_none);
@@ -13672,6 +13784,69 @@
     flags   : [if_bmi2,if_prot]
   ),
   (
+    opcode  : A_MOVBE;
+    ops     : 2;
+    optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_memory or ot_bits16 or ot_bits32 or ot_bits64,ot_none,ot_none);
+    code    : #208#3#15#56#240#72;
+    flags   : [if_bmi2,if_sm]
+  ),
+  (
+    opcode  : A_MOVBE;
+    ops     : 2;
+    optypes : (ot_memory or ot_bits16 or ot_bits32 or ot_bits64,ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none);
+    code    : #209#3#15#56#241#65;
+    flags   : [if_bmi2,if_sm]
+  ),
+  (
+    opcode  : A_PCLMULQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    code    : #241#3#15#58#68#72#22;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULLQLQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#0;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULHQLQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#16;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULLQHQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#1;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULHQHQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#17;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_ADCX;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #241#3#15#56#246#72;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_ADOX;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #219#3#15#56#246#72;
+    flags   : [if_bmi2]
+  ),
+  (
     opcode  : A_VBROADCASTI128;
     ops     : 2;
     optypes : (ot_ymmreg,ot_memory or ot_bits128,ot_none,ot_none);
@@ -15037,10 +15212,108 @@
     flags   : [if_xsave]
   ),
   (
+    opcode  : A_XSETBV;
+    ops     : 0;
+    optypes : (ot_none,ot_none,ot_none,ot_none);
+    code    : #3#15#1#209;
+    flags   : [if_xsave]
+  ),
+  (
+    opcode  : A_XSAVE;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#174#132;
+    flags   : [if_xsave]
+  ),
+  (
+    opcode  : A_XSAVE64;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #214#2#15#174#132;
+    flags   : [if_xsave]
+  ),
+  (
+    opcode  : A_XRSTOR;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#174#133;
+    flags   : [if_xsave]
+  ),
+  (
+    opcode  : A_XRSTOR64;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #214#2#15#174#133;
+    flags   : [if_xsave]
+  ),
+  (
+    opcode  : A_XSAVEOPT;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#174#134;
+    flags   : [if_xsave]
+  ),
+  (
+    opcode  : A_XSAVEOPT64;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #214#2#15#174#134;
+    flags   : [if_xsave]
+  ),
+  (
     opcode  : A_PREFETCHWT1;
     ops     : 1;
     optypes : (ot_memory,ot_none,ot_none,ot_none);
     code    : #2#15#13#130;
     flags   : [if_prefetchwt1]
+  ),
+  (
+    opcode  : A_SHA1RNDS4;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_immediate,ot_none);
+    code    : #3#15#58#204#72#22;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_SHA1NEXTE;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#200#72;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_SHA1MSG1;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#201#72;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_SHA1MSG2;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#202#72;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_SHA256RNDS2;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#203#72;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_SHA256MSG1;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#204#72;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_SHA256MSG2;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#205#72;
+    flags   : [if_bmi2]
   )
 );
diff -ru a/compiler/x86/x86ins.dat b/compiler/x86/x86ins.dat
--- a/compiler/x86/x86ins.dat	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/x86/x86ins.dat	2024-05-16 18:39:48.529514914 +0000
@@ -1397,7 +1397,7 @@
 (Ch_All)
 mmxreg,mmxrm          \2\x0F\x5D\110                  PENT,MMX,SM,CYRIX
 
-[PMULHRWA]
+[PMULHRW]
 (Ch_All)
 mmxreg,mmxrm          \2\x0F\x0F\110\1\xB7            PENT,3DNOW,SM
 
@@ -4574,6 +4574,27 @@
 [VPCLMULQDQ]
 (Ch_All)
 xmmreg,xmmreg,xmmrm,imm8             \361\362\372\1\x44\75\120\27         AVX,SANDYBRIDGE
+ymmreg,ymmreg,ymmrm,imm8             \361\362\364\372\1\x44\75\120\27     AVX2
+
+[VPCLMULLQLQDQ]
+(Ch_Wop3, Ch_Rop2, Ch_Rop1)
+xmmreg,xmmreg,xmmrm                 \361\362\372\1\x44\75\120\1\x00         AVX,SANDYBRIDGE
+ymmreg,ymmreg,ymmrm                 \361\362\364\372\1\x44\75\120\1\x00     AVX2
+
+[VPCLMULHQLQDQ]
+(Ch_Wop3, Ch_Rop2, Ch_Rop1)
+xmmreg,xmmreg,xmmrm                 \361\362\372\1\x44\75\120\1\x10         AVX,SANDYBRIDGE
+ymmreg,ymmreg,ymmrm                 \361\362\364\372\1\x44\75\120\1\x10     AVX2
+
+[VPCLMULLQHQDQ]
+(Ch_Wop3, Ch_Rop2, Ch_Rop1)
+xmmreg,xmmreg,xmmrm                 \361\362\372\1\x44\75\120\1\x01         AVX,SANDYBRIDGE
+ymmreg,ymmreg,ymmrm                 \361\362\364\372\1\x44\75\120\1\x01     AVX2
+
+[VPCLMULHQHQDQ]
+(Ch_Wop3, Ch_Rop2, Ch_Rop1)
+xmmreg,xmmreg,xmmrm                 \361\362\372\1\x44\75\120\1\x11         AVX,SANDYBRIDGE
+ymmreg,ymmreg,ymmrm                 \361\362\364\372\1\x44\75\120\1\x11     AVX2
 
 [VPCMPEQB]
 (Ch_All)
@@ -5285,6 +5306,21 @@
 reg32,rm32,reg32                      \362\371\1\xf7\76\110               BMI1,PROT
 reg64,rm64,reg64                      \362\363\371\1\xf7\76\110           BMI1,PROT,X86_64
 
+[BLSI]
+(Ch_Rop1, Ch_Wop2, Ch_W0OverflowFlag, Ch_WCarryFlag, Ch_WSignFlag, Ch_WZeroFlag, Ch_WUParityFlag, Ch_WUAuxiliaryFlag)
+reg32,rm32                            \362\371\1\xf3\74\213               BMI1,PROT
+reg64,rm64                            \362\363\371\1\xf3\74\213           BMI1,PROT,X86_64
+
+[BLSMSK]
+(Ch_Rop1, Ch_Wop2, Ch_W0OverflowFlag, Ch_WCarryFlag, Ch_WSignFlag, Ch_W0ZeroFlag, Ch_WUParityFlag, Ch_WUAuxiliaryFlag)
+reg32,rm32                            \362\371\1\xf3\74\212               BMI1,PROT
+reg64,rm64                            \362\363\371\1\xf3\74\212           BMI1,PROT,X86_64
+
+[BLSR]
+(Ch_Rop1, Ch_Wop2, Ch_W0OverflowFlag, Ch_WCarryFlag, Ch_WSignFlag, Ch_WZeroFlag, Ch_WUParityFlag, Ch_WUAuxiliaryFlag)
+reg32,rm32                            \362\371\1\xf3\74\211               BMI1,PROT
+reg64,rm64                            \362\363\371\1\xf3\74\211           BMI1,PROT,X86_64
+
 [TZCNT]
 (Ch_Wop2, Ch_WFlags, Ch_Rop1)
 reg16|32|64,regmem                    \320\333\2\x0F\xBC\110              BMI1,SM
@@ -5292,6 +5328,25 @@
 ;*******************************************************************************
 ;********** BMI2 ***************************************************************
 ;*******************************************************************************
+[BZHI]
+(Ch_Rop1, Ch_Rop2, Ch_Wop3)
+reg32,rm32,reg32                      \362\371\1\xf5\76\110               BMI2,PROT
+reg64,rm64,reg64                      \362\363\371\1\xf5\76\110           BMI2,PROT,X86_64
+
+[MULX]
+(Ch_REDX, Ch_Rop1, Ch_Wop2, Ch_Wop3)
+reg32,reg32,rm32                      \334\362\371\1\xf6\75\120           BMI2,PROT
+reg64,reg64,rm64                      \334\362\363\371\1\xf6\75\120       BMI2,PROT,X86_64
+
+[PDEP]
+(Ch_Rop1, Ch_Rop2, Ch_Wop3)
+reg32,reg32,rm32                      \334\362\371\1\xf5\75\120           BMI2,PROT
+reg64,reg64,rm64                      \334\362\363\371\1\xf5\75\120       BMI2,PROT,X86_64
+
+[PEXT]
+(Ch_Rop1, Ch_Rop2, Ch_Wop3)
+reg32,reg32,rm32                      \333\362\371\1\xf5\75\120           BMI2,PROT
+reg64,reg64,rm64                      \333\362\363\371\1\xf5\75\120       BMI2,PROT,X86_64
 
 [RORX]
 (Ch_Rop1, Ch_Wop2)
@@ -5313,6 +5368,48 @@
 reg32,rm32,reg32                      \334\362\371\1\xf7\76\110           BMI2,PROT
 reg64,rm64,reg64                      \334\362\363\371\1\xf7\76\110       BMI2,PROT,X86_64
 
+[MOVBE,movbeX]
+(Ch_Rop1, Ch_Wop2)
+reg16|32|64,mem16|32|64              \320\3\xf\x38\xf0\110           BMI2,SM
+mem16|32|64,reg16|32|64              \321\3\xf\x38\xf1\101           BMI2,SM
+
+;*******************************************************************************
+;********* CLMUL ***************************************************************
+;*******************************************************************************
+
+[PCLMULQDQ]
+(Ch_Mop3, Ch_Rop2)
+xmmreg,xmmrm,imm8                    \361\3\xf\x3A\x44\110\26        AVX,SANDYBRIDGE
+
+[PCLMULLQLQDQ]
+(Ch_Mop2, Ch_Rop1)
+xmmreg,xmmrm                         \361\3\xf\x3A\x44\110\1\x00     AVX,SANDYBRIDGE
+
+[PCLMULHQLQDQ]
+(Ch_Mop2, Ch_Rop1)
+xmmreg,xmmrm                         \361\3\xf\x3A\x44\110\1\x10     AVX,SANDYBRIDGE
+
+[PCLMULLQHQDQ]
+(Ch_Mop2, Ch_Rop1)
+xmmreg,xmmrm                         \361\3\xf\x3A\x44\110\1\x01     AVX,SANDYBRIDGE
+
+[PCLMULHQHQDQ]
+(Ch_Mop2, Ch_Rop1)
+xmmreg,xmmrm                         \361\3\xf\x3A\x44\110\1\x11     AVX,SANDYBRIDGE
+
+;*******************************************************************************
+;********** ADX ****************************************************************
+;*******************************************************************************
+
+[ADCX,adcxX]
+(Ch_Rop1, Ch_Mop2, Ch_RWCarryFlag)
+reg32,rm32                            \361\3\xf\x38\xf6\110               BMI2
+reg64,rm64                            \361\326\3\xf\x38\xf6\110           BMI2,X86_64
+
+[ADOX,adoxX]
+(Ch_Rop1, Ch_Mop2, Ch_RWOverflowFlag)
+reg32,rm32                            \333\3\xf\x38\xf6\110               BMI2
+reg64,rm64                            \333\326\3\xf\x38\xf6\110           BMI2,X86_64
 
 ;*******************************************************************************
 ;********** AVX2 ***************************************************************
@@ -5868,6 +5965,34 @@
 (Ch_WEAX, Ch_WEDX, Ch_RECX)
 void                  \3\x0F\x01\xD0                                      XSAVE
 
+[XSETBV]
+(Ch_REAX, Ch_REDX, Ch_RECX)
+void                  \3\x0F\x01\xD1                                      XSAVE
+
+[XSAVE]
+(Ch_All)
+mem                   \2\x0F\xAE\204                                      XSAVE
+
+[XSAVE64]
+(Ch_All)
+mem                   \326\2\x0F\xAE\204                                  XSAVE
+
+[XRSTOR]
+(Ch_All)
+mem                   \2\x0F\xAE\205                                      XSAVE
+
+[XRSTOR64]
+(Ch_All)
+mem                   \326\2\x0F\xAE\205                                  XSAVE
+
+[XSAVEOPT]
+(Ch_All)
+mem                   \2\x0F\xAE\206                                      XSAVE
+
+[XSAVEOPT64]
+(Ch_All)
+mem                   \326\2\x0F\xAE\206                                  XSAVE
+
 ;*******************************************************************************
 ;********** PREFETCHWT1 ********************************************************
 ;*******************************************************************************
@@ -5875,3 +6000,35 @@
 (Ch_All)
 mem                   \2\x0F\x0D\202                                      PREFETCHWT1
 
+;*******************************************************************************
+;********* SHA *****************************************************************
+;*******************************************************************************
+
+[SHA1RNDS4]
+(Ch_Mop2, Ch_Rop1)
+xmmreg,xmmrm,imm                          \3\x0F\x3A\xCC\110\26                     BMI2
+
+[SHA1NEXTE]
+(Ch_Mop2, Ch_Rop1)
+xmmreg,xmmrm                              \3\x0F\x38\xC8\110                        BMI2
+
+[SHA1MSG1]
+(Ch_Mop2, Ch_Rop1)
+xmmreg,xmmrm                              \3\x0F\x38\xC9\110                        BMI2
+
+[SHA1MSG2]
+(Ch_Mop2, Ch_Rop1)
+xmmreg,xmmrm                              \3\x0F\x38\xCA\110                        BMI2
+
+[SHA256RNDS2]
+; reads also xmm0 ! 
+(Ch_Mop2, Ch_Rop1)
+xmmreg,xmmrm                              \3\x0F\x38\xCB\110                        BMI2
+
+[SHA256MSG1]
+(Ch_Mop2, Ch_Rop1)
+xmmreg,xmmrm                              \3\x0F\x38\xCC\110                        BMI2
+
+[SHA256MSG2]
+(Ch_Mop2, Ch_Rop1)
+xmmreg,xmmrm                              \3\x0F\x38\xCD\110                        BMI2
diff -ru a/compiler/x86_64/x8664ats.inc b/compiler/x86_64/x8664ats.inc
--- a/compiler/x86_64/x8664ats.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/x86_64/x8664ats.inc	2024-05-16 04:35:25.969392000 +0000
@@ -1021,6 +1021,23 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufINT,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufINT,
+attsufINT,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
@@ -1101,6 +1118,22 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufINT,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
 attsufINT,
 attsufNONE,
 attsufNONE,
@@ -1108,5 +1141,5 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
-attsufINT
+attsufNONE
 );
diff -ru a/compiler/x86_64/x8664att.inc b/compiler/x86_64/x8664att.inc
--- a/compiler/x86_64/x8664att.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/x86_64/x8664att.inc	2024-05-16 04:35:25.969392000 +0000
@@ -245,7 +245,7 @@
 'pmaddwd',
 'pmagw',
 'pmulhriw',
-'pmulhrwa',
+'pmulhrw',
 'pmulhrwc',
 'pmulhw',
 'pmullw',
@@ -871,6 +871,10 @@
 'vpblendvb',
 'vpblendw',
 'vpclmulqdq',
+'vpclmullqlqdq',
+'vpclmulhqlqdq',
+'vpclmullqhqdq',
+'vpclmulhqhqdq',
 'vpcmpeqb',
 'vpcmpeqd',
 'vpcmpeqq',
@@ -1005,11 +1009,26 @@
 'vzeroupper',
 'andn',
 'bextr',
+'blsi',
+'blsmsk',
+'blsr',
 'tzcnt',
+'bzhi',
+'mulx',
+'pdep',
+'pext',
 'rorx',
 'sarx',
 'shlx',
 'shrx',
+'movbe',
+'pclmulqdq',
+'pclmullqlqdq',
+'pclmulhqlqdq',
+'pclmullqhqdq',
+'pclmulhqhqdq',
+'adcx',
+'adox',
 'vbroadcasti128',
 'vextracti128',
 'vinserti128',
@@ -1108,5 +1127,19 @@
 'rdrand',
 'rdseed',
 'xgetbv',
-'prefetchwt1'
+'xsetbv',
+'xsave',
+'xsave64',
+'xrstor',
+'xrstor64',
+'xsaveopt',
+'xsaveopt64',
+'prefetchwt1',
+'sha1rnds4',
+'sha1nexte',
+'sha1msg1',
+'sha1msg2',
+'sha256rnds2',
+'sha256msg1',
+'sha256msg2'
 );
diff -ru a/compiler/x86_64/x8664int.inc b/compiler/x86_64/x8664int.inc
--- a/compiler/x86_64/x8664int.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/x86_64/x8664int.inc	2024-05-16 04:35:25.969392000 +0000
@@ -245,7 +245,7 @@
 'pmaddwd',
 'pmagw',
 'pmulhriw',
-'pmulhrwa',
+'pmulhrw',
 'pmulhrwc',
 'pmulhw',
 'pmullw',
@@ -871,6 +871,10 @@
 'vpblendvb',
 'vpblendw',
 'vpclmulqdq',
+'vpclmullqlqdq',
+'vpclmulhqlqdq',
+'vpclmullqhqdq',
+'vpclmulhqhqdq',
 'vpcmpeqb',
 'vpcmpeqd',
 'vpcmpeqq',
@@ -1005,11 +1009,26 @@
 'vzeroupper',
 'andn',
 'bextr',
+'blsi',
+'blsmsk',
+'blsr',
 'tzcnt',
+'bzhi',
+'mulx',
+'pdep',
+'pext',
 'rorx',
 'sarx',
 'shlx',
 'shrx',
+'movbe',
+'pclmulqdq',
+'pclmullqlqdq',
+'pclmulhqlqdq',
+'pclmullqhqdq',
+'pclmulhqhqdq',
+'adcx',
+'adox',
 'vbroadcasti128',
 'vextracti128',
 'vinserti128',
@@ -1108,5 +1127,19 @@
 'rdrand',
 'rdseed',
 'xgetbv',
-'prefetchwt1'
+'xsetbv',
+'xsave',
+'xsave64',
+'xrstor',
+'xrstor64',
+'xsaveopt',
+'xsaveopt64',
+'prefetchwt1',
+'sha1rnds4',
+'sha1nexte',
+'sha1msg1',
+'sha1msg2',
+'sha256rnds2',
+'sha256msg1',
+'sha256msg2'
 );
diff -ru a/compiler/x86_64/x8664nop.inc b/compiler/x86_64/x8664nop.inc
--- a/compiler/x86_64/x8664nop.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/x86_64/x8664nop.inc	2024-05-16 04:35:25.969392000 +0000
@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86ins.dat }
-2170;
+2218;
diff -ru a/compiler/x86_64/x8664op.inc b/compiler/x86_64/x8664op.inc
--- a/compiler/x86_64/x8664op.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/x86_64/x8664op.inc	2024-05-16 04:35:25.969392000 +0000
@@ -245,7 +245,7 @@
 A_PMADDWD,
 A_PMAGW,
 A_PMULHRIW,
-A_PMULHRWA,
+A_PMULHRW,
 A_PMULHRWC,
 A_PMULHW,
 A_PMULLW,
@@ -871,6 +871,10 @@
 A_VPBLENDVB,
 A_VPBLENDW,
 A_VPCLMULQDQ,
+A_VPCLMULLQLQDQ,
+A_VPCLMULHQLQDQ,
+A_VPCLMULLQHQDQ,
+A_VPCLMULHQHQDQ,
 A_VPCMPEQB,
 A_VPCMPEQD,
 A_VPCMPEQQ,
@@ -1005,11 +1009,26 @@
 A_VZEROUPPER,
 A_ANDN,
 A_BEXTR,
+A_BLSI,
+A_BLSMSK,
+A_BLSR,
 A_TZCNT,
+A_BZHI,
+A_MULX,
+A_PDEP,
+A_PEXT,
 A_RORX,
 A_SARX,
 A_SHLX,
 A_SHRX,
+A_MOVBE,
+A_PCLMULQDQ,
+A_PCLMULLQLQDQ,
+A_PCLMULHQLQDQ,
+A_PCLMULLQHQDQ,
+A_PCLMULHQHQDQ,
+A_ADCX,
+A_ADOX,
 A_VBROADCASTI128,
 A_VEXTRACTI128,
 A_VINSERTI128,
@@ -1108,5 +1127,19 @@
 A_RDRAND,
 A_RDSEED,
 A_XGETBV,
-A_PREFETCHWT1
+A_XSETBV,
+A_XSAVE,
+A_XSAVE64,
+A_XRSTOR,
+A_XRSTOR64,
+A_XSAVEOPT,
+A_XSAVEOPT64,
+A_PREFETCHWT1,
+A_SHA1RNDS4,
+A_SHA1NEXTE,
+A_SHA1MSG1,
+A_SHA1MSG2,
+A_SHA256RNDS2,
+A_SHA256MSG1,
+A_SHA256MSG2
 );
diff -ru a/compiler/x86_64/x8664pro.inc b/compiler/x86_64/x8664pro.inc
--- a/compiler/x86_64/x8664pro.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/x86_64/x8664pro.inc	2024-05-16 04:35:25.969392000 +0000
@@ -871,6 +871,10 @@
 (Ch: [Ch_All]),
 (Ch: [Ch_All]),
 (Ch: [Ch_All]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_All]),
 (Ch: [Ch_All]),
 (Ch: [Ch_All]),
@@ -1005,11 +1009,26 @@
 (Ch: [Ch_All]),
 (Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
 (Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
+(Ch: [Ch_Rop1, Ch_Wop2, Ch_W0OverflowFlag, Ch_WCarryFlag, Ch_WSignFlag, Ch_WZeroFlag, Ch_WUParityFlag, Ch_WUAuxiliaryFlag]),
+(Ch: [Ch_Rop1, Ch_Wop2, Ch_W0OverflowFlag, Ch_WCarryFlag, Ch_WSignFlag, Ch_W0ZeroFlag, Ch_WUParityFlag, Ch_WUAuxiliaryFlag]),
+(Ch: [Ch_Rop1, Ch_Wop2, Ch_W0OverflowFlag, Ch_WCarryFlag, Ch_WSignFlag, Ch_WZeroFlag, Ch_WUParityFlag, Ch_WUAuxiliaryFlag]),
 (Ch: [Ch_Wop2, Ch_WFlags, Ch_Rop1]),
+(Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
+(Ch: [Ch_REDX, Ch_Rop1, Ch_Wop2, Ch_Wop3]),
+(Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
+(Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
 (Ch: [Ch_Rop1, Ch_Wop2]),
 (Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
 (Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
 (Ch: [Ch_Rop1, Ch_Rop2, Ch_Wop3]),
+(Ch: [Ch_Rop1, Ch_Wop2]),
+(Ch: [Ch_Mop3, Ch_Rop2]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Rop1, Ch_Mop2, Ch_RWCarryFlag]),
+(Ch: [Ch_Rop1, Ch_Mop2, Ch_RWOverflowFlag]),
 (Ch: [Ch_All]),
 (Ch: [Ch_All]),
 (Ch: [Ch_All]),
@@ -1108,5 +1127,19 @@
 (Ch: [Ch_Wop1, Ch_WFlags]),
 (Ch: [Ch_Wop1, Ch_WFlags]),
 (Ch: [Ch_WEAX, Ch_WEDX, Ch_RECX]),
-(Ch: [Ch_All])
+(Ch: [Ch_REAX, Ch_REDX, Ch_RECX]),
+(Ch: [Ch_All]),
+(Ch: [Ch_All]),
+(Ch: [Ch_All]),
+(Ch: [Ch_All]),
+(Ch: [Ch_All]),
+(Ch: [Ch_All]),
+(Ch: [Ch_All]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1])
 );
diff -ru a/compiler/x86_64/x8664tab.inc b/compiler/x86_64/x8664tab.inc
--- a/compiler/x86_64/x8664tab.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/compiler/x86_64/x8664tab.inc	2024-05-16 04:35:25.969392000 +0000
@@ -3879,7 +3879,7 @@
     flags   : [if_pent,if_mmx,if_sm,if_cyrix]
   ),
   (
-    opcode  : A_PMULHRWA;
+    opcode  : A_PMULHRW;
     ops     : 2;
     optypes : (ot_mmxreg,ot_mmxrm,ot_none,ot_none);
     code    : #2#15#15#72#1#183;
@@ -11859,6 +11859,69 @@
     flags   : [if_avx,if_sandybridge]
   ),
   (
+    opcode  : A_VPCLMULQDQ;
+    ops     : 4;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_immediate or ot_bits8);
+    code    : #241#242#244#250#1#68#61#80#23;
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#0;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#0;
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#16;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#16;
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#1;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#1;
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #241#242#250#1#68#61#80#1#17;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #241#242#244#250#1#68#61#80#1#17;
+    flags   : [if_avx2]
+  ),
+  (
     opcode  : A_VPCMPEQB;
     ops     : 3;
     optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
@@ -13952,6 +14015,48 @@
     flags   : [if_bmi1,if_prot,if_x86_64]
   ),
   (
+    opcode  : A_BLSI;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #242#249#1#243#60#139;
+    flags   : [if_bmi1,if_prot]
+  ),
+  (
+    opcode  : A_BLSI;
+    ops     : 2;
+    optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_none,ot_none);
+    code    : #242#243#249#1#243#60#139;
+    flags   : [if_bmi1,if_prot,if_x86_64]
+  ),
+  (
+    opcode  : A_BLSMSK;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #242#249#1#243#60#138;
+    flags   : [if_bmi1,if_prot]
+  ),
+  (
+    opcode  : A_BLSMSK;
+    ops     : 2;
+    optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_none,ot_none);
+    code    : #242#243#249#1#243#60#138;
+    flags   : [if_bmi1,if_prot,if_x86_64]
+  ),
+  (
+    opcode  : A_BLSR;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #242#249#1#243#60#137;
+    flags   : [if_bmi1,if_prot]
+  ),
+  (
+    opcode  : A_BLSR;
+    ops     : 2;
+    optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_none,ot_none);
+    code    : #242#243#249#1#243#60#137;
+    flags   : [if_bmi1,if_prot,if_x86_64]
+  ),
+  (
     opcode  : A_TZCNT;
     ops     : 2;
     optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_rm_gpr,ot_none,ot_none);
@@ -13959,6 +14064,62 @@
     flags   : [if_bmi1,if_sm]
   ),
   (
+    opcode  : A_BZHI;
+    ops     : 3;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
+    code    : #242#249#1#245#62#72;
+    flags   : [if_bmi2,if_prot]
+  ),
+  (
+    opcode  : A_BZHI;
+    ops     : 3;
+    optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_reg64,ot_none);
+    code    : #242#243#249#1#245#62#72;
+    flags   : [if_bmi2,if_prot,if_x86_64]
+  ),
+  (
+    opcode  : A_MULX;
+    ops     : 3;
+    optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
+    code    : #220#242#249#1#246#61#80;
+    flags   : [if_bmi2,if_prot]
+  ),
+  (
+    opcode  : A_MULX;
+    ops     : 3;
+    optypes : (ot_reg64,ot_reg64,ot_rm_gpr or ot_bits64,ot_none);
+    code    : #220#242#243#249#1#246#61#80;
+    flags   : [if_bmi2,if_prot,if_x86_64]
+  ),
+  (
+    opcode  : A_PDEP;
+    ops     : 3;
+    optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
+    code    : #220#242#249#1#245#61#80;
+    flags   : [if_bmi2,if_prot]
+  ),
+  (
+    opcode  : A_PDEP;
+    ops     : 3;
+    optypes : (ot_reg64,ot_reg64,ot_rm_gpr or ot_bits64,ot_none);
+    code    : #220#242#243#249#1#245#61#80;
+    flags   : [if_bmi2,if_prot,if_x86_64]
+  ),
+  (
+    opcode  : A_PEXT;
+    ops     : 3;
+    optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
+    code    : #219#242#249#1#245#61#80;
+    flags   : [if_bmi2,if_prot]
+  ),
+  (
+    opcode  : A_PEXT;
+    ops     : 3;
+    optypes : (ot_reg64,ot_reg64,ot_rm_gpr or ot_bits64,ot_none);
+    code    : #219#242#243#249#1#245#61#80;
+    flags   : [if_bmi2,if_prot,if_x86_64]
+  ),
+  (
     opcode  : A_RORX;
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_immediate or ot_bits8,ot_none);
@@ -14015,6 +14176,83 @@
     flags   : [if_bmi2,if_prot,if_x86_64]
   ),
   (
+    opcode  : A_MOVBE;
+    ops     : 2;
+    optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_memory or ot_bits16 or ot_bits32 or ot_bits64,ot_none,ot_none);
+    code    : #208#3#15#56#240#72;
+    flags   : [if_bmi2,if_sm]
+  ),
+  (
+    opcode  : A_MOVBE;
+    ops     : 2;
+    optypes : (ot_memory or ot_bits16 or ot_bits32 or ot_bits64,ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none);
+    code    : #209#3#15#56#241#65;
+    flags   : [if_bmi2,if_sm]
+  ),
+  (
+    opcode  : A_PCLMULQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_immediate or ot_bits8,ot_none);
+    code    : #241#3#15#58#68#72#22;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULLQLQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#0;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULHQLQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#16;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULLQHQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#1;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULHQHQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#17;
+    flags   : [if_avx,if_sandybridge]
+  ),
+  (
+    opcode  : A_ADCX;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #241#3#15#56#246#72;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_ADCX;
+    ops     : 2;
+    optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_none,ot_none);
+    code    : #241#214#3#15#56#246#72;
+    flags   : [if_bmi2,if_x86_64]
+  ),
+  (
+    opcode  : A_ADOX;
+    ops     : 2;
+    optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_none,ot_none);
+    code    : #219#3#15#56#246#72;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_ADOX;
+    ops     : 2;
+    optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_none,ot_none);
+    code    : #219#214#3#15#56#246#72;
+    flags   : [if_bmi2,if_x86_64]
+  ),
+  (
     opcode  : A_VBROADCASTI128;
     ops     : 2;
     optypes : (ot_ymmreg,ot_memory or ot_bits128,ot_none,ot_none);
@@ -15184,10 +15422,108 @@
     flags   : [if_xsave]
   ),
   (
+    opcode  : A_XSETBV;
+    ops     : 0;
+    optypes : (ot_none,ot_none,ot_none,ot_none);
+    code    : #3#15#1#209;
+    flags   : [if_xsave]
+  ),
+  (
+    opcode  : A_XSAVE;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#174#132;
+    flags   : [if_xsave]
+  ),
+  (
+    opcode  : A_XSAVE64;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #214#2#15#174#132;
+    flags   : [if_xsave]
+  ),
+  (
+    opcode  : A_XRSTOR;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#174#133;
+    flags   : [if_xsave]
+  ),
+  (
+    opcode  : A_XRSTOR64;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #214#2#15#174#133;
+    flags   : [if_xsave]
+  ),
+  (
+    opcode  : A_XSAVEOPT;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #2#15#174#134;
+    flags   : [if_xsave]
+  ),
+  (
+    opcode  : A_XSAVEOPT64;
+    ops     : 1;
+    optypes : (ot_memory,ot_none,ot_none,ot_none);
+    code    : #214#2#15#174#134;
+    flags   : [if_xsave]
+  ),
+  (
     opcode  : A_PREFETCHWT1;
     ops     : 1;
     optypes : (ot_memory,ot_none,ot_none,ot_none);
     code    : #2#15#13#130;
     flags   : [if_prefetchwt1]
+  ),
+  (
+    opcode  : A_SHA1RNDS4;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_immediate,ot_none);
+    code    : #3#15#58#204#72#22;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_SHA1NEXTE;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#200#72;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_SHA1MSG1;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#201#72;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_SHA1MSG2;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#202#72;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_SHA256RNDS2;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#203#72;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_SHA256MSG1;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#204#72;
+    flags   : [if_bmi2]
+  ),
+  (
+    opcode  : A_SHA256MSG2;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #3#15#56#205#72;
+    flags   : [if_bmi2]
   )
 );
diff -ru a/compiler/i386/i386att.inc b/compiler/i386/i386att.inc
--- a/compiler/i386/i386att.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/i386/i386att.inc	2024-05-16 04:44:15.443496796 +0000
@@ -254,7 +254,7 @@
 'pmaddwd',
 'pmagw',
 'pmulhriw',
-'pmulhrwa',
+'pmulhrw',
 'pmulhrwc',
 'pmulhw',
 'pmullw',
@@ -686,6 +686,10 @@
 'rdtscp',
 'movbe',
 'pclmulqdq',
+'pclmullqlqdq',
+'pclmulhqlqdq',
+'pclmullqhqdq',
+'pclmulhqhqdq',
 'vaddpd',
 'vaddps',
 'vaddsd',
@@ -879,6 +883,10 @@
 'vpblendvb',
 'vpblendw',
 'vpclmulqdq',
+'vpclmullqlqdq',
+'vpclmulhqlqdq',
+'vpclmullqhqdq',
+'vpclmulhqhqdq',
 'vpcmpeqb',
 'vpcmpeqd',
 'vpcmpeqq',
diff -ru a/compiler/i386/i386atts.inc b/compiler/i386/i386atts.inc
--- a/compiler/i386/i386atts.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/i386/i386atts.inc	2024-05-16 04:44:15.443496796 +0000
@@ -781,6 +781,10 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
 attsufMMX,
 attsufMMX,
 attsufNONE,
@@ -797,6 +801,10 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
diff -ru a/compiler/i386/i386int.inc b/compiler/i386/i386int.inc
--- a/compiler/i386/i386int.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/i386/i386int.inc	2024-05-16 04:44:15.443496796 +0000
@@ -254,7 +254,7 @@
 'pmaddwd',
 'pmagw',
 'pmulhriw',
-'pmulhrwa',
+'pmulhrw',
 'pmulhrwc',
 'pmulhw',
 'pmullw',
@@ -686,6 +686,10 @@
 'rdtscp',
 'movbe',
 'pclmulqdq',
+'pclmullqlqdq',
+'pclmulhqlqdq',
+'pclmullqhqdq',
+'pclmulhqhqdq',
 'vaddpd',
 'vaddps',
 'vaddsd',
@@ -879,6 +883,10 @@
 'vpblendvb',
 'vpblendw',
 'vpclmulqdq',
+'vpclmullqlqdq',
+'vpclmulhqlqdq',
+'vpclmullqhqdq',
+'vpclmulhqhqdq',
 'vpcmpeqb',
 'vpcmpeqd',
 'vpcmpeqq',
diff -ru a/compiler/i386/i386nop.inc b/compiler/i386/i386nop.inc
--- a/compiler/i386/i386nop.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/i386/i386nop.inc	2024-05-16 04:44:15.443496796 +0000
@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86ins.dat }
-4171;
+4187;
diff -ru a/compiler/i386/i386op.inc b/compiler/i386/i386op.inc
--- a/compiler/i386/i386op.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/i386/i386op.inc	2024-05-16 04:44:15.443496796 +0000
@@ -254,7 +254,7 @@
 A_PMADDWD,
 A_PMAGW,
 A_PMULHRIW,
-A_PMULHRWA,
+A_PMULHRW,
 A_PMULHRWC,
 A_PMULHW,
 A_PMULLW,
@@ -686,6 +686,10 @@
 A_RDTSCP,
 A_MOVBE,
 A_PCLMULQDQ,
+A_PCLMULLQLQDQ,
+A_PCLMULHQLQDQ,
+A_PCLMULLQHQDQ,
+A_PCLMULHQHQDQ,
 A_VADDPD,
 A_VADDPS,
 A_VADDSD,
@@ -879,6 +883,10 @@
 A_VPBLENDVB,
 A_VPBLENDW,
 A_VPCLMULQDQ,
+A_VPCLMULLQLQDQ,
+A_VPCLMULHQLQDQ,
+A_VPCLMULLQHQDQ,
+A_VPCLMULHQHQDQ,
 A_VPCMPEQB,
 A_VPCMPEQD,
 A_VPCMPEQQ,
diff -ru a/compiler/i386/i386prop.inc b/compiler/i386/i386prop.inc
--- a/compiler/i386/i386prop.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/i386/i386prop.inc	2024-05-16 04:44:15.443496796 +0000
@@ -685,7 +685,11 @@
 (Ch: [Ch_Wop3, Ch_Rop2]),
 (Ch: [Ch_WEAX, Ch_WEDX]),
 (Ch: [Ch_Rop1, Ch_Wop2]),
-(Ch: [Ch_Mop3, Ch_Rop2]),
+(Ch: [Ch_Mop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
@@ -882,6 +886,10 @@
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
diff -ru a/compiler/i386/i386tab.inc b/compiler/i386/i386tab.inc
--- a/compiler/i386/i386tab.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/i386/i386tab.inc	2024-05-16 04:44:15.443496796 +0000
@@ -3865,7 +3865,7 @@
     flags   : [if_pent,if_mmx,if_sm,if_cyrix]
   ),
   (
-    opcode  : A_PMULHRWA;
+    opcode  : A_PMULHRW;
     ops     : 2;
     optypes : (ot_mmxreg,ot_mmxrm,ot_none,ot_none);
     code    : #2#15#15#72#1#183;
@@ -8730,6 +8730,34 @@
     flags   : [if_clmul,if_sandybridge]
   ),
   (
+    opcode  : A_PCLMULLQLQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#0;
+    flags   : [if_clmul,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULHQLQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#16;
+    flags   : [if_clmul,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULLQHQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#1;
+    flags   : [if_clmul,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULHQHQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#17;
+    flags   : [if_clmul,if_sandybridge]
+  ),
+  (
     opcode  : A_VADDPD;
     ops     : 3;
     optypes : (ot_xmmreg_mz,ot_xmmreg,ot_xmmrm,ot_none);
@@ -13035,6 +13063,90 @@
     flags   : [if_avx512,if_tfv]
   ),
   (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #232#241#242#250#1#68#61#80#1#0;
+    flags   : [if_avx,if_sandybridge,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #232#241#244#250#1#68#61#80#1#0;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_zmmreg,ot_zmmreg,ot_zmmrm,ot_none);
+    code    : #232#233#241#250#1#68#61#80#1#0;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #232#241#242#250#1#68#61#80#1#16;
+    flags   : [if_avx,if_sandybridge,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #232#241#244#250#1#68#61#80#1#16;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_zmmreg,ot_zmmreg,ot_zmmrm,ot_none);
+    code    : #232#233#241#250#1#68#61#80#1#16;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #232#241#242#250#1#68#61#80#1#1;
+    flags   : [if_avx,if_sandybridge,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #232#241#244#250#1#68#61#80#1#1;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_zmmreg,ot_zmmreg,ot_zmmrm,ot_none);
+    code    : #232#233#241#250#1#68#61#80#1#1;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #232#241#242#250#1#68#61#80#1#17;
+    flags   : [if_avx,if_sandybridge,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #232#241#244#250#1#68#61#80#1#17;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_zmmreg,ot_zmmreg,ot_zmmrm,ot_none);
+    code    : #232#233#241#250#1#68#61#80#1#17;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
     opcode  : A_VPCMPEQB;
     ops     : 3;
     optypes : (ot_kreg_m,ot_xmmreg,ot_xmmrm,ot_none);
@@ -29173,7 +29285,7 @@
     opcode  : A_SHA1MSG2;
     ops     : 2;
     optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
-    code    : #3#15#56#12#72;
+    code    : #3#15#56#202#72;
     flags   : [if_sha]
   ),
   (
diff -ru a/compiler/i8086/i8086att.inc b/compiler/i8086/i8086att.inc
--- a/compiler/i8086/i8086att.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/i8086/i8086att.inc	2024-05-16 04:44:29.475658576 +0000
@@ -254,7 +254,7 @@
 'pmaddwd',
 'pmagw',
 'pmulhriw',
-'pmulhrwa',
+'pmulhrw',
 'pmulhrwc',
 'pmulhw',
 'pmullw',
@@ -686,6 +686,10 @@
 'rdtscp',
 'movbe',
 'pclmulqdq',
+'pclmullqlqdq',
+'pclmulhqlqdq',
+'pclmullqhqdq',
+'pclmulhqhqdq',
 'vaddpd',
 'vaddps',
 'vaddsd',
@@ -879,6 +883,10 @@
 'vpblendvb',
 'vpblendw',
 'vpclmulqdq',
+'vpclmullqlqdq',
+'vpclmulhqlqdq',
+'vpclmullqhqdq',
+'vpclmulhqhqdq',
 'vpcmpeqb',
 'vpcmpeqd',
 'vpcmpeqq',
diff -ru a/compiler/i8086/i8086atts.inc b/compiler/i8086/i8086atts.inc
--- a/compiler/i8086/i8086atts.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/i8086/i8086atts.inc	2024-05-16 04:44:29.475658576 +0000
@@ -781,6 +781,10 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
 attsufMMX,
 attsufMMX,
 attsufNONE,
@@ -797,6 +801,10 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
diff -ru a/compiler/i8086/i8086int.inc b/compiler/i8086/i8086int.inc
--- a/compiler/i8086/i8086int.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/i8086/i8086int.inc	2024-05-16 04:44:29.475658576 +0000
@@ -254,7 +254,7 @@
 'pmaddwd',
 'pmagw',
 'pmulhriw',
-'pmulhrwa',
+'pmulhrw',
 'pmulhrwc',
 'pmulhw',
 'pmullw',
@@ -686,6 +686,10 @@
 'rdtscp',
 'movbe',
 'pclmulqdq',
+'pclmullqlqdq',
+'pclmulhqlqdq',
+'pclmullqhqdq',
+'pclmulhqhqdq',
 'vaddpd',
 'vaddps',
 'vaddsd',
@@ -879,6 +883,10 @@
 'vpblendvb',
 'vpblendw',
 'vpclmulqdq',
+'vpclmullqlqdq',
+'vpclmulhqlqdq',
+'vpclmullqhqdq',
+'vpclmulhqhqdq',
 'vpcmpeqb',
 'vpcmpeqd',
 'vpcmpeqq',
diff -ru a/compiler/i8086/i8086nop.inc b/compiler/i8086/i8086nop.inc
--- a/compiler/i8086/i8086nop.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/i8086/i8086nop.inc	2024-05-16 04:44:29.475658576 +0000
@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86ins.dat }
-4203;
+4219;
diff -ru a/compiler/i8086/i8086op.inc b/compiler/i8086/i8086op.inc
--- a/compiler/i8086/i8086op.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/i8086/i8086op.inc	2024-05-16 04:44:29.475658576 +0000
@@ -254,7 +254,7 @@
 A_PMADDWD,
 A_PMAGW,
 A_PMULHRIW,
-A_PMULHRWA,
+A_PMULHRW,
 A_PMULHRWC,
 A_PMULHW,
 A_PMULLW,
@@ -686,6 +686,10 @@
 A_RDTSCP,
 A_MOVBE,
 A_PCLMULQDQ,
+A_PCLMULLQLQDQ,
+A_PCLMULHQLQDQ,
+A_PCLMULLQHQDQ,
+A_PCLMULHQHQDQ,
 A_VADDPD,
 A_VADDPS,
 A_VADDSD,
@@ -879,6 +883,10 @@
 A_VPBLENDVB,
 A_VPBLENDW,
 A_VPCLMULQDQ,
+A_VPCLMULLQLQDQ,
+A_VPCLMULHQLQDQ,
+A_VPCLMULLQHQDQ,
+A_VPCLMULHQHQDQ,
 A_VPCMPEQB,
 A_VPCMPEQD,
 A_VPCMPEQQ,
diff -ru a/compiler/i8086/i8086prop.inc b/compiler/i8086/i8086prop.inc
--- a/compiler/i8086/i8086prop.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/i8086/i8086prop.inc	2024-05-16 04:44:29.475658576 +0000
@@ -685,7 +685,11 @@
 (Ch: [Ch_Wop3, Ch_Rop2]),
 (Ch: [Ch_WEAX, Ch_WEDX]),
 (Ch: [Ch_Rop1, Ch_Wop2]),
-(Ch: [Ch_Mop3, Ch_Rop2]),
+(Ch: [Ch_Mop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
@@ -882,6 +886,10 @@
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
diff -ru a/compiler/i8086/i8086tab.inc b/compiler/i8086/i8086tab.inc
--- a/compiler/i8086/i8086tab.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/i8086/i8086tab.inc	2024-05-16 04:44:29.475658576 +0000
@@ -3879,7 +3879,7 @@
     flags   : [if_pent,if_mmx,if_sm,if_cyrix]
   ),
   (
-    opcode  : A_PMULHRWA;
+    opcode  : A_PMULHRW;
     ops     : 2;
     optypes : (ot_mmxreg,ot_mmxrm,ot_none,ot_none);
     code    : #2#15#15#72#1#183;
@@ -8758,6 +8758,34 @@
     flags   : [if_clmul,if_sandybridge]
   ),
   (
+    opcode  : A_PCLMULLQLQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#0;
+    flags   : [if_clmul,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULHQLQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#16;
+    flags   : [if_clmul,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULLQHQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#1;
+    flags   : [if_clmul,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULHQHQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#17;
+    flags   : [if_clmul,if_sandybridge]
+  ),
+  (
     opcode  : A_VADDPD;
     ops     : 3;
     optypes : (ot_xmmreg_mz,ot_xmmreg,ot_xmmrm,ot_none);
@@ -13063,6 +13091,90 @@
     flags   : [if_avx512,if_tfv]
   ),
   (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #232#241#242#250#1#68#61#80#1#0;
+    flags   : [if_avx,if_sandybridge,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #232#241#244#250#1#68#61#80#1#0;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_zmmreg,ot_zmmreg,ot_zmmrm,ot_none);
+    code    : #232#233#241#250#1#68#61#80#1#0;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #232#241#242#250#1#68#61#80#1#16;
+    flags   : [if_avx,if_sandybridge,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #232#241#244#250#1#68#61#80#1#16;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_zmmreg,ot_zmmreg,ot_zmmrm,ot_none);
+    code    : #232#233#241#250#1#68#61#80#1#16;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #232#241#242#250#1#68#61#80#1#1;
+    flags   : [if_avx,if_sandybridge,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #232#241#244#250#1#68#61#80#1#1;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_zmmreg,ot_zmmreg,ot_zmmrm,ot_none);
+    code    : #232#233#241#250#1#68#61#80#1#1;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #232#241#242#250#1#68#61#80#1#17;
+    flags   : [if_avx,if_sandybridge,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #232#241#244#250#1#68#61#80#1#17;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_zmmreg,ot_zmmreg,ot_zmmrm,ot_none);
+    code    : #232#233#241#250#1#68#61#80#1#17;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
     opcode  : A_VPCMPEQB;
     ops     : 3;
     optypes : (ot_kreg_m,ot_xmmreg,ot_xmmrm,ot_none);
@@ -29397,7 +29509,7 @@
     opcode  : A_SHA1MSG2;
     ops     : 2;
     optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
-    code    : #3#15#56#12#72;
+    code    : #3#15#56#202#72;
     flags   : [if_sha]
   ),
   (
diff -ru a/compiler/x86/x86ins.dat b/compiler/x86/x86ins.dat
--- a/compiler/x86/x86ins.dat	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/x86/x86ins.dat	2024-05-16 04:33:56.312358725 +0000
@@ -1398,7 +1398,7 @@
 (Ch_All)
 mmxreg,mmxrm          \2\x0F\x5D\110                  PENT,MMX,SM,CYRIX
 
-[PMULHRWA]
+[PMULHRW]
 (Ch_All)
 mmxreg,mmxrm          \2\x0F\x0F\110\1\xB7            PENT,3DNOW,SM
 
@@ -3593,9 +3593,25 @@
 ;*******************************************************************************
 
 [PCLMULQDQ]
-(Ch_Mop3, Ch_Rop2)
+(Ch_Mop3, Ch_Rop2, Ch_Rop1)
 xmmreg,xmmrm,imm8                    \361\3\xf\x3A\x44\110\26        CLMUL,SANDYBRIDGE
 
+[PCLMULLQLQDQ]
+(Ch_Mop2, Ch_Rop1)
+xmmreg,xmmrm                         \361\3\xf\x3A\x44\110\1\x00     CLMUL,SANDYBRIDGE
+
+[PCLMULHQLQDQ]
+(Ch_Mop2, Ch_Rop1)
+xmmreg,xmmrm                         \361\3\xf\x3A\x44\110\1\x10     CLMUL,SANDYBRIDGE
+
+[PCLMULLQHQDQ]
+(Ch_Mop2, Ch_Rop1)
+xmmreg,xmmrm                         \361\3\xf\x3A\x44\110\1\x01     CLMUL,SANDYBRIDGE
+
+[PCLMULHQHQDQ]
+(Ch_Mop2, Ch_Rop1)
+xmmreg,xmmrm                         \361\3\xf\x3A\x44\110\1\x11     CLMUL,SANDYBRIDGE
+
 ;*******************************************************************************
 ;****** AVX I ******************************************************************
 ;*******************************************************************************
@@ -4867,9 +4883,32 @@
 [VPCLMULQDQ]
 (Ch_Wop4, Ch_Rop3, Ch_Rop2, Ch_Rop1)
 xmmreg,xmmreg,xmmrm,imm8                  \350\361\362\372\1\x44\75\120\27          AVX,SANDYBRIDGE,TFV
-ymmreg,ymmreg,ymmrm,imm8                  \350\361\364\372\1\x44\75\120\27          AVX512,TFV
+ymmreg,ymmreg,ymmrm,imm8                  \350\361\364\372\1\x44\75\120\27          AVX512,TFV  ;Use AVX512, but has special VPCLMULQD feature flag bit 
 zmmreg,zmmreg,zmmrm,imm8                  \350\351\361\372\1\x44\75\120\27          AVX512,TFV
 
+[VPCLMULLQLQDQ]
+(Ch_Wop3, Ch_Rop2, Ch_Rop1)
+xmmreg,xmmreg,xmmrm                       \350\361\362\372\1\x44\75\120\1\x00       AVX,SANDYBRIDGE,TFV
+ymmreg,ymmreg,ymmrm                       \350\361\364\372\1\x44\75\120\1\x00       AVX512,TFV  ;Use AVX512, but has special VPCLMULQD feature flag bit 
+zmmreg,zmmreg,zmmrm                       \350\351\361\372\1\x44\75\120\1\x00       AVX512,TFV
+
+[VPCLMULHQLQDQ]
+(Ch_Wop3, Ch_Rop2, Ch_Rop1)
+xmmreg,xmmreg,xmmrm                       \350\361\362\372\1\x44\75\120\1\x10       AVX,SANDYBRIDGE,TFV
+ymmreg,ymmreg,ymmrm                       \350\361\364\372\1\x44\75\120\1\x10       AVX512,TFV  ;Use AVX512, but has special VPCLMULQD feature flag bit 
+zmmreg,zmmreg,zmmrm                       \350\351\361\372\1\x44\75\120\1\x10       AVX512,TFV
+
+[VPCLMULLQHQDQ]
+(Ch_Wop3, Ch_Rop2, Ch_Rop1)
+xmmreg,xmmreg,xmmrm                       \350\361\362\372\1\x44\75\120\1\x01       AVX,SANDYBRIDGE,TFV
+ymmreg,ymmreg,ymmrm                       \350\361\364\372\1\x44\75\120\1\x01       AVX512,TFV  ;Use AVX512, but has special VPCLMULQD feature flag bit 
+zmmreg,zmmreg,zmmrm                       \350\351\361\372\1\x44\75\120\1\x01       AVX512,TFV
+
+[VPCLMULHQHQDQ]
+(Ch_Wop3, Ch_Rop2, Ch_Rop1)
+xmmreg,xmmreg,xmmrm                       \350\361\362\372\1\x44\75\120\1\x11       AVX,SANDYBRIDGE,TFV
+ymmreg,ymmreg,ymmrm                       \350\361\364\372\1\x44\75\120\1\x11       AVX512,TFV  ;Use AVX512, but has special VPCLMULQD feature flag bit 
+zmmreg,zmmreg,zmmrm                       \350\351\361\372\1\x44\75\120\1\x11       AVX512,TFV
 
 [VPCMPEQB]
 (Ch_Wop3, Ch_Rop2, Ch_Rop1)
@@ -9148,7 +9187,7 @@
 
 [SHA1MSG2]
 (Ch_Mop2, Ch_Rop1)
-xmmreg,xmmrm                              \3\x0F\x38\xC\110                        SHA
+xmmreg,xmmrm                              \3\x0F\x38\xCA\110                        SHA
 
 [SHA256RNDS2]
 ; reads also xmm0 !
diff -ru a/compiler/x86_64/x8664ats.inc b/compiler/x86_64/x8664ats.inc
--- a/compiler/x86_64/x8664ats.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/x86_64/x8664ats.inc	2024-05-16 04:44:51.175908793 +0000
@@ -777,6 +777,10 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
 attsufMMX,
 attsufMMX,
 attsufNONE,
@@ -793,6 +797,10 @@
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
diff -ru a/compiler/x86_64/x8664att.inc b/compiler/x86_64/x8664att.inc
--- a/compiler/x86_64/x8664att.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/x86_64/x8664att.inc	2024-05-16 04:44:51.175908793 +0000
@@ -245,7 +245,7 @@
 'pmaddwd',
 'pmagw',
 'pmulhriw',
-'pmulhrwa',
+'pmulhrw',
 'pmulhrwc',
 'pmulhw',
 'pmullw',
@@ -682,6 +682,10 @@
 'cmpsq',
 'movbe',
 'pclmulqdq',
+'pclmullqlqdq',
+'pclmulhqlqdq',
+'pclmullqhqdq',
+'pclmulhqhqdq',
 'vaddpd',
 'vaddps',
 'vaddsd',
@@ -875,6 +879,10 @@
 'vpblendvb',
 'vpblendw',
 'vpclmulqdq',
+'vpclmullqlqdq',
+'vpclmulhqlqdq',
+'vpclmullqhqdq',
+'vpclmulhqhqdq',
 'vpcmpeqb',
 'vpcmpeqd',
 'vpcmpeqq',
diff -ru a/compiler/x86_64/x8664int.inc b/compiler/x86_64/x8664int.inc
--- a/compiler/x86_64/x8664int.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/x86_64/x8664int.inc	2024-05-16 04:44:51.175908793 +0000
@@ -245,7 +245,7 @@
 'pmaddwd',
 'pmagw',
 'pmulhriw',
-'pmulhrwa',
+'pmulhrw',
 'pmulhrwc',
 'pmulhw',
 'pmullw',
@@ -682,6 +682,10 @@
 'cmpsq',
 'movbe',
 'pclmulqdq',
+'pclmullqlqdq',
+'pclmulhqlqdq',
+'pclmullqhqdq',
+'pclmulhqhqdq',
 'vaddpd',
 'vaddps',
 'vaddsd',
@@ -875,6 +879,10 @@
 'vpblendvb',
 'vpblendw',
 'vpclmulqdq',
+'vpclmullqlqdq',
+'vpclmulhqlqdq',
+'vpclmullqhqdq',
+'vpclmulhqhqdq',
 'vpcmpeqb',
 'vpcmpeqd',
 'vpcmpeqq',
diff -ru a/compiler/x86_64/x8664nop.inc b/compiler/x86_64/x8664nop.inc
--- a/compiler/x86_64/x8664nop.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/x86_64/x8664nop.inc	2024-05-16 04:44:51.175908793 +0000
@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86ins.dat }
-4235;
+4251;
diff -ru a/compiler/x86_64/x8664op.inc b/compiler/x86_64/x8664op.inc
--- a/compiler/x86_64/x8664op.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/x86_64/x8664op.inc	2024-05-16 04:44:51.175908793 +0000
@@ -245,7 +245,7 @@
 A_PMADDWD,
 A_PMAGW,
 A_PMULHRIW,
-A_PMULHRWA,
+A_PMULHRW,
 A_PMULHRWC,
 A_PMULHW,
 A_PMULLW,
@@ -682,6 +682,10 @@
 A_CMPSQ,
 A_MOVBE,
 A_PCLMULQDQ,
+A_PCLMULLQLQDQ,
+A_PCLMULHQLQDQ,
+A_PCLMULLQHQDQ,
+A_PCLMULHQHQDQ,
 A_VADDPD,
 A_VADDPS,
 A_VADDSD,
@@ -875,6 +879,10 @@
 A_VPBLENDVB,
 A_VPBLENDW,
 A_VPCLMULQDQ,
+A_VPCLMULLQLQDQ,
+A_VPCLMULHQLQDQ,
+A_VPCLMULLQHQDQ,
+A_VPCLMULHQHQDQ,
 A_VPCMPEQB,
 A_VPCMPEQD,
 A_VPCMPEQQ,
diff -ru a/compiler/x86_64/x8664pro.inc b/compiler/x86_64/x8664pro.inc
--- a/compiler/x86_64/x8664pro.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/x86_64/x8664pro.inc	2024-05-16 04:44:51.175908793 +0000
@@ -681,7 +681,11 @@
 (Ch: [Ch_WRAX, Ch_RWRSI, Ch_RDirFlag]),
 (Ch: [Ch_RWRSI, Ch_RMemEDI, Ch_RWRDI, Ch_RDirFlag, Ch_WOverflowFlag, Ch_WSignFlag, Ch_WZeroFlag, Ch_WAuxiliaryFlag, Ch_WCarryFlag, Ch_WParityFlag]),
 (Ch: [Ch_Rop1, Ch_Wop2]),
-(Ch: [Ch_Mop3, Ch_Rop2]),
+(Ch: [Ch_Mop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
+(Ch: [Ch_Mop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
@@ -878,6 +882,10 @@
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
+(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
 (Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
diff -ru a/compiler/x86_64/x8664tab.inc b/compiler/x86_64/x8664tab.inc
--- a/compiler/x86_64/x8664tab.inc	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/x86_64/x8664tab.inc	2024-05-16 04:44:51.175908793 +0000
@@ -3879,7 +3879,7 @@
     flags   : [if_pent,if_mmx,if_sm,if_cyrix]
   ),
   (
-    opcode  : A_PMULHRWA;
+    opcode  : A_PMULHRW;
     ops     : 2;
     optypes : (ot_mmxreg,ot_mmxrm,ot_none,ot_none);
     code    : #2#15#15#72#1#183;
@@ -9031,6 +9031,34 @@
     flags   : [if_clmul,if_sandybridge]
   ),
   (
+    opcode  : A_PCLMULLQLQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#0;
+    flags   : [if_clmul,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULHQLQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#16;
+    flags   : [if_clmul,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULLQHQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#1;
+    flags   : [if_clmul,if_sandybridge]
+  ),
+  (
+    opcode  : A_PCLMULHQHQDQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
+    code    : #241#3#15#58#68#72#1#17;
+    flags   : [if_clmul,if_sandybridge]
+  ),
+  (
     opcode  : A_VADDPD;
     ops     : 3;
     optypes : (ot_xmmreg_mz,ot_xmmreg,ot_xmmrm,ot_none);
@@ -13364,6 +13392,90 @@
     flags   : [if_avx512,if_tfv]
   ),
   (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #232#241#242#250#1#68#61#80#1#0;
+    flags   : [if_avx,if_sandybridge,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #232#241#244#250#1#68#61#80#1#0;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULLQLQDQ;
+    ops     : 3;
+    optypes : (ot_zmmreg,ot_zmmreg,ot_zmmrm,ot_none);
+    code    : #232#233#241#250#1#68#61#80#1#0;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #232#241#242#250#1#68#61#80#1#16;
+    flags   : [if_avx,if_sandybridge,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #232#241#244#250#1#68#61#80#1#16;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULHQLQDQ;
+    ops     : 3;
+    optypes : (ot_zmmreg,ot_zmmreg,ot_zmmrm,ot_none);
+    code    : #232#233#241#250#1#68#61#80#1#16;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #232#241#242#250#1#68#61#80#1#1;
+    flags   : [if_avx,if_sandybridge,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #232#241#244#250#1#68#61#80#1#1;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULLQHQDQ;
+    ops     : 3;
+    optypes : (ot_zmmreg,ot_zmmreg,ot_zmmrm,ot_none);
+    code    : #232#233#241#250#1#68#61#80#1#1;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
+    code    : #232#241#242#250#1#68#61#80#1#17;
+    flags   : [if_avx,if_sandybridge,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
+    code    : #232#241#244#250#1#68#61#80#1#17;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
+    opcode  : A_VPCLMULHQHQDQ;
+    ops     : 3;
+    optypes : (ot_zmmreg,ot_zmmreg,ot_zmmrm,ot_none);
+    code    : #232#233#241#250#1#68#61#80#1#17;
+    flags   : [if_avx512,if_tfv]
+  ),
+  (
     opcode  : A_VPCMPEQB;
     ops     : 3;
     optypes : (ot_kreg_m,ot_xmmreg,ot_xmmrm,ot_none);
@@ -29621,7 +29733,7 @@
     opcode  : A_SHA1MSG2;
     ops     : 2;
     optypes : (ot_xmmreg,ot_xmmrm,ot_none,ot_none);
-    code    : #3#15#56#12#72;
+    code    : #3#15#56#202#72;
     flags   : [if_sha]
   ),
   (
diff -ru a/compiler/utils/mkx86ins.pp b/compiler/utils/mkx86ins.pp
--- a/compiler/utils/mkx86ins.pp	2024-05-09 00:13:05.000000000 +0000
+++ b/compiler/utils/mkx86ins.pp	2024-05-17 11:01:12.308431055 +0000
@@ -16,7 +16,7 @@
 program mkx86ins;
 
 const
-  Version = '1.6.1';
+  Version = '1.6.2';
   max_operands = 4;
 var
    s : string;
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to