LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./symbol.c
// Function: sym_clear_all_valid
void sym_clear_all_valid(void)
{
	struct symbol *sym;
	int i;

	for_all_symbols(i, sym)
		sym->flags &= ~SYMBOL_VALID;
	sym_change_count++;
}

// Assembly:
xorl %eax, %eax
leaq 0xd7c5(%rip), %rcx      # 0x16510
movq (%rcx,%rax,8), %rdx
testq %rdx, %rdx
je 0x8d63
cmpl $0x6, 0x18(%rdx)
je 0x8d5e
andb $0x7f, 0x44(%rdx)
movq (%rdx), %rdx
jmp 0x8d4f
incq %rax
cmpq $0x101, %rax            # imm = 0x101
jne 0x8d4b
incl 0xdfa4(%rip)            # 0x16d18
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./menu.c
// Function: menu_is_visible
bool menu_is_visible(struct menu *menu)
{
	struct menu *child;
	struct symbol *sym;
	tristate visible;

	if (!menu->prompt)
		return false;
	sym = menu->sym;
	if (sym) {
		sym_calc_value(sym);
		visible = menu->prompt->visible.tri;
	} else
		visible = menu->prompt->visible.tri = expr_calc_value(menu->prompt->visible.expr);

	if (visible != no)
		return true;
	if (!sym || sym_get_tristate_value(menu->sym) == no)
		return false;

	for (child = menu->list; child; child = child->next)
		if (menu_is_visible(child))
			return true;
	return false;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq 0x20(%rdi), %rax
testq %rax, %rax
je 0x8de6
movq %rdi, %rbx
movq 0x18(%rdi), %r14
testq %r14, %r14
je 0x8d9f
movq %r14, %rdi
callq 0x8244
movq 0x20(%rbx), %rax
movl 0x28(%rax), %eax
jmp 0x8daf
movq 0x20(%rax), %rdi
callq 0xa799
movq 0x20(%rbx), %rcx
movl %eax, 0x28(%rcx)
testl %eax, %eax
setne %bpl
testq %r14, %r14
je 0x8de8
testl %eax, %eax
jne 0x8de8
movq 0x18(%rbx), %rax
cmpl $0x0, 0x28(%rax)
je 0x8de6
addq $0x10, %rbx
movq (%rbx), %rbx
testq %rbx, %rbx
setne %bpl
je 0x8de8
movq %rbx, %rdi
callq 0x8d75
testb %al, %al
je 0x8dcc
jmp 0x8de8
xorl %ebp, %ebp
movl %ebp, %eax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./menu.c
// Function: menu_get_prompt
const char *menu_get_prompt(struct menu *menu)
{
	if (menu->prompt)
		return menu->prompt->text;
	else if (menu->sym)
		return menu->sym->name;
	return NULL;
}

// Assembly:
movq 0x20(%rdi), %rax
testq %rax, %rax
je 0x8dfe
addq $0x18, %rax
jmp 0x8e0b
movq 0x18(%rdi), %rax
testq %rax, %rax
je 0x8e0f
addq $0x8, %rax
movq (%rax), %rax
retq
xorl %eax, %eax
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./menu.c
// Function: file_write_dep
int file_write_dep(const char *name)
{
	struct file *file;
	FILE *out;

	if (!name)
		name = ".config.cmd";
	out = fopen(".config.tmp", "w");
	if (!out)
		return 1;
	fprintf(out, "deps_config := \\\n");
	for (file = file_list; file; file = file->next) {
		if (file->next)
			fprintf(out, "\t%s \\\n", file->name);
		else
			fprintf(out, "\t%s\n", file->name);
	}
	fprintf(out, "\n.config include/system_configuration.h: $(deps_config)\n\n$(deps_config):\n");
	fclose(out);
	rename(".config.tmp", name);
	return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
testq %rdi, %rdi
leaq 0x9078(%rip), %rbx      # 0x11ec5
cmovneq %rdi, %rbx
leaq 0x9079(%rip), %rdi      # 0x11ed1
leaq 0x94c9(%rip), %rsi      # 0x12328
callq 0x2270
testq %rax, %rax
je 0x8ef8
movq %rax, %r14
leaq 0x9066(%rip), %rdi      # 0x11edd
movl $0x11, %esi
movl $0x1, %edx
movq %rax, %rcx
callq 0x22e0
movq 0xef38(%rip), %r15      # 0x17dc8
testq %r15, %r15
je 0x8ec4
leaq 0x905a(%rip), %r12      # 0x11ef6
leaq 0x904c(%rip), %r13      # 0x11eef
cmpq $0x0, (%r15)
movq 0x10(%r15), %rdx
movq %r13, %rsi
cmoveq %r12, %rsi
movq %r14, %rdi
xorl %eax, %eax
callq 0x21a0
movq (%r15), %r15
testq %r15, %r15
jne 0x8ea3
leaq 0x9030(%rip), %rdi      # 0x11efb
movl $0x49, %esi
movl $0x1, %edx
movq %r14, %rcx
callq 0x22e0
movq %r14, %rdi
callq 0x20d0
leaq 0x8fe5(%rip), %rdi      # 0x11ed1
movq %rbx, %rsi
callq 0x2280
xorl %eax, %eax
jmp 0x8efd
movl $0x1, %eax
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./expr.c
// Function: expr_copy
struct expr *expr_copy(struct expr *org)
{
	struct expr *e;

	if (!org)
		return NULL;

	e = malloc(sizeof(*org));
	memcpy(e, org, sizeof(*org));
	switch (org->type) {
	case E_SYMBOL:
		e->left = org->left;
		break;
	case E_NOT:
		e->left.expr = expr_copy(org->left.expr);
		break;
	case E_EQUAL:
	case E_UNEQUAL:
		e->left.sym = org->left.sym;
		e->right.sym = org->right.sym;
		break;
	case E_AND:
	case E_OR:
	case E_CHOICE:
		e->left.expr = expr_copy(org->left.expr);
		e->right.expr = expr_copy(org->right.expr);
		break;
	default:
		printf("can't copy type %d\n", e->type);
		free(e);
		e = NULL;
		break;
	}

	return e;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
testq %rdi, %rdi
je 0x9012
movq %rdi, %r14
movl $0x18, %edi
callq 0x2220
movq %rax, %rbx
movq 0x10(%r14), %rax
movq %rax, 0x10(%rbx)
movups (%r14), %xmm0
movups %xmm0, (%rbx)
movl (%r14), %eax
decl %eax
cmpl $0x6, %eax
ja 0x8ffa
leaq 0x3592(%rip), %rcx      # 0xc55c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x8(%r14), %rdi
callq 0x8f91
movq %rax, 0x8(%rbx)
movq 0x10(%r14), %rdi
callq 0x8f91
movq %rax, 0x10(%rbx)
jmp 0x9029
movups 0x8(%r14), %xmm0
movups %xmm0, 0x8(%rbx)
jmp 0x9029
movl (%rbx), %esi
leaq 0x8b3f(%rip), %rdi      # 0x11b42
xorl %eax, %eax
callq 0x2100
movq %rbx, %rdi
callq 0x2040
xorl %ebx, %ebx
jmp 0x9029
movq 0x8(%r14), %rdi
callq 0x8f91
jmp 0x9025
movq 0x8(%r14), %rax
movq %rax, 0x8(%rbx)
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./expr.c
// Function: expr_free
void expr_free(struct expr *e)
{
	if (!e)
		return;

	switch (e->type) {
	case E_SYMBOL:
		break;
	case E_NOT:
		expr_free(e->left.expr);
		return;
	case E_EQUAL:
	case E_UNEQUAL:
		break;
	case E_OR:
	case E_AND:
		expr_free(e->left.expr);
		expr_free(e->right.expr);
		break;
	default:
		printf("how to free type %d?\n", e->type);
		break;
	}
	free(e);
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
testq %rbx, %rbx
je 0x9077
movl (%rbx), %esi
cmpl $0x3, %esi
jne 0x904a
movq 0x8(%rbx), %rbx
jmp 0x9038
cmpl $0x7, %esi
ja 0x9079
movl $0xb0, %eax
btl %esi, %eax
jb 0x9087
movl $0x6, %eax
btl %esi, %eax
jae 0x9079
movq 0x8(%rbx), %rdi
callq 0x9034
movq 0x10(%rbx), %rdi
callq 0x9034
jmp 0x9087
popq %rbx
retq
leaq 0x8ad6(%rip), %rdi      # 0x11b56
xorl %eax, %eax
callq 0x2100
movq %rbx, %rdi
popq %rbx
jmp 0x2040
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./expr.c
// Function: expr_eliminate_eq
void expr_eliminate_eq(struct expr **ep1, struct expr **ep2)
{
	if (!e1 || !e2)
		return;
	switch (e1->type) {
	case E_OR:
	case E_AND:
		__expr_eliminate_eq(e1->type, ep1, ep2);
	default:
		;
	}
	if (e1->type != e2->type) switch (e2->type) {
	case E_OR:
	case E_AND:
		__expr_eliminate_eq(e2->type, ep1, ep2);
	default:
		;
	}
	e1 = expr_eliminate_yn(e1);
	e2 = expr_eliminate_yn(e2);
}

// Assembly:
movq (%rdi), %rax
testq %rax, %rax
je 0x9104
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %rbx
cmpq $0x0, (%rsi)
je 0x90ff
movq %rdi, %r14
movl (%rax), %edi
leal -0x1(%rdi), %eax
cmpl $0x1, %eax
ja 0x90be
movq %r14, %rsi
movq %rbx, %rdx
callq 0x9105
movq (%r14), %rax
movq (%rbx), %rcx
movl (%rcx), %edi
cmpl %edi, (%rax)
sete %al
leal -0x1(%rdi), %ecx
cmpl $0x2, %ecx
setae %cl
orb %al, %cl
jne 0x90e3
movq %r14, %rsi
movq %rbx, %rdx
callq 0x9105
movq (%r14), %r15
movq %r15, %rdi
callq 0x921d
movq %r15, (%r14)
movq (%rbx), %r14
movq %r14, %rdi
callq 0x921d
movq %r14, (%rbx)
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./expr.c
// Function: _expr_eliminate_eq
static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct expr **ep2)
{
	if (e1->type == type) {
		__expr_eliminate_eq(type, &e1->left.expr, &e2);
		__expr_eliminate_eq(type, &e1->right.expr, &e2);
		return;
	}
	if (e2->type == type) {
		__expr_eliminate_eq(type, &e1, &e2->left.expr);
		__expr_eliminate_eq(type, &e1, &e2->right.expr);
		return;
	}
	if (e1->type == E_SYMBOL && e2->type == E_SYMBOL &&
	    e1->left.sym == e2->left.sym && (e1->left.sym->flags & (SYMBOL_YES|SYMBOL_NO)))
		return;
	if (!expr_eq(e1, e2))
		return;
	trans_count++;
	expr_free(e1); expr_free(e2);
	switch (type) {
	case E_OR:
		e1 = expr_alloc_symbol(&symbol_no);
		e2 = expr_alloc_symbol(&symbol_no);
		break;
	case E_AND:
		e1 = expr_alloc_symbol(&symbol_yes);
		e2 = expr_alloc_symbol(&symbol_yes);
		break;
	default:
		;
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdx, %rbx
movq %rsi, %r14
movl %edi, %ebp
movq (%r14), %rsi
movl (%rsi), %eax
cmpl %ebp, %eax
je 0x913e
movq (%rbx), %rdx
movl (%rdx), %ecx
cmpl %ebp, %ecx
jne 0x9155
addq $0x8, %rdx
movl %ebp, %edi
movq %r14, %rsi
callq 0x9105
movq (%rbx), %rbx
addq $0x10, %rbx
jmp 0x9115
addq $0x8, %rsi
movl %ebp, %edi
movq %rbx, %rdx
callq 0x9105
movq (%r14), %r14
addq $0x10, %r14
jmp 0x9115
cmpl $0x7, %eax
jne 0x9169
cmpl $0x7, %ecx
jne 0x9169
movq 0x8(%rsi), %rax
cmpq 0x8(%rdx), %rax
je 0x91c3
movq %rsi, %rdi
movq %rdx, %rsi
callq 0x93aa
testl %eax, %eax
je 0x9214
incl 0xec32(%rip)            # 0x17db4
movq (%r14), %rdi
callq 0x9034
movq (%rbx), %rdi
callq 0x9034
cmpl $0x2, %ebp
je 0x91cb
cmpl $0x1, %ebp
jne 0x9214
movl $0x18, %edi
callq 0x2220
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
xorl %r15d, %r15d
movq %r15, 0x10(%rax)
movl $0x7, %ebp
movl %ebp, (%rax)
leaq 0xd057(%rip), %r12      # 0x16218
jmp 0x91f0
testb $0x5, 0x44(%rax)
jne 0x9214
jmp 0x9169
movl $0x18, %edi
callq 0x2220
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
xorl %r15d, %r15d
movq %r15, 0x10(%rax)
movl $0x7, %ebp
movl %ebp, (%rax)
leaq 0xd098(%rip), %r12      # 0x16288
movq %r12, 0x8(%rax)
movq %rax, (%r14)
movl $0x18, %edi
callq 0x2220
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movq %r15, 0x10(%rax)
movl %ebp, (%rax)
movq %r12, 0x8(%rax)
movq %rax, (%rbx)
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./expr.c
// Function: expr_eq
int expr_eq(struct expr *e1, struct expr *e2)
{
	int res, old_count;

	if (e1->type != e2->type)
		return 0;
	switch (e1->type) {
	case E_EQUAL:
	case E_UNEQUAL:
		return e1->left.sym == e2->left.sym && e1->right.sym == e2->right.sym;
	case E_SYMBOL:
		return e1->left.sym == e2->left.sym;
	case E_NOT:
		return expr_eq(e1->left.expr, e2->left.expr);
	case E_AND:
	case E_OR:
		e1 = expr_copy(e1);
		e2 = expr_copy(e2);
		old_count = trans_count;
		expr_eliminate_eq(&e1, &e2);
		res = (e1->type == E_SYMBOL && e2->type == E_SYMBOL &&
		       e1->left.sym == e2->left.sym);
		expr_free(e1);
		expr_free(e2);
		trans_count = old_count;
		return res;
	case E_CHOICE:
	case E_RANGE:
	case E_NONE:
		/* panic */;
	}

	print_expr(0, e1, 0);
	printf(" = ");
	print_expr(0, e2, 0);
	printf(" ?\n");

	return 0;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
subq $0x10, %rsp
xorl %ebx, %ebx
movq %rdi, 0x8(%rsp)
movq %rsi, (%rsp)
movl (%rdi), %eax
cmpl (%rsi), %eax
jne 0x9492
cmpl $0x3, %eax
jne 0x93d6
movq 0x8(%rdi), %rdi
movq 0x8(%rsi), %rsi
jmp 0x93b4
leal -0x1(%rax), %ecx
cmpl $0x2, %ecx
jb 0x9400
leal -0x4(%rax), %ecx
cmpl $0x2, %ecx
jae 0x9462
movq 0x8(%rdi), %rax
cmpq 0x8(%rsi), %rax
jne 0x9492
movq 0x10(%rdi), %rax
xorl %ebx, %ebx
cmpq 0x10(%rsi), %rax
jmp 0x9471
callq 0x8f91
leaq 0x8(%rsp), %rbx
movq %rax, (%rbx)
movq %rsp, %r14
movq (%r14), %rdi
callq 0x8f91
movq %rax, (%r14)
movl 0xe993(%rip), %ebp      # 0x17db4
movq %rbx, %rdi
movq %r14, %rsi
callq 0x9090
movq (%rbx), %rdi
xorl %ebx, %ebx
cmpl $0x7, (%rdi)
jne 0x944c
movq (%rsp), %rax
cmpl $0x7, (%rax)
jne 0x944c
movq 0x8(%rdi), %rcx
xorl %ebx, %ebx
cmpq 0x8(%rax), %rcx
sete %bl
callq 0x9034
movq (%rsp), %rdi
callq 0x9034
movl %ebp, 0xe954(%rip)      # 0x17db4
jmp 0x9492
cmpl $0x7, %eax
jne 0x9476
movq 0x8(%rdi), %rax
xorl %ebx, %ebx
cmpq 0x8(%rsi), %rax
sete %bl
jmp 0x9492
leaq 0x86ef(%rip), %rdi      # 0x11b6c
xorl %ebx, %ebx
xorl %eax, %eax
callq 0x2100
leaq 0x8eb5(%rip), %rdi      # 0x12342
callq 0x20a0
movl %ebx, %eax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./expr.c
// Function: expr_trans_bool
struct expr *expr_trans_bool(struct expr *e)
{
	if (!e)
		return NULL;
	switch (e->type) {
	case E_AND:
	case E_OR:
	case E_NOT:
		e->left.expr = expr_trans_bool(e->left.expr);
		e->right.expr = expr_trans_bool(e->right.expr);
		break;
	case E_UNEQUAL:
		// FOO!=n -> FOO
		if (e->left.sym->type == S_TRISTATE) {
			if (e->right.sym == &symbol_no) {
				e->type = E_SYMBOL;
				e->right.sym = NULL;
			}
		}
		break;
	default:
		;
	}
	return e;
}

// Assembly:
pushq %rbx
testq %rdi, %rdi
je 0x94f3
movq %rdi, %rbx
movl (%rdi), %eax
leal -0x1(%rax), %ecx
cmpl $0x3, %ecx
jae 0x94f7
movq 0x8(%rbx), %rdi
callq 0x94c4
movq %rax, 0x8(%rbx)
movq 0x10(%rbx), %rdi
callq 0x94c4
movq %rax, 0x10(%rbx)
jmp 0x9521
xorl %ebx, %ebx
jmp 0x9521
cmpl $0x5, %eax
jne 0x9521
movq 0x8(%rbx), %rax
cmpl $0x2, 0x18(%rax)
jne 0x9521
leaq 0xcd0b(%rip), %rax      # 0x16218
cmpq %rax, 0x10(%rbx)
jne 0x9521
movl $0x7, (%rbx)
movq $0x0, 0x10(%rbx)
movq %rbx, %rax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./expr.c
// Function: expr_eliminate_dups
struct expr *expr_eliminate_dups(struct expr *e)
{
	int oldcount;
	if (!e)
		return e;

	oldcount = trans_count;
	while (1) {
		trans_count = 0;
		switch (e->type) {
		case E_OR: case E_AND:
			expr_eliminate_dups1(e->type, &e, &e);
			expr_eliminate_dups2(e->type, &e, &e);
		default:
			;
		}
		if (!trans_count)
			break;
		e = expr_eliminate_yn(e);
	}
	trans_count = oldcount;
	return e;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rdi, 0x8(%rsp)
testq %rdi, %rdi
je 0x9bf0
movl 0xe229(%rip), %ebp      # 0x17db4
leaq 0x8(%rsp), %rbx
movl $0x0, 0xe21a(%rip)      # 0x17db4
movq 0x8(%rsp), %rax
movl (%rax), %edi
leal -0x1(%rdi), %eax
cmpl $0x1, %eax
ja 0x9bc6
movq %rbx, %rsi
movq %rbx, %rdx
callq 0x9bfb
movq 0x8(%rsp), %rax
movl (%rax), %edi
movq %rbx, %rsi
movq %rbx, %rdx
callq 0x9d23
cmpl $0x0, 0xe1e7(%rip)      # 0x17db4
je 0x9be3
movq 0x8(%rsp), %r14
movq %r14, %rdi
callq 0x921d
movq %r14, 0x8(%rsp)
jmp 0x9b90
movl %ebp, 0xe1cb(%rip)      # 0x17db4
movq 0x8(%rsp), %rax
jmp 0x9bf2
xorl %eax, %eax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./expr.c
// Function: expr_eliminate_dups1
static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct expr **ep2)
{
#define e1 (*ep1)
#define e2 (*ep2)
	struct expr *tmp;

	if (e1->type == type) {
		expr_eliminate_dups1(type, &e1->left.expr, &e2);
		expr_eliminate_dups1(type, &e1->right.expr, &e2);
		return;
	}
	if (e2->type == type) {
		expr_eliminate_dups1(type, &e1, &e2->left.expr);
		expr_eliminate_dups1(type, &e1, &e2->right.expr);
		return;
	}
	if (e1 == e2)
		return;

	switch (e1->type) {
	case E_OR: case E_AND:
		expr_eliminate_dups1(e1->type, &e1, &e1);
	default:
		;
	}

	switch (type) {
	case E_OR:
		tmp = expr_join_or(e1, e2);
		if (tmp) {
			expr_free(e1); expr_free(e2);
			e1 = expr_alloc_symbol(&symbol_no);
			e2 = tmp;
			trans_count++;
		}
		break;
	case E_AND:
		tmp = expr_join_and(e1, e2);
		if (tmp) {
			expr_free(e1); expr_free(e2);
			e1 = expr_alloc_symbol(&symbol_yes);
			e2 = tmp;
			trans_count++;
		}
		break;
	default:
		;
	}
#undef e1
#undef e2
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %rbx
movq %rsi, %r14
movl %edi, %ebp
movq (%r14), %rsi
movl (%rsi), %edi
cmpl %ebp, %edi
je 0x9c31
movq (%rbx), %rdx
cmpl %ebp, (%rdx)
jne 0x9c48
addq $0x8, %rdx
movl %ebp, %edi
movq %r14, %rsi
callq 0x9bfb
movq (%rbx), %rbx
addq $0x10, %rbx
jmp 0x9c0a
addq $0x8, %rsi
movl %ebp, %edi
movq %rbx, %rdx
callq 0x9bfb
movq (%r14), %r14
addq $0x10, %r14
jmp 0x9c0a
cmpq %rdx, %rsi
je 0x9d18
leal -0x1(%rdi), %eax
cmpl $0x1, %eax
ja 0x9c64
movq %r14, %rsi
movq %r14, %rdx
callq 0x9bfb
cmpl $0x2, %ebp
je 0x9cc0
cmpl $0x1, %ebp
jne 0x9d18
movq (%r14), %rdi
movq (%rbx), %rsi
callq 0x9526
testq %rax, %rax
je 0x9d18
movq %rax, %r15
movq (%r14), %rdi
callq 0x9034
movq (%rbx), %rdi
callq 0x9034
movl $0x18, %edi
callq 0x2220
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movq $0x0, 0x10(%rax)
movl $0x7, (%rax)
leaq 0xc55a(%rip), %rcx      # 0x16218
jmp 0x9d08
movq (%r14), %rdi
movq (%rbx), %rsi
callq 0x97c4
testq %rax, %rax
je 0x9d18
movq %rax, %r15
movq (%r14), %rdi
callq 0x9034
movq (%rbx), %rdi
callq 0x9034
movl $0x18, %edi
callq 0x2220
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movq $0x0, 0x10(%rax)
movl $0x7, (%rax)
leaq 0xc580(%rip), %rcx      # 0x16288
movq %rcx, 0x8(%rax)
movq %rax, (%r14)
movq %r15, (%rbx)
incl 0xe09c(%rip)            # 0x17db4
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./expr.c
// Function: expr_contains_symbol
int expr_contains_symbol(struct expr *dep, struct symbol *sym)
{
	if (!dep)
		return 0;

	switch (dep->type) {
	case E_AND:
	case E_OR:
		return expr_contains_symbol(dep->left.expr, sym) ||
		       expr_contains_symbol(dep->right.expr, sym);
	case E_SYMBOL:
		return dep->left.sym == sym;
	case E_EQUAL:
	case E_UNEQUAL:
		return dep->left.sym == sym ||
		       dep->right.sym == sym;
	case E_NOT:
		return expr_contains_symbol(dep->left.expr, sym);
	default:
		;
	}
	return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
leaq 0x23a8(%rip), %r15      # 0xc594
xorl %eax, %eax
testq %r14, %r14
je 0xa240
movl (%r14), %ecx
decl %ecx
cmpl $0x6, %ecx
ja 0xa240
movslq (%r15,%rcx,4), %rcx
addq %r15, %rcx
jmpq *%rcx
movq 0x8(%r14), %rdi
movq %rbx, %rsi
callq 0xa1da
testl %eax, %eax
jne 0xa230
movq 0x10(%r14), %r14
jmp 0xa1ec
movq 0x8(%r14), %r14
jmp 0xa1ec
cmpq %rbx, 0x8(%r14)
je 0xa230
xorl %eax, %eax
cmpq %rbx, 0x10(%r14)
jmp 0xa23d
movl $0x1, %eax
jmp 0xa240
xorl %eax, %eax
cmpq %rbx, 0x8(%r14)
sete %al
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./expr.c
// Function: expr_depends_symbol
bool expr_depends_symbol(struct expr *dep, struct symbol *sym)
{
	if (!dep)
		return false;

	switch (dep->type) {
	case E_AND:
		return expr_depends_symbol(dep->left.expr, sym) ||
		       expr_depends_symbol(dep->right.expr, sym);
	case E_SYMBOL:
		return dep->left.sym == sym;
	case E_EQUAL:
		if (dep->left.sym == sym) {
			if (dep->right.sym == &symbol_yes || dep->right.sym == &symbol_mod)
				return true;
		}
		break;
	case E_UNEQUAL:
		if (dep->left.sym == sym) {
			if (dep->right.sym == &symbol_no)
				return true;
		}
		break;
	default:
		;
	}
 	return false;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
testq %rbx, %rbx
je 0xa2c9
movl (%rbx), %eax
cmpl $0x2, %eax
jne 0xa272
movq 0x8(%rbx), %rdi
movq %r14, %rsi
callq 0xa246
testb %al, %al
jne 0xa2cd
movq 0x10(%rbx), %rbx
jmp 0xa250
cmpl $0x4, %eax
je 0xa28a
cmpl $0x5, %eax
je 0xa2b6
cmpl $0x7, %eax
jne 0xa2c9
cmpq %r14, 0x8(%rbx)
sete %al
jmp 0xa2cf
cmpq %r14, 0x8(%rbx)
jne 0xa2c9
movq 0x10(%rbx), %rax
leaq 0xbfed(%rip), %rcx      # 0x16288
cmpq %rcx, %rax
sete %cl
leaq 0xc050(%rip), %rdx      # 0x162f8
cmpq %rdx, %rax
sete %al
orb %cl, %al
movb $0x1, %al
je 0xa2c9
jmp 0xa2cf
cmpq %r14, 0x8(%rbx)
jne 0xa2c9
leaq 0xbf55(%rip), %rax      # 0x16218
cmpq %rax, 0x10(%rbx)
je 0xa2cd
xorl %eax, %eax
jmp 0xa2cf
movb $0x1, %al
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./expr.c
// Function: expr_extract_eq_and
struct expr *expr_extract_eq_and(struct expr **ep1, struct expr **ep2)
{
	struct expr *tmp = NULL;
	expr_extract_eq(E_AND, &tmp, ep1, ep2);
	if (tmp) {
		*ep1 = expr_eliminate_yn(*ep1);
		*ep2 = expr_eliminate_yn(*ep2);
	}
	return tmp;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rsi, %rbx
movq %rdi, %r14
leaq 0x8(%rsp), %r15
movq $0x0, (%r15)
movl $0x2, %edi
movq %r15, %rsi
movq %r14, %rdx
movq %rbx, %rcx
callq 0xa336
cmpq $0x0, (%r15)
je 0xa327
movq (%r14), %r15
movq %r15, %rdi
callq 0x921d
movq %r15, (%r14)
movq (%rbx), %r14
movq %r14, %rdi
callq 0x921d
movq %r14, (%rbx)
movq 0x8(%rsp), %rax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./expr.c
// Function: expr_extract_eq
void expr_extract_eq(enum expr_type type, struct expr **ep, struct expr **ep1, struct expr **ep2)
{
#define e1 (*ep1)
#define e2 (*ep2)
	if (e1->type == type) {
		expr_extract_eq(type, ep, &e1->left.expr, &e2);
		expr_extract_eq(type, ep, &e1->right.expr, &e2);
		return;
	}
	if (e2->type == type) {
		expr_extract_eq(type, ep, ep1, &e2->left.expr);
		expr_extract_eq(type, ep, ep1, &e2->right.expr);
		return;
	}
	if (expr_eq(e1, e2)) {
		*ep = *ep ? expr_alloc_two(type, *ep, e1) : e1;
		expr_free(e2);
		if (type == E_AND) {
			e1 = expr_alloc_symbol(&symbol_yes);
			e2 = expr_alloc_symbol(&symbol_yes);
		} else if (type == E_OR) {
			e1 = expr_alloc_symbol(&symbol_no);
			e2 = expr_alloc_symbol(&symbol_no);
		}
	}
#undef e1
#undef e2
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %rbx
movq %rdx, %r14
movq %rsi, %r15
movl %edi, %ebp
movq (%r14), %rdx
cmpl %ebp, (%rdx)
je 0xa374
movq (%rbx), %rcx
cmpl %ebp, (%rcx)
jne 0xa38e
addq $0x8, %rcx
movl %ebp, %edi
movq %r15, %rsi
movq %r14, %rdx
callq 0xa336
movq (%rbx), %rbx
addq $0x10, %rbx
jmp 0xa34c
addq $0x8, %rdx
movl %ebp, %edi
movq %r15, %rsi
movq %rbx, %rcx
callq 0xa336
movq (%r14), %r14
addq $0x10, %r14
jmp 0xa34c
movq %rdx, %rdi
movq %rcx, %rsi
callq 0x93aa
testl %eax, %eax
je 0xa44e
movq (%r15), %r13
movq (%r14), %r12
testq %r13, %r13
je 0xa3c9
movl $0x18, %edi
callq 0x2220
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movl %ebp, (%rax)
movq %r13, 0x8(%rax)
movq %r12, 0x10(%rax)
movq %rax, %r12
movq %r12, (%r15)
movq (%rbx), %rdi
callq 0x9034
cmpl $0x1, %ebp
je 0xa405
cmpl $0x2, %ebp
jne 0xa44e
movl $0x18, %edi
callq 0x2220
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
xorl %r15d, %r15d
movq %r15, 0x10(%rax)
movl $0x7, %ebp
movl %ebp, (%rax)
leaq 0xbe85(%rip), %r12      # 0x16288
jmp 0xa42a
movl $0x18, %edi
callq 0x2220
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
xorl %r15d, %r15d
movq %r15, 0x10(%rax)
movl $0x7, %ebp
movl %ebp, (%rax)
leaq 0xbdee(%rip), %r12      # 0x16218
movq %r12, 0x8(%rax)
movq %rax, (%r14)
movl $0x18, %edi
callq 0x2220
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movq %r15, 0x10(%rax)
movl %ebp, (%rax)
movq %r12, 0x8(%rax)
movq %rax, (%rbx)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./expr.c
// Function: expr_extract_eq_or
struct expr *expr_extract_eq_or(struct expr **ep1, struct expr **ep2)
{
	struct expr *tmp = NULL;
	expr_extract_eq(E_OR, &tmp, ep1, ep2);
	if (tmp) {
		*ep1 = expr_eliminate_yn(*ep1);
		*ep2 = expr_eliminate_yn(*ep2);
	}
	return tmp;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rsi, %rbx
movq %rdi, %r14
leaq 0x8(%rsp), %r15
movq $0x0, (%r15)
movl $0x1, %edi
movq %r15, %rsi
movq %r14, %rdx
movq %rbx, %rcx
callq 0xa336
cmpq $0x0, (%r15)
je 0xa4ad
movq (%r14), %r15
movq %r15, %rdi
callq 0x921d
movq %r15, (%r14)
movq (%rbx), %r14
movq %r14, %rdi
callq 0x921d
movq %r14, (%rbx)
movq 0x8(%rsp), %rax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./expr.c
// Function: expr_compare_type
int expr_compare_type(enum expr_type t1, enum expr_type t2)
{
#if 0
	return 1;
#else
	if (t1 == t2)
		return 0;
	switch (t1) {
	case E_EQUAL:
	case E_UNEQUAL:
		if (t2 == E_NOT)
			return 1;
	case E_NOT:
		if (t2 == E_AND)
			return 1;
	case E_AND:
		if (t2 == E_OR)
			return 1;
	case E_OR:
		if (t2 == E_CHOICE)
			return 1;
	case E_CHOICE:
		if (t2 == 0)
			return 1;
	default:
		return -1;
	}
	printf("[%dgt%d?]", t1, t2);
	return 0;
#endif
}

// Assembly:
xorl %eax, %eax
cmpl %esi, %edi
je 0xa9c9
decl %edi
cmpl $0x5, %edi
ja 0xa9ce
leaq 0x1c6f(%rip), %rax      # 0xc5e8
movslq (%rax,%rdi,4), %rcx
addq %rax, %rcx
jmpq *%rcx
cmpl $0x7, %esi
jae 0xa9ce
movl %esi, %eax
leaq 0x68f8(%rip), %rcx      # 0x11288
jmp 0xa9c6
cmpl $0x7, %esi
jae 0xa9ce
movl %esi, %eax
leaq 0x6904(%rip), %rcx      # 0x112a4
jmp 0xa9c6
cmpl $0x6, %esi
setne %al
testl %esi, %esi
setne %cl
andb %al, %cl
movzbl %cl, %eax
negl %eax
orl $0x1, %eax
retq
cmpl $0x7, %esi
jae 0xa9ce
movl %esi, %eax
leaq 0x68fa(%rip), %rcx      # 0x112c0
movl (%rcx,%rax,4), %eax
retq
testl %esi, %esi
je 0xa9d4
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
retq
movl $0x1, %eax
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./symbol.c
// Function: prop_alloc
struct property *prop_alloc(enum prop_type type, struct symbol *sym)
{
	struct property *prop;
	struct property **propp;

	prop = malloc(sizeof(*prop));
	memset(prop, 0, sizeof(*prop));
	prop->type = type;
	prop->sym = sym;
	prop->file = current_file;
	prop->lineno = zconf_lineno();

	/* append property to the prop list of symbol */
	if (sym) {
		for (propp = &sym->prop; *propp; propp = &(*propp)->next)
			;
		*propp = prop;
	}

	return prop;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movq %rsi, %rbx
movl %edi, %ebp
movl $0x50, %edi
callq 0x2220
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rax)
movups %xmm0, (%rax)
movups %xmm0, 0x20(%rax)
movups %xmm0, 0x30(%rax)
movups %xmm0, 0x40(%rax)
movl %ebp, 0x10(%rax)
movq %rbx, 0x8(%rax)
movq 0xc111(%rip), %rcx      # 0x16d90
movq %rcx, 0x40(%rax)
cmpq $0x0, 0xc115(%rip)      # 0x16da0
je 0xac94
movl 0x18(%rcx), %ecx
decl %ecx
jmp 0xac96
xorl %ecx, %ecx
movl %ecx, 0x48(%rax)
testq %rbx, %rbx
je 0xacb0
addq $0x48, %rbx
movq %rbx, %rcx
movq (%rbx), %rbx
testq %rbx, %rbx
jne 0xaca2
movq %rax, (%rcx)
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./symbol.c
// Function: sym_get_type
enum symbol_type sym_get_type(struct symbol *sym)
{
	enum symbol_type type = sym->type;

	if (type == S_TRISTATE) {
		if (sym_is_choice_value(sym) && sym->visible == yes)
			type = S_BOOLEAN;
		else {
			sym_calc_value(modules_sym);
			if (modules_sym->curr.tri == no)
				type = S_BOOLEAN;
		}
	}
	return type;
}

// Assembly:
movl 0x18(%rdi), %eax
cmpl $0x2, %eax
jne 0xacf4
testb $0x20, 0x44(%rdi)
je 0xacd0
movl $0x1, %eax
cmpl $0x2, 0x40(%rdi)
je 0xacf4
pushq %rax
movq 0xb7d8(%rip), %rdi      # 0x164b0
callq 0x8244
movq 0xb7cc(%rip), %rax      # 0x164b0
cmpl $0x1, 0x28(%rax)
movl $0x2, %eax
sbbl $0x0, %eax
addq $0x8, %rsp
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./symbol.c
// Function: sym_get_default_prop
struct property *sym_get_default_prop(struct symbol *sym)
{
	struct property *prop;

	for_all_defaults(sym, prop) {
		prop->visible.tri = expr_calc_value(prop->visible.expr);
		if (prop->visible.tri != no)
			return prop;
	}
	return NULL;
}

// Assembly:
pushq %rbx
movq 0x48(%rdi), %rbx
testq %rbx, %rbx
je 0xad35
cmpl $0x4, 0x10(%rbx)
jne 0xad30
movq 0x20(%rbx), %rdi
callq 0xa799
movl %eax, 0x28(%rbx)
testl %eax, %eax
jne 0xad37
movq (%rbx), %rbx
jmp 0xad15
xorl %ebx, %ebx
movq %rbx, %rax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./symbol.c
// Function: sym_get_range_prop
struct property *sym_get_range_prop(struct symbol *sym)
{
	struct property *prop;

	for_all_properties(sym, prop, P_RANGE) {
		prop->visible.tri = expr_calc_value(prop->visible.expr);
		if (prop->visible.tri != no)
			return prop;
	}
	return NULL;
}

// Assembly:
pushq %rbx
movq 0x48(%rdi), %rbx
testq %rbx, %rbx
je 0xad61
cmpl $0x7, 0x10(%rbx)
jne 0xad5c
movq 0x20(%rbx), %rdi
callq 0xa799
movl %eax, 0x28(%rbx)
testl %eax, %eax
jne 0xad63
movq (%rbx), %rbx
jmp 0xad41
xorl %ebx, %ebx
movq %rbx, %rax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./symbol.c
// Function: sym_calc_visibility
static void sym_calc_visibility(struct symbol *sym)
{
	struct property *prop;
	tristate tri;

	/* any prompt visible? */
	tri = no;
	for_all_prompts(sym, prop) {
		prop->visible.tri = expr_calc_value(prop->visible.expr);
		tri = E_OR(tri, prop->visible.tri);
	}
	if (sym->visible != tri) {
		sym->visible = tri;
		sym_set_changed(sym);
	}
	if (sym_is_choice_value(sym))
		return;
	tri = no;
	if (sym->rev_dep.expr)
		tri = expr_calc_value(sym->rev_dep.expr);
	if (sym->rev_dep.tri != tri) {
		sym->rev_dep.tri = tri;
		sym_set_changed(sym);
	}
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
movq 0x48(%rdi), %r14
xorl %ebp, %ebp
testq %r14, %r14
je 0xad98
cmpq $0x0, 0x18(%r14)
je 0xad93
movq 0x20(%r14), %rdi
callq 0xa799
movl %eax, 0x28(%r14)
cmpl %eax, %ebp
cmovbel %eax, %ebp
movq (%r14), %r14
jmp 0xad75
cmpl %ebp, 0x40(%rbx)
jne 0xadb3
testb $0x20, 0x44(%rbx)
jne 0xaddc
movq 0x60(%rbx), %rdi
testq %rdi, %rdi
je 0xadd5
callq 0xa799
jmp 0xadd7
movl %ebp, 0x40(%rbx)
orb $0x4, 0x45(%rbx)
movq 0x48(%rbx), %rax
testq %rax, %rax
je 0xad9d
movq 0x38(%rax), %rcx
testq %rcx, %rcx
je 0xadd0
orb $0x1, 0x30(%rcx)
movq (%rax), %rax
jmp 0xadbe
xorl %eax, %eax
cmpl %eax, 0x68(%rbx)
jne 0xade1
popq %rbx
popq %r14
popq %rbp
retq
movl %eax, 0x68(%rbx)
orb $0x4, 0x45(%rbx)
movq 0x48(%rbx), %rax
testq %rax, %rax
je 0xaddc
movq 0x38(%rax), %rcx
testq %rcx, %rcx
je 0xadfe
orb $0x1, 0x30(%rcx)
movq (%rax), %rax
jmp 0xadec
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./symbol.c
// Function: sym_set_changed
void sym_set_changed(struct symbol *sym)
{
	struct property *prop;

	sym->flags |= SYMBOL_CHANGED;
	for (prop = sym->prop; prop; prop = prop->next) {
		if (prop->menu)
			prop->menu->flags |= MENU_CHANGED;
	}
}

// Assembly:
orb $0x4, 0x45(%rdi)
movq 0x48(%rdi), %rax
testq %rax, %rax
je 0xae22
movq 0x38(%rax), %rcx
testq %rcx, %rcx
je 0xae1d
orb $0x1, 0x30(%rcx)
movq (%rax), %rax
jmp 0xae0b
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./symbol.c
// Function: sym_set_all_changed
void sym_set_all_changed(void)
{
	struct symbol *sym;
	int i;

	for_all_symbols(i, sym)
		sym_set_changed(sym);
}

// Assembly:
xorl %eax, %eax
leaq 0xb6e4(%rip), %rcx      # 0x16510
movq (%rcx,%rax,8), %rdx
testq %rdx, %rdx
je 0xae5f
cmpl $0x6, 0x18(%rdx)
jne 0xae40
movq (%rdx), %rdx
jmp 0xae30
orb $0x4, 0x45(%rdx)
movq 0x48(%rdx), %rsi
testq %rsi, %rsi
je 0xae3b
movq 0x38(%rsi), %rdi
testq %rdi, %rdi
je 0xae5a
orb $0x1, 0x30(%rdi)
movq (%rsi), %rsi
jmp 0xae48
incq %rax
cmpq $0x101, %rax            # imm = 0x101
jne 0xae2c
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./symbol.c
// Function: sym_tristate_within_range
bool sym_tristate_within_range(struct symbol *sym, tristate val)
{
	int type = sym_get_type(sym);

	if (sym->visible == no)
		return false;

	if (type != S_BOOLEAN && type != S_TRISTATE)
		return false;

	if (type == S_BOOLEAN && val == mod)
		return false;
	if (sym->visible <= sym->rev_dep.tri)
		return false;
	if (sym_is_choice_value(sym) && sym->visible == yes)
		return val == yes;
	return val >= sym->rev_dep.tri && val <= sym->visible;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0xacb7
movl 0x40(%r14), %ecx
testl %ecx, %ecx
sete %dl
leal -0x3(%rax), %esi
cmpl $-0x2, %esi
setb %sil
orb %dl, %sil
jne 0xaebb
xorl $0x1, %eax
movl %ebx, %edx
xorl $0x1, %edx
orl %eax, %edx
je 0xaebb
movl 0x68(%r14), %eax
cmpl %eax, %ecx
jbe 0xaebb
cmpl $0x2, %ecx
jne 0xaec5
movl 0x44(%r14), %edx
andl $0x20, %edx
je 0xaec5
cmpl $0x2, %ebx
sete %al
jmp 0xaebd
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
cmpl %ebx, %eax
setbe %dl
cmpl %ebx, %ecx
setae %al
andb %dl, %al
jmp 0xaebd
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./symbol.c
// Function: sym_set_tristate_value
bool sym_set_tristate_value(struct symbol *sym, tristate val)
{
	tristate oldval = sym_get_tristate_value(sym);

	if (oldval != val && !sym_tristate_within_range(sym, val))
		return false;

	if (sym->flags & SYMBOL_NEW) {
		sym->flags &= ~SYMBOL_NEW;
		sym_set_changed(sym);
	}
	if (sym_is_choice_value(sym) && val == yes) {
		struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym));

		cs->user.val = sym;
		cs->flags &= ~SYMBOL_NEW;
	}

	sym->user.tri = val;
	if (oldval != val) {
		sym_clear_all_valid();
		if (sym == modules_sym)
			sym_set_all_changed();
	}

	return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
movl 0x28(%rdi), %r15d
cmpl %esi, %r15d
je 0xaef6
movq %rbx, %rdi
movl %ebp, %esi
callq 0xae6b
testb %al, %al
je 0xaf71
movl 0x44(%rbx), %eax
btl $0xb, %eax
jb 0xaf49
cmpl $0x2, %ebp
jne 0xaf29
movl 0x44(%rbx), %eax
andl $0x20, %eax
je 0xaf29
leaq 0x48(%rbx), %rax
movq (%rax), %rax
cmpl $0x5, 0x10(%rax)
jne 0xaf10
movq 0x30(%rax), %rax
movq 0x8(%rax), %rax
movq %rbx, 0x30(%rax)
andb $-0x9, 0x45(%rax)
movl %ebp, 0x38(%rbx)
movb $0x1, %r14b
cmpl %ebp, %r15d
je 0xaf74
callq 0x8d42
cmpq %rbx, 0xb570(%rip)      # 0x164b0
jne 0xaf74
callq 0xae23
jmp 0xaf74
andl $0xfffff3ff, %eax       # imm = 0xFFFFF3FF
orl $0x400, %eax            # imm = 0x400
movl %eax, 0x44(%rbx)
movq 0x48(%rbx), %rax
testq %rax, %rax
je 0xaeff
movq 0x38(%rax), %rcx
testq %rcx, %rcx
je 0xaf6c
orb $0x1, 0x30(%rcx)
movq (%rax), %rax
jmp 0xaf5a
xorl %r14d, %r14d
movl %r14d, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./symbol.c
// Function: sym_toggle_tristate_value
tristate sym_toggle_tristate_value(struct symbol *sym)
{
	tristate oldval, newval;

	oldval = newval = sym_get_tristate_value(sym);
	do {
		switch (newval) {
		case no:
			newval = mod;
			break;
		case mod:
			newval = yes;
			break;
		case yes:
			newval = no;
			break;
		}
		if (sym_set_tristate_value(sym, newval))
			break;
	} while (oldval != newval);
	return newval;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movl 0x28(%rdi), %r14d
leaq 0x73b1(%rip), %r15      # 0x12348
movl %r14d, %ebp
cmpl $0x2, %ebp
ja 0xafa5
movl %ebp, %eax
movl (%r15,%rax,4), %ebp
movq %rbx, %rdi
movl %ebp, %esi
callq 0xaed3
testb %al, %al
jne 0xafb8
cmpl %ebp, %r14d
jne 0xaf9a
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./symbol.c
// Function: sym_set_string_value
bool sym_set_string_value(struct symbol *sym, const char *newval)
{
	const char *oldval;
	char *val;
	int size;

	switch (sym->type) {
	case S_BOOLEAN:
	case S_TRISTATE:
		switch (newval[0]) {
		case 'y': case 'Y':
			return sym_set_tristate_value(sym, yes);
		case 'm': case 'M':
			return sym_set_tristate_value(sym, mod);
		case 'n': case 'N':
			return sym_set_tristate_value(sym, no);
		}
		return false;
	default:
		;
	}

	if (!sym_string_within_range(sym, newval))
		return false;

	if (sym->flags & SYMBOL_NEW) {
		sym->flags &= ~SYMBOL_NEW;
		sym_set_changed(sym);
	}

	oldval = sym->user.val;
	size = strlen(newval) + 1;
	if (sym->type == S_HEX && (newval[0] != '0' || (newval[1] != 'x' && newval[1] != 'X'))) {
		size += 2;
		sym->user.val = val = malloc(size);
		*val++ = '0';
		*val++ = 'x';
	} else if (!oldval || strcmp(oldval, newval))
		sym->user.val = val = malloc(size);
	else
		return true;

	strcpy(val, newval);
	free((void *)oldval);
	sym_clear_all_valid();

	return true;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movl 0x18(%rdi), %eax
decl %eax
cmpl $0x1, %eax
ja 0xb038
movzbl (%r14), %ecx
xorl %eax, %eax
addl $-0x4d, %ecx
cmpl $0x2c, %ecx
ja 0xb127
movabsq $0x100000001, %rdx      # imm = 0x100000001
btq %rcx, %rdx
jb 0xb0b0
movabsq $0x200000002, %rdx      # imm = 0x200000002
btq %rcx, %rdx
jb 0xb0a9
movabsq $0x100000001000, %rdx   # imm = 0x100000001000
btq %rcx, %rdx
jae 0xb127
movq %rbx, %rdi
movl $0x2, %esi
jmp 0xb0b8
movq %rbx, %rdi
movq %r14, %rsi
callq 0x85b8
testb %al, %al
je 0xb0a5
movl 0x44(%rbx), %eax
btl $0xb, %eax
jb 0xb0c8
movq 0x30(%rbx), %r15
movq %r14, %rdi
callq 0x20e0
movq %rax, %r12
cmpl $0x4, 0x18(%rbx)
jne 0xb07c
cmpb $0x30, (%r14)
jne 0xb0f4
movzbl 0x1(%r14), %eax
orl $0x20, %eax
cmpl $0x78, %eax
jne 0xb0f4
testq %r15, %r15
je 0xb094
movq %r15, %rdi
movq %r14, %rsi
callq 0x2180
testl %eax, %eax
je 0xb125
incl %r12d
movslq %r12d, %rdi
callq 0x2220
movq %rax, 0x30(%rbx)
jmp 0xb10d
xorl %eax, %eax
jmp 0xb127
movq %rbx, %rdi
xorl %esi, %esi
jmp 0xb0b8
movq %rbx, %rdi
movl $0x1, %esi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0xaed3
andl $0xfffff3ff, %eax       # imm = 0xFFFFF3FF
orl $0x400, %eax            # imm = 0x400
movl %eax, 0x44(%rbx)
movq 0x48(%rbx), %rax
testq %rax, %rax
je 0xb050
movq 0x38(%rax), %rcx
testq %rcx, %rcx
je 0xb0ef
orb $0x1, 0x30(%rcx)
movq (%rax), %rax
jmp 0xb0d9
addl $0x3, %r12d
movslq %r12d, %rdi
callq 0x2220
movq %rax, 0x30(%rbx)
movw $0x7830, (%rax)         # imm = 0x7830
addq $0x2, %rax
movq %rax, %rdi
movq %r14, %rsi
callq 0x2090
movq %r15, %rdi
callq 0x2040
callq 0x8d42
movb $0x1, %al
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./symbol.c
// Function: sym_check_expr_deps
static struct symbol *sym_check_expr_deps(struct expr *e)
{
	struct symbol *sym;

	if (!e)
		return NULL;
	switch (e->type) {
	case E_OR:
	case E_AND:
		sym = sym_check_expr_deps(e->left.expr);
		if (sym)
			return sym;
		return sym_check_expr_deps(e->right.expr);
	case E_NOT:
		return sym_check_expr_deps(e->left.expr);
	case E_EQUAL:
	case E_UNEQUAL:
		sym = sym_check_deps(e->left.sym);
		if (sym)
			return sym;
		return sym_check_deps(e->right.sym);
	case E_SYMBOL:
		return sym_check_deps(e->left.sym);
	default:
		break;
	}
	printf("Oops! How to check %d?\n", e->type);
	return NULL;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %r14
xorl %ebx, %ebx
leaq 0x14d2(%rip), %r15      # 0xc620
testq %r14, %r14
je 0xb1aa
movl (%r14), %esi
leal -0x1(%rsi), %eax
cmpl $0x6, %eax
ja 0xb19a
movslq (%r15,%rax,4), %rax
addq %r15, %rax
jmpq *%rax
movq 0x8(%r14), %rdi
callq 0xb13d
testq %rax, %rax
jne 0xb18f
movq 0x10(%r14), %r14
jmp 0xb14e
movq 0x8(%r14), %r14
jmp 0xb14e
movq 0x8(%r14), %rdi
callq 0x6da7
testq %rax, %rax
je 0xb1b3
movq %rax, %rbx
jmp 0xb1aa
movq 0x8(%r14), %rdi
jmp 0xb1b7
leaq 0x7189(%rip), %rdi      # 0x1232a
xorl %ebx, %ebx
xorl %eax, %eax
callq 0x2100
movq %rbx, %rax
popq %rbx
popq %r14
popq %r15
retq
movq 0x10(%r14), %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x6da7
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./menu.c
// Function: menu_check_dep
struct expr *menu_check_dep(struct expr *e)
{
	if (!e)
		return e;

	switch (e->type) {
	case E_NOT:
		e->left.expr = menu_check_dep(e->left.expr);
		break;
	case E_OR:
	case E_AND:
		e->left.expr = menu_check_dep(e->left.expr);
		e->right.expr = menu_check_dep(e->right.expr);
		break;
	case E_SYMBOL:
		/* change 'm' into 'm' && MODULES */
		if (e->left.sym == &symbol_mod)
			return expr_alloc_and(e, expr_alloc_symbol(modules_sym));
		break;
	default:
		break;
	}
	return e;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
testq %rdi, %rdi
je 0xb266
movq %rdi, %rbx
movl (%rdi), %eax
leal -0x1(%rax), %ecx
cmpl $0x2, %ecx
jb 0xb26a
cmpl $0x3, %eax
je 0xb286
cmpl $0x7, %eax
jne 0xb293
leaq 0xb0e7(%rip), %rax      # 0x162f8
cmpq %rax, 0x8(%rbx)
jne 0xb293
movq 0xb292(%rip), %r15      # 0x164b0
movl $0x18, %edi
callq 0x2220
movq %rax, %r14
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movq $0x0, 0x10(%rax)
movl $0x7, (%rax)
movq %r15, 0x8(%rax)
movl $0x18, %edi
callq 0x2220
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movl $0x2, (%rax)
movq %rbx, 0x8(%rax)
movq %r14, 0x10(%rax)
movq %rax, %rbx
jmp 0xb293
xorl %ebx, %ebx
jmp 0xb293
movq 0x8(%rbx), %rdi
callq 0xb1e1
movq %rax, 0x8(%rbx)
movq 0x10(%rbx), %rdi
callq 0xb1e1
movq %rax, 0x10(%rbx)
jmp 0xb293
movq 0x8(%rbx), %rdi
callq 0xb1e1
movq %rax, 0x8(%rbx)
movq %rbx, %rax
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/saltyJeff[P]uClibcpp/extra/config/./menu.c
// Function: menu_get_parent_menu
struct menu *menu_get_parent_menu(struct menu *menu)
{
	enum prop_type type;

	for (; menu != &rootmenu; menu = menu->parent) {
		type = menu->prompt ? menu->prompt->type : 0;
		if (type == P_MENU)
			break;
	}
	return menu;
}

// Assembly:
movq %rdi, %rax
leaq 0xb20a(%rip), %rcx      # 0x164b8
cmpq %rcx, %rdi
je 0xb2cb
movq 0x20(%rax), %rdx
testq %rdx, %rdx
je 0xb2c2
cmpl $0x3, 0x10(%rdx)
je 0xb2cb
movq 0x8(%rax), %rax
cmpq %rcx, %rax
jne 0xb2b3
retq
// File: /workspace/github_c_makefile_star2_O1/alexj136[P]minijit/src/util.c
// Function: str_equal
bool str_equal(char *str1, char *str2) {
    // If the pointers are to the same string, or they're both null, return true
    if(str1 == str2) { return true; }
    // If only one is null, return false
    else if(!(str1 && str2)) { return false; }
	// If they have different lengths, we can say immediately that they differ
    else if(strlen(str1) != strlen(str2)) { return 0; }
	// If they are she same length, we must use strncmp to compare them. strncmp
	// returns 0 for identical strings, and other ints for different ones, so we
	// negate the result.
	else { return !strncmp(str1, str2, strlen(str1)); }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
cmpq %rsi, %rdi
je 0x6595
movq %rsi, %r14
movq %rdi, %r15
testq %rdi, %rdi
sete %al
testq %rsi, %rsi
sete %cl
xorl %ebx, %ebx
orb %al, %cl
jne 0x659a
movq %r15, %rdi
callq 0x60d0
movq %rax, %r12
movq %r14, %rdi
callq 0x60d0
cmpq %rax, %r12
jne 0x659a
movq %r15, %rdi
movq %r14, %rsi
movq %r12, %rdx
callq 0x6060
xorl %ebx, %ebx
testl %eax, %eax
sete %bl
jmp 0x659a
movl $0x1, %ebx
movl %ebx, %eax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/alexj136[P]minijit/src/util.c
// Function: str_to_int
IntRef *str_to_int(char *str) {
    int result = 0;
    char *char_ptr = str;
    bool no_errors = true;
    while(*char_ptr != '\0' && no_errors) {
        if(isdigit(*char_ptr)) {
            result = (result * 10) + (*char_ptr - '0');
            char_ptr++;
        }
        else {
            no_errors = false;
        }
    }
    return no_errors ? IntRef_init(result) : NULL;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movb (%rdi), %r15b
testb %r15b, %r15b
je 0x6628
movq %rdi, %rbx
callq 0x61e0
movq (%rax), %rax
xorl %r14d, %r14d
movl %r14d, %edx
movsbl %r15b, %ecx
movsbq %cl, %rsi
movzwl (%rax,%rsi,2), %esi
andl $0x800, %esi            # imm = 0x800
leal (%rdx,%rdx,4), %edi
leal (%rcx,%rdi,2), %r14d
addl $-0x30, %r14d
movl %esi, %ecx
shrl $0xb, %ecx
testq %rsi, %rsi
cmovel %edx, %r14d
je 0x662d
movb (%rbx,%rcx), %r15b
addq %rcx, %rbx
testb %r15b, %r15b
jne 0x65ec
jmp 0x662d
movb $0x1, %cl
xorl %r14d, %r14d
testb %cl, %cl
je 0x6640
movl $0x4, %edi
callq 0x62ec
movl %r14d, (%rax)
jmp 0x6642
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/alexj136[P]minijit/src/syntax.c
// Function: Prog_init
Prog *Prog_init(FuncVector *funcs, IntRefVector *func_name_map,
        charVector *global_name_map) {

    Prog *prog            = challoc(sizeof(Prog));
    prog->func_name_map   = func_name_map;
    prog->global_name_map = global_name_map;
    prog->funcs           = funcs;
    return prog;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
movl $0x18, %edi
callq 0x62ec
movq %r14, 0x8(%rax)
movq %rbx, 0x10(%rax)
movq %r15, (%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/alexj136[P]minijit/src/syntax.c
// Function: Prog_print
void Prog_print(Prog *prog, int indent) {
    put_indent(indent);
    int idx;
    for(idx = 0; idx < Prog_num_funcs(prog); idx++) {
        Func_print(Prog_func(prog, idx), indent, prog->global_name_map);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
movl %esi, %edi
callq 0x65a5
movq (%r14), %rdi
callq 0x86b3
testl %eax, %eax
jle 0x86a8
xorl %r15d, %r15d
movq (%r14), %rdi
movl %r15d, %esi
callq 0x883f
movq 0x10(%r14), %rdx
movq %rax, %rdi
movl %ebx, %esi
callq 0x8765
incl %r15d
movq (%r14), %rdi
callq 0x86b3
cmpl %eax, %r15d
jl 0x867f
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/alexj136[P]minijit/src/syntax.c
// Function: Func_print
void Func_print(Func *func, int indent, charVector *global_name_map) {

    put_indent(indent);
    printf("%s(", charVector_get(global_name_map, Func_name(func)));

    int idx;
    for(idx = 0; idx < Func_num_args(func); idx++) {
        printf("%s", charVector_get(global_name_map,
                IntRef_value(IntRefVector_get(func->local_name_map, idx))));
        if(idx + 1 < Func_num_args(func)) { printf(", "); }
    }
    printf(") {\n");
    Comm_print(Func_body(func), indent + 1, func->local_name_map,
            global_name_map);
    printf("\n");
    put_indent(indent);
    printf("}\n");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %r14
movq %rdi, %r15
movq %rsi, -0x30(%rbp)
movl %esi, %edi
callq 0x65a5
movl (%r15), %esi
movq %r14, %rdi
callq 0x693b
leaq 0x12b4d(%rip), %rdi     # 0x1b2e3
movq %rax, %rsi
xorl %eax, %eax
callq 0x6100
cmpl $0x0, 0x4(%r15)
jle 0x87f1
leaq 0x12b39(%rip), %r12     # 0x1b2e7
leaq 0x133f7(%rip), %r13     # 0x1bbac
xorl %ebx, %ebx
movq 0x8(%r15), %rdi
movl %ebx, %esi
callq 0x787d
movl (%rax), %esi
movq %r14, %rdi
callq 0x693b
movq %r12, %rdi
movq %rax, %rsi
xorl %eax, %eax
callq 0x6100
incl %ebx
cmpl 0x4(%r15), %ebx
jge 0x87eb
movq %r13, %rdi
xorl %eax, %eax
callq 0x6100
cmpl 0x4(%r15), %ebx
jl 0x87b7
leaq 0x12bf8(%rip), %rdi     # 0x1b3f0
callq 0x6070
movq 0x8(%r15), %rdx
movq 0x10(%r15), %rdi
movq -0x30(%rbp), %rbx
leal 0x1(%rbx), %esi
movq %r14, %rcx
callq 0x9749
movl $0xa, %edi
callq 0x6040
movl %ebx, %edi
callq 0x65a5
leaq 0x144a2(%rip), %rdi     # 0x1ccce
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x6070
// File: /workspace/github_c_makefile_star2_O1/alexj136[P]minijit/src/syntax.c
// Function: Prog_free
void Prog_free(Prog *prog) {
    FuncVector_free_elems(prog->funcs);
    IntRefVector_free_elems(prog->func_name_map);
    charVector_free_elems(prog->global_name_map);
    free(prog);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq (%rdi), %rdi
callq 0x8a77
movq 0x8(%rbx), %rdi
callq 0x7d8c
movq 0x10(%rbx), %rdi
callq 0x6e4a
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6030
// File: /workspace/github_c_makefile_star2_O1/alexj136[P]minijit/src/syntax.c
// Function: Func_eq
bool Func_eq(Func *f, Func *g) {
    return ((f->name) == (g->name))
            && (Func_num_args(f) == Func_num_args(g))
            && IntRefVector_eq(f->local_name_map, g->local_name_map)
            && Comm_eq(Func_body(f), Func_body(g));
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movl (%rdi), %eax
cmpl (%rsi), %eax
jne 0x94a7
movq %rsi, %rbx
movq %rdi, %r14
movl 0x4(%rdi), %eax
cmpl 0x4(%rsi), %eax
jne 0x94a7
movq 0x8(%r14), %rdi
movq 0x8(%rbx), %rsi
callq 0x8237
testl %eax, %eax
je 0x94a7
movq 0x10(%r14), %rdi
movq 0x10(%rbx), %rsi
popq %rbx
popq %r14
popq %rbp
jmp 0x96d8
xorl %eax, %eax
popq %rbx
popq %r14
popq %rbp
retq