regex: updates from neatvi
[neatlibc.git] / arm / string.s
blobf45d4ad8da34aab1fb9e1431f9ee1e02ed61a204
2 .global memcpy
3 memcpy:
4 mov r12, r0
5 .loop:
6 subs r2, r2, #1
7 bmi .ret
8 ldrb r3, [r1], #1
9 strb r3, [r0], #1
10 b .loop
11 .ret:
12 mov r0, r12
13 mov pc, lr
15 .global memset
16 memset:
17 mov r12, r0
18 .loop:
19 subs r2, r2, #1
20 bmi .ret
21 strb r1, [r0], #1
22 b .loop
23 .ret:
24 mov r0, r12
25 mov pc, lr
27 .global memmove
28 memmove:
29 mov r12, r0
30 cmp r0, r1
31 ble .fw
32 add r3, r1, r2
33 cmp r0, r3
34 bgt .fw
36 @ copying the memory in reverse order
37 add r0, r0, r2
38 add r1, r1, r2
39 .bw:
40 subs r2, r2, #1
41 bmi .ret
42 ldrb r3, [r1, #-1]!
43 strb r3, [r0, #-1]!
44 b .bw
45 .fw:
46 subs r2, r2, #1
47 bmi .ret
48 ldrb r3, [r1], #1
49 strb r3, [r0], #1
50 b .fw
51 .ret:
52 mov r0, r12
53 mov pc, lr
55 .global memchr
56 memchr:
57 subs r2, r2, #1
58 bmi .failed
59 ldrb r3, [r0], #1
60 cmp r3, r1
61 bne memchr
62 sub r0, r0, #1
63 b .ret
64 .failed:
65 mov r0, #0
66 .ret:
67 mov pc, lr
69 .global memrchr
70 memrchr:
71 mov r12, #0
72 .loop:
73 subs r2, r2, #1
74 bmi .ret
75 ldrb r3, [r0], #1
76 cmp r3, r1
77 subeq r12, r0, #1
78 b .loop
79 .ret:
80 mov r0, r12
81 mov pc, lr
83 .global memcmp
84 memcmp:
85 subs r2, r2, #1
86 bmi .match
87 ldrb r3, [r0], #1
88 ldrb r12, [r1], #1
89 subs r3, r3, r12
90 movne r0, r3
91 bne .ret
92 b memcmp
93 .match:
94 mov r0, #0
95 .ret:
96 mov pc, lr
98 .global strlen
99 strlen:
100 mov r2, r0
101 .loop:
102 ldrb r1, [r0], #1
103 tst r1, r1
104 bne .loop
105 sub r0, r0, r2
106 sub r0, r0, #1
107 mov pc, lr
109 .global strchr
110 strchr:
111 ldrb r2, [r0], #1
112 cmp r1, r2
113 subeq r0, r0, #1
114 beq .ret
115 tst r2, r2
116 bne strchr
117 mov r0, #0
118 .ret:
119 mov pc, lr
121 .global strrchr
122 strrchr:
123 mov r3, #0
124 .loop:
125 ldrb r2, [r0], #1
126 cmp r1, r2
127 subeq r3, r0, #1
128 tst r2, r2
129 bne .loop
130 .ret:
131 mov r0, r3
132 mov pc, lr
134 .global strcmp
135 strcmp:
136 ldrb r2, [r0], #1
137 ldrb r3, [r1], #1
138 cmp r2, #1
139 cmpcs r2, r3
140 beq strcmp
141 sub r0, r2, r3
142 mov pc, lr
144 .global strcpy
145 strcpy:
146 mov r3, r0
147 .loop:
148 ldrb r2, [r1], #1
149 strb r2, [r0], #1
150 tst r2, r2
151 bne .loop
152 mov r0, r3
153 .ret:
154 mov pc, lr
156 .global strncmp
157 strncmp:
158 mov r12, r2
159 .loop:
160 subs r12, r12, #1
161 movmi r0, #0
162 bmi .ret
163 ldrb r2, [r0], #1
164 ldrb r3, [r1], #1
165 cmp r2, #1
166 cmpcs r2, r3
167 beq .loop
168 sub r0, r2, r3
169 .ret:
170 mov pc, lr