xref: /linux/arch/arm64/crypto/sm4-ce-asm.h (revision 3d0fe49454652117522f60bfbefb978ba0e5300b)
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