LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O2/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
andq $0x0, (%r15)
pushq $0x1
popq %rdi
movq %r15, %rsi
movq %r14, %rdx
movq %rbx, %rcx
callq 0x8e8c
cmpq $0x0, (%r15)
je 0x8f9c
movq (%r14), %r15
movq %r15, %rdi
callq 0x8008
movq %r15, (%r14)
movq (%rbx), %r14
movq %r14, %rdi
callq 0x8008
movq %r14, (%rbx)
movq 0x8(%rsp), %rax
jmp 0x8f9e
xorl %eax, %eax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/saltyJeff[P]uClibcpp/extra/config/./expr.c
// Function: expr_calc_value
tristate expr_calc_value(struct expr *e)
{
	tristate val1, val2;
	const char *str1, *str2;

	if (!e)
		return yes;

	switch (e->type) {
	case E_SYMBOL:
		sym_calc_value(e->left.sym);
		return e->left.sym->curr.tri;
	case E_AND:
		val1 = expr_calc_value(e->left.expr);
		val2 = expr_calc_value(e->right.expr);
		return E_AND(val1, val2);
	case E_OR:
		val1 = expr_calc_value(e->left.expr);
		val2 = expr_calc_value(e->right.expr);
		return E_OR(val1, val2);
	case E_NOT:
		val1 = expr_calc_value(e->left.expr);
		return E_NOT(val1);
	case E_EQUAL:
		sym_calc_value(e->left.sym);
		sym_calc_value(e->right.sym);
		str1 = sym_get_string_value(e->left.sym);
		str2 = sym_get_string_value(e->right.sym);
		return !strcmp(str1, str2) ? yes : no;
	case E_UNEQUAL:
		sym_calc_value(e->left.sym);
		sym_calc_value(e->right.sym);
		str1 = sym_get_string_value(e->left.sym);
		str2 = sym_get_string_value(e->right.sym);
		return !strcmp(str1, str2) ? no : yes;
	default:
		printf("expr_calc_value: %d?\n", e->type);
		return no;
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %r14
pushq $-0x1
popq %rbx
pushq $0x2
popq %rbp
leaq 0x1464(%rip), %r15      # 0xa5e0
testq %r14, %r14
je 0x9280
movl (%r14), %esi
leal -0x1(%rsi), %eax
cmpl $0x6, %eax
ja 0x9270
movslq (%r15,%rax,4), %rax
addq %r15, %rax
jmpq *%rax
movq 0x8(%r14), %rdi
callq 0x9165
movq 0x10(%r14), %r14
cmpl %ebx, %eax
cmovbl %eax, %ebx
jmp 0x917c
movq 0x8(%r14), %rdi
callq 0x71aa
movq 0x10(%r14), %rdi
callq 0x71aa
movq 0x8(%r14), %rdi
callq 0x7c9f
movq %rax, %r15
movq 0x10(%r14), %rdi
callq 0x7c9f
movq %r15, %rdi
movq %rax, %rsi
callq 0x2190
xorl %ebp, %ebp
testl %eax, %eax
setne %bpl
jmp 0x924c
movq 0x8(%r14), %rdi
callq 0x9165
pushq $0x2
popq %rbp
subl %eax, %ebp
jmp 0x9280
movq 0x8(%r14), %rdi
callq 0x71aa
movq 0x8(%r14), %rax
movl 0x28(%rax), %ebp
jmp 0x9280
movq 0x8(%r14), %rdi
callq 0x71aa
movq 0x10(%r14), %rdi
callq 0x71aa
movq 0x8(%r14), %rdi
callq 0x7c9f
movq %rax, %r15
movq 0x10(%r14), %rdi
callq 0x7c9f
movq %r15, %rdi
movq %rax, %rsi
callq 0x2190
xorl %ebp, %ebp
testl %eax, %eax
sete %bpl
addl %ebp, %ebp
jmp 0x9280
movq 0x8(%r14), %rdi
callq 0x9165
movl %eax, %r15d
movq 0x10(%r14), %rdi
callq 0x9165
movl %eax, %ebp
cmpl %eax, %r15d
cmoval %r15d, %ebp
jmp 0x9280
leaq 0x698d(%rip), %rdi      # 0xfc04
xorl %ebp, %ebp
xorl %eax, %eax
callq 0x2100
cmpl %ebx, %ebp
cmovbl %ebp, %ebx
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x92f6
decl %edi
cmpl $0x5, %edi
ja 0x92fb
leaq 0x1356(%rip), %rax      # 0xa5fc
movslq (%rax,%rdi,4), %rcx
addq %rax, %rcx
jmpq *%rcx
cmpl $0x7, %esi
jae 0x92fb
movl %esi, %eax
leaq 0x5fc7(%rip), %rcx      # 0xf284
jmp 0x92f3
cmpl $0x7, %esi
jae 0x92fb
movl %esi, %eax
leaq 0x5fd3(%rip), %rcx      # 0xf2a0
jmp 0x92f3
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 0x92fb
movl %esi, %eax
leaq 0x5fc9(%rip), %rcx      # 0xf2bc
movl (%rcx,%rax,4), %eax
retq
testl %esi, %esi
je 0x92ff
pushq $-0x1
popq %rax
retq
pushq $0x1
jmp 0x92fd
// File: /workspace/github_c_makefile_star2_O2/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
pushq $0x1
popq %rdi
pushq $0x50
popq %rsi
callq 0x2180
movl %ebp, 0x10(%rax)
movq %rbx, 0x8(%rax)
movq 0xb822(%rip), %rcx      # 0x14da0
movq %rcx, 0x40(%rax)
cmpq $0x0, 0xb826(%rip)      # 0x14db0
je 0x9593
movl 0x18(%rcx), %ecx
decl %ecx
jmp 0x9595
xorl %ecx, %ecx
movl %ecx, 0x48(%rax)
testq %rbx, %rbx
je 0x95af
addq $0x48, %rbx
movq %rbx, %rcx
movq (%rbx), %rbx
testq %rbx, %rbx
jne 0x95a1
movq %rax, (%rcx)
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x95f0
testb $0x20, 0x44(%rdi)
je 0x95ce
cmpl $0x2, 0x40(%rdi)
jne 0x95ce
pushq $0x1
popq %rax
retq
pushq %rax
movq 0xaeea(%rip), %rdi      # 0x144c0
callq 0x71aa
movq 0xaede(%rip), %rax      # 0x144c0
cmpl $0x1, 0x28(%rax)
pushq $0x2
popq %rax
sbbl $0x0, %eax
addq $0x8, %rsp
retq
// File: /workspace/github_c_makefile_star2_O2/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
leaq 0x48(%rdi), %r14
xorl %ebp, %ebp
movq (%r14), %r14
testq %r14, %r14
je 0x9695
cmpq $0x0, 0x18(%r14)
je 0x9672
movq 0x20(%r14), %rdi
callq 0x9165
movl %eax, 0x28(%r14)
cmpl %eax, %ebp
cmovbel %eax, %ebp
jmp 0x9672
cmpl %ebp, 0x40(%rbx)
je 0x96a5
movl %ebp, 0x40(%rbx)
movq %rbx, %rdi
callq 0x96d6
testb $0x20, 0x44(%rbx)
jne 0x96c2
movq 0x60(%rbx), %rdi
testq %rdi, %rdi
je 0x96bb
callq 0x9165
jmp 0x96bd
xorl %eax, %eax
cmpl %eax, 0x68(%rbx)
jne 0x96c7
popq %rbx
popq %r14
popq %rbp
retq
movl %eax, 0x68(%rbx)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x96d6
// File: /workspace/github_c_makefile_star2_O2/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)
addq $0x48, %rdi
movq (%rdi), %rdi
testq %rdi, %rdi
je 0x96f5
movq 0x38(%rdi), %rax
testq %rax, %rax
je 0x96de
orb $0x1, 0x30(%rax)
jmp 0x96de
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x95b6
movl 0x40(%r14), %ecx
testl %ecx, %ecx
sete %dl
leal -0x3(%rax), %esi
cmpl $-0x2, %esi
setb %sil
orb %dl, %sil
jne 0x9785
xorl $0x1, %eax
movl %ebx, %edx
xorl $0x1, %edx
orl %eax, %edx
je 0x9785
movl 0x68(%r14), %eax
cmpl %eax, %ecx
jbe 0x9785
cmpl $0x2, %ecx
jne 0x978f
movl 0x44(%r14), %edx
andl $0x20, %edx
je 0x978f
cmpl $0x2, %ebx
sete %al
jmp 0x9787
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 0x9787
// File: /workspace/github_c_makefile_star2_O2/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 0x97c0
movq %rbx, %rdi
movl %ebp, %esi
callq 0x9735
testb %al, %al
je 0x981e
movl 0x44(%rbx), %eax
btl $0xb, %eax
jae 0x97dc
andl $0xfffff7ff, %eax       # imm = 0xFFFFF7FF
movl %eax, 0x44(%rbx)
movq %rbx, %rdi
callq 0x96d6
movl 0x44(%rbx), %eax
cmpl $0x2, %ebp
jne 0x97fe
andl $0x20, %eax
je 0x97fe
movq %rbx, %rdi
callq 0x7194
movq %rax, %rdi
callq 0x7179
movq %rbx, 0x30(%rax)
andb $-0x9, 0x45(%rax)
movl %ebp, 0x38(%rbx)
movb $0x1, %r14b
cmpl %ebp, %r15d
je 0x9821
callq 0x7bd2
cmpq %rbx, 0xacab(%rip)      # 0x144c0
jne 0x9821
callq 0x96f6
jmp 0x9821
xorl %r14d, %r14d
movl %r14d, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x6b18(%rip), %r15      # 0x1035c
movl %r14d, %ebp
cmpl $0x2, %ebp
ja 0x9852
movl %ebp, %eax
movl (%r15,%rax,4), %ebp
movq %rbx, %rdi
movl %ebp, %esi
callq 0x979d
testb %al, %al
jne 0x9865
cmpl %ebp, %r14d
jne 0x9847
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x98df
movzbl (%r14), %ecx
xorl %eax, %eax
addl $-0x4d, %ecx
cmpl $0x2c, %ecx
ja 0x99a8
movabsq $0x100000001, %rdx      # imm = 0x100000001
btq %rcx, %rdx
jb 0x995f
movabsq $0x200000002, %rdx      # imm = 0x200000002
btq %rcx, %rdx
jb 0x9958
movabsq $0x100000001000, %rdx   # imm = 0x100000001000
btq %rcx, %rdx
jae 0x99a8
pushq $0x2
jmp 0x9961
movq %rbx, %rdi
movq %r14, %rsi
callq 0x74c4
testb %al, %al
je 0x9954
movl 0x44(%rbx), %eax
btl $0xb, %eax
jae 0x9907
andl $0xfffff7ff, %eax       # imm = 0xFFFFF7FF
movl %eax, 0x44(%rbx)
movq %rbx, %rdi
callq 0x96d6
movq 0x30(%rbx), %r15
movq %r14, %rdi
callq 0x20e0
movq %rax, %r12
cmpl $0x4, 0x18(%rbx)
jne 0x992f
cmpb $0x30, (%r14)
jne 0x9975
movzbl 0x1(%r14), %eax
orl $0x20, %eax
cmpl $0x78, %eax
jne 0x9975
testq %r15, %r15
je 0x9943
movq %r15, %rdi
movq %r14, %rsi
callq 0x2190
testl %eax, %eax
je 0x99a6
incl %r12d
movslq %r12d, %rdi
callq 0x2230
movq %rax, 0x30(%rbx)
jmp 0x998e
xorl %eax, %eax
jmp 0x99a8
movq %rbx, %rdi
xorl %esi, %esi
jmp 0x9965
pushq $0x1
popq %rsi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0x979d
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 0x7bd2
movb $0x1, %al
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/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 %r13
pushq %r12
pushq %rbx
movq %rdi, %r14
xorl %ebx, %ebx
pushq $0x8
popq %r15
leaq 0xc5d(%rip), %r12       # 0xa634
pushq $0x10
popq %r13
testq %r14, %r14
je 0x9a37
movl (%r14), %esi
leal -0x1(%rsi), %eax
cmpl $0x6, %eax
ja 0x9a27
movslq (%r12,%rax,4), %rax
addq %r12, %rax
movq %r15, %rcx
jmpq *%rax
movq 0x8(%r14), %rdi
callq 0x99be
movq %r13, %rcx
testq %rax, %rax
jne 0x9a1c
movq (%r14,%rcx), %r14
jmp 0x99db
movq 0x8(%r14), %rdi
callq 0x5e62
testq %rax, %rax
je 0x9a44
movq %rax, %rbx
jmp 0x9a37
movq 0x8(%r14), %rdi
jmp 0x9a48
leaq 0x6910(%rip), %rdi      # 0x1033e
xorl %ebx, %ebx
xorl %eax, %eax
callq 0x2100
movq %rbx, %rax
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
movq 0x10(%r14), %rdi
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
jmp 0x5e62
// File: /workspace/github_c_makefile_star2_O2/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 %rbx
testq %rdi, %rdi
je 0x9ab8
movq %rdi, %rbx
movl (%rdi), %eax
leal -0x1(%rax), %ecx
cmpl $0x2, %ecx
jb 0x9abc
cmpl $0x3, %eax
je 0x9ad8
cmpl $0x7, %eax
jne 0x9ae5
leaq 0xa86e(%rip), %rax      # 0x14308
cmpq %rax, 0x8(%rbx)
jne 0x9ae5
movq 0xaa19(%rip), %rdi      # 0x144c0
callq 0x5567
movq %rbx, %rdi
movq %rax, %rsi
popq %rbx
jmp 0x7d87
xorl %ebx, %ebx
jmp 0x9ae5
movq 0x8(%rbx), %rdi
callq 0x9a76
movq %rax, 0x8(%rbx)
movq 0x10(%rbx), %rdi
callq 0x9a76
movq %rax, 0x10(%rbx)
jmp 0x9ae5
movq 0x8(%rbx), %rdi
callq 0x9a76
movq %rax, 0x8(%rbx)
movq %rbx, %rax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/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 0xa9cc(%rip), %rcx      # 0x144c8
cmpq %rcx, %rax
je 0x9b16
movq 0x20(%rax), %rdx
testq %rdx, %rdx
je 0x9b10
cmpl $0x3, 0x10(%rdx)
je 0x9b16
movq 0x8(%rax), %rax
jmp 0x9afc
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x6589
movq %rsi, %r14
movq %rdi, %r15
testq %rdi, %rdi
sete %al
testq %rsi, %rsi
sete %cl
xorl %ebx, %ebx
orb %al, %cl
jne 0x658c
movq %r15, %rdi
callq 0x60d0
movq %rax, %r12
movq %r14, %rdi
callq 0x60d0
cmpq %rax, %r12
jne 0x658c
movq %r15, %rdi
movq %r14, %rsi
movq %r12, %rdx
callq 0x6060
xorl %ebx, %ebx
testl %eax, %eax
sete %bl
jmp 0x658c
pushq $0x1
popq %rbx
movl %ebx, %eax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/alexj136[P]minijit/src/util.c
// Function: put_indent
void put_indent(int num) {
    int indents_done;
    for(indents_done = 0; indents_done < num; indents_done++) {
        printf("    ");
    }
    return;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movl %edi, %ebx
xorl %eax, %eax
testl %edi, %edi
cmovlel %eax, %ebx
leaq 0x158ef(%rip), %r14     # 0x1be9d
subl $0x1, %ebx
jb 0x65bf
movq %r14, %rdi
xorl %eax, %eax
callq 0x6100
jmp 0x65ae
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/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
movq %rdi, %r14
pushq $0x1
popq %rax
xorl %ebx, %ebx
testl %eax, %eax
je 0x660e
movb (%r14), %cl
testb %cl, %cl
je 0x660e
movsbl %cl, %r15d
callq 0x61e0
movq (%rax), %rax
movslq %r15d, %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x800, %eax            # imm = 0x800
imull $0xa, %ebx, %edx
testq %rax, %rax
leal -0x30(%rdx,%rcx), %ecx
cmovnel %ecx, %ebx
shrl $0xb, %eax
addq %rax, %r14
jmp 0x65d6
testl %eax, %eax
je 0x6623
movl %ebx, %edi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x6630
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/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
pushq $0x18
popq %rdi
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_O2/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 0x6597
xorl %r15d, %r15d
movq (%r14), %rdi
callq 0x8558
cmpl %eax, %r15d
jge 0x854d
movq (%r14), %rdi
movl %r15d, %esi
callq 0x86d9
movq 0x10(%r14), %rdx
movq %rax, %rdi
movl %ebx, %esi
callq 0x8606
incl %r15d
jmp 0x8522
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x6597
movl (%r15), %esi
movq %r14, %rdi
callq 0x690b
leaq 0x11cbc(%rip), %rdi     # 0x1a2f3
movq %rax, %rsi
xorl %eax, %eax
callq 0x6100
leaq 0x11caf(%rip), %r12     # 0x1a2f7
leaq 0x1256d(%rip), %r13     # 0x1abbc
xorl %ebx, %ebx
cmpl 0x4(%r15), %ebx
jge 0x868d
movq 0x8(%r15), %rdi
movl %ebx, %esi
callq 0x77bb
movl (%rax), %esi
movq %r14, %rdi
callq 0x690b
movq %r12, %rdi
movq %rax, %rsi
xorl %eax, %eax
callq 0x6100
incl %ebx
cmpl 0x4(%r15), %ebx
jge 0x8651
movq %r13, %rdi
xorl %eax, %eax
callq 0x6100
jmp 0x8651
leaq 0x11d6c(%rip), %rdi     # 0x1a400
callq 0x6070
movq 0x8(%r15), %rdx
movq 0x10(%r15), %rdi
movq -0x30(%rbp), %rbx
leal 0x1(%rbx), %esi
movq %r14, %rcx
callq 0x9521
pushq $0xa
popq %rdi
callq 0x6040
movl %ebx, %edi
callq 0x6597
leaq 0x13638(%rip), %rdi     # 0x1bcfe
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x6070
// File: /workspace/github_c_makefile_star2_O2/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 0x88ff
movq 0x8(%rbx), %rdi
callq 0x7c77
movq 0x10(%rbx), %rdi
callq 0x6dc7
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6030
// File: /workspace/github_c_makefile_star2_O2/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 0x92b7
movq %rsi, %rbx
movq %rdi, %r14
movl 0x4(%rdi), %eax
cmpl 0x4(%rsi), %eax
jne 0x92b7
movq 0x8(%r14), %rdi
movq 0x8(%rbx), %rsi
callq 0x80f8
testl %eax, %eax
je 0x92b7
movq 0x10(%r14), %rdi
movq 0x10(%rbx), %rsi
popq %rbx
popq %r14
popq %rbp
jmp 0x94b0
xorl %eax, %eax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/alexj136[P]minijit/src/syntax.c
// Function: Func_init_pos
Func *Func_init_pos(int name, int num_args, IntRefVector *local_name_map,
        Comm *body, int src_line_no, int src_char_no) {

    Func *func           = challoc(sizeof(Func));
    func->name           = name;
    func->num_args       = num_args;
    func->local_name_map = local_name_map;
    func->body           = body;
    func->src_line_no    = src_line_no;
    func->src_char_no    = src_char_no;
    return func;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movl %r9d, -0x2c(%rbp)
movl %r8d, %r14d
movq %rcx, %r15
movq %rdx, %r12
movl %esi, %r13d
movl %edi, %ebx
pushq $0x20
popq %rdi
callq 0x62ec
movl %ebx, (%rax)
movl %r13d, 0x4(%rax)
movq %r12, 0x8(%rax)
movq %r15, 0x10(%rax)
movl %r14d, 0x18(%rax)
movl -0x2c(%rbp), %ecx
movl %ecx, 0x1c(%rax)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/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
xorl %r15d, %r15d
testq %r14, %r14
je 0x9509
testq %rbx, %rbx
je 0x9509
movl (%r14), %eax
cmpl (%rbx), %eax
jne 0x9513
movl 0x20(%r14), %eax
cmpl 0x20(%rbx), %eax
jne 0x9513
movq 0x8(%r14), %rdi
movq 0x8(%rbx), %rsi
callq 0x98b7
testl %eax, %eax
je 0x9513
movq 0x10(%r14), %rdi
movq 0x10(%rbx), %rsi
callq 0x94b0
testl %eax, %eax
je 0x9513
movq 0x18(%r14), %r14
movq 0x18(%rbx), %rbx
jmp 0x94c3
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_O2/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 0x9727
pushq %rbp
movq %rsp, %rbp
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x8(%rdi), %rdi
callq 0x9b1b
movq 0x10(%rbx), %rdi
callq 0x96f0
movq 0x18(%rbx), %rdi
callq 0x96f0
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6030
retq
// File: /workspace/github_c_makefile_star2_O2/alexj136[P]minijit/src/syntax.c
// Function: Comm_init
Comm *Comm_init(CommType type, Expr *expr, Comm *comm1, Comm *comm2, int name,
        int src_line_no, int src_char_no) {

    Comm *new        = challoc(sizeof(Comm));
    new->type        = type;
    new->expr        = expr;
    new->comm1       = comm1;
    new->comm2       = comm2;
    new->name        = name;
    new->src_line_no = src_line_no;
    new->src_char_no = src_char_no;
    return new;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movl %r9d, -0x2c(%rbp)
movl %r8d, %r14d
movq %rcx, %r15
movq %rdx, %r12
movq %rsi, %r13
movl %edi, %ebx
pushq $0x30
popq %rdi
callq 0x62ec
movl %ebx, (%rax)
movq %r13, 0x8(%rax)
movq %r12, 0x10(%rax)
movq %r15, 0x18(%rax)
movl %r14d, 0x20(%rax)
movl -0x2c(%rbp), %ecx
movl %ecx, 0x24(%rax)
movl 0x10(%rbp), %ecx
movl %ecx, 0x28(%rax)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x9924
movl (%r14), %eax
cmpl (%rbx), %eax
jne 0x992c
movl 0x4(%r14), %eax
cmpl 0x4(%rbx), %eax
jne 0x992c
movq 0x8(%r14), %rdi
movq 0x8(%rbx), %rsi
callq 0x98b7
testl %eax, %eax
je 0x992c
movq 0x10(%r14), %rdi
movq 0x10(%rbx), %rsi
callq 0x98b7
testl %eax, %eax
je 0x992c
movq 0x18(%r14), %rdi
movq 0x18(%rbx), %rsi
testq %rdi, %rdi
je 0x9938
testq %rsi, %rsi
je 0x9936
callq 0xa766
testl %eax, %eax
setne %al
jmp 0x992e
cmpq %rbx, %r14
sete %al
jmp 0x992e
xorl %eax, %eax
movzbl %al, %eax
popq %rbx
popq %r14
popq %rbp
retq
xorl %esi, %esi
cmpq %rsi, %rdi
jmp 0x9927
// File: /workspace/github_c_makefile_star2_O2/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 0x9b52
pushq %rbp
movq %rsp, %rbp
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x8(%rdi), %rdi
callq 0x9b1b
movq 0x10(%rbx), %rdi
callq 0x9b1b
movq 0x18(%rbx), %rdi
callq 0xa2d9
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6030
retq
// File: /workspace/github_c_makefile_star2_O2/alexj136[P]minijit/src/lexer.c
// Function: yy_flush_buffer
void yy_flush_buffer (YY_BUFFER_STATE  b )
{
    	if ( ! b )
		return;

	b->yy_n_chars = 0;

	/* We always need two end-of-buffer characters.  The first causes
	 * a transition to the end-of-buffer state.  The second causes
	 * a jam in that state.
	 */
	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;

	b->yy_buf_pos = &b->yy_ch_buf[0];

	b->yy_at_bol = 1;
	b->yy_buffer_status = YY_BUFFER_NEW;

	if ( b == YY_CURRENT_BUFFER )
		yy_load_buffer_state(  );
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
testq %rdi, %rdi
je 0xda6e
andl $0x0, 0x1c(%rdi)
movq 0x8(%rdi), %rcx
xorl %eax, %eax
movb %al, (%rcx)
movq 0x8(%rdi), %rcx
movb %al, 0x1(%rcx)
movq 0x8(%rdi), %rcx
movq %rcx, 0x10(%rdi)
movl $0x1, 0x28(%rdi)
andl $0x0, 0x38(%rdi)
movq 0x147d7(%rip), %rcx     # 0x22230
testq %rcx, %rcx
je 0xda69
movq 0x147d3(%rip), %rax     # 0x22238
movq (%rcx,%rax,8), %rax
cmpq %rdi, %rax
je 0xda70
popq %rbp
retq
popq %rbp
jmp 0xd6e4
// File: /workspace/github_c_makefile_star2_O2/alexj136[P]minijit/src/typecheck.c
// Function: TypeVector_insert
DEFINE_VECTORABLE(Type)

Type *Type_init(TypeForm form, Type *innerType, TypeVector *innerTypes) {
    Type *type = challoc(sizeof(type));
    type->form = form;
    type->innerType = innerType;
    type->innerTypes = innerTypes;
    return type;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x1f40, %rsp           # imm = 0x1F40
testq %rdi, %rdi
je 0x107bf
movq %rdx, %r15
movl %esi, %r14d
movq %rdi, %rbx
movl %esi, %r12d
testl %r14d, %r14d
js 0x1069f
movq %rbx, %rdi
callq 0x101b4
cmpl %r12d, %eax
jl 0x1072f
movl (%rbx), %eax
cmpq %rax, %r12
je 0x10685
movq 0x8(%rbx), %rax
movq (%rax,%r12,8), %rcx
movq %r15, (%rax,%r12,8)
incq %r12
movq %rcx, %r15
jmp 0x10654
movq %rbx, %rdi
movq %r15, %rsi
addq $0x1f40, %rsp           # imm = 0x1F40
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x10262
leaq 0x995e(%rip), %rdi      # 0x1a004
leaq 0xab7b(%rip), %rsi      # 0x1b228
leaq 0xabbc(%rip), %rcx      # 0x1b270
xorl %r12d, %r12d
pushq $0x9
popq %rdx
xorl %eax, %eax
callq 0x6100
leaq 0x9964(%rip), %rbx      # 0x1a02c
leaq 0x9a11(%rip), %rsi      # 0x1a0e0
movq %rbx, %rdi
xorl %eax, %eax
callq 0x6100
leaq -0x1f60(%rbp), %r15
movq %r15, %rdi
movl $0x3e8, %esi            # imm = 0x3E8
callq 0x60e0
movl %eax, %r14d
movq %r15, %rdi
movl %eax, %esi
callq 0x60b0
movq %rax, %r15
leaq 0x9b12(%rip), %rdi      # 0x1a216
callq 0x6070
testl %r14d, %r14d
cmovlel %r12d, %r14d
xorl %r12d, %r12d
cmpq %r12, %r14
je 0x1084b
movq (%r15,%r12,8), %rsi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x6100
incq %r12
jmp 0x10713
leaq 0x98ce(%rip), %rdi      # 0x1a004
leaq 0xaaeb(%rip), %rsi      # 0x1b228
leaq 0xab2c(%rip), %rcx      # 0x1b270
xorl %r12d, %r12d
pushq $0x9
popq %rdx
xorl %eax, %eax
callq 0x6100
leaq 0x98d4(%rip), %rbx      # 0x1a02c
leaq 0x9991(%rip), %rsi      # 0x1a0f0
movq %rbx, %rdi
xorl %eax, %eax
callq 0x6100
leaq -0x1f60(%rbp), %r15
movq %r15, %rdi
movl $0x3e8, %esi            # imm = 0x3E8
callq 0x60e0
movl %eax, %r14d
movq %r15, %rdi
movl %eax, %esi
callq 0x60b0
movq %rax, %r15
leaq 0x9a82(%rip), %rdi      # 0x1a216
callq 0x6070
testl %r14d, %r14d
cmovlel %r12d, %r14d
xorl %r12d, %r12d
cmpq %r12, %r14
je 0x1084b
movq (%r15,%r12,8), %rsi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x6100
incq %r12
jmp 0x107a3
leaq 0x983e(%rip), %rdi      # 0x1a004
leaq 0xaa5b(%rip), %rsi      # 0x1b228
leaq 0xaa9c(%rip), %rcx      # 0x1b270
xorl %r12d, %r12d
pushq $0x9
popq %rdx
xorl %eax, %eax
callq 0x6100
leaq 0x9844(%rip), %rbx      # 0x1a02c
leaq 0x98ab(%rip), %rsi      # 0x1a09a
movq %rbx, %rdi
xorl %eax, %eax
callq 0x6100
leaq -0x1f60(%rbp), %r15
movq %r15, %rdi
movl $0x3e8, %esi            # imm = 0x3E8
callq 0x60e0
movl %eax, %r14d
movq %r15, %rdi
movl %eax, %esi
callq 0x60b0
movq %rax, %r15
leaq 0x99f2(%rip), %rdi      # 0x1a216
callq 0x6070
testl %r14d, %r14d
cmovlel %r12d, %r14d
xorl %r12d, %r12d
cmpq %r12, %r14
je 0x1084b
movq (%r15,%r12,8), %rsi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x6100
incq %r12
jmp 0x10833
pushq $0x1
popq %rdi
callq 0x61a0
// File: /workspace/github_c_makefile_star2_O2/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 %rbx
pushq %rax
movq %rdi, %rbx
movq 0x8(%rdi), %rdi
testq %rdi, %rdi
je 0x10949
callq 0x10932
movq 0x10(%rbx), %rdi
testq %rdi, %rdi
je 0x10957
callq 0x108ce
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6030
// File: /workspace/github_c_makefile_star2_O2/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 0x10f23
movq %rsi, %rbx
movq %rdi, %r14
movq 0x8(%rdi), %rdi
testq %rdi, %rdi
je 0x10ef4
movq 0x8(%rbx), %rsi
testq %rsi, %rsi
je 0x10ef4
callq 0x10eba
testl %eax, %eax
je 0x10f23
movq 0x8(%r14), %rdi
jmp 0x10ef9
cmpq %rbx, %r14
jne 0x10f23
testq %rdi, %rdi
je 0x10f19
cmpq $0x0, 0x8(%rbx)
je 0x10f19
movq 0x10(%r14), %rdi
movq 0x10(%rbx), %rsi
callq 0x10da8
testl %eax, %eax
setne %al
jmp 0x10f1f
cmpq %rbx, %r14
sete %al
movzbl %al, %r15d
movl %r15d, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/alexj136[P]minijit/src/typecheck.c
// Function: Type_copy
Type *Type_copy(Type *old) {
    Type *new       = challoc(sizeof(Type));
    new->form       = old->form;
    new->innerType  = (old->innerType)  ? Type_copy(old->innerType)  : NULL;
    if(old->innerTypes) {
        new->innerTypes = TypeVector_init();
        int idx;
        for(idx = 0; idx < TypeVector_size(old->innerTypes); idx++) {
            TypeVector_append(new->innerTypes,
                    Type_copy(TypeVector_get(old->innerTypes, idx)));
        }
    }
    else {
        new->innerTypes = NULL;
    }
    return new;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdi, %rbx
pushq $0x18
popq %rdi
callq 0x62ec
movq %rax, %r14
movl (%rbx), %eax
movl %eax, (%r14)
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x11155
callq 0x11127
jmp 0x11157
xorl %eax, %eax
movq %rax, 0x8(%r14)
cmpq $0x0, 0x10(%rbx)
je 0x111a4
callq 0x10180
movq %rax, 0x10(%r14)
xorl %r15d, %r15d
movq 0x10(%rbx), %rdi
callq 0x101b4
cmpl %eax, %r15d
jge 0x111a9
movq 0x10(%r14), %r12
movq 0x10(%rbx), %rdi
movl %r15d, %esi
callq 0x10438
movq %rax, %rdi
callq 0x11127
movq %r12, %rdi
movq %rax, %rsi
callq 0x10262
incl %r15d
jmp 0x1116e
andq $0x0, 0x10(%r14)
movq %r14, %rax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/alexj136[P]minijit/src/typecheck.c
// Function: TypeError_free
void TypeError_free(TypeError *error) {
    Type_free(error->found);
    Type_free(error->expected);
    free(error);
    return;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x8(%rdi), %rdi
callq 0x10932
movq 0x10(%rbx), %rdi
callq 0x10932
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6030
// File: /workspace/github_c_makefile_star2_O2/alexj136[P]minijit/src/typecheck.c
// Function: TypeError_eq
bool TypeError_eq(TypeError *error1, TypeError *error2) {
    // Null checks are essentially to supress the unused parameter warning
    if(!error1) { ERROR("Null TypeError"); }
    if(!error2) { ERROR("Null TypeError"); }
    ERROR("Equality not defined for TypeErrors");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x1f40, %rsp           # imm = 0x1F40
testq %rdi, %rdi
jne 0x11f7f
leaq 0x810e(%rip), %rdi      # 0x1a004
leaq 0x932b(%rip), %rsi      # 0x1b228
leaq 0x949d(%rip), %rcx      # 0x1b3a1
xorl %r12d, %r12d
pushq $0x60
popq %rdx
xorl %eax, %eax
callq 0x6100
leaq 0x8114(%rip), %rbx      # 0x1a02c
leaq 0x948f(%rip), %rsi      # 0x1b3ae
movq %rbx, %rdi
xorl %eax, %eax
callq 0x6100
leaq -0x1f60(%rbp), %r15
movq %r15, %rdi
movl $0x3e8, %esi            # imm = 0x3E8
callq 0x60e0
movl %eax, %r14d
movq %r15, %rdi
movl %eax, %esi
callq 0x60b0
movq %rax, %r15
leaq 0x82c2(%rip), %rdi      # 0x1a216
callq 0x6070
testl %r14d, %r14d
cmovlel %r12d, %r14d
xorl %r12d, %r12d
cmpq %r12, %r14
je 0x1209d
movq (%r15,%r12,8), %rsi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x6100
incq %r12
jmp 0x11f63
leaq 0x807e(%rip), %rdi      # 0x1a004
testq %rsi, %rsi
jne 0x12018
leaq 0x9292(%rip), %rsi      # 0x1b228
leaq 0x9404(%rip), %rcx      # 0x1b3a1
xorl %r12d, %r12d
pushq $0x61
popq %rdx
xorl %eax, %eax
callq 0x6100
leaq 0x807b(%rip), %rbx      # 0x1a02c
leaq 0x93f6(%rip), %rsi      # 0x1b3ae
movq %rbx, %rdi
xorl %eax, %eax
callq 0x6100
leaq -0x1f60(%rbp), %r15
movq %r15, %rdi
movl $0x3e8, %esi            # imm = 0x3E8
callq 0x60e0
movl %eax, %r14d
movq %r15, %rdi
movl %eax, %esi
callq 0x60b0
movq %rax, %r15
leaq 0x8229(%rip), %rdi      # 0x1a216
callq 0x6070
testl %r14d, %r14d
cmovlel %r12d, %r14d
xorl %r12d, %r12d
cmpq %r12, %r14
je 0x1209d
movq (%r15,%r12,8), %rsi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x6100
incq %r12
jmp 0x11ffc
leaq 0x9209(%rip), %rsi      # 0x1b228
leaq 0x937b(%rip), %rcx      # 0x1b3a1
xorl %r12d, %r12d
pushq $0x62
popq %rdx
xorl %eax, %eax
callq 0x6100
leaq 0x7ff2(%rip), %rbx      # 0x1a02c
leaq 0x937c(%rip), %rsi      # 0x1b3bd
movq %rbx, %rdi
xorl %eax, %eax
callq 0x6100
leaq -0x1f60(%rbp), %r15
movq %r15, %rdi
movl $0x3e8, %esi            # imm = 0x3E8
callq 0x60e0
movl %eax, %r14d
movq %r15, %rdi
movl %eax, %esi
callq 0x60b0
movq %rax, %r15
leaq 0x81a0(%rip), %rdi      # 0x1a216
callq 0x6070
testl %r14d, %r14d
cmovlel %r12d, %r14d
xorl %r12d, %r12d
cmpq %r12, %r14
je 0x1209d
movq (%r15,%r12,8), %rsi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x6100
incq %r12
jmp 0x12085
pushq $0x1
popq %rdi
callq 0x61a0
// File: /workspace/github_c_makefile_star2_O2/alexj136[P]minijit/src/typecheck.c
// Function: TypeCheckSuccess_init
TypeCheckResult *TypeCheckSuccess_init(Type *type) {
    TypeCheckResult *res = challoc(sizeof(TypeCheckResult));
    res->success = true;
    res->type    = type;
    res->errors  = NULL;
    return res;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
pushq %rax
movq %rdi, %rbx
pushq $0x18
popq %rdi
callq 0x62ec
movl $0x1, (%rax)
movq %rbx, 0x8(%rax)
andq $0x0, 0x10(%rax)
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/alexj136[P]minijit/src/typecheck.c
// Function: TypeCheckFail_init
TypeCheckResult *TypeCheckFail_init(TypeErrorVector *errors) {
    TypeCheckResult *res = challoc(sizeof(TypeCheckResult));
    res->success = false;
    res->type    = NULL;
    res->errors  = errors;
    return res;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
pushq %rax
movq %rdi, %rbx
pushq $0x18
popq %rdi
callq 0x62ec
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rbx, 0x10(%rax)
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/alexj136[P]minijit/src/typecheck.c
// Function: TypeCheckResult_free
void TypeCheckResult_free(TypeCheckResult *result) {
    if(result->success) { Type_free(result->type); }
    else { TypeErrorVector_free(result->errors); }
    free(result);
    return;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
pushq %rax
movq %rdi, %rbx
cmpl $0x0, (%rdi)
je 0x122e5
movq 0x8(%rbx), %rdi
callq 0x10932
jmp 0x122ee
movq 0x10(%rbx), %rdi
callq 0x11903
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6030
// File: /workspace/github_c_makefile_star2_O2/alexj136[P]minijit/src/typecheck.c
// Function: check_Comm
TypeCheckResult *check_Comm(Comm *comm, TypeVector *symbol_table) {
    if(Comm_isWhile(comm)) {}
    else if(Comm_isAssign(comm)) {}
    else if(Comm_isReturn(comm)) {

    }
    else if(Comm_isComp(comm)) {
        TypeCheckResult *fst_res = check_Comm(Comp_fst(comm), symbol_table);
    }
    else { ERROR("Unrecognised Comm type"); }
    NOT_IMPLEMENTED;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x1f40, %rsp           # imm = 0x1F40
movl (%rdi), %eax
cmpl $0x2, %eax
jb 0x126da
cmpl $0x3, %eax
je 0x126da
cmpl $0x2, %eax
jne 0x1276c
movq 0x10(%rdi), %rdi
callq 0x126aa
leaq 0x7923(%rip), %rdi      # 0x1a004
leaq 0x8b40(%rip), %rsi      # 0x1b228
leaq 0x8d1d(%rip), %rcx      # 0x1b40c
xorl %r12d, %r12d
movl $0xa9, %edx
xorl %eax, %eax
callq 0x6100
leaq 0x7927(%rip), %rbx      # 0x1a02c
leaq 0x8ce0(%rip), %rsi      # 0x1b3ec
movq %rbx, %rdi
xorl %eax, %eax
callq 0x6100
leaq -0x1f60(%rbp), %r15
movq %r15, %rdi
movl $0x3e8, %esi            # imm = 0x3E8
callq 0x60e0
movl %eax, %r14d
movq %r15, %rdi
movl %eax, %esi
callq 0x60b0
movq %rax, %r15
leaq 0x7ad5(%rip), %rdi      # 0x1a216
callq 0x6070
testl %r14d, %r14d
cmovlel %r12d, %r14d
xorl %r12d, %r12d
cmpq %r12, %r14
je 0x127fa
movq (%r15,%r12,8), %rsi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x6100
incq %r12
jmp 0x12750
leaq 0x7891(%rip), %rdi      # 0x1a004
leaq 0x8aae(%rip), %rsi      # 0x1b228
leaq 0x8c8b(%rip), %rcx      # 0x1b40c
xorl %r12d, %r12d
movl $0xa8, %edx
xorl %eax, %eax
callq 0x6100
leaq 0x7895(%rip), %rbx      # 0x1a02c
leaq 0x8c79(%rip), %rsi      # 0x1b417
movq %rbx, %rdi
xorl %eax, %eax
callq 0x6100
leaq -0x1f60(%rbp), %r15
movq %r15, %rdi
movl $0x3e8, %esi            # imm = 0x3E8
callq 0x60e0
movl %eax, %r14d
movq %r15, %rdi
movl %eax, %esi
callq 0x60b0
movq %rax, %r15
leaq 0x7a43(%rip), %rdi      # 0x1a216
callq 0x6070
testl %r14d, %r14d
cmovlel %r12d, %r14d
xorl %r12d, %r12d
cmpq %r12, %r14
je 0x127fa
movq (%r15,%r12,8), %rsi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x6100
incq %r12
jmp 0x127e2
pushq $0x1
popq %rdi
callq 0x61a0
// File: /workspace/github_c_makefile_star2_O2/alexj136[P]minijit/src/interpreter.c
// Function: InterpretResult_init
InterpretResult *InterpretResult_init(interpretResultType type, int result,
        bool returning, int line_no, int char_no) {

    InterpretResult *ir = challoc(sizeof(InterpretResult));
    ir->type      = type;
    ir->result    = result;
    ir->returning = returning;
    ir->line_no   = line_no;
    ir->char_no   = char_no;
    return ir;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movl %r8d, %ebx
movl %ecx, %r14d
movl %edx, %r15d
movl %esi, %r12d
movl %edi, %r13d
pushq $0x14
popq %rdi
callq 0x62ec
movl %r13d, (%rax)
movl %r12d, 0x4(%rax)
movl %r15d, 0x8(%rax)
movl %r14d, 0xc(%rax)
movl %ebx, 0x10(%rax)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/alexj136[P]minijit/src/interpreter.c
// Function: interpret_Prog
InterpretResult *interpret_Prog(Prog *prog, IntRefVector *args) {

    // Create a Call Expr to call main
    ExprVector *arg_exprs = ExprVector_init();
    int idx;
    for(idx = 0; idx < IntRefVector_size(args); idx++) {
        ExprVector_append(arg_exprs,
                Int_init(IntRef_value(IntRefVector_get(args, idx))));
    }
    Expr *main_call = Call_init(0, arg_exprs);

    // Run the call
    InterpretResult *result = interpret_Expr(prog, main_call, NULL);

    // Free the call
    Expr_free(main_call);

    // Return the result
    return result;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rsi, %r14
movq %rdi, %rbx
xorl %r15d, %r15d
xorl %eax, %eax
callq 0x9b53
movq %rax, %r12
movq %r14, %rdi
callq 0x7537
cmpl %eax, %r15d
jge 0x12b2b
movq %r14, %rdi
movl %r15d, %esi
callq 0x77bb
movl (%rax), %edi
callq 0xaa63
movq %r12, %rdi
movq %rax, %rsi
callq 0x9c37
incl %r15d
jmp 0x12afc
xorl %edi, %edi
movq %r12, %rsi
callq 0xaadb
movq %rax, %r14
movq %rbx, %rdi
movq %rax, %rsi
xorl %edx, %edx
callq 0x12b5c
movq %rax, %rbx
movq %r14, %rdi
callq 0x9b1b
movq %rbx, %rax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/alexj136[P]minijit/src/interpreter.c
// Function: interpret_Func
InterpretResult *interpret_Func(Prog *prog, Func *func, int *store) {

    // The store is created for us in the interpret_Expr() Call case. Run the
    // command with the store, check for errors, and return.

    InterpretResult *res = interpret_Comm(prog, Func_body(func), store);

    if(res->type == iSuccess && res->returning == false) {
        free(res);
        return InterpretFailEndWithoutReturn_init(Func_src_line_no(func),
                Func_src_char_no(func));
    }
    else {
        return res;
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq 0x10(%rsi), %rsi
callq 0x12e46
cmpl $0x0, (%rax)
jne 0x12e26
cmpl $0x0, 0x8(%rax)
je 0x12e2d
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
movq %rax, %rdi
callq 0x6030
movl 0x18(%rbx), %edi
movl 0x1c(%rbx), %esi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x12ac6