.text
ENTRY(_key_expansion_128)
_key_expansion_256a:
.cfi_startproc
pshufd $0b11111111,%xmm1,%xmm1
shufps $0b00010000,%xmm0,%xmm4
pxor %xmm4,%xmm0
shufps $0b10001100,%xmm0,%xmm4
pxor %xmm4,%xmm0
pxor %xmm1,%xmm0
movaps %xmm0,(%rsi)
addq $0x10,%rsi
retq
.cfi_endproc
END(_key_expansion_128)
ENTRY(_key_expansion_192a)
.cfi_startproc
pshufd $0b01010101,%xmm1,%xmm1
shufps $0b00010000,%xmm0,%xmm4
pxor %xmm4,%xmm0
shufps $0b10001100,%xmm0,%xmm4
pxor %xmm4,%xmm0
pxor %xmm1,%xmm0
movaps %xmm2,%xmm5
movaps %xmm2,%xmm6
pslldq $4,%xmm5
pshufd $0b11111111,%xmm0,%xmm3
pxor %xmm3,%xmm2
pxor %xmm5,%xmm2
movaps %xmm0,%xmm1
shufps $0b01000100,%xmm0,%xmm6
movaps %xmm6,(%rsi)
shufps $0b01001110,%xmm2,%xmm1
movaps %xmm1,0x10(%rsi)
addq $0x20,%rsi
retq
.cfi_endproc
END(_key_expansion_192a)
ENTRY(_key_expansion_192b)
.cfi_startproc
pshufd $0b01010101,%xmm1,%xmm1
shufps $0b00010000,%xmm0,%xmm4
pxor %xmm4,%xmm0
shufps $0b10001100,%xmm0,%xmm4
pxor %xmm4,%xmm0
pxor %xmm1,%xmm0
movaps %xmm2,%xmm5
pslldq $4,%xmm5
pshufd $0b11111111,%xmm0,%xmm3
pxor %xmm3,%xmm2
pxor %xmm5,%xmm2
movaps %xmm0,(%rsi)
addq $0x10,%rsi
retq
.cfi_endproc
END(_key_expansion_192b)
ENTRY(_key_expansion_256b)
.cfi_startproc
pshufd $0b10101010,%xmm1,%xmm1
shufps $0b00010000,%xmm2,%xmm4
pxor %xmm4,%xmm2
shufps $0b10001100,%xmm2,%xmm4
pxor %xmm4,%xmm2
pxor %xmm1,%xmm2
movaps %xmm2,(%rsi)
addq $0x10,%rsi
retq
.cfi_endproc
END(_key_expansion_256b)
ENTRY(aesni_set_enckey)
.cfi_startproc
movups (%rdi),%xmm0
movaps %xmm0,(%rsi)
addq $0x10,%rsi
pxor %xmm4,%xmm4
cmpl $12,%edx
jb .Lenc_key128
je .Lenc_key192
movups 0x10(%rdi),%xmm2
movaps %xmm2,(%rsi)
addq $0x10,%rsi
aeskeygenassist $0x1,%xmm2,%xmm1
call _key_expansion_256a
aeskeygenassist $0x1,%xmm0,%xmm1
call _key_expansion_256b
aeskeygenassist $0x2,%xmm2,%xmm1
call _key_expansion_256a
aeskeygenassist $0x2,%xmm0,%xmm1
call _key_expansion_256b
aeskeygenassist $0x4,%xmm2,%xmm1
call _key_expansion_256a
aeskeygenassist $0x4,%xmm0,%xmm1
call _key_expansion_256b
aeskeygenassist $0x8,%xmm2,%xmm1
call _key_expansion_256a
aeskeygenassist $0x8,%xmm0,%xmm1
call _key_expansion_256b
aeskeygenassist $0x10,%xmm2,%xmm1
call _key_expansion_256a
aeskeygenassist $0x10,%xmm0,%xmm1
call _key_expansion_256b
aeskeygenassist $0x20,%xmm2,%xmm1
call _key_expansion_256a
aeskeygenassist $0x20,%xmm0,%xmm1
call _key_expansion_256b
aeskeygenassist $0x40,%xmm2,%xmm1
call _key_expansion_256a
retq
.Lenc_key192:
movq 0x10(%rdi),%xmm2
aeskeygenassist $0x1,%xmm2,%xmm1
call _key_expansion_192a
aeskeygenassist $0x2,%xmm2,%xmm1
call _key_expansion_192b
aeskeygenassist $0x4,%xmm2,%xmm1
call _key_expansion_192a
aeskeygenassist $0x8,%xmm2,%xmm1
call _key_expansion_192b
aeskeygenassist $0x10,%xmm2,%xmm1
call _key_expansion_192a
aeskeygenassist $0x20,%xmm2,%xmm1
call _key_expansion_192b
aeskeygenassist $0x40,%xmm2,%xmm1
call _key_expansion_192a
aeskeygenassist $0x80,%xmm2,%xmm1
call _key_expansion_192b
retq
.Lenc_key128:
aeskeygenassist $0x1,%xmm0,%xmm1
call _key_expansion_128
aeskeygenassist $0x2,%xmm0,%xmm1
call _key_expansion_128
aeskeygenassist $0x4,%xmm0,%xmm1
call _key_expansion_128
aeskeygenassist $0x8,%xmm0,%xmm1
call _key_expansion_128
aeskeygenassist $0x10,%xmm0,%xmm1
call _key_expansion_128
aeskeygenassist $0x20,%xmm0,%xmm1
call _key_expansion_128
aeskeygenassist $0x40,%xmm0,%xmm1
call _key_expansion_128
aeskeygenassist $0x80,%xmm0,%xmm1
call _key_expansion_128
aeskeygenassist $0x1b,%xmm0,%xmm1
call _key_expansion_128
aeskeygenassist $0x36,%xmm0,%xmm1
call _key_expansion_128
retq
.cfi_endproc
END(aesni_set_enckey)
ENTRY(aesni_set_deckey)
.cfi_startproc
movslq %edx,%rax
shlq $4,%rax
addq %rax,%rdi
movdqa (%rdi),%xmm0
movdqa %xmm0,(%rsi)
decl %edx
1:
addq $0x10,%rsi
subq $0x10,%rdi
aesimc (%rdi),%xmm1
movdqa %xmm1,(%rsi)
decl %edx
jne 1b
addq $0x10,%rsi
subq $0x10,%rdi
movdqa (%rdi),%xmm0
movdqa %xmm0,(%rsi)
retq
.cfi_endproc
END(aesni_set_deckey)