1 | // SPDX-License-Identifier: GPL-2.0-or-later |
2 | /* |
3 | * sm3-neon-core.S - SM3 secure hash using NEON instructions |
4 | * |
5 | * Linux/arm64 port of the libgcrypt SM3 implementation for AArch64 |
6 | * |
7 | * Copyright (C) 2021 Jussi Kivilinna <jussi.kivilinna@iki.fi> |
8 | * Copyright (c) 2022 Tianjia Zhang <tianjia.zhang@linux.alibaba.com> |
9 | */ |
10 | |
11 | #include <linux/linkage.h> |
12 | #include <linux/cfi_types.h> |
13 | #include <asm/assembler.h> |
14 | |
15 | /* Context structure */ |
16 | |
17 | #define state_h0 0 |
18 | #define state_h1 4 |
19 | #define state_h2 8 |
20 | #define state_h3 12 |
21 | #define state_h4 16 |
22 | #define state_h5 20 |
23 | #define state_h6 24 |
24 | #define state_h7 28 |
25 | |
26 | /* Stack structure */ |
27 | |
28 | #define STACK_W_SIZE (32 * 2 * 3) |
29 | |
30 | #define STACK_W (0) |
31 | #define STACK_SIZE (STACK_W + STACK_W_SIZE) |
32 | |
33 | /* Register macros */ |
34 | |
35 | #define RSTATE x0 |
36 | #define RDATA x1 |
37 | #define RNBLKS x2 |
38 | #define RKPTR x28 |
39 | #define RFRAME x29 |
40 | |
41 | #define ra w3 |
42 | #define rb w4 |
43 | #define rc w5 |
44 | #define rd w6 |
45 | #define re w7 |
46 | #define rf w8 |
47 | #define rg w9 |
48 | #define rh w10 |
49 | |
50 | #define t0 w11 |
51 | #define t1 w12 |
52 | #define t2 w13 |
53 | #define t3 w14 |
54 | #define t4 w15 |
55 | #define t5 w16 |
56 | #define t6 w17 |
57 | |
58 | #define k_even w19 |
59 | #define k_odd w20 |
60 | |
61 | #define addr0 x21 |
62 | #define addr1 x22 |
63 | |
64 | #define s0 w23 |
65 | #define s1 w24 |
66 | #define s2 w25 |
67 | #define s3 w26 |
68 | |
69 | #define W0 v0 |
70 | #define W1 v1 |
71 | #define W2 v2 |
72 | #define W3 v3 |
73 | #define W4 v4 |
74 | #define W5 v5 |
75 | |
76 | #define XTMP0 v6 |
77 | #define XTMP1 v7 |
78 | #define XTMP2 v16 |
79 | #define XTMP3 v17 |
80 | #define XTMP4 v18 |
81 | #define XTMP5 v19 |
82 | #define XTMP6 v20 |
83 | |
84 | /* Helper macros. */ |
85 | |
86 | #define _(...) /*_*/ |
87 | |
88 | #define clear_vec(x) \ |
89 | movi x.8h, #0; |
90 | |
91 | #define rolw(o, a, n) \ |
92 | ror o, a, |
---|