/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright ( C ) 2013 - 2017 Linaro Ltd < ard . biesheuvel @ linaro . org >
*/
#include <linux/linkage.h>
#include <asm/assembler.h>
.arch armv8-a+crypto
SYM_FUNC_START(__aes_ce_encrypt)
sub w3, w3, #2
ld1 {v0.16 b}, [x2]
ld1 {v1.4 s}, [x0], #16
cmp w3, #10
bmi 0 f
bne 3 f
mov v3.16 b, v1.16 b
b 2 f
0 : mov v2.16 b, v1.16 b
ld1 {v3.4 s}, [x0], #16
1 : aese v0.16 b, v2.16 b
aesmc v0.16 b, v0.16 b
2 : ld1 {v1.4 s}, [x0], #16
aese v0.16 b, v3.16 b
aesmc v0.16 b, v0.16 b
3 : ld1 {v2.4 s}, [x0], #16
subs w3, w3, #3
aese v0.16 b, v1.16 b
aesmc v0.16 b, v0.16 b
ld1 {v3.4 s}, [x0], #16
bpl 1 b
aese v0.16 b, v2.16 b
eor v0.16 b, v0.16 b, v3.16 b
st1 {v0.16 b}, [x1]
ret
SYM_FUNC_END(__aes_ce_encrypt)
SYM_FUNC_START(__aes_ce_decrypt)
sub w3, w3, #2
ld1 {v0.16 b}, [x2]
ld1 {v1.4 s}, [x0], #16
cmp w3, #10
bmi 0 f
bne 3 f
mov v3.16 b, v1.16 b
b 2 f
0 : mov v2.16 b, v1.16 b
ld1 {v3.4 s}, [x0], #16
1 : aesd v0.16 b, v2.16 b
aesimc v0.16 b, v0.16 b
2 : ld1 {v1.4 s}, [x0], #16
aesd v0.16 b, v3.16 b
aesimc v0.16 b, v0.16 b
3 : ld1 {v2.4 s}, [x0], #16
subs w3, w3, #3
aesd v0.16 b, v1.16 b
aesimc v0.16 b, v0.16 b
ld1 {v3.4 s}, [x0], #16
bpl 1 b
aesd v0.16 b, v2.16 b
eor v0.16 b, v0.16 b, v3.16 b
st1 {v0.16 b}, [x1]
ret
SYM_FUNC_END(__aes_ce_decrypt)
/*
* _ _ aes_ce_sub ( ) - use the aese instruction to perform the AES sbox
* substitution on each byte in ' input '
*/
SYM_FUNC_START(__aes_ce_sub)
dup v1.4 s, w0
movi v0.16 b, #0
aese v0.16 b, v1.16 b
umov w0, v0.s[0 ]
ret
SYM_FUNC_END(__aes_ce_sub)
SYM_FUNC_START(__aes_ce_invert)
ld1 {v0.4 s}, [x1]
aesimc v1.16 b, v0.16 b
st1 {v1.4 s}, [x0]
ret
SYM_FUNC_END(__aes_ce_invert)
Messung V0.5 in Prozent C=95 H=95 G=94
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-09-27)
¤
*© Formatika GbR, Deutschland