1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
2 | /* |
3 | * SM4 helper macros for Crypto Extensions |
4 | * Copyright (C) 2022 Tianjia Zhang <tianjia.zhang@linux.alibaba.com> |
5 | */ |
6 | |
7 | #define SM4_PREPARE(ptr) \ |
8 | ld1 {v24.16b-v27.16b}, [ptr], #64; \ |
9 | ld1 {v28.16b-v31.16b}, [ptr]; |
10 | |
11 | #define SM4_CRYPT_BLK_BE(b0) \ |
12 | sm4e b0.4s, v24.4s; \ |
13 | sm4e b0.4s, v25.4s; \ |
14 | sm4e b0.4s, v26.4s; \ |
15 | sm4e b0.4s, v27.4s; \ |
16 | sm4e b0.4s, v28.4s; \ |
17 | sm4e b0.4s, v29.4s; \ |
18 | sm4e b0.4s, v30.4s; \ |
19 | sm4e b0.4s, v31.4s; \ |
20 | rev64 b0.4s, b0.4s; \ |
21 | ext b0.16b, b0.16b, b0.16b, #8; \ |
22 | rev32 b0.16b, b0.16b; |
23 | |
24 | #define SM4_CRYPT_BLK(b0) \ |
25 | rev32 b0.16b, b0.16b; \ |
26 | SM4_CRYPT_BLK_BE(b0); |
27 | |
28 | #define SM4_CRYPT_BLK2_BE(b0, b1) \ |
29 | sm4e b0.4s, v24.4s; \ |
30 | sm4e b1.4s, v24.4s; \ |
31 | sm4e b0.4s, v25.4s; \ |
32 | sm4e b1.4s, v25.4s; \ |
33 | sm4e b0.4s, v26.4s; \ |
34 | sm4e b1.4s, v26.4s; \ |
35 | sm4e b0.4s, v27.4s; \ |
36 | sm4e b1.4s, v27.4s; \ |
37 | sm4e b0.4s, v28.4s; \ |
38 | sm4e b1.4s, v28.4s; \ |
39 | sm4e b0.4s, v29.4s; \ |
40 | sm4e b1.4s, v29.4s; \ |
41 | sm4e b0.4s, v30.4s; \ |
42 | sm4e b1.4s, v30.4s; \ |
43 | sm4e b0.4s, v31.4s; \ |
44 | sm4e b1.4s, v31.4s; \ |
45 | rev64 b0.4s, b0.4s; \ |
46 | rev64 b1.4s, b1.4s; \ |
47 | ext b0.16b, b0.16b, b0.16b, #8; \ |
48 | ext b1.16b, b1.16b, b1.16b, #8; \ |
49 | rev32 b0.16b, b0.16b; \ |
50 | rev32 b1.16b, b1.16b; \ |
51 | |
52 | #define SM4_CRYPT_BLK2(b0, b1) \ |
53 | rev32 b0.16b, b0.16b; \ |
54 | rev32 b1.16b, b1.16b; \ |
55 | SM4_CRYPT_BLK2_BE(b0, b1); |
56 | |
57 | #define SM4_CRYPT_BLK4_BE(b0, b1, b2, b3) \ |
58 | sm4e b0.4s, v24.4s; \ |
59 | sm4e b1.4s, v24.4s; \ |
60 | sm4e b2.4s, v24.4s; \ |
61 | sm4e b3.4s, v24.4s; \ |
62 | sm4e b0.4s, v25.4s; \ |
63 | sm4e b1.4s, v25.4s; \ |
64 | sm4e b2.4s, v25.4s; \ |
65 | sm4e b3.4s, v25.4s; \ |
66 | sm4e b0.4s, v26.4s; \ |
67 | sm4e b1.4s, v26.4s; \ |
68 | sm4e b2.4s, v26.4s; \ |
69 | sm4e b3.4s, v26.4s; \ |
70 | sm4e b0.4s, v27.4s; \ |
71 | sm4e b1.4s, v27.4s; \ |
72 | sm4e b2.4s, v27.4s; \ |
73 | sm4e b3.4s, v27.4s; \ |
74 | sm4e b0.4s, v28.4s; \ |
75 | sm4e b1.4s, v28.4s; \ |
76 | sm4e b2.4s, v28.4s; \ |
77 | sm4e b3.4s, v28.4s; \ |
78 | sm4e b0.4s, v29.4s; \ |
79 | sm4e b1.4s, v29.4s; \ |
80 | sm4e b2.4s, v29.4s; \ |
81 | sm4e b3.4s, v29.4s; \ |
82 | sm4e b0.4s, v30.4s; \ |
83 | sm4e b1.4s, v30.4s; \ |
84 | sm4e b2.4s, v30.4s; \ |
85 | sm4e b3.4s, v30.4s; \ |
86 | sm4e b0.4s, v31.4s; \ |
87 | sm4e b1.4s, v31.4s; \ |
88 | sm4e b2.4s, v31.4s; \ |
89 | sm4e b3.4s, v31.4s; \ |
90 | rev64 b0.4s, b0.4s; \ |
91 | rev64 b1.4s, b1.4s; \ |
92 | rev64 b2.4s, b2.4s; \ |
93 | rev64 b3.4s, b3.4s; \ |
94 | ext b0.16b, b0.16b, b0.16b, #8; \ |
95 | ext b1.16b, b1.16b, b1.16b, #8; \ |
96 | ext b2.16b, b2.16b, b2.16b, #8; \ |
97 | ext b3.16b, b3.16b, b3.16b, #8; \ |
98 | rev32 b0.16b, b0.16b; \ |
99 | rev32 b1.16b, b1.16b; \ |
100 | rev32 b2.16b, b2.16b; \ |
101 | rev32 b3.16b, b3.16b; |
102 | |
103 | #define SM4_CRYPT_BLK4(b0, b1, b2, b3) \ |
104 | rev32 b0.16b, b0.16b; \ |
105 | rev32 b1.16b, b1.16b; \ |
106 | rev32 b2.16b, b2.16b; \ |
107 | rev32 b3.16b, b3.16b; \ |
108 | SM4_CRYPT_BLK4_BE(b0, b1, b2, b3); |
109 | |
110 | #define SM4_CRYPT_BLK8_BE(b0, b1, b2, b3, b4, b5, b6, b7) \ |
111 | sm4e b0.4s, v24.4s; \ |
112 | sm4e b1.4s, v24.4s; \ |
113 | sm4e b2.4s, v24.4s; \ |
114 | sm4e b3.4s, v24.4s; \ |
115 | sm4e b4.4s, v24.4s; \ |
116 | sm4e b5.4s, v24.4s; \ |
117 | sm4e b6.4s, v24.4s; \ |
118 | sm4e b7.4s, v24.4s; \ |
119 | sm4e b0.4s, v25.4s; \ |
120 | sm4e b1.4s, v25.4s; \ |
121 | sm4e b2.4s, v25.4s; \ |
122 | sm4e b3.4s, v25.4s; \ |
123 | sm4e b4.4s, v25.4s; \ |
124 | sm4e b5.4s, v25.4s; \ |
125 | sm4e b6.4s, v25.4s; \ |
126 | sm4e b7.4s, v25.4s; \ |
127 | sm4e b0.4s, v26.4s; \ |
128 | sm4e b1.4s, v26.4s; \ |
129 | sm4e b2.4s, v26.4s; \ |
130 | sm4e b3.4s, v26.4s; \ |
131 | sm4e b4.4s, v26.4s; \ |
132 | sm4e b5.4s, v26.4s; \ |
133 | sm4e b6.4s, v26.4s; \ |
134 | sm4e b7.4s, v26.4s; \ |
135 | sm4e b0.4s, v27.4s; \ |
136 | sm4e b1.4s, v27.4s; \ |
137 | sm4e b2.4s, v27.4s; \ |
138 | sm4e b3.4s, v27.4s; \ |
139 | sm4e b4.4s, v27.4s; \ |
140 | sm4e b5.4s, v27.4s; \ |
141 | sm4e b6.4s, v27.4s; \ |
142 | sm4e b7.4s, v27.4s; \ |
143 | sm4e b0.4s, v28.4s; \ |
144 | sm4e b1.4s, v28.4s; \ |
145 | sm4e b2.4s, v28.4s; \ |
146 | sm4e b3.4s, v28.4s; \ |
147 | sm4e b4.4s, v28.4s; \ |
148 | sm4e b5.4s, v28.4s; \ |
149 | sm4e b6.4s, v28.4s; \ |
150 | sm4e b7.4s, v28.4s; \ |
151 | sm4e b0.4s, v29.4s; \ |
152 | sm4e b1.4s, v29.4s; \ |
153 | sm4e b2.4s, v29.4s; \ |
154 | sm4e b3.4s, v29.4s; \ |
155 | sm4e b4.4s, v29.4s; \ |
156 | sm4e b5.4s, v29.4s; \ |
157 | sm4e b6.4s, v29.4s; \ |
158 | sm4e b7.4s, v29.4s; \ |
159 | sm4e b0.4s, v30.4s; \ |
160 | sm4e b1.4s, v30.4s; \ |
161 | sm4e b2.4s, v30.4s; \ |
162 | sm4e b3.4s, v30.4s; \ |
163 | sm4e b4.4s, v30.4s; \ |
164 | sm4e b5.4s, v30.4s; \ |
165 | sm4e b6.4s, v30.4s; \ |
166 | sm4e b7.4s, v30.4s; \ |
167 | sm4e b0.4s, v31.4s; \ |
168 | sm4e b1.4s, v31.4s; \ |
169 | sm4e b2.4s, v31.4s; \ |
170 | sm4e b3.4s, v31.4s; \ |
171 | sm4e b4.4s, v31.4s; \ |
172 | sm4e b5.4s, v31.4s; \ |
173 | sm4e b6.4s, v31.4s; \ |
174 | sm4e b7.4s, v31.4s; \ |
175 | rev64 b0.4s, b0.4s; \ |
176 | rev64 b1.4s, b1.4s; \ |
177 | rev64 b2.4s, b2.4s; \ |
178 | rev64 b3.4s, b3.4s; \ |
179 | rev64 b4.4s, b4.4s; \ |
180 | rev64 b5.4s, b5.4s; \ |
181 | rev64 b6.4s, b6.4s; \ |
182 | rev64 b7.4s, b7.4s; \ |
183 | ext b0.16b, b0.16b, b0.16b, #8; \ |
184 | ext b1.16b, b1.16b, b1.16b, #8; \ |
185 | ext b2.16b, b2.16b, b2.16b, #8; \ |
186 | ext b3.16b, b3.16b, b3.16b, #8; \ |
187 | ext b4.16b, b4.16b, b4.16b, #8; \ |
188 | ext b5.16b, b5.16b, b5.16b, #8; \ |
189 | ext b6.16b, b6.16b, b6.16b, #8; \ |
190 | ext b7.16b, b7.16b, b7.16b, #8; \ |
191 | rev32 b0.16b, b0.16b; \ |
192 | rev32 b1.16b, b1.16b; \ |
193 | rev32 b2.16b, b2.16b; \ |
194 | rev32 b3.16b, b3.16b; \ |
195 | rev32 b4.16b, b4.16b; \ |
196 | rev32 b5.16b, b5.16b; \ |
197 | rev32 b6.16b, b6.16b; \ |
198 | rev32 b7.16b, b7.16b; |
199 | |
200 | #define SM4_CRYPT_BLK8(b0, b1, b2, b3, b4, b5, b6, b7) \ |
201 | rev32 b0.16b, b0.16b; \ |
202 | rev32 b1.16b, b1.16b; \ |
203 | rev32 b2.16b, b2.16b; \ |
204 | rev32 b3.16b, b3.16b; \ |
205 | rev32 b4.16b, b4.16b; \ |
206 | rev32 b5.16b, b5.16b; \ |
207 | rev32 b6.16b, b6.16b; \ |
208 | rev32 b7.16b, b7.16b; \ |
209 | SM4_CRYPT_BLK8_BE(b0, b1, b2, b3, b4, b5, b6, b7); |
210 | |