// File: /workspace/github_cpp_makefile_star2_O3/attractivechaos[P]udb2/tommyds/./tommylist.c
// Function: tommy_list_sort
void tommy_list_sort(tommy_list* list, tommy_compare_func* cmp)
{
	tommy_chain chain;
	tommy_node* head;

	if (tommy_list_empty(list))
		return;

	head = tommy_list_head(list);

	/* create a chain from the list */
	chain.head = head;
	chain.tail = head->prev;

	tommy_chain_mergesort(&chain, cmp);

	/* restore the list */
	tommy_list_set(list, chain.head, chain.tail);
}

// Assembly:
movq (%rdi), %rcx
testq %rcx, %rcx
je 0x2512
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x268, %rsp            # imm = 0x268
movq %rsi, %r14
movq %rdi, 0x38(%rsp)
movq 0x8(%rcx), %rdx
xorl %r15d, %r15d
leaq 0x250(%rsp), %r12
movq %rsi, %rbp
movq %rdx, 0x40(%rsp)
movq %rcx, 0x250(%rsp)
movq %rcx, 0x258(%rsp)
movq (%rcx), %rsi
testb $0x1, %r15b
jne 0x2227
xorl %eax, %eax
movq %r12, %rdi
jmp 0x236a
movq %rsi, 0x48(%rsp)
movq %rcx, 0x30(%rsp)
xorl %ecx, %ecx
movq %r15, 0x18(%rsp)
movl %r15d, %ebx
movl %ecx, 0x10(%rsp)
movl %ecx, %eax
shlq $0x4, %rax
leaq (%rsp,%rax), %r13
addq $0x50, %r13
leaq 0x58(%rsp,%rax), %rax
movq %rax, 0x28(%rsp)
movq (%rax), %r15
movq 0x10(%r15), %rdi
movq (%r12), %rax
movq 0x10(%rax), %rsi
callq *%r14
testl %eax, %eax
movq %r13, 0x8(%rsp)
jle 0x22fe
movq %r14, %rcx
movl %ebx, 0x20(%rsp)
leaq 0x8(%r12), %r14
movq 0x8(%r12), %rax
movq 0x10(%rax), %rdi
movq %r13, %rbx
movq (%r13), %r13
movq 0x10(%r13), %rsi
callq *%rcx
testl %eax, %eax
js 0x2314
movq (%r12), %rax
movl 0x20(%rsp), %ebx
movq %rax, %r12
movq 0x10(%r13), %rdi
movq 0x10(%r12), %rsi
callq *%rbp
testl %eax, %eax
jg 0x22c1
cmpq %r15, %r13
je 0x22f0
movq (%r13), %r13
jmp 0x22a7
movq (%r12), %rax
movq 0x8(%rsp), %rcx
cmpq (%rcx), %r13
je 0x22de
movq 0x8(%r13), %rcx
movq %r12, 0x8(%r13)
movq %rcx, 0x8(%r12)
jmp 0x22e2
movq %r12, 0x8(%r13)
movq %r12, (%rcx)
movq %r13, (%r12)
cmpq (%r14), %r12
jne 0x22a4
jmp 0x232c
movq %r13, 0x8(%r12)
movq %r12, (%r13)
movq %r14, %r12
jmp 0x230d
movq (%r12), %rax
movq %r15, 0x8(%rax)
movq %rax, (%r15)
addq $0x8, %r12
movq 0x28(%rsp), %rcx
jmp 0x2325
movq (%r14), %rax
movq %rax, 0x8(%r13)
movq %r13, (%rax)
movq %rbx, %rcx
movl 0x20(%rsp), %ebx
movq (%r12), %rax
movq %rax, (%rcx)
movl %ebx, %eax
shrl %eax
movl 0x10(%rsp), %ecx
incl %ecx
movq 0x8(%rsp), %rdi
movq %rdi, %r12
testb $0x2, %bl
movl %eax, %ebx
movq %rbp, %r14
jne 0x223b
movl %ecx, %eax
movq 0x18(%rsp), %r15
movq 0x30(%rsp), %rcx
movq 0x40(%rsp), %rdx
leaq 0x250(%rsp), %r12
movq 0x48(%rsp), %rsi
shlq $0x4, %rax
movups (%rdi), %xmm0
movups %xmm0, 0x50(%rsp,%rax)
incl %r15d
cmpq %rdx, %rcx
movq %rsi, %rcx
jne 0x2204
bsfl %r15d, %ecx
shrl %cl, %r15d
cmpl $0x1, %r15d
jne 0x2399
movl %ecx, %ecx
jmp 0x24e0
movl %ecx, %eax
movl %ecx, %edx
leal 0x1(%rax), %ecx
movq %rcx, %rax
shlq $0x4, %rax
shlq $0x4, %rdx
addq %rsp, %rax
addq $0x50, %rax
leaq (%rsp,%rdx), %r13
addq $0x50, %r13
testb $0x2, %r15b
jne 0x23cd
movaps (%r13), %xmm0
movaps %xmm0, (%rax)
jmp 0x24d3
movq %rcx, 0x8(%rsp)
leaq 0x8(%rax), %r12
movq 0x8(%rax), %rbp
movq 0x10(%rbp), %rdi
movq (%r13), %rbx
movq 0x10(%rbx), %rsi
movq %rax, 0x10(%rsp)
callq *%r14
testl %eax, %eax
jle 0x24ab
movq %rbx, 0x28(%rsp)
movq %r12, 0x20(%rsp)
movq 0x8(%r13), %rax
movq %rax, %rbx
movq 0x10(%rax), %rdi
movq 0x10(%rsp), %rax
movq (%rax), %r12
movq 0x10(%r12), %rsi
callq *%r14
testl %eax, %eax
js 0x24b9
addq $0x8, %r13
movq 0x28(%rsp), %rdx
movq %r15, 0x18(%rsp)
movq %rbx, 0x30(%rsp)
movq %rdx, %r15
movq 0x10(%r12), %rdi
movq 0x10(%r15), %rsi
callq *%r14
testl %eax, %eax
jg 0x2454
cmpq %rbp, %r12
je 0x2492
movq (%r12), %r12
jmp 0x2439
movq (%r15), %rdx
movq 0x10(%rsp), %rax
cmpq (%rax), %r12
je 0x2471
movq 0x8(%r12), %rax
movq %r15, 0x8(%r12)
movq %rax, 0x8(%r15)
jmp 0x2476
movq %r15, 0x8(%r12)
movq 0x8(%rsp), %rcx
movq %r15, (%rax)
movq %r12, (%r15)
movq 0x30(%rsp), %rbx
cmpq %rbx, %r15
movq 0x18(%rsp), %r15
jne 0x2436
jmp 0x24d3
movq %r12, 0x8(%r15)
movq %r15, (%r12)
movq 0x18(%rsp), %r15
movq 0x8(%rsp), %rcx
movq 0x20(%rsp), %r12
jmp 0x24cb
movq %rbp, 0x8(%rbx)
movq %rbx, (%rbp)
addq $0x8, %r13
jmp 0x24c6
movq %rbx, 0x8(%r12)
movq %r12, (%rbx)
movq 0x10(%rsp), %r12
movq 0x8(%rsp), %rcx
movq (%r13), %rax
movq %rax, (%r12)
shrl %r15d
cmpl $0x1, %r15d
jne 0x2399
shlq $0x4, %rcx
movq 0x50(%rsp,%rcx), %rax
movq 0x58(%rsp,%rcx), %rcx
movq %rcx, 0x8(%rax)
movq $0x0, (%rcx)
movq 0x38(%rsp), %rcx
movq %rax, (%rcx)
addq $0x268, %rsp            # imm = 0x268
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq