// File: /workspace/github_c_makefile_star2_O0/ngkaho1234[P]ext4-extents-tree/rbtree.c
// Function: _rb_erase_color
static void __rb_erase_color(struct rb_node *node, struct rb_node *parent,
			       struct rb_root *root)
{
	struct rb_node *other;

	while ((!node || rb_is_black(node)) && node != root->rb_node) {
		if (parent->rb_left == node) {
			other = parent->rb_right;
			if (rb_is_red(other)) {
				rb_set_black(other);
				rb_set_red(parent);
				__rb_rotate_left(parent, root);
				other = parent->rb_right;
			}
			if ((!other->rb_left ||
			     rb_is_black(other->rb_left)) &&
			    (!other->rb_right ||
			     rb_is_black(other->rb_right))) {
				rb_set_red(other);
				node = parent;
				parent = rb_parent(node);
			} else {
				if (!other->rb_right ||
				    rb_is_black(other->rb_right)) {
					rb_set_black(other->rb_left);
					rb_set_red(other);
					__rb_rotate_right(other, root);
					other = parent->rb_right;
				}
				rb_set_color(other, rb_color(parent));
				rb_set_black(parent);
				rb_set_black(other->rb_right);
				__rb_rotate_left(parent, root);
				node = root->rb_node;
				break;
			}
		} else {
			other = parent->rb_left;
			if (rb_is_red(other)) {
				rb_set_black(other);
				rb_set_red(parent);
				__rb_rotate_right(parent, root);
				other = parent->rb_left;
			}
			if ((!other->rb_left ||
			     rb_is_black(other->rb_left)) &&
			    (!other->rb_right ||
			     rb_is_black(other->rb_right))) {
				rb_set_red(other);
				node = parent;
				parent = rb_parent(node);
			} else {
				if (!other->rb_left ||
				    rb_is_black(other->rb_left)) {
					rb_set_black(other->rb_right);
					rb_set_red(other);
					__rb_rotate_left(other, root);
					other = parent->rb_left;
				}
				rb_set_color(other, rb_color(parent));
				rb_set_black(parent);
				rb_set_black(other->rb_left);
				__rb_rotate_right(parent, root);
				node = root->rb_node;
				break;
			}
		}
	}
	if (node)
		rb_set_black(node);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x49f1
movq -0x8(%rbp), %rax
movq (%rax), %rcx
andq $0x1, %rcx
xorl %eax, %eax
cmpq $0x0, %rcx
movb %al, -0x21(%rbp)
je 0x4a02
movq -0x8(%rbp), %rax
movq -0x18(%rbp), %rcx
cmpq (%rcx), %rax
setne %al
movb %al, -0x21(%rbp)
movb -0x21(%rbp), %al
testb $0x1, %al
jne 0x4a0e
jmp 0x4d11
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
cmpq -0x8(%rbp), %rax
jne 0x4b99
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq (%rax), %rax
andq $0x1, %rax
cmpq $0x0, %rax
jne 0x4a76
jmp 0x4a3f
movq -0x20(%rbp), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
jmp 0x4a4f
movq -0x10(%rbp), %rax
movq (%rax), %rcx
andq $-0x2, %rcx
movq %rcx, (%rax)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x4600
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x4a96
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rax
andq $0x1, %rax
cmpq $0x0, %rax
je 0x4ae2
movq -0x20(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x4ab6
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rax
andq $0x1, %rax
cmpq $0x0, %rax
je 0x4ae2
jmp 0x4ab8
movq -0x20(%rbp), %rax
movq (%rax), %rcx
andq $-0x2, %rcx
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rax
andq $-0x4, %rax
movq %rax, -0x10(%rbp)
jmp 0x4b94
movq -0x20(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x4b02
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rax
andq $0x1, %rax
cmpq $0x0, %rax
je 0x4b3f
jmp 0x4b04
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
jmp 0x4b18
movq -0x20(%rbp), %rax
movq (%rax), %rcx
andq $-0x2, %rcx
movq %rcx, (%rax)
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x46c0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rax
andq $0x1, %rax
movl %eax, %esi
callq 0x5390
movq -0x10(%rbp), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
jmp 0x4b65
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x4600
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x4d11
jmp 0x4d0c
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq (%rax), %rax
andq $0x1, %rax
cmpq $0x0, %rax
jne 0x4bef
jmp 0x4bb8
movq -0x20(%rbp), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
jmp 0x4bc8
movq -0x10(%rbp), %rax
movq (%rax), %rcx
andq $-0x2, %rcx
movq %rcx, (%rax)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x46c0
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x4c0f
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rax
andq $0x1, %rax
cmpq $0x0, %rax
je 0x4c5b
movq -0x20(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x4c2f
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rax
andq $0x1, %rax
cmpq $0x0, %rax
je 0x4c5b
jmp 0x4c31
movq -0x20(%rbp), %rax
movq (%rax), %rcx
andq $-0x2, %rcx
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rax
andq $-0x4, %rax
movq %rax, -0x10(%rbp)
jmp 0x4d0a
movq -0x20(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x4c7b
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rax
andq $0x1, %rax
cmpq $0x0, %rax
je 0x4cb8
jmp 0x4c7d
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
jmp 0x4c91
movq -0x20(%rbp), %rax
movq (%rax), %rcx
andq $-0x2, %rcx
movq %rcx, (%rax)
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x4600
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rax
andq $0x1, %rax
movl %eax, %esi
callq 0x5390
movq -0x10(%rbp), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
jmp 0x4cde
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x46c0
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x4d11
jmp 0x4d0c
jmp 0x49d4
cmpq $0x0, -0x8(%rbp)
je 0x4d2a
jmp 0x4d1a
movq -0x8(%rbp), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
jmp 0x4d2a
addq $0x30, %rsp
popq %rbp
retq