mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-07 15:47:53 +02:00
* support for SSSE3, SSE4,1, SSE4.2, AES instructions set by Emelyanov Roman, resolves #18527
+ test for aes support git-svn-id: trunk@17256 -
This commit is contained in:
parent
0c62133d38
commit
9279c6955e
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -9492,6 +9492,7 @@ tests/test/tabsvr3.pp svneol=native#text/plain
|
||||
tests/test/tabsvr4.pp svneol=native#text/plain
|
||||
tests/test/tabsvr5.pp svneol=native#text/plain
|
||||
tests/test/taddstr1.pp svneol=native#text/plain
|
||||
tests/test/taes1.pp svneol=native#text/plain
|
||||
tests/test/talign.pp svneol=native#text/plain
|
||||
tests/test/talign1.pp svneol=native#text/plain
|
||||
tests/test/talign2.pp svneol=native#text/plain
|
||||
|
@ -602,5 +602,82 @@
|
||||
'insertq',
|
||||
'extrq',
|
||||
'lzcnt',
|
||||
'popcnt'
|
||||
'pabsb',
|
||||
'pabsw',
|
||||
'pabsd',
|
||||
'palignr',
|
||||
'phaddw',
|
||||
'phaddd',
|
||||
'phaddsw',
|
||||
'phsubw',
|
||||
'phsubd',
|
||||
'phsubsw',
|
||||
'pmaddubsw',
|
||||
'pmulhrsw',
|
||||
'pshufb',
|
||||
'psignb',
|
||||
'psignw',
|
||||
'psignd',
|
||||
'blendps',
|
||||
'blendpd',
|
||||
'blendvps',
|
||||
'blendvpd',
|
||||
'dpps',
|
||||
'dppd',
|
||||
'extractps',
|
||||
'insertps',
|
||||
'movntdqa',
|
||||
'mpsadbw',
|
||||
'packusdw',
|
||||
'pblendvb',
|
||||
'pblendw',
|
||||
'pcmpeqq',
|
||||
'pextrb',
|
||||
'pextrd',
|
||||
'pextrq',
|
||||
'phminposuw',
|
||||
'pinsrb',
|
||||
'pinsrd',
|
||||
'pinsrq',
|
||||
'pmaxsb',
|
||||
'pmaxsd',
|
||||
'pmaxud',
|
||||
'pmaxuw',
|
||||
'pminsb',
|
||||
'pminsd',
|
||||
'pminuw',
|
||||
'pminud',
|
||||
'pmovsxbw',
|
||||
'pmovsxbd',
|
||||
'pmovsxbq',
|
||||
'pmovsxwd',
|
||||
'pmovsxwq',
|
||||
'pmovsxdq',
|
||||
'pmovzxbw',
|
||||
'pmovzxbd',
|
||||
'pmovzxbq',
|
||||
'pmovzxwd',
|
||||
'pmovzxwq',
|
||||
'pmovzxdq',
|
||||
'pmuldq',
|
||||
'ptest',
|
||||
'roundps',
|
||||
'roundpd',
|
||||
'roundss',
|
||||
'roundsd',
|
||||
'pcmpestri',
|
||||
'pcmpestrm',
|
||||
'pcmpistri',
|
||||
'pcmpistrm',
|
||||
'pcmpgtq',
|
||||
'popcnt',
|
||||
'aesenc',
|
||||
'aesenclast',
|
||||
'aesdec',
|
||||
'aesdeclast',
|
||||
'aesimc',
|
||||
'aeskeygen',
|
||||
'stosq',
|
||||
'lodsq',
|
||||
'cmpsq'
|
||||
);
|
||||
|
@ -602,5 +602,82 @@ attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufINT,
|
||||
attsufINT
|
||||
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,
|
||||
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,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufINT,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE
|
||||
);
|
||||
|
@ -602,5 +602,82 @@
|
||||
'insertq',
|
||||
'extrq',
|
||||
'lzcnt',
|
||||
'popcnt'
|
||||
'pabsb',
|
||||
'pabsw',
|
||||
'pabsd',
|
||||
'palignr',
|
||||
'phaddw',
|
||||
'phaddd',
|
||||
'phaddsw',
|
||||
'phsubw',
|
||||
'phsubd',
|
||||
'phsubsw',
|
||||
'pmaddubsw',
|
||||
'pmulhrsw',
|
||||
'pshufb',
|
||||
'psignb',
|
||||
'psignw',
|
||||
'psignd',
|
||||
'blendps',
|
||||
'blendpd',
|
||||
'blendvps',
|
||||
'blendvpd',
|
||||
'dpps',
|
||||
'dppd',
|
||||
'extractps',
|
||||
'insertps',
|
||||
'movntdqa',
|
||||
'mpsadbw',
|
||||
'packusdw',
|
||||
'pblendvb',
|
||||
'pblendw',
|
||||
'pcmpeqq',
|
||||
'pextrb',
|
||||
'pextrd',
|
||||
'pextrq',
|
||||
'phminposuw',
|
||||
'pinsrb',
|
||||
'pinsrd',
|
||||
'pinsrq',
|
||||
'pmaxsb',
|
||||
'pmaxsd',
|
||||
'pmaxud',
|
||||
'pmaxuw',
|
||||
'pminsb',
|
||||
'pminsd',
|
||||
'pminuw',
|
||||
'pminud',
|
||||
'pmovsxbw',
|
||||
'pmovsxbd',
|
||||
'pmovsxbq',
|
||||
'pmovsxwd',
|
||||
'pmovsxwq',
|
||||
'pmovsxdq',
|
||||
'pmovzxbw',
|
||||
'pmovzxbd',
|
||||
'pmovzxbq',
|
||||
'pmovzxwd',
|
||||
'pmovzxwq',
|
||||
'pmovzxdq',
|
||||
'pmuldq',
|
||||
'ptest',
|
||||
'roundps',
|
||||
'roundpd',
|
||||
'roundss',
|
||||
'roundsd',
|
||||
'pcmpestri',
|
||||
'pcmpestrm',
|
||||
'pcmpistri',
|
||||
'pcmpistrm',
|
||||
'pcmpgtq',
|
||||
'popcnt',
|
||||
'aesenc',
|
||||
'aesenclast',
|
||||
'aesdec',
|
||||
'aesdeclast',
|
||||
'aesimc',
|
||||
'aeskeygen',
|
||||
'stosq',
|
||||
'lodsq',
|
||||
'cmpsq'
|
||||
);
|
||||
|
@ -1,2 +1,2 @@
|
||||
{ don't edit, this file is generated from x86ins.dat }
|
||||
1380;
|
||||
1560;
|
||||
|
@ -602,5 +602,82 @@ A_MOVNTSD,
|
||||
A_INSERTQ,
|
||||
A_EXTRQ,
|
||||
A_LZCNT,
|
||||
A_POPCNT
|
||||
A_PABSB,
|
||||
A_PABSW,
|
||||
A_PABSD,
|
||||
A_PALIGNR,
|
||||
A_PHADDW,
|
||||
A_PHADDD,
|
||||
A_PHADDSW,
|
||||
A_PHSUBW,
|
||||
A_PHSUBD,
|
||||
A_PHSUBSW,
|
||||
A_PMADDUBSW,
|
||||
A_PMULHRSW,
|
||||
A_PSHUFB,
|
||||
A_PSIGNB,
|
||||
A_PSIGNW,
|
||||
A_PSIGND,
|
||||
A_BLENDPS,
|
||||
A_BLENDPD,
|
||||
A_BLENDVPS,
|
||||
A_BLENDVPD,
|
||||
A_DPPS,
|
||||
A_DPPD,
|
||||
A_EXTRACTPS,
|
||||
A_INSERTPS,
|
||||
A_MOVNTDQA,
|
||||
A_MPSADBW,
|
||||
A_PACKUSDW,
|
||||
A_PBLENDVB,
|
||||
A_PBLENDW,
|
||||
A_PCMPEQQ,
|
||||
A_PEXTRB,
|
||||
A_PEXTRD,
|
||||
A_PEXTRQ,
|
||||
A_PHMINPOSUW,
|
||||
A_PINSRB,
|
||||
A_PINSRD,
|
||||
A_PINSRQ,
|
||||
A_PMAXSB,
|
||||
A_PMAXSD,
|
||||
A_PMAXUD,
|
||||
A_PMAXUW,
|
||||
A_PMINSB,
|
||||
A_PMINSD,
|
||||
A_PMINUW,
|
||||
A_PMINUD,
|
||||
A_PMOVSXBW,
|
||||
A_PMOVSXBD,
|
||||
A_PMOVSXBQ,
|
||||
A_PMOVSXWD,
|
||||
A_PMOVSXWQ,
|
||||
A_PMOVSXDQ,
|
||||
A_PMOVZXBW,
|
||||
A_PMOVZXBD,
|
||||
A_PMOVZXBQ,
|
||||
A_PMOVZXWD,
|
||||
A_PMOVZXWQ,
|
||||
A_PMOVZXDQ,
|
||||
A_PMULDQ,
|
||||
A_PTEST,
|
||||
A_ROUNDPS,
|
||||
A_ROUNDPD,
|
||||
A_ROUNDSS,
|
||||
A_ROUNDSD,
|
||||
A_PCMPESTRI,
|
||||
A_PCMPESTRM,
|
||||
A_PCMPISTRI,
|
||||
A_PCMPISTRM,
|
||||
A_PCMPGTQ,
|
||||
A_POPCNT,
|
||||
A_AESENC,
|
||||
A_AESENCLAST,
|
||||
A_AESDEC,
|
||||
A_AESDECLAST,
|
||||
A_AESIMC,
|
||||
A_AESKEYGEN,
|
||||
A_STOSQ,
|
||||
A_LODSQ,
|
||||
A_CMPSQ
|
||||
);
|
||||
|
@ -602,5 +602,82 @@
|
||||
(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_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_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_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_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_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_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_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_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_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_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_All, Ch_None, Ch_None)),
|
||||
(Ch: (Ch_RRAX, Ch_WMemEDI, Ch_RWRDI)),
|
||||
(Ch: (Ch_WRAX, Ch_RWRSI, Ch_None)),
|
||||
(Ch: (Ch_All, Ch_None, Ch_None))
|
||||
);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -2557,7 +2557,9 @@ xmmreg,mem \1\x66\301\323\2\x0F\xE3\110 WILLAMETTE,SSE2,SM
|
||||
[PEXTRW]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
reg32,mmxreg,imm \2\x0F\xC5\110\22 KATMAI,MMX,SB,AR2
|
||||
reg32,xmmreg,imm \1\x66\323\2\x0F\xC5\110\26 WILLAMETTE,SSE2,SB,AR2
|
||||
reg32,xmmreg,imm \1\x66\323\2\x0F\xC5\110\26 SSE4
|
||||
mem32,xmmreg,imm \1\x66\300\323\3\x0F\x3A\x15\101\26 SSE4
|
||||
|
||||
|
||||
[PINSRW]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
@ -3269,7 +3271,7 @@ mem,xmmreg \333\300\323\2\x0F\x2B\101 SSE4,SD
|
||||
|
||||
[MOVNTSD]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mem,xmmreg \300\334\325\323\2\x0F\x2B\\101 SSE4 ;,SQ
|
||||
mem,xmmreg \300\334\325\323\2\x0F\x2B\101 SSE4 ;,SQ
|
||||
|
||||
[INSERTQ]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
@ -3287,7 +3289,432 @@ xmmreg,xmmreg \336\323\2\x0F\x79\110 SSE4
|
||||
reg16,regmem \320\333\301\323\2\x0F\xBD\110 386,SM,SSE4
|
||||
reg32|64,regmem \321\333\301\323\2\x0F\xBD\110 386,SM,SSE4
|
||||
|
||||
;*******************************************************************************
|
||||
;**********SSSE3****************************************************************
|
||||
;*******************************************************************************
|
||||
;Use SSE4, but need special flag for SSSE3 insructions set
|
||||
[PABSB]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mmxreg \331\3\x0F\x38\x1C\110 SSE4
|
||||
mmxreg,mem \301\331\3\x0F\x38\x1C\110 SSE4
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x1C\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x1C\110 SSE4
|
||||
|
||||
[PABSW]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mmxreg \331\3\x0F\x38\x1D\110 SSE4
|
||||
mmxreg,mem \301\331\3\x0F\x38\x1D\110 SSE4
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x1D\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x1D\110 SSE4
|
||||
|
||||
[PABSD]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mmxreg \331\3\x0F\x38\x1E\110 SSE4
|
||||
mmxreg,mem \301\331\3\x0F\x38\x1E\110 SSE4
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x1E\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x1E\110 SSE4
|
||||
|
||||
[PALIGNR]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mmxreg,imm \331\3\x0F\x3A\x0F\110\26 SSE4
|
||||
mmxreg,mem,imm \301\331\3\x0F\x3A\x0F\110\26 SSE4
|
||||
xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x0F\110\26 SSE4
|
||||
xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x0F\110\26 SSE4
|
||||
|
||||
[PHADDW]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mmxreg \331\3\x0F\x38\x01\110 SSE4
|
||||
mmxreg,mem \301\331\3\x0F\x38\x01\110 SSE4
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x01\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x01\110 SSE4
|
||||
|
||||
[PHADDD]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mmxreg \331\3\x0F\x38\x02\110 SSE4
|
||||
mmxreg,mem \301\331\3\x0F\x38\x02\110 SSE4
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x02\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x02\110 SSE4
|
||||
|
||||
[PHADDSW]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mmxreg \331\3\x0F\x38\x03\110 SSE4
|
||||
mmxreg,mem \301\331\3\x0F\x38\x03\110 SSE4
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x03\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x03\110 SSE4
|
||||
|
||||
[PHSUBW]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mmxreg \331\3\x0F\x38\x05\110 SSE4
|
||||
mmxreg,mem \301\331\3\x0F\x38\x05\110 SSE4
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x05\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x05\110 SSE4
|
||||
|
||||
[PHSUBD]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mmxreg \331\3\x0F\x38\x06\110 SSE4
|
||||
mmxreg,mem \301\331\3\x0F\x38\x06\110 SSE4
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x06\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x06\110 SSE4
|
||||
|
||||
[PHSUBSW]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mmxreg \331\3\x0F\x38\x07\110 SSE4
|
||||
mmxreg,mem \301\331\3\x0F\x38\x07\110 SSE4
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x07\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x07\110 SSE4
|
||||
|
||||
[PMADDUBSW]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mmxreg \331\3\x0F\x38\x04\110 SSE4
|
||||
mmxreg,mem \301\331\3\x0F\x38\x04\110 SSE4
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x04\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x04\110 SSE4
|
||||
|
||||
[PMULHRSW]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mmxreg \331\3\x0F\x38\x0B\110 SSE4
|
||||
mmxreg,mem \301\331\3\x0F\x38\x0B\110 SSE4
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x0B\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x0B\110 SSE4
|
||||
|
||||
[PSHUFB]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mmxreg \331\3\x0F\x38\x00\110 SSE4
|
||||
mmxreg,mem \301\331\3\x0F\x38\x00\110 SSE4
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x00\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x00\110 SSE4
|
||||
|
||||
[PSIGNB]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mmxreg \331\3\x0F\x38\x08\110 SSE4
|
||||
mmxreg,mem \301\331\3\x0F\x38\x08\110 SSE4
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x08\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x08\110 SSE4
|
||||
|
||||
[PSIGNW]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mmxreg \331\3\x0F\x38\x09\110 SSE4
|
||||
mmxreg,mem \301\331\3\x0F\x38\x09\110 SSE4
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x09\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x09\110 SSE4
|
||||
|
||||
[PSIGND]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mmxreg \331\3\x0F\x38\x0A\110 SSE4
|
||||
mmxreg,mem \301\331\3\x0F\x38\x0A\110 SSE4
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x0A\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x0A\110 SSE4
|
||||
;*******************************************************************************
|
||||
;**********SSE4.1***************************************************************
|
||||
;*******************************************************************************
|
||||
[BLENDPS] ;By hands delete 'or ot_signed' from i386tab.inc or x8664tab.inc
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x0C\110\26 SSE4
|
||||
xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x0C\110\26 SSE4
|
||||
|
||||
[BLENDPD] ;By hands delete 'or ot_signed' from i386tab.inc or x8664tab.inc
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg,imm \1\x66\331\2\x0F\x3A\375\1\x0D\110\26 SSE4
|
||||
xmmreg,mem,imm \1\x66\301\331\2\x0F\x3A\375\1\x0D\110\26 SSE4
|
||||
|
||||
[BLENDVPS]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x14\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x14\110 SSE4
|
||||
|
||||
[BLENDVPD]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x15\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x15\110 SSE4
|
||||
|
||||
[DPPS]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x40\110\26 SSE4
|
||||
xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x40\110\26 SSE4
|
||||
|
||||
[DPPD]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x41\110\26 SSE4
|
||||
xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x41\110\26 SSE4
|
||||
|
||||
[EXTRACTPS]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mem,xmmreg,imm \1\x66\325\3\x0F\x3A\x17\101\26 SSE4
|
||||
reg32|64,xmmreg,imm \1\x66\300\3\x0F\x3A\x17\101\26 SSE4
|
||||
|
||||
[INSERTPS]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x21\110\26 SSE4
|
||||
xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x21\110\26 SSE4
|
||||
|
||||
[MOVNTDQA]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x2A\110 SSE4
|
||||
|
||||
[MPSADBW]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x42\110\26 SSE4
|
||||
xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x42\110\26 SSE4
|
||||
|
||||
[PACKUSDW]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x2B\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x2B\110 SSE4
|
||||
|
||||
[PBLENDVB]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x10\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x10\110 SSE4
|
||||
|
||||
[PBLENDW]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x0E\110\26 SSE4
|
||||
xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x0E\110\26 SSE4
|
||||
|
||||
[PCMPEQQ]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x29\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x29\110 SSE4
|
||||
|
||||
[PEXTRB]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
reg32,xmmreg,imm \1\x66\323\3\x0F\x3A\x14\101\26 SSE4
|
||||
mem8,xmmreg,imm \1\x66\300\323\3\x0F\x3A\x14\101\26 SSE4
|
||||
|
||||
;PEXTRW - Look is prev. implementation
|
||||
|
||||
[PEXTRD]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
reg32,xmmreg,imm \1\x66\323\3\x0F\x3A\x16\101\26 SSE4
|
||||
mem32,xmmreg,imm \1\x66\300\323\3\x0F\x3A\x16\101\26 SSE4
|
||||
|
||||
[PEXTRQ]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
reg64,xmmreg,imm \1\x66\326\3\x0F\x3A\x16\101\26 SSE4
|
||||
mem64,xmmreg,imm \1\x66\300\326\3\x0F\x3A\x16\101\26 SSE4
|
||||
|
||||
[PHMINPOSUW]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x41\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x41\110 SSE4
|
||||
|
||||
[PINSRB]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,reg32,imm \1\x66\331\3\x0F\x3A\x20\110\26 SSE4
|
||||
xmmreg,mem8,imm \1\x66\301\331\3\x0F\x3A\x20\110\26 SSE4
|
||||
|
||||
[PINSRD]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,reg32,imm \1\x66\331\3\x0F\x3A\x22\110\26 SSE4
|
||||
xmmreg,mem32,imm \1\x66\301\331\3\x0F\x3A\x22\110\26 SSE4
|
||||
|
||||
[PINSRQ]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,reg64,imm \1\x66\326\3\x0F\x3A\x22\110\26 SSE4
|
||||
xmmreg,mem64,imm \1\x66\301\326\3\x0F\x3A\x22\110\26 SSE4
|
||||
|
||||
[PMAXSB]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x3C\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x3C\110 SSE4
|
||||
|
||||
[PMAXSD]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x3D\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x3D\110 SSE4
|
||||
|
||||
[PMAXUD]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x3F\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x3F\110 SSE4
|
||||
|
||||
[PMAXUW]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x3E\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x3E\110 SSE4
|
||||
|
||||
[PMINSB]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x38\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x38\110 SSE4
|
||||
|
||||
[PMINSD]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x39\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x39\110 SSE4
|
||||
|
||||
[PMINUW]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x3A\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x3A\110 SSE4
|
||||
|
||||
[PMINUD]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x3B\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x3B\110 SSE4
|
||||
|
||||
[PMOVSXBW]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x20\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x20\110 SSE4
|
||||
|
||||
[PMOVSXBD]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x21\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x21\110 SSE4
|
||||
|
||||
[PMOVSXBQ]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x22\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x22\110 SSE4
|
||||
|
||||
[PMOVSXWD]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x23\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x23\110 SSE4
|
||||
|
||||
[PMOVSXWQ]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x24\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x24\110 SSE4
|
||||
|
||||
[PMOVSXDQ]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x25\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x25\110 SSE4
|
||||
|
||||
[PMOVZXBW]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x30\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x30\110 SSE4
|
||||
|
||||
[PMOVZXBD]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x31\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x31\110 SSE4
|
||||
|
||||
[PMOVZXBQ]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x32\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x32\110 SSE4
|
||||
|
||||
[PMOVZXWD]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x33\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x33\110 SSE4
|
||||
|
||||
[PMOVZXWQ]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x34\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x34\110 SSE4
|
||||
|
||||
[PMOVZXDQ]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x35\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x35\110 SSE4
|
||||
|
||||
[PMULDQ]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x28\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x28\110 SSE4
|
||||
|
||||
[PTEST]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x17\110 SSE4
|
||||
|
||||
[ROUNDPS]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x08\110\26 SSE4
|
||||
xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x08\110\26 SSE4
|
||||
|
||||
[ROUNDPD]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x09\110\26 SSE4
|
||||
xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x09\110\26 SSE4
|
||||
|
||||
[ROUNDSS]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x0A\110\26 SSE4
|
||||
xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x0A\110\26 SSE4
|
||||
|
||||
[ROUNDSD]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x0B\110\26 SSE4
|
||||
xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x0B\110\26 SSE4
|
||||
;*******************************************************************************
|
||||
;**********SSE4.2***************************************************************
|
||||
;*******************************************************************************
|
||||
[PCMPESTRI]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x61\110\26 SSE4
|
||||
xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x61\110\26 SSE4
|
||||
[PCMPESTRM]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x60\110\26 SSE4
|
||||
xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x60\110\26 SSE4
|
||||
[PCMPISTRI]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x63\110\26 SSE4
|
||||
xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x63\110\26 SSE4
|
||||
[PCMPISTRM]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x62\110\26 SSE4
|
||||
xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x62\110\26 SSE4
|
||||
[PCMPGTQ]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\x37\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\x37\110 SSE4
|
||||
; CRC32
|
||||
[POPCNT,popcntX]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
reg16,regmem \320\333\301\323\2\x0F\xB8\110 386,SM,SSE4
|
||||
reg32|64,regmem \321\333\301\323\2\x0F\xB8\110 386,SM,SSE4
|
||||
reg16,rm16 \1\xF3\301\320\2\x0F\xB8\110 386,SM,SSE4
|
||||
reg32,rm32 \1\xF3\301\320\2\x0F\xB8\110 386,SM,SSE4
|
||||
reg64,rm64 \1\xF3\301\320\2\x0F\xB8\110 386,SM,SSE4
|
||||
;*******************************************************************************
|
||||
;**********AES******************************************************************
|
||||
;*******************************************************************************
|
||||
;Use SSE4, but need special flag for AES insructions set
|
||||
|
||||
[AESENC]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\xDC\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\xDC\110 SSE4
|
||||
|
||||
[AESENCLAST]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\xDD\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\xDD\110 SSE4
|
||||
|
||||
[AESDEC]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\xDE\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\xDE\110 SSE4
|
||||
|
||||
[AESDECLAST]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\xDF\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\xDF\110 SSE4
|
||||
|
||||
[AESIMC]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg \1\x66\331\3\x0F\x38\xDB\110 SSE4
|
||||
xmmreg,mem \1\x66\301\331\3\x0F\x38\xDB\110 SSE4
|
||||
|
||||
[AESKEYGEN] ;AESKEYGENASIST
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\xDF\110\26 SSE4
|
||||
xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\xDF\110\26 SSE4
|
||||
;*******************************************************************************
|
||||
;*******************************************************************************
|
||||
;*******************************************************************************
|
||||
[STOSQ]
|
||||
(Ch_RRAX, Ch_WMemEDI, Ch_RWRDI)
|
||||
void \2\x48\xAB X86_64
|
||||
|
||||
[LODSQ]
|
||||
(Ch_WRAX, Ch_RWRSI, Ch_None)
|
||||
void \2\x48\xAD X86_64
|
||||
|
||||
[CMPSQ]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
void \2\x48\xA7 X86_64
|
@ -602,5 +602,82 @@ attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufINT,
|
||||
attsufINT
|
||||
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,
|
||||
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,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufINT,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE,
|
||||
attsufNONE
|
||||
);
|
||||
|
@ -602,5 +602,82 @@
|
||||
'insertq',
|
||||
'extrq',
|
||||
'lzcnt',
|
||||
'popcnt'
|
||||
'pabsb',
|
||||
'pabsw',
|
||||
'pabsd',
|
||||
'palignr',
|
||||
'phaddw',
|
||||
'phaddd',
|
||||
'phaddsw',
|
||||
'phsubw',
|
||||
'phsubd',
|
||||
'phsubsw',
|
||||
'pmaddubsw',
|
||||
'pmulhrsw',
|
||||
'pshufb',
|
||||
'psignb',
|
||||
'psignw',
|
||||
'psignd',
|
||||
'blendps',
|
||||
'blendpd',
|
||||
'blendvps',
|
||||
'blendvpd',
|
||||
'dpps',
|
||||
'dppd',
|
||||
'extractps',
|
||||
'insertps',
|
||||
'movntdqa',
|
||||
'mpsadbw',
|
||||
'packusdw',
|
||||
'pblendvb',
|
||||
'pblendw',
|
||||
'pcmpeqq',
|
||||
'pextrb',
|
||||
'pextrd',
|
||||
'pextrq',
|
||||
'phminposuw',
|
||||
'pinsrb',
|
||||
'pinsrd',
|
||||
'pinsrq',
|
||||
'pmaxsb',
|
||||
'pmaxsd',
|
||||
'pmaxud',
|
||||
'pmaxuw',
|
||||
'pminsb',
|
||||
'pminsd',
|
||||
'pminuw',
|
||||
'pminud',
|
||||
'pmovsxbw',
|
||||
'pmovsxbd',
|
||||
'pmovsxbq',
|
||||
'pmovsxwd',
|
||||
'pmovsxwq',
|
||||
'pmovsxdq',
|
||||
'pmovzxbw',
|
||||
'pmovzxbd',
|
||||
'pmovzxbq',
|
||||
'pmovzxwd',
|
||||
'pmovzxwq',
|
||||
'pmovzxdq',
|
||||
'pmuldq',
|
||||
'ptest',
|
||||
'roundps',
|
||||
'roundpd',
|
||||
'roundss',
|
||||
'roundsd',
|
||||
'pcmpestri',
|
||||
'pcmpestrm',
|
||||
'pcmpistri',
|
||||
'pcmpistrm',
|
||||
'pcmpgtq',
|
||||
'popcnt',
|
||||
'aesenc',
|
||||
'aesenclast',
|
||||
'aesdec',
|
||||
'aesdeclast',
|
||||
'aesimc',
|
||||
'aeskeygen',
|
||||
'stosq',
|
||||
'lodsq',
|
||||
'cmpsq'
|
||||
);
|
||||
|
@ -602,5 +602,82 @@
|
||||
'insertq',
|
||||
'extrq',
|
||||
'lzcnt',
|
||||
'popcnt'
|
||||
'pabsb',
|
||||
'pabsw',
|
||||
'pabsd',
|
||||
'palignr',
|
||||
'phaddw',
|
||||
'phaddd',
|
||||
'phaddsw',
|
||||
'phsubw',
|
||||
'phsubd',
|
||||
'phsubsw',
|
||||
'pmaddubsw',
|
||||
'pmulhrsw',
|
||||
'pshufb',
|
||||
'psignb',
|
||||
'psignw',
|
||||
'psignd',
|
||||
'blendps',
|
||||
'blendpd',
|
||||
'blendvps',
|
||||
'blendvpd',
|
||||
'dpps',
|
||||
'dppd',
|
||||
'extractps',
|
||||
'insertps',
|
||||
'movntdqa',
|
||||
'mpsadbw',
|
||||
'packusdw',
|
||||
'pblendvb',
|
||||
'pblendw',
|
||||
'pcmpeqq',
|
||||
'pextrb',
|
||||
'pextrd',
|
||||
'pextrq',
|
||||
'phminposuw',
|
||||
'pinsrb',
|
||||
'pinsrd',
|
||||
'pinsrq',
|
||||
'pmaxsb',
|
||||
'pmaxsd',
|
||||
'pmaxud',
|
||||
'pmaxuw',
|
||||
'pminsb',
|
||||
'pminsd',
|
||||
'pminuw',
|
||||
'pminud',
|
||||
'pmovsxbw',
|
||||
'pmovsxbd',
|
||||
'pmovsxbq',
|
||||
'pmovsxwd',
|
||||
'pmovsxwq',
|
||||
'pmovsxdq',
|
||||
'pmovzxbw',
|
||||
'pmovzxbd',
|
||||
'pmovzxbq',
|
||||
'pmovzxwd',
|
||||
'pmovzxwq',
|
||||
'pmovzxdq',
|
||||
'pmuldq',
|
||||
'ptest',
|
||||
'roundps',
|
||||
'roundpd',
|
||||
'roundss',
|
||||
'roundsd',
|
||||
'pcmpestri',
|
||||
'pcmpestrm',
|
||||
'pcmpistri',
|
||||
'pcmpistrm',
|
||||
'pcmpgtq',
|
||||
'popcnt',
|
||||
'aesenc',
|
||||
'aesenclast',
|
||||
'aesdec',
|
||||
'aesdeclast',
|
||||
'aesimc',
|
||||
'aeskeygen',
|
||||
'stosq',
|
||||
'lodsq',
|
||||
'cmpsq'
|
||||
);
|
||||
|
@ -1,2 +1,2 @@
|
||||
{ don't edit, this file is generated from x86ins.dat }
|
||||
1372;
|
||||
1555;
|
||||
|
@ -602,5 +602,82 @@ A_MOVNTSD,
|
||||
A_INSERTQ,
|
||||
A_EXTRQ,
|
||||
A_LZCNT,
|
||||
A_POPCNT
|
||||
A_PABSB,
|
||||
A_PABSW,
|
||||
A_PABSD,
|
||||
A_PALIGNR,
|
||||
A_PHADDW,
|
||||
A_PHADDD,
|
||||
A_PHADDSW,
|
||||
A_PHSUBW,
|
||||
A_PHSUBD,
|
||||
A_PHSUBSW,
|
||||
A_PMADDUBSW,
|
||||
A_PMULHRSW,
|
||||
A_PSHUFB,
|
||||
A_PSIGNB,
|
||||
A_PSIGNW,
|
||||
A_PSIGND,
|
||||
A_BLENDPS,
|
||||
A_BLENDPD,
|
||||
A_BLENDVPS,
|
||||
A_BLENDVPD,
|
||||
A_DPPS,
|
||||
A_DPPD,
|
||||
A_EXTRACTPS,
|
||||
A_INSERTPS,
|
||||
A_MOVNTDQA,
|
||||
A_MPSADBW,
|
||||
A_PACKUSDW,
|
||||
A_PBLENDVB,
|
||||
A_PBLENDW,
|
||||
A_PCMPEQQ,
|
||||
A_PEXTRB,
|
||||
A_PEXTRD,
|
||||
A_PEXTRQ,
|
||||
A_PHMINPOSUW,
|
||||
A_PINSRB,
|
||||
A_PINSRD,
|
||||
A_PINSRQ,
|
||||
A_PMAXSB,
|
||||
A_PMAXSD,
|
||||
A_PMAXUD,
|
||||
A_PMAXUW,
|
||||
A_PMINSB,
|
||||
A_PMINSD,
|
||||
A_PMINUW,
|
||||
A_PMINUD,
|
||||
A_PMOVSXBW,
|
||||
A_PMOVSXBD,
|
||||
A_PMOVSXBQ,
|
||||
A_PMOVSXWD,
|
||||
A_PMOVSXWQ,
|
||||
A_PMOVSXDQ,
|
||||
A_PMOVZXBW,
|
||||
A_PMOVZXBD,
|
||||
A_PMOVZXBQ,
|
||||
A_PMOVZXWD,
|
||||
A_PMOVZXWQ,
|
||||
A_PMOVZXDQ,
|
||||
A_PMULDQ,
|
||||
A_PTEST,
|
||||
A_ROUNDPS,
|
||||
A_ROUNDPD,
|
||||
A_ROUNDSS,
|
||||
A_ROUNDSD,
|
||||
A_PCMPESTRI,
|
||||
A_PCMPESTRM,
|
||||
A_PCMPISTRI,
|
||||
A_PCMPISTRM,
|
||||
A_PCMPGTQ,
|
||||
A_POPCNT,
|
||||
A_AESENC,
|
||||
A_AESENCLAST,
|
||||
A_AESDEC,
|
||||
A_AESDECLAST,
|
||||
A_AESIMC,
|
||||
A_AESKEYGEN,
|
||||
A_STOSQ,
|
||||
A_LODSQ,
|
||||
A_CMPSQ
|
||||
);
|
||||
|
@ -602,5 +602,82 @@
|
||||
(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_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_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_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_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_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_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_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_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_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_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_All, Ch_None, Ch_None)),
|
||||
(Ch: (Ch_RRAX, Ch_WMemEDI, Ch_RWRDI)),
|
||||
(Ch: (Ch_WRAX, Ch_RWRSI, Ch_None)),
|
||||
(Ch: (Ch_All, Ch_None, Ch_None))
|
||||
);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -29,11 +29,14 @@ unit cpu;
|
||||
sysutils;
|
||||
|
||||
function InterlockedCompareExchange128Support : boolean;inline;
|
||||
function AESSupport : boolean;inline;
|
||||
|
||||
function InterlockedCompareExchange128(var Target: Int128Rec; NewValue: Int128Rec; Comperand: Int128Rec): Int128Rec;
|
||||
|
||||
implementation
|
||||
|
||||
var
|
||||
_AESSupport,
|
||||
_InterlockedCompareExchange128Support : boolean;
|
||||
|
||||
function InterlockedCompareExchange128Support : boolean;inline;
|
||||
@ -41,6 +44,11 @@ unit cpu;
|
||||
result:=_InterlockedCompareExchange128Support;
|
||||
end;
|
||||
|
||||
function AESSupport : boolean;inline;
|
||||
begin
|
||||
result:=_AESSupport;
|
||||
end;
|
||||
|
||||
|
||||
function InterlockedCompareExchange128(var Target: Int128Rec; NewValue: Int128Rec; Comperand: Int128Rec): Int128Rec; assembler;
|
||||
{
|
||||
@ -119,6 +127,7 @@ unit cpu;
|
||||
popq %rbx
|
||||
end;
|
||||
_InterlockedCompareExchange128Support:=(_ecx and $2000)<>0;
|
||||
_AESSupport:=(_ecx and $2000000)<>0;
|
||||
end;
|
||||
|
||||
|
||||
|
190
tests/test/taes1.pp
Normal file
190
tests/test/taes1.pp
Normal file
@ -0,0 +1,190 @@
|
||||
{ %CPU=x86_64 }
|
||||
Program AESTest;
|
||||
{$INLINE ON}
|
||||
{$ASMMODE INTEL}
|
||||
{$MODE DELPHI}
|
||||
|
||||
Uses Cpu,SysUtils;
|
||||
|
||||
Type
|
||||
Word32 = LongWord;
|
||||
Word64 = QWord;
|
||||
WordPR = Word64;
|
||||
|
||||
PAESKey256 = ^TAESKey256; TAESKey256 = Array [0..3] of Word64;
|
||||
|
||||
PAESOpenedKey = ^TAESOpenedKey; TAESOpenedKey = Packed Record
|
||||
EnCryptRoundKeys : Array [0..14, 0..3] Of Word32;
|
||||
Padding0 : Array [0..3] of Word32;
|
||||
DeCryptRoundKeys : Array [0..14, 0..3] Of Word32;
|
||||
Padding1 : Array [0..3] of Word32;
|
||||
End;
|
||||
|
||||
Const
|
||||
Test_Key : Array[0..3] of Word64 = ($0706050403020100, $0f0e0d0c0b0a0908, $1716151413121110, $1f1e1d1c1b1a1918);
|
||||
Test_Data : Array[0..1] of Word64 = (Word64($7766554433221100), Word64($ffeeddccbbaa9988));
|
||||
Test_Crypt : Array[0..1] of Word64 = (Word64($bf456751cab7a28e), Word64($8960494b9049fcea));
|
||||
|
||||
Var
|
||||
OpenedKey : TAESOpenedKey;
|
||||
Data : Array [0..1] of Word64;
|
||||
Passed : Boolean;
|
||||
|
||||
Procedure OpenKey_AES(Key: PAESKey256; OpenedKey: PAESOpenedKey); Assembler; NoStackFrame;
|
||||
Procedure key_expansion; Assembler; NoStackFrame;
|
||||
Asm
|
||||
MOV RDX, RCX
|
||||
PSHUFD XMM2, XMM2, 011111111b; PXOR XMM2, XMM1; MOVD EAX, XMM2; MOV [RCX], EAX; ADD RCX, 4
|
||||
PSHUFD XMM1, XMM1, 011100101b; MOVD EBX, XMM1; XOR EAX, EBX; MOV [RCX], EAX; ADD RCX, 4
|
||||
PSHUFD XMM1, XMM1, 011100110b; MOVD EBX, XMM1; XOR EAX, EBX; MOV [RCX], EAX; ADD RCX, 4
|
||||
PSHUFD XMM1, XMM1, 011100111b; MOVD EBX, XMM1; XOR EAX, EBX; MOV [RCX], EAX; ADD RCX, 4
|
||||
MOVDQU XMM4, [RDX]; AESKEYGEN XMM4, XMM4, 0
|
||||
PSHUFD XMM4, XMM4, 011100110b; MOVD EAX, XMM4; MOVD EBX, XMM3; XOR EAX, EBX; MOV [RCX], EAX; ADD RCX, 4
|
||||
PSHUFD XMM3, XMM3, 011100101b; MOVD EBX, XMM3; XOR EAX, EBX; MOV [RCX], EAX; ADD RCX, 4
|
||||
PSHUFD XMM3, XMM3, 011100110b; MOVD EBX, XMM3; XOR EAX, EBX; MOV [RCX], EAX; ADD RCX, 4
|
||||
PSHUFD XMM3, XMM3, 011100111b; MOVD EBX, XMM3; XOR EAX, EBX; MOV [RCX], EAX; ADD RCX, 4
|
||||
MOVDQU XMM1, [RDX]; ADD RDX, $10; MOVDQU XMM3, [RDX]
|
||||
End;
|
||||
Asm
|
||||
PUSH RBX
|
||||
{$ifndef win64}
|
||||
// fix parameter locations
|
||||
MOV RDX,RSI
|
||||
MOV RCX,RDI
|
||||
{$endif win64}
|
||||
MOV R8, RDX
|
||||
MOVDQU XMM1, [RCX]; MOVDQU XMM3, [RCX+16]
|
||||
MOVDQU [RDX], XMM1; MOVDQU [RDX + $10], XMM3
|
||||
LEA RCX, [RDX+$20]
|
||||
AESKEYGEN XMM2, XMM3, $1; CALL key_expansion
|
||||
AESKEYGEN XMM2, XMM3, $2; CALL key_expansion
|
||||
AESKEYGEN XMM2, XMM3, $4; CALL key_expansion
|
||||
AESKEYGEN XMM2, XMM3, $8; CALL key_expansion
|
||||
AESKEYGEN XMM2, XMM3, $10; CALL key_expansion
|
||||
AESKEYGEN XMM2, XMM3, $20; CALL key_expansion
|
||||
AESKEYGEN XMM2, XMM3, $40; CALL key_expansion
|
||||
MOVDQU XMM0, [R8+$00]; MOVDQU XMM1, [R8+$10]; MOVDQU XMM2, [R8+$20]; MOVDQU XMM3, [R8+$30]
|
||||
MOVDQU XMM4, [R8+$40]; MOVDQU XMM5, [R8+$50]; MOVDQU XMM6, [R8+$60]; MOVDQU XMM7, [R8+$70]
|
||||
MOVDQU XMM8, [R8+$80]; MOVDQU XMM9, [R8+$90]; MOVDQU XMM10, [R8+$A0]; MOVDQU XMM11, [R8+$B0]
|
||||
MOVDQU XMM12, [R8+$C0]; MOVDQU XMM13, [R8+$D0]; MOVDQU XMM14, [R8+$E0]
|
||||
AESIMC XMM1, XMM1; AESIMC XMM2, XMM2; AESIMC XMM3, XMM3; AESIMC XMM4, XMM4
|
||||
AESIMC XMM5, XMM5; AESIMC XMM6, XMM6; AESIMC XMM7, XMM7; AESIMC XMM8, XMM8
|
||||
AESIMC XMM9, XMM9; AESIMC XMM10, XMM10; AESIMC XMM11, XMM11; AESIMC XMM12, XMM12
|
||||
AESIMC XMM13, XMM13
|
||||
MOVDQU [R8+$100], XMM0; MOVDQU [R8+$110], XMM1; MOVDQU [R8+$120], XMM2; MOVDQU [R8+$130], XMM3
|
||||
MOVDQU [R8+$140], XMM4; MOVDQU [R8+$150], XMM5; MOVDQU [R8+$160], XMM6; MOVDQU [R8+$170], XMM7
|
||||
MOVDQU [R8+$180], XMM8; MOVDQU [R8+$190], XMM9; MOVDQU [R8+$1A0], XMM10; MOVDQU [R8+$1B0], XMM11
|
||||
MOVDQU [R8+$1C0], XMM12; MOVDQU [R8+$1D0], XMM13; MOVDQU [R8+$1E0], XMM14
|
||||
POP RBX
|
||||
End;
|
||||
|
||||
Procedure EnCrypt_AES(InData, OutData: Pointer; DataSize: WordPR; EnCryptRoundKeys: Pointer); Assembler; NoStackFrame;
|
||||
Asm
|
||||
{$ifndef win64}
|
||||
// fix parameter locations
|
||||
MOV R9,RCX
|
||||
MOV R8,RDX
|
||||
MOV RDX,RSI
|
||||
MOV RCX,RDI
|
||||
{$endif win64}
|
||||
// Loading encryption keys
|
||||
MOVDQU XMM0, [R9+16*0]
|
||||
MOVDQU XMM1, [R9+16*1]
|
||||
MOVDQU XMM2, [R9+16*2]
|
||||
MOVDQU XMM3, [R9+16*3]
|
||||
MOVDQU XMM4, [R9+16*4]
|
||||
MOVDQU XMM5, [R9+16*5]
|
||||
MOVDQU XMM6, [R9+16*6]
|
||||
MOVDQU XMM7, [R9+16*7]
|
||||
MOVDQU XMM8, [R9+16*8]
|
||||
MOVDQU XMM9, [R9+16*9]
|
||||
MOVDQU XMM10, [R9+16*10]
|
||||
MOVDQU XMM11, [R9+16*11]
|
||||
MOVDQU XMM12, [R9+16*12]
|
||||
MOVDQU XMM13, [R9+16*13]
|
||||
MOVDQU XMM14, [R9+16*14]
|
||||
// Setting the main loop
|
||||
XCHG RCX, R8
|
||||
SHR RCX, 4
|
||||
@Loop: MOVDQU XMM15, [R8]; ADD R8, 16
|
||||
PXOR XMM15, XMM0
|
||||
AESENC XMM15, XMM1
|
||||
AESENC XMM15, XMM2
|
||||
AESENC XMM15, XMM3
|
||||
AESENC XMM15, XMM4
|
||||
AESENC XMM15, XMM5
|
||||
AESENC XMM15, XMM6
|
||||
AESENC XMM15, XMM7
|
||||
AESENC XMM15, XMM8
|
||||
AESENC XMM15, XMM9
|
||||
AESENC XMM15, XMM10
|
||||
AESENC XMM15, XMM11
|
||||
AESENC XMM15, XMM12
|
||||
AESENC XMM15, XMM13
|
||||
AESENCLAST XMM15, XMM14
|
||||
MOVDQU [RDX], XMM15; ADD RDX, 16
|
||||
LOOP @Loop
|
||||
End;
|
||||
|
||||
Procedure DeCrypt_AES(InData, OutData: Pointer; DataSize: WordPR; DeCryptRoundKeys: Pointer); Assembler; NoStackFrame;
|
||||
Asm
|
||||
{$ifndef win64}
|
||||
// fix parameter locations
|
||||
MOV R9,RCX
|
||||
MOV R8,RDX
|
||||
MOV RDX,RSI
|
||||
MOV RCX,RDI
|
||||
{$endif win64}
|
||||
// Loading decryption keys
|
||||
MOVDQU XMM0, [R9+16*0]
|
||||
MOVDQU XMM1, [R9+16*1]
|
||||
MOVDQU XMM2, [R9+16*2]
|
||||
MOVDQU XMM3, [R9+16*3]
|
||||
MOVDQU XMM4, [R9+16*4]
|
||||
MOVDQU XMM5, [R9+16*5]
|
||||
MOVDQU XMM6, [R9+16*6]
|
||||
MOVDQU XMM7, [R9+16*7]
|
||||
MOVDQU XMM8, [R9+16*8]
|
||||
MOVDQU XMM9, [R9+16*9]
|
||||
MOVDQU XMM10, [R9+16*10]
|
||||
MOVDQU XMM11, [R9+16*11]
|
||||
MOVDQU XMM12, [R9+16*12]
|
||||
MOVDQU XMM13, [R9+16*13]
|
||||
MOVDQU XMM14, [R9+16*14]
|
||||
// Setting the main loop
|
||||
XCHG RCX, R8
|
||||
SHR RCX, 4
|
||||
@Loop: MOVDQU XMM15, [R8]; ADD R8, 16
|
||||
PXOR XMM15, XMM14
|
||||
AESDEC XMM15, XMM13
|
||||
AESDEC XMM15, XMM12
|
||||
AESDEC XMM15, XMM11
|
||||
AESDEC XMM15, XMM10
|
||||
AESDEC XMM15, XMM9
|
||||
AESDEC XMM15, XMM8
|
||||
AESDEC XMM15, XMM7
|
||||
AESDEC XMM15, XMM6
|
||||
AESDEC XMM15, XMM5
|
||||
AESDEC XMM15, XMM4
|
||||
AESDEC XMM15, XMM3
|
||||
AESDEC XMM15, XMM2
|
||||
AESDEC XMM15, XMM1
|
||||
AESDECLAST XMM15, XMM0
|
||||
MOVDQU [RDX], XMM15; ADD RDX, 16
|
||||
LOOP @Loop
|
||||
End;
|
||||
|
||||
BEGIN
|
||||
if AESSupport then
|
||||
begin
|
||||
OpenKey_AES(@Test_Key, @OpenedKey);
|
||||
EnCrypt_AES(@Test_Data, @Data, 16, @OpenedKey.EnCryptRoundKeys);
|
||||
Passed := SysUtils.CompareMem(@Data, @Test_Crypt, 16);
|
||||
DeCrypt_AES(@Data, @Data, 16, @OpenedKey.DeCryptRoundKeys);
|
||||
Passed := Passed and SysUtils.CompareMem(@Data, @Test_Data, 16);
|
||||
If Not Passed Then Halt(1);
|
||||
writeln('ok');
|
||||
end
|
||||
else
|
||||
writeln('CPU has no AES instruction support');
|
||||
END.
|
Loading…
Reference in New Issue
Block a user