mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-20 23:59:33 +01:00
+ added a few BMI instructions to see if they can be encoded
git-svn-id: trunk@24907 -
This commit is contained in:
parent
0a84f1f10c
commit
9b6094a58c
@ -943,5 +943,11 @@
|
||||
'vxorpd',
|
||||
'vxorps',
|
||||
'vzeroall',
|
||||
'vzeroupper'
|
||||
'vzeroupper',
|
||||
'andn',
|
||||
'bextr',
|
||||
'rorx',
|
||||
'sarx',
|
||||
'shlx',
|
||||
'shrx'
|
||||
);
|
||||
|
||||
@ -943,5 +943,11 @@ attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE
|
||||
);
|
||||
|
||||
@ -943,5 +943,11 @@
|
||||
'vxorpd',
|
||||
'vxorps',
|
||||
'vzeroall',
|
||||
'vzeroupper'
|
||||
'vzeroupper',
|
||||
'andn',
|
||||
'bextr',
|
||||
'rorx',
|
||||
'sarx',
|
||||
'shlx',
|
||||
'shrx'
|
||||
);
|
||||
|
||||
@ -1,2 +1,2 @@
|
||||
{ don't edit, this file is generated from x86ins.dat }
|
||||
1652;
|
||||
1658;
|
||||
|
||||
@ -943,5 +943,11 @@ A_VUNPCKLPS,
|
||||
A_VXORPD,
|
||||
A_VXORPS,
|
||||
A_VZEROALL,
|
||||
A_VZEROUPPER
|
||||
A_VZEROUPPER,
|
||||
A_ANDN,
|
||||
A_BEXTR,
|
||||
A_RORX,
|
||||
A_SARX,
|
||||
A_SHLX,
|
||||
A_SHRX
|
||||
);
|
||||
|
||||
@ -943,5 +943,11 @@
|
||||
(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_Wop1, Ch_Rop2, Ch_Rop3)),
|
||||
(Ch: (Ch_Wop1, Ch_Rop2, Ch_Rop3)),
|
||||
(Ch: (Ch_Wop1, Ch_Rop2, Ch_None)),
|
||||
(Ch: (Ch_Wop1, Ch_Rop2, Ch_Rop3)),
|
||||
(Ch: (Ch_Wop1, Ch_Rop2, Ch_Rop3)),
|
||||
(Ch: (Ch_Wop1, Ch_Rop2, Ch_Rop3))
|
||||
);
|
||||
|
||||
@ -11563,5 +11563,47 @@
|
||||
optypes : (ot_none,ot_none,ot_none,ot_none);
|
||||
code : #242#248#1#119;
|
||||
flags : if_avx or if_sandybridge
|
||||
),
|
||||
(
|
||||
opcode : A_ANDN;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
|
||||
code : #242#249#1#242#61#80;
|
||||
flags : if_bmi1
|
||||
),
|
||||
(
|
||||
opcode : A_BEXTR;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
|
||||
code : #242#249#1#247#62#72;
|
||||
flags : if_bmi1
|
||||
),
|
||||
(
|
||||
opcode : A_RORX;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_immediate or ot_bits8,ot_none);
|
||||
code : #220#242#250#1#240#72#22;
|
||||
flags : if_bmi2
|
||||
),
|
||||
(
|
||||
opcode : A_SARX;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
|
||||
code : #219#242#249#1#247#62#72;
|
||||
flags : if_bmi2
|
||||
),
|
||||
(
|
||||
opcode : A_SHLX;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
|
||||
code : #241#242#249#1#247#62#72;
|
||||
flags : if_bmi2
|
||||
),
|
||||
(
|
||||
opcode : A_SHRX;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
|
||||
code : #220#242#249#1#247#62#72;
|
||||
flags : if_bmi2
|
||||
)
|
||||
);
|
||||
|
||||
@ -428,6 +428,8 @@ implementation
|
||||
IF_SSE42 = $00200000;
|
||||
IF_AVX = $00200000;
|
||||
IF_SANDYBRIDGE = $00200000;
|
||||
IF_BMI1 = $00200000;
|
||||
IF_BMI2 = $00200000;
|
||||
|
||||
IF_8086 = $00000000; { 8086 instruction }
|
||||
IF_186 = $01000000; { 186+ instruction }
|
||||
|
||||
@ -4673,3 +4673,42 @@ void \362\364\370\1\x77 AVX,SA
|
||||
[VZEROUPPER]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
void \362\370\1\x77 AVX,SANDYBRIDGE
|
||||
|
||||
;*******************************************************************************
|
||||
;********** BMI1 ***************************************************************
|
||||
;*******************************************************************************
|
||||
|
||||
[ANDN]
|
||||
(Ch_Wop1, Ch_Rop2, Ch_Rop3)
|
||||
reg32,reg32,rm32 \362\371\1\xf2\75\120 BMI1
|
||||
reg64,reg64,rm64 \362\363\371\1\xf2\75\120 BMI1,X86_64
|
||||
|
||||
[BEXTR]
|
||||
(Ch_Wop1, Ch_Rop2, Ch_Rop3)
|
||||
reg32,rm32,reg32 \362\371\1\xf7\76\110 BMI1
|
||||
reg64,rm64,reg64 \362\363\371\1\xf7\76\110 BMI1,X86_64
|
||||
|
||||
;*******************************************************************************
|
||||
;********** BMI2 ***************************************************************
|
||||
;*******************************************************************************
|
||||
|
||||
[RORX]
|
||||
(Ch_Wop1, Ch_Rop2, Ch_None)
|
||||
reg32,rm32,imm8 \334\362\372\1\xf0\110\26 BMI2
|
||||
reg64,rm64,imm8 \334\362\363\372\1\xf0\110\26 BMI2,X86_64
|
||||
|
||||
[SARX]
|
||||
(Ch_Wop1, Ch_Rop2, Ch_Rop3)
|
||||
reg32,rm32,reg32 \333\362\371\1\xf7\76\110 BMI2
|
||||
reg64,rm64,reg64 \333\362\363\371\1\xf7\76\110 BMI2,X86_64
|
||||
|
||||
[SHLX]
|
||||
(Ch_Wop1, Ch_Rop2, Ch_Rop3)
|
||||
reg32,rm32,reg32 \361\362\371\1\xf7\76\110 BMI2
|
||||
reg64,rm64,reg64 \361\362\363\371\1\xf7\76\110 BMI2,X86_64
|
||||
|
||||
[SHRX]
|
||||
(Ch_Wop1, Ch_Rop2, Ch_Rop3)
|
||||
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
|
||||
|
||||
|
||||
@ -943,5 +943,11 @@ attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE
|
||||
);
|
||||
|
||||
@ -943,5 +943,11 @@
|
||||
'vxorpd',
|
||||
'vxorps',
|
||||
'vzeroall',
|
||||
'vzeroupper'
|
||||
'vzeroupper',
|
||||
'andn',
|
||||
'bextr',
|
||||
'rorx',
|
||||
'sarx',
|
||||
'shlx',
|
||||
'shrx'
|
||||
);
|
||||
|
||||
@ -943,5 +943,11 @@
|
||||
'vxorpd',
|
||||
'vxorps',
|
||||
'vzeroall',
|
||||
'vzeroupper'
|
||||
'vzeroupper',
|
||||
'andn',
|
||||
'bextr',
|
||||
'rorx',
|
||||
'sarx',
|
||||
'shlx',
|
||||
'shrx'
|
||||
);
|
||||
|
||||
@ -1,2 +1,2 @@
|
||||
{ don't edit, this file is generated from x86ins.dat }
|
||||
1667;
|
||||
1679;
|
||||
|
||||
@ -943,5 +943,11 @@ A_VUNPCKLPS,
|
||||
A_VXORPD,
|
||||
A_VXORPS,
|
||||
A_VZEROALL,
|
||||
A_VZEROUPPER
|
||||
A_VZEROUPPER,
|
||||
A_ANDN,
|
||||
A_BEXTR,
|
||||
A_RORX,
|
||||
A_SARX,
|
||||
A_SHLX,
|
||||
A_SHRX
|
||||
);
|
||||
|
||||
@ -943,5 +943,11 @@
|
||||
(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_Wop1, Ch_Rop2, Ch_Rop3)),
|
||||
(Ch: (Ch_Wop1, Ch_Rop2, Ch_Rop3)),
|
||||
(Ch: (Ch_Wop1, Ch_Rop2, Ch_None)),
|
||||
(Ch: (Ch_Wop1, Ch_Rop2, Ch_Rop3)),
|
||||
(Ch: (Ch_Wop1, Ch_Rop2, Ch_Rop3)),
|
||||
(Ch: (Ch_Wop1, Ch_Rop2, Ch_Rop3))
|
||||
);
|
||||
|
||||
@ -11668,5 +11668,89 @@
|
||||
optypes : (ot_none,ot_none,ot_none,ot_none);
|
||||
code : #242#248#1#119;
|
||||
flags : if_avx or if_sandybridge
|
||||
),
|
||||
(
|
||||
opcode : A_ANDN;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
|
||||
code : #242#249#1#242#61#80;
|
||||
flags : if_bmi1
|
||||
),
|
||||
(
|
||||
opcode : A_ANDN;
|
||||
ops : 3;
|
||||
optypes : (ot_reg64,ot_reg64,ot_rm_gpr or ot_bits64,ot_none);
|
||||
code : #242#243#249#1#242#61#80;
|
||||
flags : if_bmi1 or if_x86_64
|
||||
),
|
||||
(
|
||||
opcode : A_BEXTR;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
|
||||
code : #242#249#1#247#62#72;
|
||||
flags : if_bmi1
|
||||
),
|
||||
(
|
||||
opcode : A_BEXTR;
|
||||
ops : 3;
|
||||
optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_reg64,ot_none);
|
||||
code : #242#243#249#1#247#62#72;
|
||||
flags : if_bmi1 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);
|
||||
code : #220#242#250#1#240#72#22;
|
||||
flags : if_bmi2
|
||||
),
|
||||
(
|
||||
opcode : A_RORX;
|
||||
ops : 3;
|
||||
optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_immediate or ot_bits8,ot_none);
|
||||
code : #220#242#243#250#1#240#72#22;
|
||||
flags : if_bmi2 or if_x86_64
|
||||
),
|
||||
(
|
||||
opcode : A_SARX;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
|
||||
code : #219#242#249#1#247#62#72;
|
||||
flags : if_bmi2
|
||||
),
|
||||
(
|
||||
opcode : A_SARX;
|
||||
ops : 3;
|
||||
optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_reg64,ot_none);
|
||||
code : #219#242#243#249#1#247#62#72;
|
||||
flags : if_bmi2 or if_x86_64
|
||||
),
|
||||
(
|
||||
opcode : A_SHLX;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
|
||||
code : #241#242#249#1#247#62#72;
|
||||
flags : if_bmi2
|
||||
),
|
||||
(
|
||||
opcode : A_SHLX;
|
||||
ops : 3;
|
||||
optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_reg64,ot_none);
|
||||
code : #241#242#243#249#1#247#62#72;
|
||||
flags : if_bmi2 or if_x86_64
|
||||
),
|
||||
(
|
||||
opcode : A_SHRX;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
|
||||
code : #220#242#249#1#247#62#72;
|
||||
flags : if_bmi2
|
||||
),
|
||||
(
|
||||
opcode : A_SHRX;
|
||||
ops : 3;
|
||||
optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_reg64,ot_none);
|
||||
code : #220#242#243#249#1#247#62#72;
|
||||
flags : if_bmi2 or if_x86_64
|
||||
)
|
||||
);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user