18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci
38c2ecf20Sopenharmony_ci#include <linux/linkage.h>
48c2ecf20Sopenharmony_ci#include <asm/assembler.h>
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci	.irp		b, 0, 1, 2, 3, 4, 5, 6, 7, 8
78c2ecf20Sopenharmony_ci	.set		.Lv\b\().4s, \b
88c2ecf20Sopenharmony_ci	.endr
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci	.macro		sm4e, rd, rn
118c2ecf20Sopenharmony_ci	.inst		0xcec08400 | .L\rd | (.L\rn << 5)
128c2ecf20Sopenharmony_ci	.endm
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci	/*
158c2ecf20Sopenharmony_ci	 * void sm4_ce_do_crypt(const u32 *rk, u32 *out, const u32 *in);
168c2ecf20Sopenharmony_ci	 */
178c2ecf20Sopenharmony_ci	.text
188c2ecf20Sopenharmony_ciSYM_FUNC_START(sm4_ce_do_crypt)
198c2ecf20Sopenharmony_ci	ld1		{v8.4s}, [x2]
208c2ecf20Sopenharmony_ci	ld1		{v0.4s-v3.4s}, [x0], #64
218c2ecf20Sopenharmony_ciCPU_LE(	rev32		v8.16b, v8.16b		)
228c2ecf20Sopenharmony_ci	ld1		{v4.4s-v7.4s}, [x0]
238c2ecf20Sopenharmony_ci	sm4e		v8.4s, v0.4s
248c2ecf20Sopenharmony_ci	sm4e		v8.4s, v1.4s
258c2ecf20Sopenharmony_ci	sm4e		v8.4s, v2.4s
268c2ecf20Sopenharmony_ci	sm4e		v8.4s, v3.4s
278c2ecf20Sopenharmony_ci	sm4e		v8.4s, v4.4s
288c2ecf20Sopenharmony_ci	sm4e		v8.4s, v5.4s
298c2ecf20Sopenharmony_ci	sm4e		v8.4s, v6.4s
308c2ecf20Sopenharmony_ci	sm4e		v8.4s, v7.4s
318c2ecf20Sopenharmony_ci	rev64		v8.4s, v8.4s
328c2ecf20Sopenharmony_ci	ext		v8.16b, v8.16b, v8.16b, #8
338c2ecf20Sopenharmony_ciCPU_LE(	rev32		v8.16b, v8.16b		)
348c2ecf20Sopenharmony_ci	st1		{v8.4s}, [x1]
358c2ecf20Sopenharmony_ci	ret
368c2ecf20Sopenharmony_ciSYM_FUNC_END(sm4_ce_do_crypt)
37