18c2ecf20Sopenharmony_ci; SPDX-License-Identifier: GPL-2.0-only
28c2ecf20Sopenharmony_ci;  Port on Texas Instruments TMS320C6x architecture
38c2ecf20Sopenharmony_ci;
48c2ecf20Sopenharmony_ci;  Copyright (C) 2006, 2009, 2010 Texas Instruments Incorporated
58c2ecf20Sopenharmony_ci;  Author: Aurelien Jacquiot (aurelien.jacquiot@jaluna.com)
68c2ecf20Sopenharmony_ci;
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#include <linux/linkage.h>
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci	.text
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ciENTRY(memcpy)
138c2ecf20Sopenharmony_ci	AND	.L1	0x1,A6,A0
148c2ecf20Sopenharmony_ci ||	AND	.S1	0x2,A6,A1
158c2ecf20Sopenharmony_ci ||	AND	.L2X	0x4,A6,B0
168c2ecf20Sopenharmony_ci ||	MV	.D1	A4,A3
178c2ecf20Sopenharmony_ci ||	MVC	.S2	ILC,B2
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci   [A0] LDB	.D2T1	*B4++,A5
208c2ecf20Sopenharmony_ci   [A1] LDB	.D2T1	*B4++,A7
218c2ecf20Sopenharmony_ci   [A1] LDB	.D2T1	*B4++,A8
228c2ecf20Sopenharmony_ci   [B0] LDNW	.D2T1	*B4++,A9
238c2ecf20Sopenharmony_ci ||	SHRU	.S2X	A6,0x3,B1
248c2ecf20Sopenharmony_ci  [!B1] BNOP	.S2	B3,1
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_ci   [A0] STB	.D1T1	A5,*A3++
278c2ecf20Sopenharmony_ci ||[B1] MVC	.S2	B1,ILC
288c2ecf20Sopenharmony_ci   [A1] STB	.D1T1	A7,*A3++
298c2ecf20Sopenharmony_ci   [A1] STB	.D1T1	A8,*A3++
308c2ecf20Sopenharmony_ci   [B0] STNW	.D1T1	A9,*A3++	; return when len < 8
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_ci	SPLOOP	2
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ci	LDNDW	.D2T1	*B4++,A9:A8
358c2ecf20Sopenharmony_ci	NOP	3
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci	NOP
388c2ecf20Sopenharmony_ci	SPKERNEL	0,0
398c2ecf20Sopenharmony_ci ||	STNDW	.D1T1	A9:A8,*A3++
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ci	BNOP	.S2	B3,4
428c2ecf20Sopenharmony_ci	MVC	.S2	B2,ILC
438c2ecf20Sopenharmony_ciENDPROC(memcpy)
44