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