.text
.global _KeyExpansionStdcall
_KeyExpansionStdcall:
movdqu 0 (%rdi), %xmm1
mov %rsi, %rdx
movdqu %xmm1, 0 (%rdx)
aeskeygenassist $1, %xmm1, %xmm2
pshufd $255, %xmm2, %xmm2
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
pxor %xmm2, %xmm1
movdqu %xmm1, 16 (%rdx)
aeskeygenassist $2, %xmm1, %xmm2
pshufd $255, %xmm2, %xmm2
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
pxor %xmm2, %xmm1
movdqu %xmm1, 32 (%rdx)
aeskeygenassist $4, %xmm1, %xmm2
pshufd $255, %xmm2, %xmm2
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
pxor %xmm2, %xmm1
movdqu %xmm1, 48 (%rdx)
aeskeygenassist $8, %xmm1, %xmm2
pshufd $255, %xmm2, %xmm2
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
pxor %xmm2, %xmm1
movdqu %xmm1, 64 (%rdx)
aeskeygenassist $16, %xmm1, %xmm2
pshufd $255, %xmm2, %xmm2
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
pxor %xmm2, %xmm1
movdqu %xmm1, 80 (%rdx)
aeskeygenassist $32, %xmm1, %xmm2
pshufd $255, %xmm2, %xmm2
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
pxor %xmm2, %xmm1
movdqu %xmm1, 96 (%rdx)
aeskeygenassist $64, %xmm1, %xmm2
pshufd $255, %xmm2, %xmm2
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
pxor %xmm2, %xmm1
movdqu %xmm1, 112 (%rdx)
aeskeygenassist $128, %xmm1, %xmm2
pshufd $255, %xmm2, %xmm2
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
pxor %xmm2, %xmm1
movdqu %xmm1, 128 (%rdx)
aeskeygenassist $27, %xmm1, %xmm2
pshufd $255, %xmm2, %xmm2
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
pxor %xmm2, %xmm1
movdqu %xmm1, 144 (%rdx)
aeskeygenassist $54, %xmm1, %xmm2
pshufd $255, %xmm2, %xmm2
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
pxor %xmm2, %xmm1
movdqu %xmm1, 160 (%rdx)
pxor %xmm1, %xmm1
pxor %xmm2, %xmm2
pxor %xmm3, %xmm3
ret
.global _KeyExpansionAndInversionStdcall
_KeyExpansionAndInversionStdcall:
movdqu 0 (%rdi), %xmm1
mov %rsi, %rdx
movdqu %xmm1, 0 (%rdx)
aeskeygenassist $1, %xmm1, %xmm2
pshufd $255, %xmm2, %xmm2
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
pxor %xmm2, %xmm1
movdqu %xmm1, 16 (%rdx)
aeskeygenassist $2, %xmm1, %xmm2
pshufd $255, %xmm2, %xmm2
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
pxor %xmm2, %xmm1
movdqu %xmm1, 32 (%rdx)
aeskeygenassist $4, %xmm1, %xmm2
pshufd $255, %xmm2, %xmm2
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
pxor %xmm2, %xmm1
movdqu %xmm1, 48 (%rdx)
aeskeygenassist $8, %xmm1, %xmm2
pshufd $255, %xmm2, %xmm2
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
pxor %xmm2, %xmm1
movdqu %xmm1, 64 (%rdx)
aeskeygenassist $16, %xmm1, %xmm2
pshufd $255, %xmm2, %xmm2
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
pxor %xmm2, %xmm1
movdqu %xmm1, 80 (%rdx)
aeskeygenassist $32, %xmm1, %xmm2
pshufd $255, %xmm2, %xmm2
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
pxor %xmm2, %xmm1
movdqu %xmm1, 96 (%rdx)
aeskeygenassist $64, %xmm1, %xmm2
pshufd $255, %xmm2, %xmm2
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
pxor %xmm2, %xmm1
movdqu %xmm1, 112 (%rdx)
aeskeygenassist $128, %xmm1, %xmm2
pshufd $255, %xmm2, %xmm2
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
pxor %xmm2, %xmm1
movdqu %xmm1, 128 (%rdx)
aeskeygenassist $27, %xmm1, %xmm2
pshufd $255, %xmm2, %xmm2
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
pxor %xmm2, %xmm1
movdqu %xmm1, 144 (%rdx)
aeskeygenassist $54, %xmm1, %xmm2
pshufd $255, %xmm2, %xmm2
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
vpslldq $4, %xmm1, %xmm3
pxor %xmm3, %xmm1
pxor %xmm2, %xmm1
movdqu %xmm1, 160 (%rdx)
movdqu 16 (%rdx), %xmm1
aesimc %xmm1, %xmm1
movdqu %xmm1, 16 (%rdx)
movdqu 32 (%rdx), %xmm1
aesimc %xmm1, %xmm1
movdqu %xmm1, 32 (%rdx)
movdqu 48 (%rdx), %xmm1
aesimc %xmm1, %xmm1
movdqu %xmm1, 48 (%rdx)
movdqu 64 (%rdx), %xmm1
aesimc %xmm1, %xmm1
movdqu %xmm1, 64 (%rdx)
movdqu 80 (%rdx), %xmm1
aesimc %xmm1, %xmm1
movdqu %xmm1, 80 (%rdx)
movdqu 96 (%rdx), %xmm1
aesimc %xmm1, %xmm1
movdqu %xmm1, 96 (%rdx)
movdqu 112 (%rdx), %xmm1
aesimc %xmm1, %xmm1
movdqu %xmm1, 112 (%rdx)
movdqu 128 (%rdx), %xmm1
aesimc %xmm1, %xmm1
movdqu %xmm1, 128 (%rdx)
movdqu 144 (%rdx), %xmm1
aesimc %xmm1, %xmm1
movdqu %xmm1, 144 (%rdx)
pxor %xmm1, %xmm1
pxor %xmm2, %xmm2
pxor %xmm3, %xmm3
ret
.global _AES128EncryptOneBlockStdcall
_AES128EncryptOneBlockStdcall:
movdqu 0 (%rsi), %xmm0
mov %rdx, %r8
movdqu 0 (%r8), %xmm2
pxor %xmm2, %xmm0
movdqu 16 (%r8), %xmm2
aesenc %xmm2, %xmm0
movdqu 32 (%r8), %xmm2
aesenc %xmm2, %xmm0
movdqu 48 (%r8), %xmm2
aesenc %xmm2, %xmm0
movdqu 64 (%r8), %xmm2
aesenc %xmm2, %xmm0
movdqu 80 (%r8), %xmm2
aesenc %xmm2, %xmm0
movdqu 96 (%r8), %xmm2
aesenc %xmm2, %xmm0
movdqu 112 (%r8), %xmm2
aesenc %xmm2, %xmm0
movdqu 128 (%r8), %xmm2
aesenc %xmm2, %xmm0
movdqu 144 (%r8), %xmm2
aesenc %xmm2, %xmm0
movdqu 160 (%r8), %xmm2
aesenclast %xmm2, %xmm0
pxor %xmm2, %xmm2
movdqu %xmm0, 0 (%rdi)
ret