// File: /workspace/github_c_makefile_star2_O0/GangZhuo[P]rbtree/rbtree.c
// Function: rbtree_insert_fixup
static void rbtree_insert_fixup(rbtree_t *tree, rbnode_t *n)
{
	while (!rbnode_is_nil(n) && rbnode_is_red(n->parent)) {
		rbnode_t *uncle;
		if (rbnode_is_left(n->parent)) {
			uncle = n->parent->parent->right;
			if (rbnode_is_red(uncle)) {
				rbnode_set_black(n->parent);
				rbnode_set_black(uncle);
				rbnode_set_red(n->parent->parent);
				n = n->parent->parent;
			}
			else {
				if (rbnode_is_right(n)) {
					n = n->parent;
					rbtree_left_rotate(tree, n);
				}
				rbnode_set_black(n->parent);
				rbnode_set_red(n->parent->parent);
				rbtree_right_rotate(tree, n->parent->parent);
			}
		}
		else {
			uncle = n->parent->parent->left;
			if (rbnode_is_red(uncle)) {
				rbnode_set_black(n->parent);
				rbnode_set_black(uncle);
				rbnode_set_red(n->parent->parent);
				n = n->parent->parent;
			}
			else {
				if (rbnode_is_left(n)) {
					n = n->parent;
					rbtree_right_rotate(tree, n);
				}
				rbnode_set_black(n->parent);
				rbnode_set_red(n->parent->parent);
				rbtree_left_rotate(tree, n->parent->parent);
			}
		}
	}
	tree->root->color = rbnode_black;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x10(%rbp)
movb %al, -0x19(%rbp)
je 0x1314
movq -0x10(%rbp), %rcx
xorl %eax, %eax
cmpq $0x0, 0x20(%rcx)
movb %al, -0x1a(%rbp)
je 0x130e
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
cmpl $0x1, 0x8(%rax)
sete %al
movb %al, -0x1a(%rbp)
movb -0x1a(%rbp), %al
movb %al, -0x19(%rbp)
movb -0x19(%rbp), %al
testb $0x1, %al
jne 0x1320
jmp 0x14d6
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jne 0x1409
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x20(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0x13a2
movq -0x18(%rbp), %rax
cmpl $0x1, 0x8(%rax)
jne 0x13a2
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movl $0x0, 0x8(%rax)
movq -0x18(%rbp), %rax
movl $0x0, 0x8(%rax)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x20(%rax), %rax
movl $0x1, 0x8(%rax)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x10(%rbp)
jmp 0x1404
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x18(%rax), %rax
cmpq -0x10(%rbp), %rax
jne 0x13cd
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x2080
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movl $0x0, 0x8(%rax)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x20(%rax), %rax
movl $0x1, 0x8(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x20(%rax), %rsi
callq 0x2140
jmp 0x14d1
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0x146d
movq -0x18(%rbp), %rax
cmpl $0x1, 0x8(%rax)
jne 0x146d
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movl $0x0, 0x8(%rax)
movq -0x18(%rbp), %rax
movl $0x0, 0x8(%rax)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x20(%rax), %rax
movl $0x1, 0x8(%rax)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x10(%rbp)
jmp 0x14cf
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rax
cmpq -0x10(%rbp), %rax
jne 0x1498
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x2140
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movl $0x0, 0x8(%rax)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x20(%rax), %rax
movl $0x1, 0x8(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x20(%rax), %rsi
callq 0x2080
jmp 0x14d1
jmp 0x12e0
movq -0x8(%rbp), %rax
movq (%rax), %rax
movl $0x0, 0x8(%rax)
addq $0x20, %rsp
popq %rbp
retq
nopw (%rax,%rax)