// File: /workspace/github_c_makefile_star2_O0/GangZhuo[P]rbtree/rbtree.c
// Function: rbtree_remove_fixup
static void rbtree_remove_fixup(rbtree_t *tree, rbnode_t *x, rbnode_t *p)
{
	rbnode_t *b;

	while (!rbnode_is_nil(p) && rbnode_is_black(x)) {
		if (rbnode_is_nil(x) || rbnode_is_left(x)) {
			b = p->right;
			if (rbnode_is_red(b)) {
				rbnode_set_black(b);
				rbnode_set_red(p);
				rbtree_left_rotate(tree, p);
				b = p->right;
			}
			if (rbnode_is_nil(b) || (rbnode_is_black(b->right) && rbnode_is_black(b->left))) {
				if (!rbnode_is_nil(b))
					rbnode_set_red(b);
				x = p;
                p = p->parent;
			}
			else {
				if (rbnode_is_black(b->right)) {
					rbnode_set_black(b->left);
					rbnode_set_red(b);
					rbtree_right_rotate(tree, b);
					b = p->right;
				}
				else
					rbnode_set_black(b->right);
				b->color = p->color;
				rbnode_set_black(p);
				rbtree_left_rotate(tree, p);
				x = tree->root;
                p = rbnode_nil;
			}
		}
		else {
			b = p->left;
			if (rbnode_is_red(b)) {
				rbnode_set_black(b);
				rbnode_set_red(p);
				rbtree_right_rotate(tree, p);
				b = p->left;
			}
			if (rbnode_is_nil(b) || (rbnode_is_black(b->right) && rbnode_is_black(b->left))) {
				if (!rbnode_is_nil(b))
					rbnode_set_red(b);
				x = p;
                p = p->parent;
			}
			else {
				if (rbnode_is_black(b->left)) {
					rbnode_set_black(b->right);
					rbnode_set_red(b);
					rbtree_left_rotate(tree, b);
					b = p->left;
				}
				else
					rbnode_set_black(b->left);
				b->color = p->color;
				rbnode_set_black(p);
				rbtree_right_rotate(tree, p);
				x = tree->root;
                p = rbnode_nil;
			}
		}
	}
    if (!rbnode_is_nil(x))
        rbnode_set_black(x);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x18(%rbp)
movb %al, -0x21(%rbp)
je 0x1860
movb $0x1, %al
cmpq $0x0, -0x10(%rbp)
movb %al, -0x22(%rbp)
je 0x185a
movq -0x10(%rbp), %rax
cmpl $0x0, 0x8(%rax)
sete %al
movb %al, -0x22(%rbp)
movb -0x22(%rbp), %al
movb %al, -0x21(%rbp)
movb -0x21(%rbp), %al
testb $0x1, %al
jne 0x186c
jmp 0x1b21
cmpq $0x0, -0x10(%rbp)
je 0x1889
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rax
cmpq -0x10(%rbp), %rax
jne 0x19d4
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
je 0x18d5
movq -0x20(%rbp), %rax
cmpl $0x1, 0x8(%rax)
jne 0x18d5
movq -0x20(%rbp), %rax
movl $0x0, 0x8(%rax)
movq -0x18(%rbp), %rax
movl $0x1, 0x8(%rax)
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x2080
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
je 0x190e
movq -0x20(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0x18f5
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rax
cmpl $0x0, 0x8(%rax)
jne 0x1939
movq -0x20(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x190e
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
cmpl $0x0, 0x8(%rax)
jne 0x1939
cmpq $0x0, -0x20(%rbp)
je 0x1920
movq -0x20(%rbp), %rax
movl $0x1, 0x8(%rax)
movq -0x18(%rbp), %rax
movq %rax, -0x10(%rbp)
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x18(%rbp)
jmp 0x19cf
movq -0x20(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0x1952
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rax
cmpl $0x0, 0x8(%rax)
jne 0x1987
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movl $0x0, 0x8(%rax)
movq -0x20(%rbp), %rax
movl $0x1, 0x8(%rax)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x2140
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x20(%rbp)
jmp 0x1996
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rax
movl $0x0, 0x8(%rax)
movq -0x18(%rbp), %rax
movl 0x8(%rax), %ecx
movq -0x20(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x18(%rbp), %rax
movl $0x0, 0x8(%rax)
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x2080
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x10(%rbp)
movq $0x0, -0x18(%rbp)
jmp 0x1b1c
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
je 0x1a20
movq -0x20(%rbp), %rax
cmpl $0x1, 0x8(%rax)
jne 0x1a20
movq -0x20(%rbp), %rax
movl $0x0, 0x8(%rax)
movq -0x18(%rbp), %rax
movl $0x1, 0x8(%rax)
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x2140
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
je 0x1a59
movq -0x20(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0x1a40
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rax
cmpl $0x0, 0x8(%rax)
jne 0x1a84
movq -0x20(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x1a59
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
cmpl $0x0, 0x8(%rax)
jne 0x1a84
cmpq $0x0, -0x20(%rbp)
je 0x1a6b
movq -0x20(%rbp), %rax
movl $0x1, 0x8(%rax)
movq -0x18(%rbp), %rax
movq %rax, -0x10(%rbp)
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x18(%rbp)
jmp 0x1b1a
movq -0x20(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x1a9d
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
cmpl $0x0, 0x8(%rax)
jne 0x1ad2
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rax
movl $0x0, 0x8(%rax)
movq -0x20(%rbp), %rax
movl $0x1, 0x8(%rax)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x2080
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x20(%rbp)
jmp 0x1ae1
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movl $0x0, 0x8(%rax)
movq -0x18(%rbp), %rax
movl 0x8(%rax), %ecx
movq -0x20(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x18(%rbp), %rax
movl $0x0, 0x8(%rax)
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x2140
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x10(%rbp)
movq $0x0, -0x18(%rbp)
jmp 0x1b1c
jmp 0x1834
cmpq $0x0, -0x10(%rbp)
je 0x1b33
movq -0x10(%rbp), %rax
movl $0x0, 0x8(%rax)
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax)