clarify the purpose of this project
[nyanglibc.git] / string / memcmp.shared.s
blob51bf636aec2192b3941f2826938f5bea026b620a
1 .text
2 .globl memcmp
3 .type memcmp,@function
4 .align 1<<4
5 memcmp:
6 test %rdx, %rdx
7 jz .Lfinz
8 cmpq $1, %rdx
9 jbe .Lfinr1b
10 subq %rdi, %rsi
11 movq %rdx, %r10
12 cmpq $32, %r10
13 jae .Lgt32
14 .Lsmall:
15 testq $1, %r10
16 jz .Ls2b
17 movzbl (%rdi), %eax
18 movzbl (%rdi, %rsi), %edx
19 subq $1, %r10
20 je .Lfinz1
21 addq $1, %rdi
22 subl %edx, %eax
23 jnz .Lexit
24 .Ls2b:
25 testq $2, %r10
26 jz .Ls4b
27 movzwl (%rdi), %eax
28 movzwl (%rdi, %rsi), %edx
29 subq $2, %r10
30 je .Lfin2_7
31 addq $2, %rdi
32 cmpl %edx, %eax
33 jnz .Lfin2_7
34 .Ls4b:
35 testq $4, %r10
36 jz .Ls8b
37 movl (%rdi), %eax
38 movl (%rdi, %rsi), %edx
39 subq $4, %r10
40 je .Lfin2_7
41 addq $4, %rdi
42 cmpl %edx, %eax
43 jnz .Lfin2_7
44 .Ls8b:
45 testq $8, %r10
46 jz .Ls16b
47 movq (%rdi), %rax
48 movq (%rdi, %rsi), %rdx
49 subq $8, %r10
50 je .Lfin2_7
51 addq $8, %rdi
52 cmpq %rdx, %rax
53 jnz .Lfin2_7
54 .Ls16b:
55 movdqu (%rdi), %xmm1
56 movdqu (%rdi, %rsi), %xmm0
57 pcmpeqb %xmm0, %xmm1
58 pmovmskb %xmm1, %edx
59 xorl %eax, %eax
60 subl $0xffff, %edx
61 jz .Lfinz
62 bsfl %edx, %ecx
63 leaq (%rdi, %rcx), %rcx
64 movzbl (%rcx), %eax
65 movzbl (%rsi, %rcx), %edx
66 jmp .Lfinz1
67 .p2align 4,, 4
68 .Lfinr1b:
69 movzbl (%rdi), %eax
70 movzbl (%rsi), %edx
71 .Lfinz1:
72 subl %edx, %eax
73 .Lexit:
74 ret
75 .p2align 4,, 4
76 .Lfin2_7:
77 cmpq %rdx, %rax
78 jz .Lfinz
79 movq %rax, %r11
80 subq %rdx, %r11
81 bsfq %r11, %rcx
82 sarq $3, %rcx
83 salq $3, %rcx
84 sarq %cl, %rax
85 movzbl %al, %eax
86 sarq %cl, %rdx
87 movzbl %dl, %edx
88 subl %edx, %eax
89 ret
90 .p2align 4,, 4
91 .Lfinz:
92 xorl %eax, %eax
93 ret
94 .p2align 4,, 4
95 .Lgt32:
96 movq %rdx, %r11
97 addq %rdi, %r11
98 movq %rdi, %r8
99 andq $15, %r8
100 jz .L16am
101 movdqu (%rdi), %xmm1
102 movdqu (%rdi, %rsi), %xmm0
103 pcmpeqb %xmm0, %xmm1
104 pmovmskb %xmm1, %edx
105 subl $0xffff, %edx
106 jnz .Lneq
107 neg %r8
108 leaq 16(%rdi, %r8), %rdi
109 .L16am:
110 testq $15, %rsi
111 jz .LATR
112 testq $16, %rdi
113 jz .LA32
114 movdqu (%rdi, %rsi), %xmm0
115 pcmpeqb (%rdi), %xmm0
116 pmovmskb %xmm0, %edx
117 subl $0xffff, %edx
118 jnz .Lneq
119 addq $16, %rdi
120 .LA32:
121 movq %r11, %r10
122 andq $-32, %r10
123 cmpq %r10, %rdi
124 jae .Lmt16
125 testq $32, %rdi
126 jz .LA64
127 movdqu (%rdi,%rsi), %xmm0
128 pcmpeqb (%rdi), %xmm0
129 pmovmskb %xmm0, %edx
130 subl $0xffff, %edx
131 jnz .Lneq
132 addq $16, %rdi
133 movdqu (%rdi,%rsi), %xmm0
134 pcmpeqb (%rdi), %xmm0
135 pmovmskb %xmm0, %edx
136 subl $0xffff, %edx
137 jnz .Lneq
138 addq $16, %rdi
139 .LA64:
140 movq %r11, %r10
141 andq $-64, %r10
142 cmpq %r10, %rdi
143 jae .Lmt32
144 .LA64main:
145 movdqu (%rdi,%rsi), %xmm0
146 pcmpeqb (%rdi), %xmm0
147 pmovmskb %xmm0, %edx
148 subl $0xffff, %edx
149 jnz .Lneq
150 addq $16, %rdi
151 movdqu (%rdi,%rsi), %xmm0
152 pcmpeqb (%rdi), %xmm0
153 pmovmskb %xmm0, %edx
154 subl $0xffff, %edx
155 jnz .Lneq
156 addq $16, %rdi
157 movdqu (%rdi,%rsi), %xmm0
158 pcmpeqb (%rdi), %xmm0
159 pmovmskb %xmm0, %edx
160 subl $0xffff, %edx
161 jnz .Lneq
162 addq $16, %rdi
163 movdqu (%rdi,%rsi), %xmm0
164 pcmpeqb (%rdi), %xmm0
165 pmovmskb %xmm0, %edx
166 subl $0xffff, %edx
167 jnz .Lneq
168 addq $16, %rdi
169 cmpq %rdi, %r10
170 jne .LA64main
171 .Lmt32:
172 movq %r11, %r10
173 andq $-32, %r10
174 cmpq %r10, %rdi
175 jae .Lmt16
176 .LA32main:
177 movdqu (%rdi,%rsi), %xmm0
178 pcmpeqb (%rdi), %xmm0
179 pmovmskb %xmm0, %edx
180 subl $0xffff, %edx
181 jnz .Lneq
182 addq $16, %rdi
183 movdqu (%rdi,%rsi), %xmm0
184 pcmpeqb (%rdi), %xmm0
185 pmovmskb %xmm0, %edx
186 subl $0xffff, %edx
187 jnz .Lneq
188 addq $16, %rdi
189 cmpq %rdi, %r10
190 jne .LA32main
191 .Lmt16:
192 subq %rdi, %r11
193 je .Lfinz
194 movq %r11, %r10
195 jmp .Lsmall
196 .p2align 4,, 4
197 .Lneq:
198 bsfl %edx, %ecx
199 movzbl (%rdi, %rcx), %eax
200 addq %rdi, %rsi
201 movzbl (%rsi,%rcx), %edx
202 jmp .Lfinz1
203 .p2align 4,, 4
204 .LATR:
205 movq %r11, %r10
206 andq $-32, %r10
207 cmpq %r10, %rdi
208 jae .Lmt16
209 testq $16, %rdi
210 jz .LATR32
211 movdqa (%rdi,%rsi), %xmm0
212 pcmpeqb (%rdi), %xmm0
213 pmovmskb %xmm0, %edx
214 subl $0xffff, %edx
215 jnz .Lneq
216 addq $16, %rdi
217 cmpq %rdi, %r10
218 je .Lmt16
219 .LATR32:
220 movq %r11, %r10
221 andq $-64, %r10
222 testq $32, %rdi
223 jz .LATR64
224 movdqa (%rdi,%rsi), %xmm0
225 pcmpeqb (%rdi), %xmm0
226 pmovmskb %xmm0, %edx
227 subl $0xffff, %edx
228 jnz .Lneq
229 addq $16, %rdi
230 movdqa (%rdi,%rsi), %xmm0
231 pcmpeqb (%rdi), %xmm0
232 pmovmskb %xmm0, %edx
233 subl $0xffff, %edx
234 jnz .Lneq
235 addq $16, %rdi
236 .LATR64:
237 cmpq %rdi, %r10
238 je .Lmt32
239 .LATR64main:
240 movdqa (%rdi,%rsi), %xmm0
241 pcmpeqb (%rdi), %xmm0
242 pmovmskb %xmm0, %edx
243 subl $0xffff, %edx
244 jnz .Lneq
245 addq $16, %rdi
246 movdqa (%rdi,%rsi), %xmm0
247 pcmpeqb (%rdi), %xmm0
248 pmovmskb %xmm0, %edx
249 subl $0xffff, %edx
250 jnz .Lneq
251 addq $16, %rdi
252 movdqa (%rdi,%rsi), %xmm0
253 pcmpeqb (%rdi), %xmm0
254 pmovmskb %xmm0, %edx
255 subl $0xffff, %edx
256 jnz .Lneq
257 addq $16, %rdi
258 movdqa (%rdi,%rsi), %xmm0
259 pcmpeqb (%rdi), %xmm0
260 pmovmskb %xmm0, %edx
261 subl $0xffff, %edx
262 jnz .Lneq
263 addq $16, %rdi
264 cmpq %rdi, %r10
265 jne .LATR64main
266 movq %r11, %r10
267 andq $-32, %r10
268 cmpq %r10, %rdi
269 jae .Lmt16
270 .LATR32res:
271 movdqa (%rdi,%rsi), %xmm0
272 pcmpeqb (%rdi), %xmm0
273 pmovmskb %xmm0, %edx
274 subl $0xffff, %edx
275 jnz .Lneq
276 addq $16, %rdi
277 movdqa (%rdi,%rsi), %xmm0
278 pcmpeqb (%rdi), %xmm0
279 pmovmskb %xmm0, %edx
280 subl $0xffff, %edx
281 jnz .Lneq
282 addq $16, %rdi
283 cmpq %r10, %rdi
284 jne .LATR32res
285 subq %rdi, %r11
286 je .Lfinz
287 movq %r11, %r10
288 jmp .Lsmall
289 .p2align 4,, 4
290 .size memcmp,.-memcmp
291 .weak bcmp
292 bcmp = memcmp
293 .globl __GI_memcmp
294 .set __GI_memcmp,memcmp