1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| // SPDX-License-Identifier: GPL-2.0
|
| #include <linux/linkage.h>
| #include <asm/assembler.h>
|
| .irp b, 0, 1, 2, 3, 4, 5, 6, 7, 8
| .set .Lv\b\().4s, \b
| .endr
|
| .macro sm4e, rd, rn
| .inst 0xcec08400 | .L\rd | (.L\rn << 5)
| .endm
|
| /*
| * void sm4_ce_do_crypt(const u32 *rk, u32 *out, const u32 *in);
| */
| .text
| SYM_FUNC_START(sm4_ce_do_crypt)
| ld1 {v8.4s}, [x2]
| ld1 {v0.4s-v3.4s}, [x0], #64
| CPU_LE( rev32 v8.16b, v8.16b )
| ld1 {v4.4s-v7.4s}, [x0]
| sm4e v8.4s, v0.4s
| sm4e v8.4s, v1.4s
| sm4e v8.4s, v2.4s
| sm4e v8.4s, v3.4s
| sm4e v8.4s, v4.4s
| sm4e v8.4s, v5.4s
| sm4e v8.4s, v6.4s
| sm4e v8.4s, v7.4s
| rev64 v8.4s, v8.4s
| ext v8.16b, v8.16b, v8.16b, #8
| CPU_LE( rev32 v8.16b, v8.16b )
| st1 {v8.4s}, [x1]
| ret
| SYM_FUNC_END(sm4_ce_do_crypt)
|
|