clarify the purpose of this project
[nyanglibc.git] / stdlib / qsort.shared.s
blob419691aaa7cc61407a4270a1a0431888eb3202f1
1 .text
2 #APP
3 memmove = __GI_memmove
4 memset = __GI_memset
5 memcpy = __GI_memcpy
6 #NO_APP
7 .p2align 4,,15
8 .globl _quicksort
9 .type _quicksort, @function
10 _quicksort:
11 pushq %r15
12 pushq %r14
13 pushq %r13
14 pushq %r12
15 pushq %rbp
16 pushq %rbx
17 subq $1096, %rsp
18 testq %rsi, %rsi
19 movq %rdi, 48(%rsp)
20 je .L1
21 leaq 0(,%rdx,4), %rax
22 movq %rdx, %r14
23 movq %rcx, %r12
24 movq %r8, %r13
25 movq %rax, 40(%rsp)
26 leaq -1(%rsi), %rax
27 imulq %rdx, %rax
28 addq %rdi, %rax
29 cmpq $4, %rsi
30 movq %rax, 24(%rsp)
31 jbe .L3
32 movq %rax, 8(%rsp)
33 leaq 64(%rsp), %rax
34 movq %rdx, %r15
35 movq $0, 64(%rsp)
36 movq $0, 72(%rsp)
37 negq %r15
38 movq %rax, 56(%rsp)
39 leaq 80(%rsp), %rax
40 movq %rdi, 16(%rsp)
41 movq %rdx, (%rsp)
42 movq %rax, 32(%rsp)
43 .p2align 4,,10
44 .p2align 3
45 .L22:
46 movq 16(%rsp), %rdi
47 movq 8(%rsp), %rax
48 xorl %edx, %edx
49 movq (%rsp), %rsi
50 subq %rdi, %rax
51 divq %rsi
52 movq %r13, %rdx
53 shrq %rax
54 imulq %rsi, %rax
55 movq %rdi, %rsi
56 leaq (%rdi,%rax), %rbp
57 movq %rbp, %rdi
58 call *%r12
59 testl %eax, %eax
60 js .L58
61 .L4:
62 movq %r13, %rdx
63 movq %rbp, %rsi
64 movq 8(%rsp), %rdi
65 call *%r12
66 testl %eax, %eax
67 js .L59
68 .L6:
69 movq 8(%rsp), %rax
70 movq 16(%rsp), %r14
71 addq (%rsp), %r14
72 leaq (%rax,%r15), %rbx
73 .p2align 4,,10
74 .p2align 3
75 .L9:
76 movq %r13, %rdx
77 movq %rbp, %rsi
78 movq %r14, %rdi
79 call *%r12
80 testl %eax, %eax
81 jns .L11
82 jmp .L60
83 .p2align 4,,10
84 .p2align 3
85 .L12:
86 addq %r15, %rbx
87 .L11:
88 movq %r13, %rdx
89 movq %rbx, %rsi
90 movq %rbp, %rdi
91 call *%r12
92 testl %eax, %eax
93 js .L12
94 cmpq %rbx, %r14
95 jb .L61
96 je .L62
97 .L16:
98 cmpq %rbx, %r14
99 jbe .L9
100 .L17:
101 movq %rbx, %rdx
102 subq 16(%rsp), %rdx
103 movq 8(%rsp), %rax
104 movq 40(%rsp), %rdi
105 subq %r14, %rax
106 cmpq %rdi, %rdx
107 ja .L19
108 cmpq %rax, %rdi
109 movq %r14, 16(%rsp)
110 jb .L20
111 movq 32(%rsp), %rax
112 movq -16(%rax), %rdi
113 subq $16, %rax
114 movq %rdi, 16(%rsp)
115 movq 8(%rax), %rdi
116 movq %rax, 32(%rsp)
117 movq %rdi, 8(%rsp)
118 .L20:
119 movq 56(%rsp), %rdi
120 cmpq %rdi, 32(%rsp)
121 ja .L22
122 movq (%rsp), %r14
123 .L3:
124 movq 48(%rsp), %rax
125 movq 40(%rsp), %rbx
126 movq 24(%rsp), %rsi
127 addq %rax, %rbx
128 leaq (%rax,%r14), %rbp
129 cmpq %rbx, %rsi
130 movq %rbx, %rdi
131 cmovb %rsi, %rdi
132 movq %rbp, %r15
133 cmpq %rbp, %rdi
134 jb .L26
135 movq %rbp, (%rsp)
136 movq %rdi, %rbx
137 movq %rax, %rbp
138 .p2align 4,,10
139 .p2align 3
140 .L23:
141 movq %rbp, %rsi
142 movq %r15, %rdi
143 movq %r13, %rdx
144 call *%r12
145 testl %eax, %eax
146 cmovs %r15, %rbp
147 addq %r14, %r15
148 cmpq %r15, %rbx
149 jnb .L23
150 movq 48(%rsp), %rax
151 movq %rbp, %rbx
152 movq (%rsp), %rbp
153 cmpq %rax, %rbx
154 je .L26
155 leaq (%rbx,%r14), %rsi
156 .p2align 4,,10
157 .p2align 3
158 .L27:
159 movzbl (%rbx), %edx
160 movzbl (%rax), %ecx
161 addq $1, %rbx
162 addq $1, %rax
163 cmpq %rsi, %rbx
164 movb %cl, -1(%rbx)
165 movb %dl, -1(%rax)
166 jne .L27
167 .L26:
168 movq %r14, %r15
169 leaq -1(%r14), %rax
170 leaq 0(%rbp,%r15), %rbx
171 cmpq 24(%rsp), %rbx
172 movq %rax, (%rsp)
173 ja .L1
174 .p2align 4,,10
175 .p2align 3
176 .L34:
177 movq %r15, %r14
178 negq %r14
179 jmp .L28
180 .p2align 4,,10
181 .p2align 3
182 .L29:
183 addq %r14, %rbp
184 .L28:
185 movq %r13, %rdx
186 movq %rbp, %rsi
187 movq %rbx, %rdi
188 call *%r12
189 testl %eax, %eax
190 js .L29
191 leaq 0(%rbp,%r15), %rsi
192 cmpq %rsi, %rbx
193 je .L30
194 movq (%rsp), %rdi
195 addq %rbx, %rdi
196 jc .L30
197 leaq -1(%rbx), %r9
198 movq %r9, %r11
199 .p2align 4,,10
200 .p2align 3
201 .L33:
202 cmpq %rsi, %r9
203 movzbl (%rdi), %r10d
204 movq %r9, %rax
205 jb .L43
206 movq %rdi, %rdx
207 jmp .L32
208 .p2align 4,,10
209 .p2align 3
210 .L44:
211 movq %rcx, %rax
212 .L32:
213 movzbl (%rax), %ecx
214 movb %cl, (%rdx)
215 leaq (%rax,%r14), %rcx
216 subq %r15, %rdx
217 cmpq %rcx, %rsi
218 jbe .L44
219 subq $1, %rdi
220 subq $1, %r9
221 movb %r10b, (%rax)
222 cmpq %r11, %rdi
223 jne .L33
224 .L30:
225 movq %rbx, %rbp
226 leaq 0(%rbp,%r15), %rbx
227 cmpq 24(%rsp), %rbx
228 jbe .L34
229 .L1:
230 addq $1096, %rsp
231 popq %rbx
232 popq %rbp
233 popq %r12
234 popq %r13
235 popq %r14
236 popq %r15
238 .p2align 4,,10
239 .p2align 3
240 .L43:
241 movq %rdi, %rax
242 subq $1, %rdi
243 subq $1, %r9
244 cmpq %r11, %rdi
245 movb %r10b, (%rax)
246 jne .L33
247 jmp .L30
248 .p2align 4,,10
249 .p2align 3
250 .L60:
251 addq (%rsp), %r14
252 jmp .L9
253 .p2align 4,,10
254 .p2align 3
255 .L61:
256 movq (%rsp), %rax
257 movq %rbx, %rdx
258 leaq (%r14,%rax), %rdi
259 movq %r14, %rax
260 .p2align 4,,10
261 .p2align 3
262 .L14:
263 movzbl (%rax), %ecx
264 movzbl (%rdx), %esi
265 addq $1, %rax
266 addq $1, %rdx
267 cmpq %rdi, %rax
268 movb %sil, -1(%rax)
269 movb %cl, -1(%rdx)
270 jne .L14
271 cmpq %rbp, %r14
272 je .L36
273 cmpq %rbp, %rbx
274 cmove %r14, %rbp
275 .L15:
276 addq %r15, %rbx
277 movq %rdi, %r14
278 jmp .L16
279 .p2align 4,,10
280 .p2align 3
281 .L36:
282 movq %rbx, %rbp
283 jmp .L15
284 .L19:
285 cmpq %rax, 40(%rsp)
286 jnb .L39
287 movq 32(%rsp), %rdi
288 cmpq %rax, %rdx
289 leaq 16(%rdi), %rcx
290 jle .L21
291 movq %rdi, %rax
292 movq 16(%rsp), %rdi
293 movq %rcx, 32(%rsp)
294 movq %rbx, 8(%rax)
295 movq %r14, 16(%rsp)
296 movq %rdi, (%rax)
297 jmp .L20
298 .L62:
299 addq (%rsp), %r14
300 addq %r15, %rbx
301 jmp .L17
302 .L39:
303 movq %rbx, 8(%rsp)
304 jmp .L20
305 .L59:
306 movq (%rsp), %rax
307 movq 8(%rsp), %rdx
308 leaq 0(%rbp,%rax), %rbx
309 movq %rbp, %rax
310 .p2align 4,,10
311 .p2align 3
312 .L7:
313 movzbl (%rax), %ecx
314 movzbl (%rdx), %esi
315 addq $1, %rax
316 addq $1, %rdx
317 cmpq %rbx, %rax
318 movb %sil, -1(%rax)
319 movb %cl, -1(%rdx)
320 jne .L7
321 movq %r13, %rdx
322 movq 16(%rsp), %rsi
323 movq %rbp, %rdi
324 call *%r12
325 testl %eax, %eax
326 jns .L6
327 movq 16(%rsp), %rdx
328 movq %rbp, %rax
329 .L8:
330 movzbl (%rax), %ecx
331 movzbl (%rdx), %esi
332 addq $1, %rax
333 addq $1, %rdx
334 cmpq %rbx, %rax
335 movb %sil, -1(%rax)
336 movb %cl, -1(%rdx)
337 jne .L8
338 jmp .L6
339 .L58:
340 movq (%rsp), %rax
341 movq 16(%rsp), %rdx
342 leaq 0(%rbp,%rax), %rdi
343 movq %rbp, %rax
344 .p2align 4,,10
345 .p2align 3
346 .L5:
347 movzbl (%rax), %ecx
348 movzbl (%rdx), %esi
349 addq $1, %rax
350 addq $1, %rdx
351 cmpq %rdi, %rax
352 movb %sil, -1(%rax)
353 movb %cl, -1(%rdx)
354 jne .L5
355 jmp .L4
356 .L21:
357 movq 32(%rsp), %rax
358 movq 8(%rsp), %rdi
359 movq %rcx, 32(%rsp)
360 movq %rbx, 8(%rsp)
361 movq %r14, (%rax)
362 movq %rdi, 8(%rax)
363 jmp .L20
364 .size _quicksort, .-_quicksort