-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmerge.64s
More file actions
402 lines (397 loc) · 5.75 KB
/
merge.64s
File metadata and controls
402 lines (397 loc) · 5.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
.Ltext0:
merge:
pushq %r12
pushq %rbp
pushq %rbx
movl $1, %eax
movl $0, %r8d
movl $0, %r9d
jmp .L2
.L5:
movq (%rdi,%r9,8), %r11
movq (%rsi,%r8,8), %r10
cmpq %r10, %r11
jge .L3
addq $1, %r9
movq %r11, -8(%rdx,%rax,8)
jmp .L4
.L3:
addq $1, %r8
movq %r10, -8(%rdx,%rax,8)
.L4:
addq $1, %rax
.L2:
leaq -1(%rax), %r10
cmpq %rcx, %r8
jge .L12
cmpq %rcx, %r9
jl .L5
.L12:
cmpq %r9, %rcx
jle .L7
movq %r9, %rbp
movq %rcx, %rbx
subq %r9, %rbx
leaq (%rdi,%r9,8), %r11
movq %r10, %r12
leaq (%rdx,%r10,8), %r9
movl $0, %eax
.L9:
movq (%r11,%rax,8), %rdi
movq %rdi, (%r9,%rax,8)
addq $1, %rax
cmpq %rbx, %rax
jne .L9
leaq (%r12,%rcx), %r10
subq %rbp, %r10
.L7:
cmpq %r8, %rcx
jle .L1
subq %r8, %rcx
leaq (%rsi,%r8,8), %rdi
leaq (%rdx,%r10,8), %rsi
movl $0, %eax
.L11:
movq (%rdi,%rax,8), %rdx
movq %rdx, (%rsi,%rax,8)
addq $1, %rax
cmpq %rcx, %rax
jne .L11
.L1:
popq %rbx
popq %rbp
popq %r12
ret
merge2:
testq %rcx, %rcx
jle .L26
pushq %r12
pushq %rbp
pushq %rbx
movl $0, %r10d
movl $0, %r8d
movl $0, %eax
movl $1, %ebp
.L18:
movq (%rdi,%rax,8), %r11
movq (%rsi,%r8,8), %rbx
cmpq %rbx, %r11
setl %r9b
movzbl %r9b, %r9d
addq $1, %r10
testq %r9, %r9
cmove %rbx, %r11
movq %r11, -8(%rdx,%r10,8)
addq %r9, %rax
movq %rbp, %rbx
subq %r9, %rbx
addq %rbx, %r8
cmpq %r8, %rcx
jle .L17
cmpq %rax, %rcx
jg .L18
.L17:
cmpq %rax, %rcx
jle .L19
movq %rax, %rbp
movq %rcx, %rbx
subq %rax, %rbx
leaq (%rdi,%rax,8), %r11
movq %r10, %r12
leaq (%rdx,%r10,8), %r9
movl $0, %eax
.L21:
movq (%r11,%rax,8), %rdi
movq %rdi, (%r9,%rax,8)
addq $1, %rax
cmpq %rbx, %rax
jne .L21
leaq (%r12,%rcx), %r10
subq %rbp, %r10
.L19:
cmpq %rcx, %r8
jge .L14
subq %r8, %rcx
leaq (%rsi,%r8,8), %rdi
leaq (%rdx,%r10,8), %rsi
movl $0, %eax
.L22:
movq (%rdi,%rax,8), %rdx
movq %rdx, (%rsi,%rax,8)
addq $1, %rax
cmpq %rcx, %rax
jne .L22
.L14:
popq %rbx
popq %rbp
popq %r12
.L26:
rep; ret
show:
pushq %r12
pushq %rbp
pushq %rbx
movq %rsi, %r12
movq %rdx, %rbp
movq %rdi, %rdx
movl $.LC0, %esi
movl $1, %edi
movl $0, %eax
call __printf_chk
testq %rbp, %rbp
jle .L28
movl $0, %ebx
.L29:
movq (%r12,%rbx,8), %rdx
movl $.LC1, %esi
movl $1, %edi
movl $0, %eax
call __printf_chk
addq $1, %rbx
cmpq %rbp, %rbx
jne .L29
.L28:
movl $10, %edi
call putchar
popq %rbx
popq %rbp
popq %r12
ret
init:
pushq %r14
pushq %r13
pushq %r12
pushq %rbp
pushq %rbx
movl %edi, %r13d
call srandom
movl $0, %eax
.L33:
movq %rax, d(,%rax,8)
addq $1, %rax
cmpq $16384, %rax
jne .L33
movl $1, %r12d
movw $0, %ax
movl $0, %ebp
movl $0, %ebx
movl $1, %r14d
.L39:
testl %r13d, %r13d
jne .L34
movq %r14, %rsi
subq %rax, %rsi
movq %rsi, %rax
jmp .L35
.L34:
call random
andl $1, %eax
.L35:
testq %rax, %rax
je .L36
movq %r12, %rdx
movq d-8(,%r12,8), %rcx
movq %rcx, b1(,%rbx,8)
movq %rcx, a1(,%rbx,8)
addq $1, %rbx
jmp .L37
.L36:
movq %r12, %rdx
movq d-8(,%r12,8), %rcx
movq %rcx, b2(,%rbp,8)
movq %rcx, a2(,%rbp,8)
addq $1, %rbp
.L37:
addq $1, %r12
cmpq $8191, %rbp
jg .L38
cmpq $8191, %rbx
jle .L39
.L38:
movq %rbp, %rcx
cmpq $8191, %rbx
jg .L40
movq %rbx, %rsi
movq %rdx, %rdi
subq %rbx, %rdx
salq $3, %rdx
.L42:
movq d(%rdx,%rbx,8), %rax
movq %rax, b1(,%rbx,8)
movq %rax, a1(,%rbx,8)
addq $1, %rbx
cmpq $8192, %rbx
jne .L42
leaq 8192(%rdi), %rdx
subq %rsi, %rdx
.L40:
cmpq $8191, %rcx
jg .L31
subq %rcx, %rdx
salq $3, %rdx
.L44:
movq d(%rdx,%rbp,8), %rax
movq %rax, b2(,%rbp,8)
movq %rax, a2(,%rbp,8)
addq $1, %rbp
cmpq $8192, %rbp
jne .L44
.L31:
popq %rbx
popq %rbp
popq %r12
popq %r13
popq %r14
ret
run:
pushq %r14
pushq %r13
pushq %r12
pushq %rbp
pushq %rbx
subq $16, %rsp
movq %rsi, %r12
testq %rsi, %rsi
jle .L46
movq %rdi, %rbp
movl %edx, %r13d
leaq (%rdi,%rdi), %r14
movl $0, %ebx
.L49:
movl %r13d, %edi
call init
testq %rbx, %rbx
jne .L48
cmpq $10, %rbp
jg .L48
movq %rbp, %rdx
movl $a1, %esi
movl $.LC2, %edi
call show
movq %rbp, %rdx
movl $a2, %esi
movl $.LC3, %edi
call show
movl $0, %eax
call start_counter
movq %rbp, %rcx
movl $d, %edx
movl $a2, %esi
movl $a1, %edi
call merge
movq %r14, %rdx
movl $d, %esi
movl $.LC4, %edi
call show
movl $0, %eax
call get_counter
vmovsd %xmm0, (%rsp)
movl $0, %eax
call start_counter
movq %rbp, %rcx
movl $d, %edx
movl $b2, %esi
movl $b1, %edi
call merge2
movl $0, %eax
call get_counter
vmovsd %xmm0, 8(%rsp)
movq %r14, %rdx
movl $d, %esi
movl $.LC5, %edi
call show
.L50:
vcvtsi2sdq %r14, %xmm1, %xmm1
vmovsd (%rsp), %xmm2
vdivsd %xmm1, %xmm2, %xmm0
vmovsd 8(%rsp), %xmm3
vdivsd %xmm1, %xmm3, %xmm1
movq %rbp, %rdx
movl $.LC6, %esi
movl $1, %edi
movl $2, %eax
call __printf_chk
addq $1, %rbx
cmpq %r12, %rbx
jne .L49
jmp .L46
.L48:
movl $0, %eax
call start_counter
movq %rbp, %rcx
movl $d, %edx
movl $a2, %esi
movl $a1, %edi
call merge
movl $0, %eax
call get_counter
vmovsd %xmm0, (%rsp)
movl $0, %eax
call start_counter
movq %rbp, %rcx
movl $d, %edx
movl $b2, %esi
movl $b1, %edi
call merge2
movl $0, %eax
call get_counter
vmovsd %xmm0, 8(%rsp)
jmp .L50
.L46:
addq $16, %rsp
popq %rbx
popq %rbp
popq %r12
popq %r13
popq %r14
ret
main:
pushq %r13
pushq %r12
pushq %rbp
pushq %rbx
subq $8, %rsp
movl %edi, %ebx
movq %rsi, %r13
movl $8192, %ebp
cmpl $1, %edi
jle .L53
movq 8(%rsi), %rdi
movl $10, %edx
movl $0, %esi
call strtol
movl %eax, %ebp
.L53:
movl $5, %r12d
cmpl $2, %ebx
jle .L54
movq 16(%r13), %rdi
movl $10, %edx
movl $0, %esi
call strtol
movl %eax, %r12d
.L54:
movl $1, %edx
cmpl $3, %ebx
jle .L55
movq 24(%r13), %rdi
movb $10, %dl
movl $0, %esi
call strtol
movl %eax, %edx
.L55:
movslq %r12d, %rsi
movslq %ebp, %rdi
call run
movl $0, %eax
addq $8, %rsp
popq %rbx
popq %rbp
popq %r12
popq %r13
ret
.Letext0:
.Ldebug_info0:
.Ldebug_abbrev0:
.Ldebug_loc0:
.Ldebug_line0: