1/* The assembly function for string copy. C-SKY ABIV2 version.
2 Copyright (C) 2018-2024 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
4
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
9
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library. If not, see
17 <https://www.gnu.org/licenses/>. */
18
19#include <sysdep.h>
20
21ENTRY (strcpy)
22 mov a3, a0
23 /* Check if the src addr is aligned. */
24 andi t0, a1, 3
25 bnez t0, 11f
261:
27 /* Check if all the bytes in the word are not zero. */
28 ldw a2, (a1)
29 tstnbz a2
30 bf 9f
31 stw a2, (a3)
32
33 ldw a2, (a1, 4)
34 tstnbz a2
35 bf 2f
36 stw a2, (a3, 4)
37
38 ldw a2, (a1, 8)
39 tstnbz a2
40 bf 3f
41 stw a2, (a3, 8)
42
43 ldw a2, (a1, 12)
44 tstnbz a2
45 bf 4f
46 stw a2, (a3, 12)
47
48 ldw a2, (a1, 16)
49 tstnbz a2
50 bf 5f
51 stw a2, (a3, 16)
52
53 ldw a2, (a1, 20)
54 tstnbz a2
55 bf 6f
56 stw a2, (a3, 20)
57
58 ldw a2, (a1, 24)
59 tstnbz a2
60 bf 7f
61 stw a2, (a3, 24)
62
63 ldw a2, (a1, 28)
64 tstnbz a2
65 bf 8f
66 stw a2, (a3, 28)
67
68 addi a3, 32
69 addi a1, 32
70 br 1b
71
722:
73 addi a3, 4
74 br 9f
75
763:
77 addi a3, 8
78 br 9f
79
804:
81 addi a3, 12
82 br 9f
83
845:
85 addi a3, 16
86 br 9f
87
886:
89 addi a3, 20
90 br 9f
91
927:
93 addi a3, 24
94 br 9f
95
968:
97 addi a3, 28
989:
99 xtrb3 t0, a2
100 st.b t0, (a3)
101 bez t0, 10f
102 xtrb2 t0, a2
103 st.b t0, (a3, 1)
104 bez t0, 10f
105 xtrb1 t0, a2
106 st.b t0, (a3, 2)
107 bez t0, 10f
108 stw a2, (a3)
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 br 1b
123
124END (strcpy)
125
126libc_hidden_def (strcpy)
127.weak strcpy
128

source code of glibc/sysdeps/csky/abiv2/strcpy.S