+ added a few BMI instructions to see if they can be encoded

git-svn-id: trunk@24907 -
This commit is contained in:
florian 2013-06-16 09:35:21 +00:00
parent 0a84f1f10c
commit 9b6094a58c
16 changed files with 237 additions and 10 deletions

View File

@ -943,5 +943,11 @@
'vxorpd',
'vxorps',
'vzeroall',
'vzeroupper'
'vzeroupper',
'andn',
'bextr',
'rorx',
'sarx',
'shlx',
'shrx'
);

View File

@ -943,5 +943,11 @@ attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE
);

View File

@ -943,5 +943,11 @@
'vxorpd',
'vxorps',
'vzeroall',
'vzeroupper'
'vzeroupper',
'andn',
'bextr',
'rorx',
'sarx',
'shlx',
'shrx'
);

View File

@ -1,2 +1,2 @@
{ don't edit, this file is generated from x86ins.dat }
1652;
1658;

View File

@ -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
);

View File

@ -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))
);

View File

@ -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
)
);

View File

@ -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 }

View File

@ -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

View File

@ -943,5 +943,11 @@ attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE
);

View File

@ -943,5 +943,11 @@
'vxorpd',
'vxorps',
'vzeroall',
'vzeroupper'
'vzeroupper',
'andn',
'bextr',
'rorx',
'sarx',
'shlx',
'shrx'
);

View File

@ -943,5 +943,11 @@
'vxorpd',
'vxorps',
'vzeroall',
'vzeroupper'
'vzeroupper',
'andn',
'bextr',
'rorx',
'sarx',
'shlx',
'shrx'
);

View File

@ -1,2 +1,2 @@
{ don't edit, this file is generated from x86ins.dat }
1667;
1679;

View File

@ -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
);

View File

@ -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))
);

View File

@ -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
)
);