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