xref: /OK3568_Linux_fs/kernel/arch/arm64/crypto/sm4-ce-core.S (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun// SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun
3*4882a593Smuzhiyun#include <linux/linkage.h>
4*4882a593Smuzhiyun#include <asm/assembler.h>
5*4882a593Smuzhiyun
6*4882a593Smuzhiyun	.irp		b, 0, 1, 2, 3, 4, 5, 6, 7, 8
7*4882a593Smuzhiyun	.set		.Lv\b\().4s, \b
8*4882a593Smuzhiyun	.endr
9*4882a593Smuzhiyun
10*4882a593Smuzhiyun	.macro		sm4e, rd, rn
11*4882a593Smuzhiyun	.inst		0xcec08400 | .L\rd | (.L\rn << 5)
12*4882a593Smuzhiyun	.endm
13*4882a593Smuzhiyun
14*4882a593Smuzhiyun	/*
15*4882a593Smuzhiyun	 * void sm4_ce_do_crypt(const u32 *rk, u32 *out, const u32 *in);
16*4882a593Smuzhiyun	 */
17*4882a593Smuzhiyun	.text
18*4882a593SmuzhiyunSYM_FUNC_START(sm4_ce_do_crypt)
19*4882a593Smuzhiyun	ld1		{v8.4s}, [x2]
20*4882a593Smuzhiyun	ld1		{v0.4s-v3.4s}, [x0], #64
21*4882a593SmuzhiyunCPU_LE(	rev32		v8.16b, v8.16b		)
22*4882a593Smuzhiyun	ld1		{v4.4s-v7.4s}, [x0]
23*4882a593Smuzhiyun	sm4e		v8.4s, v0.4s
24*4882a593Smuzhiyun	sm4e		v8.4s, v1.4s
25*4882a593Smuzhiyun	sm4e		v8.4s, v2.4s
26*4882a593Smuzhiyun	sm4e		v8.4s, v3.4s
27*4882a593Smuzhiyun	sm4e		v8.4s, v4.4s
28*4882a593Smuzhiyun	sm4e		v8.4s, v5.4s
29*4882a593Smuzhiyun	sm4e		v8.4s, v6.4s
30*4882a593Smuzhiyun	sm4e		v8.4s, v7.4s
31*4882a593Smuzhiyun	rev64		v8.4s, v8.4s
32*4882a593Smuzhiyun	ext		v8.16b, v8.16b, v8.16b, #8
33*4882a593SmuzhiyunCPU_LE(	rev32		v8.16b, v8.16b		)
34*4882a593Smuzhiyun	st1		{v8.4s}, [x1]
35*4882a593Smuzhiyun	ret
36*4882a593SmuzhiyunSYM_FUNC_END(sm4_ce_do_crypt)
37