Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.15.
  1/* SPDX-License-Identifier: GPL-2.0 */
  2// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
  3
  4#include <linux/linkage.h>
  5#include "sysdep.h"
  6
  7ENTRY(strcpy)
  8	mov	a3, a0
  9	/* Check if the src addr is aligned.  */
 10        andi    t0, a1, 3
 11        bnez	t0, 11f
 121:
 13	/* Check if all the bytes in the word are not zero.  */
 14	ldw	a2, (a1)
 15	tstnbz	a2
 16	bf	9f
 17	stw	a2, (a3)
 18
 19	ldw	a2, (a1, 4)
 20	tstnbz	a2
 21	bf	2f
 22	stw	a2, (a3, 4)
 23
 24	ldw	a2, (a1, 8)
 25	tstnbz	a2
 26	bf	3f
 27	stw	a2, (a3, 8)
 28
 29	ldw	a2, (a1, 12)
 30	tstnbz	a2
 31	bf	4f
 32	stw	a2, (a3, 12)
 33
 34	ldw	a2, (a1, 16)
 35	tstnbz	a2
 36	bf	5f
 37	stw	a2, (a3, 16)
 38
 39	ldw	a2, (a1, 20)
 40	tstnbz	a2
 41	bf	6f
 42	stw	a2, (a3, 20)
 43
 44	ldw	a2, (a1, 24)
 45	tstnbz	a2
 46	bf	7f
 47	stw	a2, (a3, 24)
 48
 49	ldw	a2, (a1, 28)
 50	tstnbz	a2
 51	bf	8f
 52	stw	a2, (a3, 28)
 53
 54	addi	a3, 32
 55	addi	a1, 32
 56	br	1b
 57
 58
 592:
 60	addi	a3, 4
 61	br	9f
 62
 633:
 64	addi	a3, 8
 65	br	9f
 66
 674:
 68	addi	a3, 12
 69	br	9f
 70
 715:
 72	addi	a3, 16
 73	br	9f
 74
 756:
 76	addi	a3, 20
 77	br	9f
 78
 797:
 80	addi	a3, 24
 81	br	9f
 82
 838:
 84	addi	a3, 28
 859:
 86# ifdef __CSKYBE__
 87	xtrb0	t0, a2
 88	st.b	t0, (a3)
 89	bez	t0, 10f
 90	xtrb1	t0, a2
 91	st.b	t0, (a3, 1)
 92	bez	t0, 10f
 93	xtrb2	t0, a2
 94	st.b	t0, (a3, 2)
 95	bez	t0, 10f
 96	stw	a2, (a3)
 97# else
 98	xtrb3	t0, a2
 99	st.b	t0, (a3)
100	bez	t0, 10f
101	xtrb2	t0, a2
102	st.b	t0, (a3, 1)
103	bez	t0, 10f
104	xtrb1	t0, a2
105	st.b	t0, (a3, 2)
106	bez	t0, 10f
107	stw	a2, (a3)
108# endif	/* !__CSKYBE__ */
10910:
110	jmp	lr
111
11211:
113	subi    t0, 4
11412:
115        ld.b    a2, (a1)
116        st.b	a2, (a3)
117        bez	a2, 10b
118	addi    t0, 1
119        addi    a1, a1, 1
120        addi    a3, a3, 1
121	bnez	t0, 12b
122	jbr	1b
123ENDPROC(strcpy)