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

	while ((parent = rb_parent(node)) && rb_is_red(parent)) {
		gparent = rb_parent(parent);

		if (parent == gparent->rb_left) {
			{
				register struct rb_node *uncle =
				    gparent->rb_right;
				if (uncle && rb_is_red(uncle)) {
					rb_set_black(uncle);
					rb_set_black(parent);
					rb_set_red(gparent);
					node = gparent;
					continue;
				}
			}

			if (parent->rb_right == node) {
				register struct rb_node *tmp;
				__rb_rotate_left(parent, root);
				tmp = parent;
				parent = node;
				node = tmp;
			}

			rb_set_black(parent);
			rb_set_red(gparent);
			__rb_rotate_right(gparent, root);
		} else {
			{
				register struct rb_node *uncle =
				    gparent->rb_left;
				if (uncle && rb_is_red(uncle)) {
					rb_set_black(uncle);
					rb_set_black(parent);
					rb_set_red(gparent);
					node = gparent;
					continue;
				}
			}

			if (parent->rb_left == node) {
				register struct rb_node *tmp;
				__rb_rotate_right(parent, root);
				tmp = parent;
				parent = node;
				node = tmp;
			}

			rb_set_black(parent);
			rb_set_red(gparent);
			__rb_rotate_left(gparent, root);
		}
	}

	rb_set_black(root->rb_node);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rcx
andq $-0x4, %rcx
movq %rcx, -0x18(%rbp)
xorl %eax, %eax
cmpq $0x0, %rcx
movb %al, -0x41(%rbp)
je 0x4421
movq -0x18(%rbp), %rax
movq (%rax), %rax
andq $0x1, %rax
cmpq $0x0, %rax
setne %al
xorb $-0x1, %al
movb %al, -0x41(%rbp)
movb -0x41(%rbp), %al
testb $0x1, %al
jne 0x442d
jmp 0x45da
movq -0x18(%rbp), %rax
movq (%rax), %rax
andq $-0x4, %rax
movq %rax, -0x20(%rbp)
movq -0x18(%rbp), %rax
movq -0x20(%rbp), %rcx
cmpq 0x10(%rcx), %rax
jne 0x4514
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x44af
movq -0x28(%rbp), %rax
movq (%rax), %rax
andq $0x1, %rax
cmpq $0x0, %rax
jne 0x44af
jmp 0x4474
movq -0x28(%rbp), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
jmp 0x4484
movq -0x18(%rbp), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
jmp 0x4494
movq -0x20(%rbp), %rax
movq (%rax), %rcx
andq $-0x2, %rcx
movq %rcx, (%rax)
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x43f0
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
cmpq -0x8(%rbp), %rax
jne 0x44e2
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x4600
movq -0x18(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x44e4
movq -0x18(%rbp), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
jmp 0x44f4
movq -0x20(%rbp), %rax
movq (%rax), %rcx
andq $-0x2, %rcx
movq %rcx, (%rax)
movq -0x20(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x46c0
jmp 0x45d5
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0x4575
movq -0x38(%rbp), %rax
movq (%rax), %rax
andq $0x1, %rax
cmpq $0x0, %rax
jne 0x4575
jmp 0x453a
movq -0x38(%rbp), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
jmp 0x454a
movq -0x18(%rbp), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
jmp 0x455a
movq -0x20(%rbp), %rax
movq (%rax), %rcx
andq $-0x2, %rcx
movq %rcx, (%rax)
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x43f0
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
cmpq -0x8(%rbp), %rax
jne 0x45a8
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x46c0
movq -0x18(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x45aa
movq -0x18(%rbp), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
jmp 0x45ba
movq -0x20(%rbp), %rax
movq (%rax), %rcx
andq $-0x2, %rcx
movq %rcx, (%rax)
movq -0x20(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x4600
jmp 0x43f0
jmp 0x45dc
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)