// File: /workspace/github_c_makefile_star2_O0/rsa9000[P]regfanalysistools/rbtree.c
// Function: rbtree_delete
void rbtree_delete(struct rbtree *t, struct rbtree_head *node)
{
	struct rbtree_head *r;	/* Replacement node */
	struct rbtree_head *c;	/* Child node */
	int need_fixup = 0;

	if (node->left == &t->rbt_nil || node->right == &t->rbt_nil)
		r = node;
	else
		r = rbtree_successor(t, node);

	if (r->left != &t->rbt_nil)
		c = r->left;
	else
		c = r->right;

	rbt_set_p(c, rbt_get_p(r));

	if (rbt_get_p(r) == &t->rbt_nil) {
		t->rbt_root = c;
	} else {
		if (rbt_get_p(r)->left == r)
			rbt_get_p(r)->left = c;
		else
			rbt_get_p(r)->right = c;
	}

	need_fixup = rbt_is_black(r);

	if (r != node) {
		rbt_set_p(r, rbt_get_p(node));
		if (rbt_get_p(node) == &t->rbt_nil) {
			t->rbt_root = r;
		} else {
			if (rbt_get_p(node)->left == node)
				rbt_get_p(node)->left = r;
			else
				rbt_get_p(node)->right = r;
		}
		r->left = node->left;
		rbt_set_p(node->left, r);
		r->right = node->right;
		rbt_set_p(node->right, r);
		rbt_copy_color(r, node);
	}

	if (need_fixup)
		__rbtree_delete_fixup(t, c);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl $0x0, -0x24(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x8(%rbp), %rcx
addq $0x8, %rcx
cmpq %rcx, %rax
je 0x4531
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x8(%rbp), %rcx
addq $0x8, %rcx
cmpq %rcx, %rax
jne 0x453b
movq -0x10(%rbp), %rax
movq %rax, -0x18(%rbp)
jmp 0x454c
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x3d30
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x8(%rbp), %rcx
addq $0x8, %rcx
cmpq %rcx, %rax
je 0x456f
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x20(%rbp)
jmp 0x457b
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x18(%rbp), %rax
movq (%rax), %rcx
andq $-0x2, %rcx
andq $-0x2, %rcx
movq -0x20(%rbp), %rax
movq (%rax), %rax
andq $0x1, %rax
orq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movq -0x18(%rbp), %rax
movq (%rax), %rax
andq $-0x2, %rax
movq -0x8(%rbp), %rcx
addq $0x8, %rcx
cmpq %rcx, %rax
jne 0x45c4
movq -0x20(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, (%rax)
jmp 0x4603
movq -0x18(%rbp), %rax
movq (%rax), %rax
andq $-0x2, %rax
movq 0x8(%rax), %rax
cmpq -0x18(%rbp), %rax
jne 0x45ee
movq -0x20(%rbp), %rcx
movq -0x18(%rbp), %rax
movq (%rax), %rax
andq $-0x2, %rax
movq %rcx, 0x8(%rax)
jmp 0x4601
movq -0x20(%rbp), %rcx
movq -0x18(%rbp), %rax
movq (%rax), %rax
andq $-0x2, %rax
movq %rcx, 0x10(%rax)
jmp 0x4603
movq -0x18(%rbp), %rax
movq (%rax), %rax
andq $0x1, %rax
cmpq $0x0, %rax
sete %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x24(%rbp)
movq -0x18(%rbp), %rax
cmpq -0x10(%rbp), %rax
je 0x4741
movq -0x10(%rbp), %rax
movq (%rax), %rcx
andq $-0x2, %rcx
andq $-0x2, %rcx
movq -0x18(%rbp), %rax
movq (%rax), %rax
andq $0x1, %rax
orq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rax
andq $-0x2, %rax
movq -0x8(%rbp), %rcx
addq $0x8, %rcx
cmpq %rcx, %rax
jne 0x4674
movq -0x18(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, (%rax)
jmp 0x46b3
movq -0x10(%rbp), %rax
movq (%rax), %rax
andq $-0x2, %rax
movq 0x8(%rax), %rax
cmpq -0x10(%rbp), %rax
jne 0x469e
movq -0x18(%rbp), %rcx
movq -0x10(%rbp), %rax
movq (%rax), %rax
andq $-0x2, %rax
movq %rcx, 0x8(%rax)
jmp 0x46b1
movq -0x18(%rbp), %rcx
movq -0x10(%rbp), %rax
movq (%rax), %rax
andq $-0x2, %rax
movq %rcx, 0x10(%rax)
jmp 0x46b3
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x18(%rbp), %rcx
andq $-0x2, %rcx
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rax
andq $0x1, %rax
orq %rax, %rcx
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rcx
andq $-0x2, %rcx
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rax
andq $0x1, %rax
orq %rax, %rcx
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rcx, (%rax)
movq -0x18(%rbp), %rax
movq (%rax), %rcx
andq $-0x2, %rcx
movq -0x10(%rbp), %rax
movq (%rax), %rax
andq $0x1, %rax
andq $0x1, %rax
orq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
cmpl $0x0, -0x24(%rbp)
je 0x4754
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x4760
addq $0x30, %rsp
popq %rbp
retq
nopw (%rax,%rax)