// File: /workspace/github_cpp_makefile_star2_O1/xocoder[P]m_kcptun/vendor/kcp/ikcp.c
// Function: ikcp_release
void ikcp_release(ikcpcb *kcp)
{
	assert(kcp);
	if (kcp) {
		IKCPSEG *seg;
		while (!iqueue_is_empty(&kcp->snd_buf)) {
			seg = iqueue_entry(kcp->snd_buf.next, IKCPSEG, node);
			iqueue_del(&seg->node);
			ikcp_segment_delete(kcp, seg);
		}
		while (!iqueue_is_empty(&kcp->rcv_buf)) {
			seg = iqueue_entry(kcp->rcv_buf.next, IKCPSEG, node);
			iqueue_del(&seg->node);
			ikcp_segment_delete(kcp, seg);
		}
		while (!iqueue_is_empty(&kcp->snd_queue)) {
			seg = iqueue_entry(kcp->snd_queue.next, IKCPSEG, node);
			iqueue_del(&seg->node);
			ikcp_segment_delete(kcp, seg);
		}
		while (!iqueue_is_empty(&kcp->rcv_queue)) {
			seg = iqueue_entry(kcp->rcv_queue.next, IKCPSEG, node);
			iqueue_del(&seg->node);
			ikcp_segment_delete(kcp, seg);
		}
		if (kcp->buffer) {
			ikcp_free(kcp->buffer);
		}
		if (kcp->acklist) {
			ikcp_free(kcp->acklist);
		}

		kcp->nrcv_buf = 0;
		kcp->nsnd_buf = 0;
		kcp->nrcv_que = 0;
		kcp->nsnd_que = 0;
		kcp->ackcount = 0;
		kcp->buffer = NULL;
		kcp->acklist = NULL;
		ikcp_free(kcp);
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
testq %rdi, %rdi
je 0x2a12
movq %rdi, %rbx
leaq 0xa8(%rdi), %r14
movq 0xa8(%rdi), %rdi
cmpq %rdi, %r14
je 0x28c2
movq (%rdi), %rax
movq 0x8(%rdi), %rcx
movq %rcx, 0x8(%rax)
movq 0x8(%rdi), %rcx
movq %rax, (%rcx)
xorps %xmm0, %xmm0
movups %xmm0, (%rdi)
movq 0xd9e1(%rip), %rax      # 0x10290
testq %rax, %rax
je 0x28b8
callq *%rax
jmp 0x28bd
callq 0x2310
movq (%r14), %rdi
jmp 0x288b
leaq 0xb8(%rbx), %r14
movq 0xb8(%rbx), %rdi
cmpq %rdi, %r14
je 0x2907
movq (%rdi), %rax
movq 0x8(%rdi), %rcx
movq %rcx, 0x8(%rax)
movq 0x8(%rdi), %rcx
movq %rax, (%rcx)
xorps %xmm0, %xmm0
movups %xmm0, (%rdi)
movq 0xd99c(%rip), %rax      # 0x10290
testq %rax, %rax
je 0x28fd
callq *%rax
jmp 0x2902
callq 0x2310
movq (%r14), %rdi
jmp 0x28d0
leaq 0x88(%rbx), %r14
movq 0x88(%rbx), %rdi
cmpq %rdi, %r14
je 0x294c
movq (%rdi), %rax
movq 0x8(%rdi), %rcx
movq %rcx, 0x8(%rax)
movq 0x8(%rdi), %rcx
movq %rax, (%rcx)
xorps %xmm0, %xmm0
movups %xmm0, (%rdi)
movq 0xd957(%rip), %rax      # 0x10290
testq %rax, %rax
je 0x2942
callq *%rax
jmp 0x2947
callq 0x2310
movq (%r14), %rdi
jmp 0x2915
leaq 0x98(%rbx), %r14
movq 0x98(%rbx), %rdi
cmpq %rdi, %r14
je 0x2991
movq (%rdi), %rax
movq 0x8(%rdi), %rcx
movq %rcx, 0x8(%rax)
movq 0x8(%rdi), %rcx
movq %rax, (%rcx)
xorps %xmm0, %xmm0
movups %xmm0, (%rdi)
movq 0xd912(%rip), %rax      # 0x10290
testq %rax, %rax
je 0x2987
callq *%rax
jmp 0x298c
callq 0x2310
movq (%r14), %rdi
jmp 0x295a
movq 0xe0(%rbx), %rdi
testq %rdi, %rdi
je 0x29b2
movq 0xd8ec(%rip), %rax      # 0x10290
testq %rax, %rax
je 0x29ad
callq *%rax
jmp 0x29b2
callq 0x2310
movq 0xc8(%rbx), %rdi
testq %rdi, %rdi
je 0x29d3
movq 0xd8cb(%rip), %rax      # 0x10290
testq %rax, %rax
je 0x29ce
callq *%rax
jmp 0x29d3
callq 0x2310
movl $0x0, 0xd0(%rbx)
xorl %eax, %eax
movq %rax, 0xe0(%rbx)
movq %rax, 0xc8(%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x5c(%rbx)
movq 0xd895(%rip), %rax      # 0x10290
movq %rbx, %rdi
testq %rax, %rax
je 0x2a09
popq %rbx
popq %r14
popq %rbp
jmpq *%rax
popq %rbx
popq %r14
popq %rbp
jmp 0x2310
leaq 0x8627(%rip), %rdi      # 0xb040
leaq 0x8624(%rip), %rsi      # 0xb044
leaq 0x862f(%rip), %rcx      # 0xb056
movl $0x12d, %edx            # imm = 0x12D
callq 0x21b0