mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-07 16:10:41 +02:00
+ patch by Marģers to support the x86 assembler instructions blsi, blsr, blsmsk, adcx, adox, movbe, pclmulqdq, resolves #34815 and #34799
+ avxopcodes tests also movbe and pclmulqdq git-svn-id: trunk@40951 -
This commit is contained in:
parent
8c66e9a2eb
commit
4f0da5fcc3
@ -684,6 +684,8 @@
|
||||
'aesimc',
|
||||
'aeskeygenassist',
|
||||
'rdtscp',
|
||||
'movbe',
|
||||
'pclmulqdq',
|
||||
'vaddpd',
|
||||
'vaddps',
|
||||
'vaddsd',
|
||||
@ -1009,6 +1011,9 @@
|
||||
'vzeroupper',
|
||||
'andn',
|
||||
'bextr',
|
||||
'blsi',
|
||||
'blsmsk',
|
||||
'blsr',
|
||||
'tzcnt',
|
||||
'bzhi',
|
||||
'mulx',
|
||||
@ -1018,6 +1023,8 @@
|
||||
'sarx',
|
||||
'shlx',
|
||||
'shrx',
|
||||
'adcx',
|
||||
'adox',
|
||||
'vbroadcasti128',
|
||||
'vextracti128',
|
||||
'vinserti128',
|
||||
|
@ -684,6 +684,8 @@ attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufINT,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
@ -1021,6 +1023,11 @@ attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufINT,
|
||||
attsufINT,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
|
@ -684,6 +684,8 @@
|
||||
'aesimc',
|
||||
'aeskeygenassist',
|
||||
'rdtscp',
|
||||
'movbe',
|
||||
'pclmulqdq',
|
||||
'vaddpd',
|
||||
'vaddps',
|
||||
'vaddsd',
|
||||
@ -1009,6 +1011,9 @@
|
||||
'vzeroupper',
|
||||
'andn',
|
||||
'bextr',
|
||||
'blsi',
|
||||
'blsmsk',
|
||||
'blsr',
|
||||
'tzcnt',
|
||||
'bzhi',
|
||||
'mulx',
|
||||
@ -1018,6 +1023,8 @@
|
||||
'sarx',
|
||||
'shlx',
|
||||
'shrx',
|
||||
'adcx',
|
||||
'adox',
|
||||
'vbroadcasti128',
|
||||
'vextracti128',
|
||||
'vinserti128',
|
||||
|
@ -1,2 +1,2 @@
|
||||
{ don't edit, this file is generated from x86ins.dat }
|
||||
2121;
|
||||
2129;
|
||||
|
@ -684,6 +684,8 @@ A_AESDECLAST,
|
||||
A_AESIMC,
|
||||
A_AESKEYGENASSIST,
|
||||
A_RDTSCP,
|
||||
A_MOVBE,
|
||||
A_PCLMULQDQ,
|
||||
A_VADDPD,
|
||||
A_VADDPS,
|
||||
A_VADDSD,
|
||||
@ -1009,6 +1011,9 @@ A_VZEROALL,
|
||||
A_VZEROUPPER,
|
||||
A_ANDN,
|
||||
A_BEXTR,
|
||||
A_BLSI,
|
||||
A_BLSMSK,
|
||||
A_BLSR,
|
||||
A_TZCNT,
|
||||
A_BZHI,
|
||||
A_MULX,
|
||||
@ -1018,6 +1023,8 @@ A_RORX,
|
||||
A_SARX,
|
||||
A_SHLX,
|
||||
A_SHRX,
|
||||
A_ADCX,
|
||||
A_ADOX,
|
||||
A_VBROADCASTI128,
|
||||
A_VEXTRACTI128,
|
||||
A_VINSERTI128,
|
||||
|
@ -684,6 +684,8 @@
|
||||
(Ch: [Ch_All]),
|
||||
(Ch: [Ch_All]),
|
||||
(Ch: [Ch_WEAX, Ch_WEDX]),
|
||||
(Ch: [Ch_Rop1, Ch_Wop2]),
|
||||
(Ch: [Ch_All]),
|
||||
(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
|
||||
(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
|
||||
(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
|
||||
@ -1009,6 +1011,9 @@
|
||||
(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]),
|
||||
@ -1018,6 +1023,8 @@
|
||||
(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_Mop2, Ch_RWCarryFlag]),
|
||||
(Ch: [Ch_Rop1, Ch_Mop2, Ch_RWOverflowFlag]),
|
||||
(Ch: [Ch_All]),
|
||||
(Ch: [Ch_All]),
|
||||
(Ch: [Ch_All]),
|
||||
|
@ -8708,6 +8708,27 @@
|
||||
code : #3#15#1#249;
|
||||
flags : [if_sse4,if_sm]
|
||||
),
|
||||
(
|
||||
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_movbe,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_movbe,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_clmul,if_sandybridge]
|
||||
),
|
||||
(
|
||||
opcode : A_VADDPD;
|
||||
ops : 3;
|
||||
@ -13608,6 +13629,27 @@
|
||||
code : #242#249#1#247#62#72;
|
||||
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;
|
||||
@ -13671,6 +13713,20 @@
|
||||
code : #220#242#249#1#247#62#72;
|
||||
flags : [if_bmi2,if_prot]
|
||||
),
|
||||
(
|
||||
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_adx]
|
||||
),
|
||||
(
|
||||
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_adx]
|
||||
),
|
||||
(
|
||||
opcode : A_VBROADCASTI128;
|
||||
ops : 2;
|
||||
|
@ -684,6 +684,8 @@
|
||||
'aesimc',
|
||||
'aeskeygenassist',
|
||||
'rdtscp',
|
||||
'movbe',
|
||||
'pclmulqdq',
|
||||
'vaddpd',
|
||||
'vaddps',
|
||||
'vaddsd',
|
||||
@ -1009,6 +1011,9 @@
|
||||
'vzeroupper',
|
||||
'andn',
|
||||
'bextr',
|
||||
'blsi',
|
||||
'blsmsk',
|
||||
'blsr',
|
||||
'tzcnt',
|
||||
'bzhi',
|
||||
'mulx',
|
||||
@ -1018,6 +1023,8 @@
|
||||
'sarx',
|
||||
'shlx',
|
||||
'shrx',
|
||||
'adcx',
|
||||
'adox',
|
||||
'vbroadcasti128',
|
||||
'vextracti128',
|
||||
'vinserti128',
|
||||
|
@ -684,6 +684,8 @@ attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufINT,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
@ -1021,6 +1023,11 @@ attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufINT,
|
||||
attsufINT,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
|
@ -684,6 +684,8 @@
|
||||
'aesimc',
|
||||
'aeskeygenassist',
|
||||
'rdtscp',
|
||||
'movbe',
|
||||
'pclmulqdq',
|
||||
'vaddpd',
|
||||
'vaddps',
|
||||
'vaddsd',
|
||||
@ -1009,6 +1011,9 @@
|
||||
'vzeroupper',
|
||||
'andn',
|
||||
'bextr',
|
||||
'blsi',
|
||||
'blsmsk',
|
||||
'blsr',
|
||||
'tzcnt',
|
||||
'bzhi',
|
||||
'mulx',
|
||||
@ -1018,6 +1023,8 @@
|
||||
'sarx',
|
||||
'shlx',
|
||||
'shrx',
|
||||
'adcx',
|
||||
'adox',
|
||||
'vbroadcasti128',
|
||||
'vextracti128',
|
||||
'vinserti128',
|
||||
|
@ -1,2 +1,2 @@
|
||||
{ don't edit, this file is generated from x86ins.dat }
|
||||
2153;
|
||||
2161;
|
||||
|
@ -684,6 +684,8 @@ A_AESDECLAST,
|
||||
A_AESIMC,
|
||||
A_AESKEYGENASSIST,
|
||||
A_RDTSCP,
|
||||
A_MOVBE,
|
||||
A_PCLMULQDQ,
|
||||
A_VADDPD,
|
||||
A_VADDPS,
|
||||
A_VADDSD,
|
||||
@ -1009,6 +1011,9 @@ A_VZEROALL,
|
||||
A_VZEROUPPER,
|
||||
A_ANDN,
|
||||
A_BEXTR,
|
||||
A_BLSI,
|
||||
A_BLSMSK,
|
||||
A_BLSR,
|
||||
A_TZCNT,
|
||||
A_BZHI,
|
||||
A_MULX,
|
||||
@ -1018,6 +1023,8 @@ A_RORX,
|
||||
A_SARX,
|
||||
A_SHLX,
|
||||
A_SHRX,
|
||||
A_ADCX,
|
||||
A_ADOX,
|
||||
A_VBROADCASTI128,
|
||||
A_VEXTRACTI128,
|
||||
A_VINSERTI128,
|
||||
|
@ -684,6 +684,8 @@
|
||||
(Ch: [Ch_All]),
|
||||
(Ch: [Ch_All]),
|
||||
(Ch: [Ch_WEAX, Ch_WEDX]),
|
||||
(Ch: [Ch_Rop1, Ch_Wop2]),
|
||||
(Ch: [Ch_All]),
|
||||
(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
|
||||
(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
|
||||
(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
|
||||
@ -1009,6 +1011,9 @@
|
||||
(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]),
|
||||
@ -1018,6 +1023,8 @@
|
||||
(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_Mop2, Ch_RWCarryFlag]),
|
||||
(Ch: [Ch_Rop1, Ch_Mop2, Ch_RWOverflowFlag]),
|
||||
(Ch: [Ch_All]),
|
||||
(Ch: [Ch_All]),
|
||||
(Ch: [Ch_All]),
|
||||
|
@ -8736,6 +8736,27 @@
|
||||
code : #3#15#1#249;
|
||||
flags : [if_sse4,if_sm]
|
||||
),
|
||||
(
|
||||
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_movbe,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_movbe,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_clmul,if_sandybridge]
|
||||
),
|
||||
(
|
||||
opcode : A_VADDPD;
|
||||
ops : 3;
|
||||
@ -13636,6 +13657,27 @@
|
||||
code : #242#249#1#247#62#72;
|
||||
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;
|
||||
@ -13699,6 +13741,20 @@
|
||||
code : #220#242#249#1#247#62#72;
|
||||
flags : [if_bmi2,if_prot]
|
||||
),
|
||||
(
|
||||
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_adx]
|
||||
),
|
||||
(
|
||||
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_adx]
|
||||
),
|
||||
(
|
||||
opcode : A_VBROADCASTI128;
|
||||
ops : 2;
|
||||
|
@ -331,10 +331,14 @@ interface
|
||||
IF_SSSE3,
|
||||
IF_SSE41,
|
||||
IF_SSE42,
|
||||
IF_MOVBE,
|
||||
IF_CLMUL,
|
||||
IF_AVX,
|
||||
IF_AVX2,
|
||||
IF_BMI1,
|
||||
IF_BMI2,
|
||||
{ Intel ADX (Multi-Precision Add-Carry Instruction Extensions) }
|
||||
IF_ADX,
|
||||
IF_16BITONLY,
|
||||
IF_FMA,
|
||||
IF_FMA4,
|
||||
|
@ -3582,6 +3582,21 @@ void \326\1\xAD X86_64
|
||||
(Ch_RWRSI, Ch_RMemEDI, Ch_RWRDI, Ch_RDirFlag, Ch_WOverflowFlag, Ch_WSignFlag, Ch_WZeroFlag, Ch_WAuxiliaryFlag, Ch_WCarryFlag, Ch_WParityFlag)
|
||||
void \326\1\xA7 X86_64
|
||||
|
||||
[MOVBE,movbeX]
|
||||
(Ch_Rop1, Ch_Wop2)
|
||||
reg16|32|64,mem16|32|64 \320\3\xf\x38\xf0\110 MOVBE,SM
|
||||
mem16|32|64,reg16|32|64 \321\3\xf\x38\xf1\101 MOVBE,SM
|
||||
|
||||
|
||||
;*******************************************************************************
|
||||
;********* CLMUL ***************************************************************
|
||||
;*******************************************************************************
|
||||
|
||||
[PCLMULQDQ]
|
||||
(Ch_All)
|
||||
xmmreg,xmmrm,imm8 \361\3\xf\x3A\x44\110\26 CLMUL,SANDYBRIDGE
|
||||
|
||||
|
||||
;*******************************************************************************
|
||||
;****** AVX I ******************************************************************
|
||||
;*******************************************************************************
|
||||
@ -5285,6 +5300,21 @@ reg64,reg64,rm64 \362\363\371\1\xf2\75\120 BMI1,P
|
||||
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
|
||||
@ -5333,6 +5363,19 @@ reg64,rm64,reg64 \361\362\363\371\1\xf7\76\110 BMI2,P
|
||||
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
|
||||
|
||||
;*******************************************************************************
|
||||
;********** ADX ****************************************************************
|
||||
;*******************************************************************************
|
||||
|
||||
[ADCX,adcxX]
|
||||
(Ch_Rop1, Ch_Mop2, Ch_RWCarryFlag)
|
||||
reg32,rm32 \361\3\xf\x38\xf6\110 ADX
|
||||
reg64,rm64 \361\326\3\xf\x38\xf6\110 ADX,X86_64
|
||||
|
||||
[ADOX,adoxX]
|
||||
(Ch_Rop1, Ch_Mop2, Ch_RWOverflowFlag)
|
||||
reg32,rm32 \333\3\xf\x38\xf6\110 ADX
|
||||
reg64,rm64 \333\326\3\xf\x38\xf6\110 ADX,X86_64
|
||||
|
||||
;*******************************************************************************
|
||||
;********** AVX2 ***************************************************************
|
||||
|
@ -680,6 +680,8 @@ attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufINT,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
@ -1017,6 +1019,11 @@ attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufINT,
|
||||
attsufINT,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
|
@ -680,6 +680,8 @@
|
||||
'stosq',
|
||||
'lodsq',
|
||||
'cmpsq',
|
||||
'movbe',
|
||||
'pclmulqdq',
|
||||
'vaddpd',
|
||||
'vaddps',
|
||||
'vaddsd',
|
||||
@ -1005,6 +1007,9 @@
|
||||
'vzeroupper',
|
||||
'andn',
|
||||
'bextr',
|
||||
'blsi',
|
||||
'blsmsk',
|
||||
'blsr',
|
||||
'tzcnt',
|
||||
'bzhi',
|
||||
'mulx',
|
||||
@ -1014,6 +1019,8 @@
|
||||
'sarx',
|
||||
'shlx',
|
||||
'shrx',
|
||||
'adcx',
|
||||
'adox',
|
||||
'vbroadcasti128',
|
||||
'vextracti128',
|
||||
'vinserti128',
|
||||
|
@ -680,6 +680,8 @@
|
||||
'stosq',
|
||||
'lodsq',
|
||||
'cmpsq',
|
||||
'movbe',
|
||||
'pclmulqdq',
|
||||
'vaddpd',
|
||||
'vaddps',
|
||||
'vaddsd',
|
||||
@ -1005,6 +1007,9 @@
|
||||
'vzeroupper',
|
||||
'andn',
|
||||
'bextr',
|
||||
'blsi',
|
||||
'blsmsk',
|
||||
'blsr',
|
||||
'tzcnt',
|
||||
'bzhi',
|
||||
'mulx',
|
||||
@ -1014,6 +1019,8 @@
|
||||
'sarx',
|
||||
'shlx',
|
||||
'shrx',
|
||||
'adcx',
|
||||
'adox',
|
||||
'vbroadcasti128',
|
||||
'vextracti128',
|
||||
'vinserti128',
|
||||
|
@ -1,2 +1,2 @@
|
||||
{ don't edit, this file is generated from x86ins.dat }
|
||||
2178;
|
||||
2191;
|
||||
|
@ -680,6 +680,8 @@ A_RDTSCP,
|
||||
A_STOSQ,
|
||||
A_LODSQ,
|
||||
A_CMPSQ,
|
||||
A_MOVBE,
|
||||
A_PCLMULQDQ,
|
||||
A_VADDPD,
|
||||
A_VADDPS,
|
||||
A_VADDSD,
|
||||
@ -1005,6 +1007,9 @@ A_VZEROALL,
|
||||
A_VZEROUPPER,
|
||||
A_ANDN,
|
||||
A_BEXTR,
|
||||
A_BLSI,
|
||||
A_BLSMSK,
|
||||
A_BLSR,
|
||||
A_TZCNT,
|
||||
A_BZHI,
|
||||
A_MULX,
|
||||
@ -1014,6 +1019,8 @@ A_RORX,
|
||||
A_SARX,
|
||||
A_SHLX,
|
||||
A_SHRX,
|
||||
A_ADCX,
|
||||
A_ADOX,
|
||||
A_VBROADCASTI128,
|
||||
A_VEXTRACTI128,
|
||||
A_VINSERTI128,
|
||||
|
@ -680,6 +680,8 @@
|
||||
(Ch: [Ch_RRAX, Ch_WMemEDI, Ch_RWRDI, Ch_RDirFlag]),
|
||||
(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_All]),
|
||||
(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
|
||||
(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
|
||||
(Ch: [Ch_Wop3, Ch_Rop2, Ch_Rop1]),
|
||||
@ -1005,6 +1007,9 @@
|
||||
(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]),
|
||||
@ -1014,6 +1019,8 @@
|
||||
(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_Mop2, Ch_RWCarryFlag]),
|
||||
(Ch: [Ch_Rop1, Ch_Mop2, Ch_RWOverflowFlag]),
|
||||
(Ch: [Ch_All]),
|
||||
(Ch: [Ch_All]),
|
||||
(Ch: [Ch_All]),
|
||||
|
@ -9009,6 +9009,27 @@
|
||||
code : #214#1#167;
|
||||
flags : [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_movbe,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_movbe,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_clmul,if_sandybridge]
|
||||
),
|
||||
(
|
||||
opcode : A_VADDPD;
|
||||
ops : 3;
|
||||
@ -13951,6 +13972,48 @@
|
||||
code : #242#243#249#1#247#62#72;
|
||||
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;
|
||||
@ -14070,6 +14133,34 @@
|
||||
code : #220#242#243#249#1#247#62#72;
|
||||
flags : [if_bmi2,if_prot,if_x86_64]
|
||||
),
|
||||
(
|
||||
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_adx]
|
||||
),
|
||||
(
|
||||
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_adx,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_adx]
|
||||
),
|
||||
(
|
||||
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_adx,if_x86_64]
|
||||
),
|
||||
(
|
||||
opcode : A_VBROADCASTI128;
|
||||
ops : 2;
|
||||
|
@ -51,6 +51,17 @@ end;
|
||||
|
||||
procedure TAVXTestGenerator.Init;
|
||||
begin
|
||||
FOpCodeList.Add('ADCX,1,1,REG32,RM32,,,');
|
||||
FOpCodeList.Add('ADCX,1,1,REG64,RM64,,,');
|
||||
FOpCodeList.Add('ADOX,1,1,REG32,RM32,,,');
|
||||
FOpCodeList.Add('ADOX,1,1,REG64,RM64,,,');
|
||||
|
||||
FOpCodeList.Add('BLSI,1,1,REG32,RM32,,,');
|
||||
FOpCodeList.Add('BLSI,1,1,REG64,RM64,,,');
|
||||
FOpCodeList.Add('BLSR,1,1,REG32,RM32,,,');
|
||||
FOpCodeList.Add('BLSR,1,1,REG64,RM64,,,');
|
||||
FOpCodeList.Add('BLSMSK,1,1,REG32,RM32,,,');
|
||||
FOpCodeList.Add('BLSMSK,1,1,REG64,RM64,,,');
|
||||
FOpCodeList.Add('BZHI,1,1,REG32,RM32,REG32,,');
|
||||
FOpCodeList.Add('BZHI,1,1,REG64,RM64,REG64,,');
|
||||
FOpCodeList.Add('MULX,1,1,REG32,REG32,RM32,,');
|
||||
@ -58,8 +69,18 @@ begin
|
||||
FOpCodeList.Add('PDEP,1,1,REG32,REG32,RM32,,');
|
||||
FOpCodeList.Add('PDEP,1,1,REG64,REG64,RM64,,');
|
||||
FOpCodeList.Add('PEXT,1,1,REG32,REG32,RM32,,');
|
||||
FOpCodeList.Add('PEXT,1,1,REG64,REG64,RM64,,');
|
||||
FOpCodeList.Add('PEXT,1,1,REG64,REG64,RM64,,');
|
||||
|
||||
FOpCodeList.Add('MOVBE,1,1,REG16,MEM16,,,');
|
||||
FOpCodeList.Add('MOVBE,1,1,MEM16,REG16,,,');
|
||||
FOpCodeList.Add('MOVBE,1,1,REG32,MEM32,,,');
|
||||
FOpCodeList.Add('MOVBE,1,1,MEM32,REG32,,,');
|
||||
FOpCodeList.Add('MOVBE,1,1,REG64,MEM64,,,');
|
||||
FOpCodeList.Add('MOVBE,1,1,MEM64,REG64,,,');
|
||||
|
||||
FOpCodeList.Add('PCLMULQDQ,1,1,XMMREG,XMMRM,IMM8,');
|
||||
FOpCodeList.Add('VPCLMULQDQ,1,1,XMMREG,XMMREG,XMMRM,IMM8');
|
||||
|
||||
FOpCodeList.Add('VADDPD,1,1,XMMREG,XMMREG,XMMRM,');
|
||||
FOpCodeList.Add('VADDPD,1,1,YMMREG,YMMREG,YMMRM,');
|
||||
FOpCodeList.Add('VADDPS,1,1,XMMREG,XMMREG,XMMRM,');
|
||||
@ -811,7 +832,6 @@ begin
|
||||
|
||||
FOpCodeList.Add('VPGATHERQQ,1,1,XMMREG,XMEM64,XMMREG,');
|
||||
FOpCodeList.Add('VPGATHERQQ,1,1,YMMREG,YMEM64,YMMREG,');
|
||||
|
||||
end;
|
||||
|
||||
function TAVXTestGenerator.InternalMakeTestFiles(aX64: boolean; aDestPath, aFileExt: String;
|
||||
|
Loading…
Reference in New Issue
Block a user