diff --git a/compiler/i386/i386att.inc b/compiler/i386/i386att.inc index aa6862df47..ed2f7848a1 100644 --- a/compiler/i386/i386att.inc +++ b/compiler/i386/i386att.inc @@ -946,6 +946,7 @@ 'vzeroupper', 'andn', 'bextr', +'tzcnt', 'rorx', 'sarx', 'shlx', diff --git a/compiler/i386/i386atts.inc b/compiler/i386/i386atts.inc index 0e4ccd148f..5a53788dd6 100644 --- a/compiler/i386/i386atts.inc +++ b/compiler/i386/i386atts.inc @@ -963,5 +963,6 @@ attsufNONE, attsufNONE, attsufNONE, attsufNONE, +attsufNONE, attsufNONE ); diff --git a/compiler/i386/i386int.inc b/compiler/i386/i386int.inc index e04272722d..dc4ebb3dd2 100644 --- a/compiler/i386/i386int.inc +++ b/compiler/i386/i386int.inc @@ -946,6 +946,7 @@ 'vzeroupper', 'andn', 'bextr', +'tzcnt', 'rorx', 'sarx', 'shlx', diff --git a/compiler/i386/i386nop.inc b/compiler/i386/i386nop.inc index 7bb21828c6..e670d6a963 100644 --- a/compiler/i386/i386nop.inc +++ b/compiler/i386/i386nop.inc @@ -1,2 +1,2 @@ { don't edit, this file is generated from x86ins.dat } -1657; +1658; diff --git a/compiler/i386/i386op.inc b/compiler/i386/i386op.inc index 52353287d2..48dbdd334d 100644 --- a/compiler/i386/i386op.inc +++ b/compiler/i386/i386op.inc @@ -946,6 +946,7 @@ A_VZEROALL, A_VZEROUPPER, A_ANDN, A_BEXTR, +A_TZCNT, A_RORX, A_SARX, A_SHLX, diff --git a/compiler/i386/i386prop.inc b/compiler/i386/i386prop.inc index b9231ab0f3..009bf2ce00 100644 --- a/compiler/i386/i386prop.inc +++ b/compiler/i386/i386prop.inc @@ -946,6 +946,7 @@ (Ch: (Ch_All, Ch_None, Ch_None)), (Ch: (Ch_Wop1, Ch_Rop2, Ch_Rop3)), (Ch: (Ch_Wop1, Ch_Rop2, Ch_Rop3)), +(Ch: (Ch_Wop2, Ch_WFlags, Ch_Rop1)), (Ch: (Ch_Wop1, Ch_Rop2, Ch_None)), (Ch: (Ch_Wop1, Ch_Rop2, Ch_Rop3)), (Ch: (Ch_Wop1, Ch_Rop2, Ch_Rop3)), diff --git a/compiler/i386/i386tab.inc b/compiler/i386/i386tab.inc index 6f7df0be67..d9dde010f8 100644 --- a/compiler/i386/i386tab.inc +++ b/compiler/i386/i386tab.inc @@ -11571,6 +11571,13 @@ code : #242#249#1#247#62#72; flags : if_bmi1 ), + ( + opcode : A_TZCNT; + ops : 2; + optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_rm_gpr,ot_none,ot_none); + code : #208#219#2#15#188#72; + flags : if_bmi1 or if_sm + ), ( opcode : A_RORX; ops : 3; diff --git a/compiler/i8086/i8086att.inc b/compiler/i8086/i8086att.inc index aa6862df47..ed2f7848a1 100644 --- a/compiler/i8086/i8086att.inc +++ b/compiler/i8086/i8086att.inc @@ -946,6 +946,7 @@ 'vzeroupper', 'andn', 'bextr', +'tzcnt', 'rorx', 'sarx', 'shlx', diff --git a/compiler/i8086/i8086atts.inc b/compiler/i8086/i8086atts.inc index 0e4ccd148f..5a53788dd6 100644 --- a/compiler/i8086/i8086atts.inc +++ b/compiler/i8086/i8086atts.inc @@ -963,5 +963,6 @@ attsufNONE, attsufNONE, attsufNONE, attsufNONE, +attsufNONE, attsufNONE ); diff --git a/compiler/i8086/i8086int.inc b/compiler/i8086/i8086int.inc index e04272722d..dc4ebb3dd2 100644 --- a/compiler/i8086/i8086int.inc +++ b/compiler/i8086/i8086int.inc @@ -946,6 +946,7 @@ 'vzeroupper', 'andn', 'bextr', +'tzcnt', 'rorx', 'sarx', 'shlx', diff --git a/compiler/i8086/i8086nop.inc b/compiler/i8086/i8086nop.inc index a3cd5d37ec..80c4fcebce 100644 --- a/compiler/i8086/i8086nop.inc +++ b/compiler/i8086/i8086nop.inc @@ -1,2 +1,2 @@ { don't edit, this file is generated from x86ins.dat } -1685; +1686; diff --git a/compiler/i8086/i8086op.inc b/compiler/i8086/i8086op.inc index 52353287d2..48dbdd334d 100644 --- a/compiler/i8086/i8086op.inc +++ b/compiler/i8086/i8086op.inc @@ -946,6 +946,7 @@ A_VZEROALL, A_VZEROUPPER, A_ANDN, A_BEXTR, +A_TZCNT, A_RORX, A_SARX, A_SHLX, diff --git a/compiler/i8086/i8086prop.inc b/compiler/i8086/i8086prop.inc index b9231ab0f3..009bf2ce00 100644 --- a/compiler/i8086/i8086prop.inc +++ b/compiler/i8086/i8086prop.inc @@ -946,6 +946,7 @@ (Ch: (Ch_All, Ch_None, Ch_None)), (Ch: (Ch_Wop1, Ch_Rop2, Ch_Rop3)), (Ch: (Ch_Wop1, Ch_Rop2, Ch_Rop3)), +(Ch: (Ch_Wop2, Ch_WFlags, Ch_Rop1)), (Ch: (Ch_Wop1, Ch_Rop2, Ch_None)), (Ch: (Ch_Wop1, Ch_Rop2, Ch_Rop3)), (Ch: (Ch_Wop1, Ch_Rop2, Ch_Rop3)), diff --git a/compiler/i8086/i8086tab.inc b/compiler/i8086/i8086tab.inc index 3063e6e569..a661cd5fd5 100644 --- a/compiler/i8086/i8086tab.inc +++ b/compiler/i8086/i8086tab.inc @@ -11571,6 +11571,13 @@ code : #242#249#1#247#62#72; flags : if_bmi1 ), + ( + opcode : A_TZCNT; + ops : 2; + optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_rm_gpr,ot_none,ot_none); + code : #208#219#2#15#188#72; + flags : if_bmi1 or if_sm + ), ( opcode : A_RORX; ops : 3; diff --git a/compiler/x86/x86ins.dat b/compiler/x86/x86ins.dat index 339b9bbb8d..39a187dd3c 100644 --- a/compiler/x86/x86ins.dat +++ b/compiler/x86/x86ins.dat @@ -4687,6 +4687,10 @@ reg64,reg64,rm64 \362\363\371\1\xf2\75\120 BMI1,X reg32,rm32,reg32 \362\371\1\xf7\76\110 BMI1 reg64,rm64,reg64 \362\363\371\1\xf7\76\110 BMI1,X86_64 +[TZCNT] +(Ch_Wop2, Ch_WFlags, Ch_Rop1) +reg16|32|64,regmem \320\333\2\x0F\xBC\110 BMI1,SM + ;******************************************************************************* ;********** BMI2 *************************************************************** ;******************************************************************************* diff --git a/compiler/x86_64/x8664ats.inc b/compiler/x86_64/x8664ats.inc index 0e4ccd148f..5a53788dd6 100644 --- a/compiler/x86_64/x8664ats.inc +++ b/compiler/x86_64/x8664ats.inc @@ -963,5 +963,6 @@ attsufNONE, attsufNONE, attsufNONE, attsufNONE, +attsufNONE, attsufNONE ); diff --git a/compiler/x86_64/x8664att.inc b/compiler/x86_64/x8664att.inc index aa6862df47..ed2f7848a1 100644 --- a/compiler/x86_64/x8664att.inc +++ b/compiler/x86_64/x8664att.inc @@ -946,6 +946,7 @@ 'vzeroupper', 'andn', 'bextr', +'tzcnt', 'rorx', 'sarx', 'shlx', diff --git a/compiler/x86_64/x8664int.inc b/compiler/x86_64/x8664int.inc index e04272722d..dc4ebb3dd2 100644 --- a/compiler/x86_64/x8664int.inc +++ b/compiler/x86_64/x8664int.inc @@ -946,6 +946,7 @@ 'vzeroupper', 'andn', 'bextr', +'tzcnt', 'rorx', 'sarx', 'shlx', diff --git a/compiler/x86_64/x8664nop.inc b/compiler/x86_64/x8664nop.inc index df6e3e3a4a..24830769e7 100644 --- a/compiler/x86_64/x8664nop.inc +++ b/compiler/x86_64/x8664nop.inc @@ -1,2 +1,2 @@ { don't edit, this file is generated from x86ins.dat } -1678; +1679; diff --git a/compiler/x86_64/x8664op.inc b/compiler/x86_64/x8664op.inc index 52353287d2..48dbdd334d 100644 --- a/compiler/x86_64/x8664op.inc +++ b/compiler/x86_64/x8664op.inc @@ -946,6 +946,7 @@ A_VZEROALL, A_VZEROUPPER, A_ANDN, A_BEXTR, +A_TZCNT, A_RORX, A_SARX, A_SHLX, diff --git a/compiler/x86_64/x8664pro.inc b/compiler/x86_64/x8664pro.inc index b9231ab0f3..009bf2ce00 100644 --- a/compiler/x86_64/x8664pro.inc +++ b/compiler/x86_64/x8664pro.inc @@ -946,6 +946,7 @@ (Ch: (Ch_All, Ch_None, Ch_None)), (Ch: (Ch_Wop1, Ch_Rop2, Ch_Rop3)), (Ch: (Ch_Wop1, Ch_Rop2, Ch_Rop3)), +(Ch: (Ch_Wop2, Ch_WFlags, Ch_Rop1)), (Ch: (Ch_Wop1, Ch_Rop2, Ch_None)), (Ch: (Ch_Wop1, Ch_Rop2, Ch_Rop3)), (Ch: (Ch_Wop1, Ch_Rop2, Ch_Rop3)), diff --git a/compiler/x86_64/x8664tab.inc b/compiler/x86_64/x8664tab.inc index 3802d95647..cfd0430494 100644 --- a/compiler/x86_64/x8664tab.inc +++ b/compiler/x86_64/x8664tab.inc @@ -11690,6 +11690,13 @@ code : #242#243#249#1#247#62#72; flags : if_bmi1 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); + code : #208#219#2#15#188#72; + flags : if_bmi1 or if_sm + ), ( opcode : A_RORX; ops : 3;