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