1
2
3
4 #include <linux/linkage.h>
5 #include "sysdep.h"
6
7 ENTRY(strcpy)
8 mov a3, a0
9
10 andi t0, a1, 3
11 bnez t0, 11f
12 1:
13
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
59 2:
60 addi a3, 4
61 br 9f
62
63 3:
64 addi a3, 8
65 br 9f
66
67 4:
68 addi a3, 12
69 br 9f
70
71 5:
72 addi a3, 16
73 br 9f
74
75 6:
76 addi a3, 20
77 br 9f
78
79 7:
80 addi a3, 24
81 br 9f
82
83 8:
84 addi a3, 28
85 9:
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
109 10:
110 jmp lr
111
112 11:
113 subi t0, 4
114 12:
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
123 ENDPROC(strcpy)