LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O3/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 0x8722(%rip), %rbx      # 0x10ea5
cmovneq %rdi, %rbx
leaq 0x8723(%rip), %rdi      # 0x10eb1
leaq 0x8b73(%rip), %rsi      # 0x11308
callq 0x2280
testq %rax, %rax
je 0x882e
movq %rax, %r14
leaq 0x8710(%rip), %rdi      # 0x10ebd
movl $0x11, %esi
movl $0x1, %edx
movq %rax, %rcx
callq 0x22f0
movq 0xe602(%rip), %r15      # 0x16dc8
testq %r15, %r15
je 0x87fa
leaq 0x8704(%rip), %r12      # 0x10ed6
leaq 0x86f6(%rip), %r13      # 0x10ecf
cmpq $0x0, (%r15)
movq 0x10(%r15), %rdx
movq %r13, %rsi
cmoveq %r12, %rsi
movq %r14, %rdi
xorl %eax, %eax
callq 0x21b0
movq (%r15), %r15
testq %r15, %r15
jne 0x87d9
leaq 0x86da(%rip), %rdi      # 0x10edb
movl $0x49, %esi
movl $0x1, %edx
movq %r14, %rcx
callq 0x22f0
movq %r14, %rdi
callq 0x20d0
leaq 0x868f(%rip), %rdi      # 0x10eb1
movq %rbx, %rsi
callq 0x2290
xorl %eax, %eax
jmp 0x8833
movl $0x1, %eax
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/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 0x8946
movq %rdi, %r14
movl $0x18, %edi
callq 0x2230
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 0x892e
leaq 0x2c3e(%rip), %rcx      # 0xb53c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x8(%r14), %rdi
callq 0x88c5
movq %rax, 0x8(%rbx)
movq 0x10(%r14), %rdi
callq 0x88c5
movq %rax, 0x10(%rbx)
jmp 0x895d
movups 0x8(%r14), %xmm0
movups %xmm0, 0x8(%rbx)
jmp 0x895d
movl (%rbx), %esi
leaq 0x81eb(%rip), %rdi      # 0x10b22
xorl %eax, %eax
callq 0x2100
movq %rbx, %rdi
callq 0x2040
xorl %ebx, %ebx
jmp 0x895d
movq 0x8(%r14), %rdi
callq 0x88c5
jmp 0x8959
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_O3/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
testq %rdi, %rdi
je 0x8981
movq %rdi, %rbx
movl (%rbx), %esi
cmpl $0x3, %esi
jne 0x8983
movq 0x8(%rbx), %rbx
testq %rbx, %rbx
jne 0x8971
popq %rbx
retq
cmpl $0x7, %esi
ja 0x89b0
movl $0xb0, %eax
btl %esi, %eax
jb 0x89be
movl $0x6, %eax
btl %esi, %eax
jae 0x89b0
movq 0x8(%rbx), %rdi
callq 0x8968
movq 0x10(%rbx), %rdi
callq 0x8968
jmp 0x89be
leaq 0x817f(%rip), %rdi      # 0x10b36
xorl %eax, %eax
callq 0x2100
movq %rbx, %rdi
popq %rbx
jmp 0x2040
// File: /workspace/github_c_makefile_star2_O3/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:
pushq %r15
pushq %r14
pushq %rbx
movq (%rdi), %r15
testq %r15, %r15
je 0x8a3e
movq %rsi, %rbx
movq (%rsi), %rax
testq %rax, %rax
je 0x8a3e
movq %rdi, %r14
movl (%r15), %edi
leal -0x1(%rdi), %ecx
cmpl $0x1, %ecx
ja 0x8a01
movq %r14, %rsi
movq %rbx, %rdx
callq 0x8a44
movq (%r14), %r15
movl (%r15), %edi
movq (%rbx), %rax
movl (%rax), %eax
cmpl %eax, %edi
sete %cl
leal -0x1(%rax), %edx
cmpl $0x2, %edx
setae %dl
orb %cl, %dl
jne 0x8a25
movl %eax, %edi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x8a44
movq (%r14), %r15
movq %r15, %rdi
callq 0x8b2e
movq %r15, (%r14)
movq (%rbx), %r14
movq %r14, %rdi
callq 0x8b2e
movq %r14, (%rbx)
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/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 %rbx
pushq %rax
movq %rdx, %rbx
movq %rsi, %r14
movl %edi, %ebp
movq (%r14), %rsi
movl (%rsi), %eax
cmpl %ebp, %eax
je 0x8a7c
movq (%rbx), %rdx
movl (%rdx), %ecx
cmpl %ebp, %ecx
jne 0x8a93
addq $0x8, %rdx
movl %ebp, %edi
movq %r14, %rsi
callq 0x8a44
movq (%rbx), %rbx
addq $0x10, %rbx
jmp 0x8a53
addq $0x8, %rsi
movl %ebp, %edi
movq %rbx, %rdx
callq 0x8a44
movq (%r14), %r14
addq $0x10, %r14
jmp 0x8a53
cmpl $0x7, %eax
jne 0x8aa7
cmpl $0x7, %ecx
jne 0x8aa7
movq 0x8(%rsi), %rax
cmpq 0x8(%rdx), %rax
je 0x8adf
movq %rsi, %rdi
movq %rdx, %rsi
callq 0x8cbb
testl %eax, %eax
je 0x8b23
incl 0xe2f8(%rip)            # 0x16db4
movq (%r14), %rdi
callq 0x8968
movq (%rbx), %rdi
callq 0x8968
cmpl $0x1, %ebp
je 0x8ae7
cmpl $0x2, %ebp
jne 0x8b23
leaq 0xc7ab(%rip), %r15      # 0x15288
jmp 0x8aee
testb $0x5, 0x44(%rax)
jne 0x8b23
jmp 0x8aa7
leaq 0xc72a(%rip), %r15      # 0x15218
movl $0x1, %edi
movl $0x18, %esi
callq 0x2180
movl $0x7, %ebp
movl %ebp, (%rax)
movq %r15, 0x8(%rax)
movq %rax, (%r14)
movl $0x1, %edi
movl $0x18, %esi
callq 0x2180
movl %ebp, (%rax)
movq %r15, 0x8(%rax)
movq %rax, (%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/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
movl (%rdi), %eax
xorl %ebx, %ebx
cmpl (%rsi), %eax
jne 0x8da4
movq %rsi, %r14
cmpl $0x3, %eax
jne 0x8ceb
movq 0x8(%rdi), %rdi
movq 0x8(%r14), %r14
movl (%rdi), %eax
cmpl (%r14), %eax
je 0x8cd2
jmp 0x8da4
leal -0x1(%rax), %ecx
cmpl $0x2, %ecx
jb 0x8d15
leal -0x4(%rax), %ecx
cmpl $0x2, %ecx
jae 0x8d74
movq 0x8(%rdi), %rax
cmpq 0x8(%r14), %rax
jne 0x8da4
movq 0x10(%rdi), %rax
xorl %ebx, %ebx
cmpq 0x10(%r14), %rax
jmp 0x8d83
callq 0x88c5
leaq 0x8(%rsp), %rbx
movq %rax, (%rbx)
movq %r14, %rdi
callq 0x88c5
movq %rsp, %rsi
movq %rax, (%rsi)
movl 0xe07e(%rip), %ebp      # 0x16db4
movq %rbx, %rdi
callq 0x89c7
movq (%rbx), %rdi
xorl %ebx, %ebx
cmpl $0x7, (%rdi)
jne 0x8d5e
movq (%rsp), %rax
cmpl $0x7, (%rax)
jne 0x8d5e
movq 0x8(%rdi), %rcx
xorl %ebx, %ebx
cmpq 0x8(%rax), %rcx
sete %bl
callq 0x8968
movq (%rsp), %rdi
callq 0x8968
movl %ebp, 0xe042(%rip)      # 0x16db4
jmp 0x8da4
cmpl $0x7, %eax
jne 0x8d88
movq 0x8(%rdi), %rax
xorl %ebx, %ebx
cmpq 0x8(%r14), %rax
sete %bl
jmp 0x8da4
leaq 0x7dbd(%rip), %rdi      # 0x10b4c
xorl %ebx, %ebx
xorl %eax, %eax
callq 0x2100
leaq 0x8583(%rip), %rdi      # 0x11322
callq 0x20a0
movl %ebx, %eax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/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 %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
testq %rdi, %rdi
je 0x8e38
movl (%rbx), %eax
leal -0x1(%rax), %ecx
cmpl $0x3, %ecx
jae 0x8e0e
movq 0x8(%rbx), %r14
movq %r14, %rdi
callq 0x8dd6
movq %r14, 0x8(%rbx)
movq 0x10(%rbx), %r14
movq %r14, %rdi
callq 0x8dd6
movq %r14, 0x10(%rbx)
jmp 0x8e38
cmpl $0x5, %eax
jne 0x8e38
movq 0x8(%rbx), %rax
cmpl $0x2, 0x18(%rax)
jne 0x8e38
leaq 0xc3f4(%rip), %rax      # 0x15218
cmpq %rax, 0x10(%rbx)
jne 0x8e38
movl $0x7, (%rbx)
movq $0x0, 0x10(%rbx)
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O3/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 0x94e9
movq %rdi, %rbx
movl 0xd938(%rip), %ebp      # 0x16db4
movl $0x0, 0xd92e(%rip)      # 0x16db4
movl (%rdi), %edi
leal -0x1(%rdi), %eax
cmpl $0x1, %eax
ja 0x94e1
leaq 0x8(%rsp), %r14
movq %r14, %rsi
movq %r14, %rdx
callq 0x94f7
movq 0x8(%rsp), %rax
movl (%rax), %edi
movq %r14, %rsi
movq %r14, %rdx
callq 0x95df
cmpl $0x0, 0xd8fb(%rip)      # 0x16db4
movq 0x8(%rsp), %rbx
je 0x94e1
movq %rbx, %rdi
callq 0x8b2e
movq %rbx, 0x8(%rsp)
movl $0x0, 0xd8dd(%rip)      # 0x16db4
movl (%rbx), %edi
leal -0x1(%rdi), %eax
cmpl $0x2, %eax
jb 0x9495
movl %ebp, 0xd8cd(%rip)      # 0x16db4
jmp 0x94eb
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/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 %r12
pushq %rbx
movq %rdx, %rbx
movq %rsi, %r14
movl %edi, %ebp
movq (%r14), %rsi
movl (%rsi), %edi
cmpl %ebp, %edi
je 0x952e
movq (%rbx), %rdx
cmpl %ebp, (%rdx)
jne 0x9545
addq $0x8, %rdx
movl %ebp, %edi
movq %r14, %rsi
callq 0x94f7
movq (%rbx), %rbx
addq $0x10, %rbx
jmp 0x9507
addq $0x8, %rsi
movl %ebp, %edi
movq %rbx, %rdx
callq 0x94f7
movq (%r14), %r14
addq $0x10, %r14
jmp 0x9507
cmpq %rdx, %rsi
je 0x95d6
leal -0x1(%rdi), %eax
cmpl $0x1, %eax
ja 0x9561
movq %r14, %rsi
movq %r14, %rdx
callq 0x94f7
cmpl $0x2, %ebp
je 0x9587
cmpl $0x1, %ebp
jne 0x95d6
movq (%r14), %rdi
movq (%rbx), %rsi
callq 0x8e43
testq %rax, %rax
je 0x95d6
movq %rax, %r15
leaq 0xbc93(%rip), %r12      # 0x15218
jmp 0x95a1
movq (%r14), %rdi
movq (%rbx), %rsi
callq 0x906e
testq %rax, %rax
je 0x95d6
movq %rax, %r15
leaq 0xbce7(%rip), %r12      # 0x15288
movq (%r14), %rdi
callq 0x8968
movq (%rbx), %rdi
callq 0x8968
movl $0x1, %edi
movl $0x18, %esi
callq 0x2180
movl $0x7, (%rax)
movq %r12, 0x8(%rax)
movq %rax, (%r14)
movq %r15, (%rbx)
incl 0xd7de(%rip)            # 0x16db4
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/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 %r12
pushq %rbx
pushq %rax
xorl %ebx, %ebx
testq %rdi, %rdi
je 0x9aef
movq %rsi, %r14
movq %rdi, %r15
leaq 0x1adf(%rip), %r12      # 0xb574
movl (%r15), %eax
decl %eax
cmpl $0x6, %eax
ja 0x9aef
movslq (%r12,%rax,4), %rax
addq %r12, %rax
jmpq *%rax
movq 0x8(%r15), %rdi
movq %r14, %rsi
callq 0x9a79
movl $0x10, %ecx
testl %eax, %eax
je 0x9ac4
jmp 0x9ada
movl $0x8, %ecx
movq (%r15,%rcx), %r15
testq %r15, %r15
jne 0x9a95
jmp 0x9aef
movl $0x10, %eax
cmpq %r14, 0x8(%r15)
jne 0x9ae6
movl $0x1, %ebx
jmp 0x9aef
movl $0x8, %eax
xorl %ebx, %ebx
cmpq %r14, (%r15,%rax)
sete %bl
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/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:
testq %rdi, %rdi
je 0x9b46
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movl (%rbx), %eax
cmpl $0x2, %eax
jne 0x9b2e
movq 0x8(%rbx), %rdi
movq %r14, %rsi
callq 0x9afd
testb %al, %al
jne 0x9b8a
movq 0x10(%rbx), %rbx
testq %rbx, %rbx
jne 0x9b0c
jmp 0x9b8a
cmpl $0x4, %eax
je 0x9b49
cmpl $0x5, %eax
je 0x9b75
cmpl $0x7, %eax
jne 0x9b88
cmpq %r14, 0x8(%rbx)
sete %al
jmp 0x9b8a
xorl %eax, %eax
retq
cmpq %r14, 0x8(%rbx)
jne 0x9b88
movq 0x10(%rbx), %rax
leaq 0xb72e(%rip), %rcx      # 0x15288
cmpq %rcx, %rax
sete %cl
leaq 0xb791(%rip), %rdx      # 0x152f8
cmpq %rdx, %rax
sete %al
orb %cl, %al
movb $0x1, %al
je 0x9b88
jmp 0x9b8a
cmpq %r14, 0x8(%rbx)
jne 0x9b88
leaq 0xb696(%rip), %rax      # 0x15218
cmpq %rax, 0x10(%rbx)
je 0x9b92
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
movb $0x1, %al
jmp 0x9b8a
// File: /workspace/github_c_makefile_star2_O3/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 0x9bf9
cmpq $0x0, (%r15)
je 0x9bed
movq (%r14), %r15
movq %r15, %rdi
callq 0x8b2e
movq %r15, (%r14)
movq (%rbx), %r14
movq %r14, %rdi
callq 0x8b2e
movq %r14, (%rbx)
movq 0x8(%rsp), %rax
jmp 0x9bef
xorl %eax, %eax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/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 0x9c37
movq (%rbx), %rcx
cmpl %ebp, (%rcx)
jne 0x9c51
addq $0x8, %rcx
movl %ebp, %edi
movq %r15, %rsi
movq %r14, %rdx
callq 0x9bf9
movq (%rbx), %rbx
addq $0x10, %rbx
jmp 0x9c0f
addq $0x8, %rdx
movl %ebp, %edi
movq %r15, %rsi
movq %rbx, %rcx
callq 0x9bf9
movq (%r14), %r14
addq $0x10, %r14
jmp 0x9c0f
movq %rdx, %rdi
movq %rcx, %rsi
callq 0x8cbb
testl %eax, %eax
je 0x9ce5
movq (%r15), %r13
movq (%r14), %r12
testq %r13, %r13
je 0x9c8b
movl $0x1, %edi
movl $0x18, %esi
callq 0x2180
movl %ebp, (%rax)
movq %r13, 0x8(%rax)
movq %r12, 0x10(%rax)
movq %rax, %r12
movq %r12, (%r15)
movq (%rbx), %rdi
callq 0x8968
cmpl $0x2, %ebp
je 0x9ca9
cmpl $0x1, %ebp
jne 0x9ce5
leaq 0xb571(%rip), %r15      # 0x15218
jmp 0x9cb0
leaq 0xb5d8(%rip), %r15      # 0x15288
movl $0x1, %edi
movl $0x18, %esi
callq 0x2180
movl $0x7, %ebp
movl %ebp, (%rax)
movq %r15, 0x8(%rax)
movq %rax, (%r14)
movl $0x1, %edi
movl $0x18, %esi
callq 0x2180
movl %ebp, (%rax)
movq %r15, 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_O3/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 0x9bf9
cmpq $0x0, (%r15)
je 0x9d4b
movq (%r14), %r15
movq %r15, %rdi
callq 0x8b2e
movq %r15, (%r14)
movq (%rbx), %r14
movq %r14, %rdi
callq 0x8b2e
movq %r14, (%rbx)
movq 0x8(%rsp), %rax
jmp 0x9d4d
xorl %eax, %eax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/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 0xa200
decl %edi
cmpl $0x5, %edi
ja 0xa205
leaq 0x1418(%rip), %rax      # 0xb5c8
movslq (%rax,%rdi,4), %rcx
addq %rax, %rcx
jmpq *%rcx
cmpl $0x7, %esi
jae 0xa205
movl %esi, %eax
leaq 0x60a1(%rip), %rcx      # 0x10268
jmp 0xa1fd
cmpl $0x7, %esi
jae 0xa205
movl %esi, %eax
leaq 0x60ad(%rip), %rcx      # 0x10284
jmp 0xa1fd
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 0xa205
movl %esi, %eax
leaq 0x60a3(%rip), %rcx      # 0x102a0
movl (%rcx,%rax,4), %eax
retq
testl %esi, %esi
je 0xa20b
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
retq
movl $0x1, %eax
retq
// File: /workspace/github_c_makefile_star2_O3/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 $0x1, %edi
movl $0x50, %esi
callq 0x2180
movl %ebp, 0x10(%rax)
movq %rbx, 0x8(%rax)
movq 0xb8c8(%rip), %rcx      # 0x15d90
movq %rcx, 0x40(%rax)
cmpq $0x0, 0xb8cc(%rip)      # 0x15da0
je 0xa4dd
movl 0x18(%rcx), %ecx
decl %ecx
jmp 0xa4df
xorl %ecx, %ecx
movl %ecx, 0x48(%rax)
testq %rbx, %rbx
je 0xa4f9
addq $0x48, %rbx
movq %rbx, %rcx
movq (%rbx), %rbx
testq %rbx, %rbx
jne 0xa4eb
movq %rax, (%rcx)
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/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 0xa53d
testb $0x20, 0x44(%rdi)
je 0xa519
movl $0x1, %eax
cmpl $0x2, 0x40(%rdi)
je 0xa53d
pushq %rax
movq 0xaf8f(%rip), %rdi      # 0x154b0
callq 0x7bd5
movq 0xaf83(%rip), %rax      # 0x154b0
cmpl $0x1, 0x28(%rax)
movl $0x2, %eax
sbbl $0x0, %eax
addq $0x8, %rsp
retq
// File: /workspace/github_c_makefile_star2_O3/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 0xa57e
cmpl $0x4, 0x10(%rbx)
jne 0xa579
movq 0x20(%rbx), %rdi
callq 0x9fc3
movl %eax, 0x28(%rbx)
testl %eax, %eax
jne 0xa580
movq (%rbx), %rbx
jmp 0xa55e
xorl %ebx, %ebx
movq %rbx, %rax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O3/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 0xa5aa
cmpl $0x7, 0x10(%rbx)
jne 0xa5a5
movq 0x20(%rbx), %rdi
callq 0x9fc3
movl %eax, 0x28(%rbx)
testl %eax, %eax
jne 0xa5ac
movq (%rbx), %rbx
jmp 0xa58a
xorl %ebx, %ebx
movq %rbx, %rax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O3/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 0xa5e1
cmpq $0x0, 0x18(%r14)
je 0xa5dc
movq 0x20(%r14), %rdi
callq 0x9fc3
movl %eax, 0x28(%r14)
cmpl %eax, %ebp
cmovbel %eax, %ebp
movq (%r14), %r14
jmp 0xa5be
cmpl %ebp, 0x40(%rbx)
jne 0xa5fd
movl 0x44(%rbx), %eax
testb $0x20, %al
jne 0xa62d
movq 0x60(%rbx), %rdi
testq %rdi, %rdi
je 0xa626
callq 0x9fc3
jmp 0xa628
movl %ebp, 0x40(%rbx)
movl $0x400, %eax            # imm = 0x400
orl 0x44(%rbx), %eax
movl %eax, 0x44(%rbx)
movq 0x48(%rbx), %rcx
testq %rcx, %rcx
je 0xa5e9
movq 0x38(%rcx), %rdx
testq %rdx, %rdx
je 0xa621
orb $0x1, 0x30(%rdx)
movq (%rcx), %rcx
jmp 0xa60f
xorl %eax, %eax
cmpl %eax, 0x68(%rbx)
jne 0xa632
popq %rbx
popq %r14
popq %rbp
retq
movl %eax, 0x68(%rbx)
orb $0x4, 0x45(%rbx)
movq 0x48(%rbx), %rax
testq %rax, %rax
je 0xa62d
movq 0x38(%rax), %rcx
testq %rcx, %rcx
je 0xa64f
orb $0x1, 0x30(%rcx)
movq (%rax), %rax
jmp 0xa63d
// File: /workspace/github_c_makefile_star2_O3/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 0xa673
movq 0x38(%rax), %rcx
testq %rcx, %rcx
je 0xa66e
orb $0x1, 0x30(%rcx)
movq (%rax), %rax
jmp 0xa65c
retq
// File: /workspace/github_c_makefile_star2_O3/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 0xae93(%rip), %rcx      # 0x15510
movq (%rcx,%rax,8), %rdx
testq %rdx, %rdx
je 0xa6b0
cmpl $0x6, 0x18(%rdx)
jne 0xa691
movq (%rdx), %rdx
jmp 0xa681
orb $0x4, 0x45(%rdx)
movq 0x48(%rdx), %rsi
testq %rsi, %rsi
je 0xa68c
movq 0x38(%rsi), %rdi
testq %rdi, %rdi
je 0xa6ab
orb $0x1, 0x30(%rdi)
movq (%rsi), %rsi
jmp 0xa699
incq %rax
cmpq $0x101, %rax            # imm = 0x101
jne 0xa67d
retq
// File: /workspace/github_c_makefile_star2_O3/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 0xa500
movl 0x40(%r14), %ecx
testl %ecx, %ecx
sete %dl
leal -0x3(%rax), %esi
cmpl $-0x2, %esi
setb %sil
orb %dl, %sil
jne 0xa70c
xorl $0x1, %eax
movl %ebx, %edx
xorl $0x1, %edx
orl %eax, %edx
je 0xa70c
movl 0x68(%r14), %eax
cmpl %eax, %ecx
jbe 0xa70c
cmpl $0x2, %ecx
jne 0xa716
movl 0x44(%r14), %edx
andl $0x20, %edx
je 0xa716
cmpl $0x2, %ebx
sete %al
jmp 0xa70e
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 0xa70e
// File: /workspace/github_c_makefile_star2_O3/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 0xa747
movq %rbx, %rdi
movl %ebp, %esi
callq 0xa6bc
testb %al, %al
je 0xa7c4
movl 0x44(%rbx), %eax
btl $0xb, %eax
jb 0xa79c
cmpl $0x2, %ebp
jne 0xa77c
andl $0x20, %eax
je 0xa77c
leaq 0x48(%rbx), %rax
movq (%rax), %rax
testq %rax, %rax
je 0xa76c
cmpl $0x5, 0x10(%rax)
jne 0xa75e
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 0xa7c7
callq 0x867d
cmpq %rbx, 0xad1d(%rip)      # 0x154b0
jne 0xa7c7
callq 0xa674
jmp 0xa7c7
andl $0xfffff3ff, %eax       # imm = 0xFFFFF3FF
orl $0x400, %eax            # imm = 0x400
movl %eax, 0x44(%rbx)
movq 0x48(%rbx), %rcx
testq %rcx, %rcx
je 0xa750
movq 0x38(%rcx), %rdx
testq %rdx, %rdx
je 0xa7bf
orb $0x1, 0x30(%rdx)
movq (%rcx), %rcx
jmp 0xa7ad
xorl %r14d, %r14d
movl %r14d, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/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 0x6b3e(%rip), %r15      # 0x11328
movl %r14d, %ebp
cmpl $0x2, %ebp
ja 0xa7f8
movl %ebp, %eax
movl (%r15,%rax,4), %ebp
movq %rbx, %rdi
movl %ebp, %esi
callq 0xa724
testb %al, %al
jne 0xa80b
cmpl %ebp, %r14d
jne 0xa7ed
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/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 0xa88b
movzbl (%r14), %ecx
xorl %eax, %eax
addl $-0x4d, %ecx
cmpl $0x2c, %ecx
ja 0xa97a
movabsq $0x100000001, %rdx      # imm = 0x100000001
btq %rcx, %rdx
jb 0xa903
movabsq $0x200000002, %rdx      # imm = 0x200000002
btq %rcx, %rdx
jb 0xa8fc
movabsq $0x100000001000, %rdx   # imm = 0x100000001000
btq %rcx, %rdx
jae 0xa97a
movq %rbx, %rdi
movl $0x2, %esi
jmp 0xa90b
movq %rbx, %rdi
movq %r14, %rsi
callq 0x7f6f
testb %al, %al
je 0xa8f8
movl 0x44(%rbx), %eax
btl $0xb, %eax
jb 0xa91b
movq 0x30(%rbx), %r15
movq %r14, %rdi
callq 0x20e0
movq %rax, %r12
cmpl $0x4, 0x18(%rbx)
jne 0xa8cf
cmpb $0x30, (%r14)
jne 0xa947
movzbl 0x1(%r14), %eax
orl $0x20, %eax
cmpl $0x78, %eax
jne 0xa947
testq %r15, %r15
je 0xa8e7
movq %r15, %rdi
movq %r14, %rsi
callq 0x2190
testl %eax, %eax
je 0xa978
incl %r12d
movslq %r12d, %rdi
callq 0x2230
movq %rax, 0x30(%rbx)
jmp 0xa960
xorl %eax, %eax
jmp 0xa97a
movq %rbx, %rdi
xorl %esi, %esi
jmp 0xa90b
movq %rbx, %rdi
movl $0x1, %esi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0xa724
andl $0xfffff3ff, %eax       # imm = 0xFFFFF3FF
orl $0x400, %eax            # imm = 0x400
movl %eax, 0x44(%rbx)
movq 0x48(%rbx), %rax
testq %rax, %rax
je 0xa8a3
movq 0x38(%rax), %rcx
testq %rcx, %rcx
je 0xa942
orb $0x1, 0x30(%rcx)
movq (%rax), %rax
jmp 0xa92c
addl $0x3, %r12d
movslq %r12d, %rdi
callq 0x2230
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 0x867d
movb $0x1, %al
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/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
testq %rdi, %rdi
je 0xa9dd
movq %rdi, %rbx
leaq 0xc5c(%rip), %r15       # 0xb600
movl (%rbx), %esi
leal -0x1(%rsi), %eax
cmpl $0x6, %eax
ja 0xaa02
movslq (%r15,%rax,4), %rax
addq %r15, %rax
jmpq *%rax
movq 0x8(%rbx), %rdi
callq 0xa990
movq %rax, %r14
movl $0x10, %eax
testq %r14, %r14
je 0xa9d4
jmp 0xa9e0
movl $0x8, %eax
movq (%rbx,%rax), %rbx
testq %rbx, %rbx
jne 0xa9a4
xorl %r14d, %r14d
movq %r14, %rax
popq %rbx
popq %r14
popq %r15
retq
movq 0x8(%rbx), %rdi
callq 0x6752
testq %rax, %rax
je 0xaa15
movq %rax, %r14
jmp 0xa9e0
movq 0x8(%rbx), %rdi
jmp 0xaa19
leaq 0x6901(%rip), %rdi      # 0x1130a
xorl %r14d, %r14d
xorl %eax, %eax
callq 0x2100
jmp 0xa9e0
movq 0x10(%rbx), %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x6752
// File: /workspace/github_c_makefile_star2_O3/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 0xaab6
movq %rdi, %rbx
movl (%rdi), %eax
leal -0x1(%rax), %ecx
cmpl $0x2, %ecx
jb 0xaaba
cmpl $0x3, %eax
je 0xaad6
cmpl $0x7, %eax
jne 0xaae3
leaq 0xa88d(%rip), %rax      # 0x152f8
cmpq %rax, 0x8(%rbx)
jne 0xaae3
movq 0xaa38(%rip), %r15      # 0x154b0
movl $0x1, %edi
movl $0x18, %esi
callq 0x2180
movq %rax, %r14
movl $0x7, (%rax)
movq %r15, 0x8(%rax)
movl $0x1, %edi
movl $0x18, %esi
callq 0x2180
movl $0x2, (%rax)
movq %rbx, 0x8(%rax)
movq %r14, 0x10(%rax)
movq %rax, %rbx
jmp 0xaae3
xorl %ebx, %ebx
jmp 0xaae3
movq 0x8(%rbx), %rdi
callq 0xaa43
movq %rax, 0x8(%rbx)
movq 0x10(%rbx), %rdi
callq 0xaa43
movq %rax, 0x10(%rbx)
jmp 0xaae3
movq 0x8(%rbx), %rdi
callq 0xaa43
movq %rax, 0x8(%rbx)
movq %rbx, %rax
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/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:
leaq 0xa9bd(%rip), %rax      # 0x154b8
cmpq %rax, %rdi
je 0xab1f
leaq 0xa9b1(%rip), %rax      # 0x154b8
movq 0x20(%rdi), %rcx
testq %rcx, %rcx
je 0xab16
cmpl $0x3, 0x10(%rcx)
je 0xab20
movq 0x8(%rdi), %rdi
cmpq %rax, %rdi
jne 0xab07
retq
movq %rdi, %rax
retq
// File: /workspace/github_c_makefile_star2_O3/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 0x662c
movq %rdi, %rbx
callq 0x61e0
movq (%rax), %rax
xorl %r14d, %r14d
movl %r14d, %edx
movsbl %r15b, %esi
movsbq %sil, %rcx
movzwl (%rax,%rcx,2), %ecx
leal (%rdx,%rdx,4), %edi
leal (%rsi,%rdi,2), %r14d
addl $-0x30, %r14d
andl $0x800, %ecx            # imm = 0x800
cmovel %edx, %r14d
je 0x6623
movl %ecx, %edx
shrl $0xb, %edx
movb (%rbx,%rdx), %r15b
addq %rdx, %rbx
testb %r15b, %r15b
jne 0x65ec
testw %cx, %cx
jne 0x662f
xorl %eax, %eax
jmp 0x663c
xorl %r14d, %r14d
movl $0x4, %edi
callq 0x62ec
movl %r14d, (%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/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 0x86c3
testl %eax, %eax
jle 0x86b8
xorl %r15d, %r15d
movq (%r14), %rdi
movl %r15d, %esi
callq 0x8853
movq 0x10(%r14), %rdx
movq %rax, %rdi
movl %ebx, %esi
callq 0x8775
incl %r15d
movq (%r14), %rdi
callq 0x86c3
cmpl %eax, %r15d
jl 0x868f
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/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 0x6937
leaq 0x12b3d(%rip), %rdi     # 0x1b2e3
movq %rax, %rsi
xorl %eax, %eax
callq 0x6100
cmpl $0x0, 0x4(%r15)
jle 0x8805
leaq 0x12b29(%rip), %r12     # 0x1b2e7
leaq 0x133e7(%rip), %r13     # 0x1bbac
xorl %ebx, %ebx
movq 0x8(%r15), %rdi
movl %ebx, %esi
callq 0x7887
movl (%rax), %esi
movq %r14, %rdi
callq 0x6937
movq %r12, %rdi
movq %rax, %rsi
xorl %eax, %eax
callq 0x6100
incl %ebx
movl 0x4(%r15), %eax
cmpl %eax, %ebx
jge 0x8801
movq %r13, %rdi
xorl %eax, %eax
callq 0x6100
movl 0x4(%r15), %eax
cmpl %eax, %ebx
jl 0x87c7
leaq 0x12be4(%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 0x977b
movl $0xa, %edi
callq 0x6040
movl %ebx, %edi
callq 0x65a5
leaq 0x1447e(%rip), %rdi     # 0x1ccbe
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x6070
// File: /workspace/github_c_makefile_star2_O3/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 0x8a8b
movq 0x8(%rbx), %rdi
callq 0x7d9e
movq 0x10(%rbx), %rdi
callq 0x6e4e
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6030
// File: /workspace/github_c_makefile_star2_O3/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 0x94cb
movq %rsi, %rbx
movq %rdi, %r14
movl 0x4(%rdi), %eax
cmpl 0x4(%rsi), %eax
jne 0x94cb
movq 0x8(%r14), %rdi
movq 0x8(%rbx), %rsi
callq 0x824f
testl %eax, %eax
je 0x94cb
movq 0x10(%r14), %rdi
movq 0x10(%rbx), %rsi
popq %rbx
popq %r14
popq %rbp
jmp 0x96fc
xorl %eax, %eax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/alexj136[P]minijit/src/syntax.c
// Function: Comm_eq
bool Comm_eq(Comm *c1, Comm *c2) {
    if((!c1) || (!c2))  { return c1 == c2; } // Null check
    else {
        return ((c1->type) == (c2->type)) &&
                ((c1->name) == (c2->name)) &&
                Expr_eq(c1->expr, c2->expr) &&
                Comm_eq(c1->comm1, c2->comm1) &&
                Comm_eq(c1->comm2, c2->comm2);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
testq %rdi, %rdi
sete %al
testq %rsi, %rsi
sete %cl
orb %al, %cl
jne 0x9763
xorl %r15d, %r15d
movl (%r14), %eax
cmpl (%rbx), %eax
jne 0x976d
movl 0x20(%r14), %eax
cmpl 0x20(%rbx), %eax
jne 0x976d
movq 0x8(%r14), %rdi
movq 0x8(%rbx), %rsi
callq 0x9bfa
testl %eax, %eax
je 0x976d
movq 0x10(%r14), %rdi
movq 0x10(%rbx), %rsi
callq 0x96fc
testl %eax, %eax
je 0x976d
movq 0x18(%r14), %r14
movq 0x18(%rbx), %rbx
testq %r14, %r14
je 0x9763
testq %rbx, %rbx
jne 0x971f
xorl %r15d, %r15d
cmpq %rbx, %r14
sete %r15b
movl %r15d, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/alexj136[P]minijit/src/syntax.c
// Function: Comm_free
void Comm_free(Comm *comm) {
    if(!comm) { return; } // Null check
    Expr_free(comm->expr);
    Comm_free(comm->comm1);
    Comm_free(comm->comm2);
    free(comm);
}

// Assembly:
testq %rdi, %rdi
je 0x9988
pushq %rbp
movq %rsp, %rbp
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x8(%rdi), %rdi
callq 0x9e6d
movq 0x10(%rbx), %rdi
callq 0x9951
movq 0x18(%rbx), %rdi
callq 0x9951
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6030
retq
// File: /workspace/github_c_makefile_star2_O3/alexj136[P]minijit/src/syntax.c
// Function: Expr_eq
bool Expr_eq(Expr *e1, Expr *e2) {
    if((!e1) || (!e2))  { return e1 == e2; } // Null check
    else {
        return ((e1->type) == (e2->type)) &&
                ((e1->num) == (e2->num)) &&
                Expr_eq(e1->expr1, e2->expr1) &&
                Expr_eq(e1->expr2, e2->expr2) &&
                (((e1->args) && (e2->args)) ?
                        ExprVector_eq(e1->args, e2->args) :
                        ((e1->args) == (e2->args)));
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
testq %rdi, %rdi
setne %al
testq %rsi, %rsi
setne %cl
testb %cl, %al
je 0x9c67
movl (%r14), %eax
cmpl (%rbx), %eax
jne 0x9c6f
movl 0x4(%r14), %eax
cmpl 0x4(%rbx), %eax
jne 0x9c6f
movq 0x8(%r14), %rdi
movq 0x8(%rbx), %rsi
callq 0x9bfa
testl %eax, %eax
je 0x9c6f
movq 0x10(%r14), %rdi
movq 0x10(%rbx), %rsi
callq 0x9bfa
testl %eax, %eax
je 0x9c6f
movq 0x18(%r14), %rdi
movq 0x18(%rbx), %rsi
testq %rdi, %rdi
je 0x9c7b
testq %rsi, %rsi
je 0x9c79
callq 0xab38
testl %eax, %eax
setne %al
jmp 0x9c71
cmpq %rbx, %r14
sete %al
jmp 0x9c71
xorl %eax, %eax
movzbl %al, %eax
popq %rbx
popq %r14
popq %rbp
retq
xorl %esi, %esi
cmpq %rsi, %rdi
jmp 0x9c6a
// File: /workspace/github_c_makefile_star2_O3/alexj136[P]minijit/src/syntax.c
// Function: Expr_free
void Expr_free(Expr *expr) {
    if(!expr) { return; } // Null check
    Expr_free(expr->expr1);
    Expr_free(expr->expr2);
    ExprVector_free_elems(expr->args);
    free(expr);
}

// Assembly:
testq %rdi, %rdi
je 0x9ea4
pushq %rbp
movq %rsp, %rbp
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x8(%rdi), %rdi
callq 0x9e6d
movq 0x10(%rbx), %rdi
callq 0x9e6d
movq 0x18(%rbx), %rdi
callq 0xa687
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6030
retq
// File: /workspace/github_c_makefile_star2_O3/alexj136[P]minijit/src/typecheck.c
// Function: Type_free
void Type_free(Type *type) {
    if(type->innerType) { Type_free(type->innerType); }
    if(type->innerTypes) { TypeVector_free(type->innerTypes); }
    free(type);
    return;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
movq 0x8(%rdi), %rdi
testq %rdi, %rdi
je 0x1134b
callq 0x11333
movq 0x10(%rbx), %r14
testq %r14, %r14
je 0x11365
movq 0x8(%r14), %rdi
callq 0x6030
movq %r14, %rdi
callq 0x6030
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x6030
// File: /workspace/github_c_makefile_star2_O3/alexj136[P]minijit/src/typecheck.c
// Function: Type_eq
bool Type_eq(Type *t1, Type *t2) {
    return ( // Do the forms match?
        t1->form == t2->form
    )
    && ( // Does the inner type match, checking for null?
        ((t1->innerType == NULL) || (t2->innerType == NULL))
                ? t1 == t2
                : Type_eq(t1->innerType, t2->innerType)
    )
    && ( // Do the inner types all match in type and sequence?
        ((t1->innerType == NULL) || (t2->innerType == NULL))
                ? t1 == t2
                : TypeVector_eq(t1->innerTypes, t2->innerTypes)
    );
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl (%rdi), %eax
xorl %r15d, %r15d
cmpl (%rsi), %eax
jne 0x11952
movq %rsi, %rbx
movq %rdi, %r14
movq 0x8(%rdi), %rdi
testq %rdi, %rdi
je 0x11923
movq 0x8(%rbx), %rsi
testq %rsi, %rsi
je 0x11923
callq 0x118e9
testl %eax, %eax
je 0x11952
movq 0x8(%r14), %rdi
jmp 0x11928
cmpq %rbx, %r14
jne 0x11952
testq %rdi, %rdi
je 0x11948
cmpq $0x0, 0x8(%rbx)
je 0x11948
movq 0x10(%r14), %rdi
movq 0x10(%rbx), %rsi
callq 0x117dd
testl %eax, %eax
setne %al
jmp 0x1194e
cmpq %rbx, %r14
sete %al
movzbl %al, %r15d
movl %r15d, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq