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 - [email protected] https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
