LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/lex.c
// Function: lex_condskip
void lex_condskip(lexer *lx) {
	lex_cond *cond;
	int had_nl = 1;
	lx->m_exp = 0;
reset:	cond = vector_top(&lx->conds);
	if (cond != NULL && (!cond->is_true || cond->was_true)) {
		//Repeat until a conditional directive changes the state
		char cur = lex_cur(lx);
		while (cur != '\0') {
			int nline = lex_wspace(lx);
			if ((nline || had_nl) && lex_cur(lx) == '#') {
				if (cur == '\n') had_nl = 1;
				lex_advc(lx);
				lex_next(lx);

				//Only perform conditional directives
				token t = lex_peek(lx);
				if (is_condppd(t.type)) {
					lex_ppd(lx);
					goto reset;
				}
			}
			cur = lex_advc(lx);
			had_nl = 0;
		}

		//Premature end of input
		if (cur == '\0')
			c_error(&lx->tgt->loc, "Expected #endif before end of input\n");
	}
	lx->m_exp = 1;
	return;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %rdi, %rbx
andl $0x0, 0x68(%rdi)
leaq 0x50(%rdi), %r14
pushq $0x1
popq %r12
leaq 0x8(%rsp), %r15
movabsq $0x1b00000003, %r13     # imm = 0x1B00000003
movq %r14, %rdi
callq 0xbfae
testq %rax, %rax
je 0x765d
cmpl $0x0, (%rax)
je 0x75cc
cmpl $0x0, 0x4(%rax)
je 0x765d
movq %rbx, %rdi
callq 0x6493
movl %eax, %ebp
testb %bpl, %bpl
je 0x7648
movq %rbx, %rdi
callq 0x7370
orl %r12d, %eax
je 0x7621
movq %rbx, %rdi
callq 0x6493
cmpb $0x23, %al
jne 0x7621
movq %rbx, %rdi
callq 0x64ad
movq %rbx, %rdi
callq 0x6da8
movq %r15, %rdi
movq %rbx, %rsi
callq 0x74e5
movl 0x8(%rsp), %eax
addl $-0x36, %eax
cmpl $0x24, %eax
ja 0x7621
btq %rax, %r13
jb 0x7630
movq %rbx, %rdi
callq 0x64ad
movl %eax, %ebp
xorl %r12d, %r12d
jmp 0x75d6
cmpb $0xa, %bpl
pushq $0x1
popq %rax
cmovel %eax, %r12d
movq %rbx, %rdi
callq 0x73e7
jmp 0x75ac
movq (%rbx), %rdi
addq $0x28, %rdi
leaq 0x586d(%rip), %rsi      # 0xcec3
xorl %eax, %eax
callq 0x35e4
movl $0x1, 0x68(%rbx)
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/lex.c
// Function: lex_unget
void lex_unget(lexer *lx, token_n *n) {
	n->next = lx->pre;
	lx->pre = n;
	lx->ahead = BLANK_TOKEN; //force lex_peek to call lex_next
	return;
}

// Assembly:
movq 0x8(%rdi), %rax
movq %rax, 0x30(%rsi)
movq %rsi, 0x8(%rdi)
movups 0xbdb2(%rip), %xmm0     # 0x13438
movups %xmm0, 0x10(%rdi)
movups 0xbdb7(%rip), %xmm0     # 0x13448
movups %xmm0, 0x20(%rdi)
movups 0xbdbc(%rip), %xmm0     # 0x13458
movups %xmm0, 0x30(%rdi)
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/lex.c
// Function: is_type_spec
int is_type_spec(lexer *lx, token t) {
	symbol *td;
	switch (t.type) {
		case TOK_KW_VOID: case TOK_KW_CHAR: case TOK_KW_SHORT:
		case TOK_KW_FLOAT: case TOK_KW_TYPEDEF: case TOK_KW_EXTERN:
		case TOK_KW_STATIC: case TOK_KW_AUTO: case TOK_KW_REGISTER:
		case TOK_KW_SIGNED: case TOK_KW_UNSIGNED: case TOK_KW_CONST:
		case TOK_KW_VOLATILE: case TOK_KW_INT: case TOK_KW_DOUBLE:
		case TOK_KW_LONG: case TOK_KW_STRUCT: case TOK_KW_UNION:
		case TOK_KW_ENUM:
			return 1;
		case TOK_IDENT:
			td = symtable_search(lx->stb, t.dat.sval);
			return (td->btype->s_class == CLASS_TYPEDEF);
	}
	return 0;
}

// Assembly:
pushq %rax
movl 0x10(%rsp), %eax
leal -0x42(%rax), %ecx
cmpl $0x13, %ecx
jae 0x76b3
pushq $0x1
popq %rax
popq %rcx
retq
cmpl $0x35, %eax
jne 0x76d9
leaq 0x10(%rsp), %rax
movq 0x60(%rdi), %rdi
movq 0x20(%rax), %rsi
callq 0xb822
movq 0x10(%rax), %rcx
xorl %eax, %eax
cmpl $0x1, 0x8(%rcx)
sete %al
jmp 0x76b1
xorl %eax, %eax
jmp 0x76b1
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/lex.c
// Function: make_tok_node
token_n *make_tok_node(token t) {
	token_n *node = malloc(sizeof(struct TOKEN_NODE));
	node->t = t;
	node->next = NULL;
	return node;
}

// Assembly:
pushq %rax
pushq $0x38
popq %rdi
callq 0x3170
movaps 0x10(%rsp), %xmm0
movaps 0x20(%rsp), %xmm1
movaps 0x30(%rsp), %xmm2
movups %xmm0, (%rax)
movups %xmm1, 0x10(%rax)
movups %xmm2, 0x20(%rax)
andq $0x0, 0x30(%rax)
popq %rcx
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/lex.c
// Function: tok_str
const char *tok_str(token t, int nflag) {
	//List is built with both enum and natural representations
	//n*2 -> enum, n*2+1 -> natural
	char *tstr_list[] = {
		#define tok(id, estr, str) estr, str,
		#define kw(id, estr, str) estr, str,
		#include "tok.inc"
		#undef kw
		#undef tok
	};

	//Check for special cases
	static char buf[256];
	switch (t.type * (nflag)) {
		case TOK_CONST:
			if (t.dtype->kind == TYPE_FLOAT)
				snprintf(buf, 256, "%lf", t.dat.fval);
			else if (t.dtype->is_signed)
				snprintf(buf, 256, "%lld", t.dat.ival);
			else
				snprintf(buf, 256, "%llu", t.dat.uval);
			return buf;
		case TOK_STR:
		case TOK_IDENT:
			return t.dat.sval;
	}

	return tstr_list[t.type*2 + (nflag != 0)];
}

// Assembly:
pushq %rbx
leaq 0x10(%rsp), %rax
movl (%rax), %ecx
movl %ecx, %edx
imull %edi, %edx
leal -0x34(%rdx), %esi
cmpl $0x2, %esi
jae 0x7722
movq 0x20(%rax), %rbx
jmp 0x779d
cmpl $0x33, %edx
jne 0x7754
movq 0x28(%rax), %rcx
cmpl $0x7, (%rcx)
jne 0x776d
movsd 0x20(%rax), %xmm0
leaq 0xbd64(%rip), %rbx      # 0x134a0
leaq 0x5c4a(%rip), %rdx      # 0xd38d
movl $0x100, %esi            # imm = 0x100
movq %rbx, %rdi
movb $0x1, %al
callq 0x30d0
jmp 0x779d
xorl %eax, %eax
testl %edi, %edi
setne %al
leal (%rax,%rcx,2), %eax
cltq
leaq 0xb069(%rip), %rcx      # 0x127d0
movq (%rcx,%rax,8), %rbx
jmp 0x779d
cmpl $0x0, 0xc(%rcx)
movq 0x20(%rax), %rcx
leaq 0xbd24(%rip), %rbx      # 0x134a0
je 0x7787
leaq 0x5c0c(%rip), %rdx      # 0xd391
jmp 0x778e
leaq 0x5c08(%rip), %rdx      # 0xd396
movl $0x100, %esi            # imm = 0x100
movq %rbx, %rdi
xorl %eax, %eax
callq 0x30d0
movq %rbx, %rax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/lex.c
// Function: lexer_debug
void lexer_debug(lexer *lx, int dbg_lvl) {
	//Get all tokens
	int tcount = 0;
	token t = lex_peek(lx);
	while (t.type != TOK_END) {
		s_pos loc = t.loc;
		if (t.nline) {
			if (tcount != 0)
				printf("\n");
			if (dbg_lvl > 0)
				printf("%i:\t", lx->tgt->loc.line);
		}
		printf("%s ", tok_str(t, dbg_lvl));
		tcount++;
		lex_adv(lx);
		t = lex_peek(lx);
	}
	printf("\n");
	if (dbg_lvl > 0)
	printf("# tokens: %i\n", tcount);
	return;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
movl %esi, %ebx
movq %rdi, %r14
leaq 0x38(%rsp), %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0x74e5
leaq 0x5bd4(%rip), %r12      # 0xd3a0
pushq $0xa
popq %r13
xorl %ebp, %ebp
cmpl $0x0, 0x38(%rsp)
je 0x784c
cmpl $0x0, 0x3c(%rsp)
je 0x7804
testl %ebp, %ebp
je 0x77ec
movl %r13d, %edi
callq 0x3040
testl %ebx, %ebx
jle 0x7804
movq (%r14), %rax
movl 0x28(%rax), %esi
leaq 0x5b9e(%rip), %rdi      # 0xd39b
xorl %eax, %eax
callq 0x30c0
movups 0x38(%rsp), %xmm0
movups 0x48(%rsp), %xmm1
movups 0x58(%rsp), %xmm2
movups %xmm2, 0x20(%rsp)
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movl %ebx, %edi
callq 0x7707
movq %r12, %rdi
movq %rax, %rsi
xorl %eax, %eax
callq 0x30c0
incl %ebp
movq %r14, %rdi
callq 0x7522
movq %r15, %rdi
movq %r14, %rsi
callq 0x74e5
jmp 0x77d2
pushq $0xa
popq %rdi
callq 0x3040
testl %ebx, %ebx
jle 0x7876
leaq 0x5b45(%rip), %rdi      # 0xd3a4
movl %ebp, %esi
xorl %eax, %eax
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x30c0
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/lex.c
// Function: lexer_debug_pprc
void lexer_debug_pprc(lexer *lx, int dbg_lvl) {
	char c = lex_cur(lx);
	while (c != '\0') {
		if (dbg_lvl > 0)
			printf("(%i:%i)\t%c\n", lx->tgt->loc.line, lx->tgt->loc.col, c);
		else
			printf("%c", c);
		c = lex_advc(lx);
	}
	return;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movl %esi, %ebx
movq %rdi, %r14
callq 0x6493
leaq 0x5b17(%rip), %r15      # 0xd3b2
testb %al, %al
je 0x78cc
movsbl %al, %ecx
testl %ebx, %ebx
jle 0x78bb
movq (%r14), %rax
movl 0x28(%rax), %esi
movl 0x2c(%rax), %edx
movq %r15, %rdi
xorl %eax, %eax
callq 0x30c0
jmp 0x78c2
movl %ecx, %edi
callq 0x3040
movq %r14, %rdi
callq 0x64ad
jmp 0x789b
popq %rbx
popq %r14
popq %r15
retq
nop
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/main.c
// Function: usage
void usage(int detail) {
	printf("USAGE: scc [OPTION]... [FILE]...\n");
	if (!detail) return;
	printf("\nOptions:\n");
	printf(" -h\t\tprint this help message\n");
	printf(" -o [outfile]\tspecifies the name of the output file\n");
	printf(" -e\t\tstop after preprocessing phase (-E for detailed output)\n"); 
	printf(" -l\t\tstop after lexical analysis phase (-L for detailed output)\n");
	printf(" -p\t\tstop after parsing phase\n\n");
	return;
}

// Assembly:
pushq %rbx
movl %edi, %ebx
leaq 0x5b48(%rip), %rdi      # 0xd426
callq 0x3070
testl %ebx, %ebx
je 0x7930
leaq 0x5b59(%rip), %rdi      # 0xd447
callq 0x3070
leaq 0x5b57(%rip), %rdi      # 0xd451
callq 0x3070
leaq 0x5b68(%rip), %rdi      # 0xd46e
callq 0x3070
leaq 0x5b90(%rip), %rdi      # 0xd4a2
callq 0x3070
leaq 0x5bc1(%rip), %rdi      # 0xd4df
callq 0x3070
leaq 0x5bf5(%rip), %rdi      # 0xd51f
popq %rbx
jmp 0x3070
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse
ast_n *parse(lexer *lx) {
	ast_n *list = NULL; // = parse_stmt();
	ast_n *cur = NULL;
	while (lex_peek(lx).type != TOK_END) {
		//Look ahead to see if next is decl or function def
		int par = 0;
		int fdef = -1;
		token_n *toklist = NULL;
		for (;;) {
			token t = lex_peek(lx);
			switch (t.type) {
				case TOK_RPR: par = 1;    break;
				case TOK_EQ:  fdef = 0;   break;
				case TOK_SEM: fdef = 0;   break; 
				case TOK_LBR: fdef = par; break;
				case TOK_END:
					c_error(&lx->tgt->loc, "Premature end of input\n");
					return NULL;
			}
			token_n *tn = make_tok_node(t);
			tn->next = toklist;
			toklist = tn;

			if (fdef >= 0) break;
			lex_adv(lx);
		}

		//Unget tokens
		while (toklist != NULL) {
			token_n *next = toklist->next;
			lex_unget(lx, toklist);
			toklist = next;
		}

		//Parse accordingly
		ast_n *node;
		switch (fdef) {
			case 0: node = parse_decl(lx); break;
			case 1: node = parse_fdef(lx); break;
		}
		if (node == NULL) continue;
		node->next = NULL;

		//Add declaration/function definition to list
		if (list == NULL) {
			list = node;
		} else {
			cur->next = node;
		}
		cur = node;
	}

	return list;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xa8, %rsp
movq %rdi, %r14
xorl %eax, %eax
leaq 0x599b(%rip), %r15      # 0xd540
movq %rax, 0x38(%rsp)
movq %rax, 0x30(%rsp)
leaq 0x78(%rsp), %rdi
movq %r14, %rsi
callq 0x74e5
cmpl $0x0, 0x78(%rsp)
je 0x7cdd
movq %rbx, 0x40(%rsp)
xorl %ebx, %ebx
pushq $-0x1
popq %r13
xorl %r12d, %r12d
leaq 0x48(%rsp), %rdi
movq %r14, %rsi
callq 0x74e5
movl 0x48(%rsp), %eax
cmpq $0x8, %rax
ja 0x7bfa
movslq (%r15,%rax,4), %rax
addq %r15, %rax
jmpq *%rax
movl %ebx, %r13d
jmp 0x7c09
cmpl $0x1d, %eax
jne 0x7c09
xorl %r13d, %r13d
jmp 0x7c09
pushq $0x1
popq %rax
movl %eax, %ebx
movups 0x48(%rsp), %xmm0
movups 0x58(%rsp), %xmm1
movups 0x68(%rsp), %xmm2
movups %xmm2, 0x20(%rsp)
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
callq 0x76dd
movq %rax, %rbp
movq %r12, 0x30(%rax)
testl %r13d, %r13d
jns 0x7c56
movq %r14, %rdi
callq 0x7522
movq %rbp, %r12
jmp 0x7bd5
movq 0x30(%rbp), %rbx
movq %r14, %rdi
movq %rbp, %rsi
callq 0x7673
movq %rbx, %rbp
testq %rbp, %rbp
jne 0x7c44
cmpl $0x1, %r13d
je 0x7c75
testl %r13d, %r13d
movq 0x40(%rsp), %rbx
jne 0x7c80
movq %r14, %rdi
callq 0x7ce4
jmp 0x7c7d
movq %r14, %rdi
callq 0x7e16
movq %rax, %rbx
testq %rbx, %rbx
je 0x7baf
andq $0x0, 0x60(%rbx)
cmpq $0x0, 0x38(%rsp)
je 0x7ca9
movq 0x30(%rsp), %rax
movq %rbx, 0x60(%rax)
movq %rbx, 0x30(%rsp)
jmp 0x7baf
movq %rbx, %rax
jmp 0x7ba5
movq (%r14), %rdi
addq $0x28, %rdi
leaq 0x5a41(%rip), %rsi      # 0xd700
xorl %ebx, %ebx
xorl %eax, %eax
callq 0x35e4
movq %rbx, %rax
addq $0xa8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x38(%rsp), %rbx
jmp 0x7cc8
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_decl
ast_n *parse_decl(lexer *lx) {
	//Get specifiers
	s_type *type = parse_decl_spec(lx);
	if (!type)
		return NULL;
	
	//Check if specifiers were immediately followed by a semicolon
	token t = lex_peek(lx);
	if (t.type == TOK_SEM) {
		//Check for blank definition
		if (type->kind != TYPE_STRUCT && type->kind != TYPE_UNION)
			c_error(&t.loc, "Declaration declares nothing\n");
		lex_adv(lx);
		type_del(type);
		return NULL;
	}

	//Parse declaration body (declarator [+ initializer])
	char *name = NULL;
	ast_n *node = parse_decl_body(lx, type);
	switch (lex_peek(lx).type) {
		//Parse multiple declarations
		case TOK_CMM: {
			ast_n *node_ex = node;
			while (lex_peek(lx).type == TOK_CMM) {
				lex_adv(lx);
				node_ex->dat.decl.next = parse_decl_body(lx, type);
				node_ex = node_ex->dat.decl.next;
			}

			//Expect ';'
			t = lex_peek(lx);
			if (t.type != TOK_SEM) {
				c_error(&t.loc, "Expected ';' after declaration\n");
			}
			lex_adv(lx);
			} break;

		case TOK_SEM:
			lex_adv(lx);
			break;

		case TOK_LBR:
			break;
	}
	type_del(type);

	return node;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xc0, %rsp
movq %rdi, %r14
callq 0x7f3f
testq %rax, %rax
je 0x7d35
movq %rax, %rbx
movq %rsp, %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0x74e5
cmpl $0x1, (%r15)
jne 0x7d3d
movl (%rbx), %eax
andl $-0x2, %eax
xorl %r15d, %r15d
cmpl $0x8, %eax
je 0x7df2
leaq 0x59e8(%rip), %rsi      # 0xd718
jmp 0x7de6
xorl %r15d, %r15d
jmp 0x7e02
movq %r14, %rdi
movq %rbx, %rsi
callq 0x8322
movq %rax, %r15
leaq 0x90(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0x74e5
movl (%r12), %eax
cmpl $0x1, %eax
je 0x7df2
cmpl $0x3, %eax
jne 0x7dfa
leaq 0x30(%rsp), %r12
movq %r15, %r13
movq %r12, %rdi
movq %r14, %rsi
callq 0x74e5
cmpl $0x3, 0x30(%rsp)
jne 0x7daa
movq %r14, %rdi
callq 0x7522
movq %r14, %rdi
movq %rbx, %rsi
callq 0x8322
movq %rax, 0x28(%r13)
movq %rax, %r13
jmp 0x7d7c
leaq 0x60(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0x74e5
movups (%r12), %xmm0
movups 0x10(%r12), %xmm1
movups 0x20(%r12), %xmm2
movaps %xmm2, 0x20(%rsp)
movaps %xmm1, 0x10(%rsp)
movaps %xmm0, (%rsp)
cmpl $0x1, (%rsp)
je 0x7df2
leaq 0x5950(%rip), %rsi      # 0xd736
leaq 0x8(%rsp), %rdi
xorl %eax, %eax
callq 0x35e4
movq %r14, %rdi
callq 0x7522
movq %rbx, %rdi
callq 0xb8ba
movq %r15, %rax
addq $0xc0, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_fdef
ast_n *parse_fdef(lexer *lx) {
	//Get return type
	s_type *r_type = parse_decl_spec(lx);

	//Get declarator
	token f_name = {0};
	s_type *f_type = parse_decltr(lx, r_type, &f_name);
	f_type->ret = r_type;

	//Create symbol (or reuse unless there is a redefinition conflict)
	symbol *s = symtable_def(lx->stb, f_name.dat.sval, f_type, &f_name.loc);
	if (s->fbody != NULL)
		c_error(&f_name.loc, "Redefinition of '%s'\n", f_name.dat.sval);

	//Enter function scope
	symtable_scope_enter(lx->stb);
	lx->stb->func = s;
	for (int i=0; i<f_type->param.len; i++) {
		s_param *p = f_type->param.table[i];
		symtable_def(lx->stb, p->name, p->type, NULL);
	}

	//Create node and parse body
	ast_n *node = astn_new(DECL, DECL_FUNC, lex_peek(lx));
	node->dat.decl.sym = s;
	node->dat.decl.block = parse_stmt_cmpd(lx);

	//Leave function scope
	symtable_scope_leave(lx->stb);
	lx->stb->func = NULL;

	return node;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x98, %rsp
movq %rdi, %rbx
callq 0x7f3f
movq %rax, %r14
xorps %xmm0, %xmm0
leaq 0x30(%rsp), %r12
movaps %xmm0, 0x20(%r12)
movaps %xmm0, 0x10(%r12)
movaps %xmm0, (%r12)
movq %rbx, %rdi
movq %rax, %rsi
movq %r12, %rdx
callq 0x8998
movq %rax, %r15
movq %r14, 0x38(%rax)
movq 0x60(%rbx), %rdi
movq 0x20(%r12), %rsi
leaq 0x38(%rsp), %r12
movq %rax, %rdx
movq %r12, %rcx
callq 0xb545
movq %rax, %r14
cmpq $0x0, 0x18(%rax)
je 0x7e96
movq 0x50(%rsp), %rdx
leaq 0x5aa4(%rip), %rsi      # 0xd930
movq %r12, %rdi
xorl %eax, %eax
callq 0x35e4
movq 0x60(%rbx), %rdi
callq 0xb709
movq 0x60(%rbx), %rax
movq %r14, 0x10(%rax)
xorl %r12d, %r12d
movslq 0x30(%r15), %rax
cmpq %rax, %r12
jge 0x7ed2
movq 0x28(%r15), %rax
movq (%rax,%r12,8), %rax
movq 0x60(%rbx), %rdi
movq (%rax), %rsi
movq 0x8(%rax), %rdx
xorl %ecx, %ecx
callq 0xb545
incq %r12
jmp 0x7eaa
leaq 0x68(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x74e5
movups (%r15), %xmm0
movups 0x10(%r15), %xmm1
movups 0x20(%r15), %xmm2
movups %xmm2, 0x20(%rsp)
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
pushq $0x1
popq %rsi
xorl %edi, %edi
callq 0x333c
movq %rax, %r15
movq %r14, 0x10(%rax)
movq %rbx, %rdi
callq 0x8d1e
movq %rax, 0x20(%r15)
movq 0x60(%rbx), %rdi
callq 0xb738
movq 0x60(%rbx), %rax
andq $0x0, 0x10(%rax)
movq %r15, %rax
addq $0x98, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_decl_body
ast_n *parse_decl_body(lexer *lx, s_type *base_type) {
	//Parse declarator
	token vname = {0}; 
	s_type *vtype = parse_decltr(lx, type_clone(base_type), &vname);

	//Create a new symbol
	//parse_decltr may not set vname in order to implement parameters
	if (vname.dat.sval == NULL)
		c_error(&vname.loc, "Missing variable name in declaration\n");

	symbol *s = symtable_def(lx->stb, vname.dat.sval, vtype, &vname.loc);
	if (!s) { //If duplicate exists
		free(vname.dat.sval);
		type_del(vtype);
	}

	ast_n *node = astn_new(DECL, DECL_STD, lex_peek(lx));
	ast_decl *decl_n = &node->dat.decl;
	decl_n->sym = s;

	//Check for and parse initialization
	token t = lex_peek(lx);
	if (t.type == TOK_ASSIGN) {
		lex_adv(lx);
		//decl_n->init = parse_decl_init(lx, node);
		
		//Typedefs cannot be initialized
		if (base_type->s_class == CLASS_TYPEDEF)
			c_error(&t.loc, "Attempt to initialize a typedef\n");
	}

	return node;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0xc8, %rsp
movq %rsi, %rbx
movq %rdi, %r14
xorps %xmm0, %xmm0
leaq 0x30(%rsp), %r12
movaps %xmm0, 0x20(%r12)
movaps %xmm0, 0x10(%r12)
movaps %xmm0, (%r12)
movq %rsi, %rdi
callq 0xb949
movq %r14, %rdi
movq %rax, %rsi
movq %r12, %rdx
callq 0x8998
movq %rax, %r15
movq 0x20(%r12), %rsi
testq %rsi, %rsi
jne 0x838d
leaq 0x38(%rsp), %r12
leaq 0x551e(%rip), %rsi      # 0xd89c
movq %r12, %rdi
xorl %eax, %eax
callq 0x35e4
movq 0x18(%r12), %rsi
movq 0x60(%r14), %rdi
leaq 0x38(%rsp), %rcx
movq %r15, %rdx
callq 0xb545
movq %rax, %r12
testq %rax, %rax
jne 0x83b8
movq 0x50(%rsp), %rdi
callq 0x3030
movq %r15, %rdi
callq 0xb8ba
leaq 0x98(%rsp), %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0x74e5
movups (%r15), %xmm0
movups 0x10(%r15), %xmm1
movups 0x20(%r15), %xmm2
movups %xmm2, 0x20(%rsp)
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
xorl %edi, %edi
xorl %esi, %esi
callq 0x333c
movq %rax, %r15
movq %r12, 0x10(%rax)
leaq 0x68(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0x74e5
cmpl $0x27, (%r12)
jne 0x842f
movq %r14, %rdi
callq 0x7522
cmpl $0x1, 0x8(%rbx)
jne 0x842f
leaq 0x70(%rsp), %rdi
leaq 0x549a(%rip), %rsi      # 0xd8c2
xorl %eax, %eax
callq 0x35e4
movq %r15, %rax
addq $0xc8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_edef
void parse_edef(lexer *lx) {
	lex_adv(lx);

	//Read identifier if available
	char *tname = NULL;
	s_pos nloc, aloc;
	if (lex_peek(lx).type == TOK_IDENT) {
		tname = lex_peek(lx).dat.sval;
		nloc = lex_peek(lx).loc;
		lex_adv(lx);
	}

	//Read list of enumerations
	aloc = lex_peek(lx).loc;
	if (lex_peek(lx).type == TOK_LBR) {
		int e_val = 0;
		lex_adv(lx);
		token t = lex_peek(lx);
		while (t.type != TOK_RBR) {
			//Check for premature end of input
			if (t.type == TOK_END) {
				c_error(&aloc, "Expected '}' before end of input\n");
				break;
			}

			//Parse a single enumeration
			parse_enum(lx, &e_val);

			//Check for comma
			t = lex_peek(lx);
			if (t.type == TOK_IDENT) {
				c_error(&t.loc, "Expected ',' before identifier\n");
				continue;
			} else if (t.type != TOK_CMM && t.type != TOK_RBR) {
				c_error(&t.loc, "Invalid token in enum definition\n");
			}
			lex_adv(lx);
		}
	}

	return;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x178, %rsp            # imm = 0x178
movq %rdi, %rbx
callq 0x7522
leaq 0x148(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x35, (%r14)
jne 0x864a
leaq 0x118(%rsp), %rdi
movq %rbx, %rsi
callq 0x74e5
leaq 0xe8(%rsp), %rdi
movq %rbx, %rsi
callq 0x74e5
movq %rbx, %rdi
callq 0x7522
leaq 0xb8(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x74e5
movq 0x18(%r14), %rax
movq %rax, 0x50(%rsp)
movups 0x8(%r14), %xmm0
movaps %xmm0, 0x40(%rsp)
leaq 0x88(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x5, (%r14)
jne 0x8751
leaq 0xc(%rsp), %r14
andl $0x0, (%r14)
movq %rbx, %rdi
callq 0x7522
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
callq 0x74e5
leaq 0x18(%rsp), %r15
leaq 0x58(%rsp), %r12
leaq 0x537a(%rip), %r13      # 0xda36
leaq 0x5393(%rip), %rbp      # 0xda56
movl 0x10(%rsp), %eax
cmpl $0x6, %eax
je 0x8751
testl %eax, %eax
je 0x873e
movq %rbx, %rdi
movq %r14, %rsi
callq 0x8fe0
movq %r12, %rdi
movq %rbx, %rsi
callq 0x74e5
movups 0x58(%rsp), %xmm0
movups 0x68(%rsp), %xmm1
movups 0x78(%rsp), %xmm2
movaps %xmm2, 0x30(%rsp)
movaps %xmm1, 0x20(%rsp)
movaps %xmm0, 0x10(%rsp)
movl 0x10(%rsp), %eax
cmpl $0x3, %eax
je 0x8734
cmpl $0x6, %eax
je 0x8734
movq %r15, %rdi
cmpl $0x35, %eax
jne 0x872a
movq %r13, %rsi
xorl %eax, %eax
callq 0x35e4
jmp 0x86c3
movq %rbp, %rsi
xorl %eax, %eax
callq 0x35e4
movq %rbx, %rdi
callq 0x7522
jmp 0x86c3
leaq 0x52cf(%rip), %rsi      # 0xda14
leaq 0x40(%rsp), %rdi
xorl %eax, %eax
callq 0x35e4
addq $0x178, %rsp            # imm = 0x178
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_decltr_ptr
s_type *parse_decltr_ptr(lexer *lx, s_type *base_type) {
	if (lex_peek(lx).type != TOK_ASR)
		return base_type;
	lex_adv(lx);

	//Clone the base type
	s_type *ptype = type_new(TYPE_PTR);

	//Parse qualifier list
	token t = lex_peek(lx);
	while (t.type == TOK_KW_CONST || t.type == TOK_KW_VOLATILE) {
		switch (t.type) {
			case TOK_KW_CONST: ptype->is_const = 1;	break;
			case TOK_KW_VOLATILE: ptype->is_volatile = 1; break;
		}
		lex_adv(lx);
	}

	ptype->ref = parse_decltr_ptr(lx, base_type);
	return ptype;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x60, %rsp
movq %rsi, %rbx
movq %rdi, %r14
leaq 0x30(%rsp), %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0x74e5
cmpl $0x12, (%r15)
jne 0x87e3
movq %r14, %rdi
callq 0x7522
pushq $0x3
popq %rdi
callq 0xb5ed
movq %rax, %r15
movq %rsp, %rdi
movq %r14, %rsi
callq 0x74e5
movl (%rsp), %eax
leal -0x53(%rax), %ecx
cmpl $0x1, %ecx
ja 0x87d2
cmpl $0x53, %eax
jne 0x87c0
movl $0x1, 0x10(%r15)
jmp 0x87c8
movl $0x1, 0x14(%r15)
movq %r14, %rdi
callq 0x7522
jmp 0x87a6
movq %r14, %rdi
movq %rbx, %rsi
callq 0x8763
movq %rax, 0x18(%r15)
jmp 0x87e6
movq %rbx, %r15
movq %r15, %rax
addq $0x60, %rsp
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_decltr_back
s_type *parse_decltr_back(lexer *lx, s_type *base_type) {
	s_type *type = base_type;
	if (lex_peek(lx).type == TOK_LBK) {
		lex_adv(lx);

		type = type_new(TYPE_PTR);
		type->ref_len = parse_constexpr(lx);

		//Missing ']'
		token t = lex_peek(lx);
		if (t.type != TOK_RBK)
			c_error(&t.loc, "Missing ']' after array size\n");
		lex_adv(lx);

		//Currently parsing in wrong direction
		type->ref = parse_decltr_back(lx, base_type);
	} else if (lex_peek(lx).type == TOK_LPR) {
		lex_adv(lx);

		type = type_new(TYPE_FUNC);
		type->ret = base_type;

		if (lex_peek(lx).type != TOK_RPR)
			type->param = parse_fparam_list(lx);

		lex_adv(lx);
	}

	return type;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0xc8, %rsp
movq %rsi, %r14
movq %rdi, %rbx
leaq 0x98(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x9, (%r15)
jne 0x8882
movq %rbx, %rdi
callq 0x7522
pushq $0x3
popq %rdi
callq 0xb5ed
movq %rax, %r15
movq %rbx, %rdi
callq 0x88f4
movl %eax, 0x20(%r15)
leaq 0x8(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0xa, (%r12)
je 0x8869
leaq 0x10(%rsp), %rdi
leaq 0x5001(%rip), %rsi      # 0xd863
xorl %eax, %eax
callq 0x35e4
movq %rbx, %rdi
callq 0x7522
movq %rbx, %rdi
movq %r14, %rsi
callq 0x87f3
movq %rax, 0x18(%r15)
jmp 0x88e2
leaq 0x68(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x7, (%r15)
jne 0x88df
movq %rbx, %rdi
callq 0x7522
pushq $0x4
popq %rdi
callq 0xb5ed
movq %rax, %r15
movq %r14, 0x38(%rax)
leaq 0x38(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x8, (%r14)
je 0x88d5
movq %rbx, %rdi
callq 0x8922
movq %rax, 0x28(%r15)
movq %rdx, 0x30(%r15)
movq %rbx, %rdi
callq 0x7522
jmp 0x88e2
movq %r14, %r15
movq %r15, %rax
addq $0xc8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_constexpr
int parse_constexpr(lexer *lx) {
	//Read constant expression
	ast_n *expr = parse_expr_cond(lx);
	
	//Evaluate the expression
	int err = 0;
	int res = eval_constexpr_ast(expr, &err);

	astn_del(expr);
	return res;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
callq 0x912a
movq %rax, %rbx
leaq 0x4(%rsp), %rsi
andl $0x0, (%rsi)
movq %rax, %rdi
callq 0x3d10
movl %eax, %ebp
movq %rbx, %rdi
callq 0x337d
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_fparam_list
vector parse_fparam_list(lexer *lx) {
	//Initialize vector
	vector params;
	vector_init(&params, VECTOR_EMPTY);

	//Return NULL for a blank list
	if (lex_peek(lx).type == TOK_RPR)
		return params;

	//Parse initial item
	s_param *p = parse_fparam(lx);
	vector_add(&params, p);

	//Parse multiple declarations
	while (lex_peek(lx).type == TOK_CMM) {
		lex_adv(lx);
		p = parse_fparam(lx);
		vector_add(&params, p);
	}

	return params;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x70, %rsp
movq %rdi, %rbx
movq %rsp, %rdi
xorl %esi, %esi
callq 0xbe8a
leaq 0x40(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x8, (%r14)
jne 0x8961
movq (%rsp), %rax
movq 0x8(%rsp), %rdx
addq $0x70, %rsp
popq %rbx
popq %r14
popq %r15
retq
movq %rsp, %r14
leaq 0x10(%rsp), %r15
movq %rbx, %rdi
callq 0x8cda
movq %r14, %rdi
movq %rax, %rsi
callq 0xbf10
movq %r15, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x3, 0x10(%rsp)
jne 0x894e
movq %rbx, %rdi
callq 0x7522
jmp 0x8969
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_decltr
s_type *parse_decltr(lexer *lx, s_type *type, token *vname) {
	//Parse pointer types if applicable
	//s_type *ptr_type = parse_decltr_ptr(type);
	//if (ptr_type != type)
	//	return parse_decltr(ptr_type, vname);
	type = parse_decltr_ptr(lx, type); //should work the same?

	//If the asterisk is inside the parenthesis, it indicates that
	//the pointer is bound to what comes after it rather than the
	//preceeding base type
	if (lex_peek(lx).type == TOK_LPR) {
		lex_adv(lx);
		s_type *n_type = parse_decltr(lx, NULL, vname);
		
		//Missing ')'
		token t = lex_peek(lx);
		if (lex_peek(lx).type != TOK_RPR)
			c_error(&t.loc, "Missing ')' in declarator\n");
		lex_adv(lx);

		//Attach trailing array/func types to n_type
		s_type *b_type = parse_decltr_back(lx, type);
		if (n_type == NULL) {
			n_type = b_type;
		} else {
			for (s_type *i = n_type;; i = i->ref) {
				if (i->ref == NULL) {
					i->ref = b_type;
					break;
				}
			}
		}
		return n_type;
	}

	//Do not recurse to parse_decltr after this point
	//Read vname
	token t = lex_peek(lx);
	if (t.type == TOK_IDENT) {
		lex_adv(lx);
		*vname = t;
	}
	return parse_decltr_back(lx, type);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x98, %rsp
movq %rdx, %r15
movq %rdi, %rbx
callq 0x8763
movq %rax, %r14
leaq 0x68(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x7, (%r12)
jne 0x8a47
movq %rbx, %rdi
callq 0x7522
movq %rbx, %rdi
xorl %esi, %esi
movq %r15, %rdx
callq 0x8998
movq %rax, %r15
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
callq 0x74e5
leaq 0x38(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x8, (%r12)
je 0x8a1a
leaq 0x10(%rsp), %rdi
leaq 0x4e6e(%rip), %rsi      # 0xd881
xorl %eax, %eax
callq 0x35e4
movq %rbx, %rdi
callq 0x7522
movq %rbx, %rdi
movq %r14, %rsi
callq 0x87f3
testq %r15, %r15
je 0x8a8e
movq %r15, %rdx
movq %rdx, %rcx
movq 0x18(%rdx), %rdx
testq %rdx, %rdx
jne 0x8a35
movq %rax, 0x18(%rcx)
jmp 0x8a91
leaq 0x8(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x35, (%r12)
jne 0x8a83
movq %rbx, %rdi
callq 0x7522
movups 0x8(%rsp), %xmm0
movups 0x18(%rsp), %xmm1
movups 0x28(%rsp), %xmm2
movups %xmm2, 0x20(%r15)
movups %xmm1, 0x10(%r15)
movups %xmm0, (%r15)
movq %rbx, %rdi
movq %r14, %rsi
callq 0x87f3
movq %rax, %r15
movq %r15, %rax
addq $0x98, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_decl_init
ast_n *parse_decl_init(lexer *lx) {
	ast_n *node;
	if (lex_peek(lx).type == TOK_LBR) {
		//Read initializer list
		token lbr = lex_peek(lx);
		lex_adv(lx);
		node = parse_init_list(lx);

		//Optional ',' after list
		if (lex_peek(lx).type == TOK_CMM)
			lex_adv(lx);

		//Expect '}'
		token rbr = lex_peek(lx);
		if (rbr.type == TOK_RBR) {
			lex_adv(lx);
		} else if (rbr.type == TOK_END) {
			c_error(&lbr.loc, "Unexpected end of input in initializer\n");
		} else {
			c_error(&rbr.loc, "Expected '}' after initializer list\n");
		}
	} else {
		node = parse_expr_assign(lx);
	}

	return node;
}

// Assembly:
pushq %r14
pushq %rbx
subq $0xc8, %rsp
movq %rdi, %rbx
leaq 0x98(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x5, (%r14)
jne 0x8b6e
leaq 0x38(%rsp), %rdi
movq %rbx, %rsi
callq 0x74e5
movq %rbx, %rdi
callq 0x7522
movq %rbx, %rdi
callq 0x8aa4
leaq 0x68(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x3, (%r14)
jne 0x8b48
movq %rbx, %rdi
callq 0x7522
leaq 0x8(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x74e5
movl (%r14), %eax
testl %eax, %eax
je 0x8b78
cmpl $0x6, %eax
jne 0x8b86
movq %rbx, %rdi
callq 0x7522
jmp 0x8b99
movq %rbx, %rdi
callq 0x8ba6
jmp 0x8b9b
leaq 0x40(%rsp), %rdi
leaq 0x4d5f(%rip), %rsi      # 0xd8e3
jmp 0x8b92
leaq 0x10(%rsp), %rdi
leaq 0x4d79(%rip), %rsi      # 0xd90b
xorl %eax, %eax
callq 0x35e4
xorl %eax, %eax
addq $0xc8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_expr_assign
ast_n *parse_expr_assign(lexer *lx) {
	ast_n *node = parse_expr_cond(lx);

	//lhs must be unary_expr
	ast_n *n_node;
	int atype = 0;
	switch (lex_peek(lx).type) {
		case TOK_ASSIGN_ADD: atype = EXPR_ADD; goto base;
		case TOK_ASSIGN_SUB: atype = EXPR_SUB; goto base;
		case TOK_ASSIGN_MUL: atype = EXPR_MUL; goto base;
		case TOK_ASSIGN_DIV: atype = EXPR_DIV; goto base;
		case TOK_ASSIGN_MOD: atype = EXPR_MOD; goto base;
		case TOK_ASSIGN_AND: atype = EXPR_AND; goto base;
		case TOK_ASSIGN_OR: atype = EXPR_OR; goto base;
		case TOK_ASSIGN_XOR: atype = EXPR_XOR; goto base;
		case TOK_ASSIGN_LSHIFT: atype = EXPR_LSHIFT; goto base;
		case TOK_ASSIGN_RSHIFT: atype = EXPR_RSHIFT; goto base;

		case TOK_ASSIGN: {
base:			n_node = astn_new(EXPR, EXPR_ASSIGN, lex_peek(lx));
			lex_adv(lx);
			ast_expr *n_expr = &n_node->dat.expr;
			n_expr->left = node;
			n_expr->right = parse_expr_assign(lx);
			break;
			}

		default:
			return node;
	}

	//Expand assignment
	if (atype) {
		ast_n *opr = astn_new(EXPR, atype, lex_peek(lx));
		opr->dat.expr.left = node;
		opr->dat.expr.right = n_node->dat.expr.right;
		n_node->dat.expr.right = opr;
	}

	return n_node;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0xc0, %rsp
movq %rdi, %r14
callq 0x912a
movq %rax, %rbx
leaq 0x90(%rsp), %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0x74e5
movl (%r15), %eax
addl $-0x27, %eax
cmpl $0xa, %eax
ja 0x8cd5
leaq 0x4a47(%rip), %rcx      # 0xd630
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
xorl %ebp, %ebp
movb $0x1, %r12b
jmp 0x8c23
pushq $0x13
jmp 0x8c1f
pushq $0xc
jmp 0x8c1f
pushq $0x11
jmp 0x8c1f
pushq $0x12
jmp 0x8c1f
pushq $0x5
jmp 0x8c1f
pushq $0x10
jmp 0x8c1f
pushq $0x14
jmp 0x8c1f
pushq $0x7
jmp 0x8c1f
pushq $0xd
jmp 0x8c1f
pushq $0x6
popq %rbp
xorl %r12d, %r12d
leaq 0x60(%rsp), %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0x74e5
movups (%r15), %xmm0
movups 0x10(%r15), %xmm1
movups 0x20(%r15), %xmm2
movups %xmm2, 0x20(%rsp)
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
pushq $0x1
popq %rdi
xorl %esi, %esi
callq 0x333c
movq %rax, %r15
movq %r14, %rdi
callq 0x7522
movq %rbx, 0x20(%r15)
movq %r14, %rdi
callq 0x8ba6
movq %rax, 0x28(%r15)
testb %r12b, %r12b
jne 0x8cc2
leaq 0x30(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0x74e5
movups (%r12), %xmm0
movups 0x10(%r12), %xmm1
movups 0x20(%r12), %xmm2
movups %xmm2, 0x20(%rsp)
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
pushq $0x1
popq %rdi
movl %ebp, %esi
callq 0x333c
movq %rbx, 0x20(%rax)
movq 0x28(%r15), %rcx
movq %rcx, 0x28(%rax)
movq %rax, 0x28(%r15)
movq %r15, %rax
addq $0xc0, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq %rbx, %r15
jmp 0x8cc2
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_fparam
s_param *parse_fparam(lexer *lx) {
	//Parse type
	token vname = {0};
	s_type *base_type = parse_decl_spec(lx);

	//Parse declarator
	s_type *type = parse_decltr(lx, base_type, &vname);

	//Create parameter and return
	return param_new(type, vname.dat.sval);
}

// Assembly:
pushq %r14
pushq %rbx
subq $0x38, %rsp
movq %rdi, %rbx
xorps %xmm0, %xmm0
movq %rsp, %r14
movaps %xmm0, 0x20(%r14)
movaps %xmm0, 0x10(%r14)
movaps %xmm0, (%r14)
callq 0x7f3f
movq %rbx, %rdi
movq %rax, %rsi
movq %r14, %rdx
callq 0x8998
movq 0x20(%r14), %rsi
movq %rax, %rdi
addq $0x38, %rsp
popq %rbx
popq %r14
jmp 0xba37
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_stmt_cmpd
ast_n *parse_stmt_cmpd(lexer *lx) {
	//Expect '{'
	token t = lex_peek(lx);
	if (t.type == TOK_LBR)
		lex_adv(lx);

	//Parse list of declarations/statements here
	ast_n *base = NULL;
	ast_n *last = NULL;
	while (lex_peek(lx).type != TOK_RBR) {
		//Premature end of file
		token t = lex_peek(lx);
		if (t.type == TOK_END) {
			c_error(&t.loc, "Expected '}' before end of input!\n");
			break;
		}

		//Parse a statement or a declaration
		ast_n *node;
		if (is_type_spec(lx, lex_peek(lx))) {
			node = parse_decl(lx);
		} else {
			node = parse_stmt(lx);
		}
		if (node == NULL) continue;

		//Add the node to the list
		if (base == NULL) {
			base = node;
		} else {
			last->next = node;
		}

		//Move to the end of the list
		//If node already has a next, move to the end of it
		if (node != NULL) {
			last = node;
			while (last->next != NULL)
				last = last->next;
		}
	}

	//Expect '}'
	if (lex_peek(lx).type == TOK_RBR)
		lex_adv(lx);

	ast_n *head = astn_new(STMT, STMT_CMPD, t);
	head->next = base;
	return head;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x128, %rsp            # imm = 0x128
movq %rdi, %rbx
leaq 0x68(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x5, (%r14)
jne 0x8d50
movq %rbx, %rdi
callq 0x7522
xorl %ebp, %ebp
leaq 0xc8(%rsp), %r14
leaq 0x98(%rsp), %r15
leaq 0x38(%rsp), %r12
xorl %r13d, %r13d
movq %r14, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x6, 0xc8(%rsp)
je 0x8e19
movq %r15, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x0, 0x98(%rsp)
je 0x8e03
movq %r12, %rdi
movq %rbx, %rsi
callq 0x74e5
movups 0x38(%rsp), %xmm0
movups 0x48(%rsp), %xmm1
movups 0x58(%rsp), %xmm2
movups %xmm2, 0x20(%rsp)
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %rbx, %rdi
callq 0x76a1
movq %rbx, %rdi
testl %eax, %eax
je 0x8dd6
callq 0x7ce4
jmp 0x8ddb
callq 0xa00c
testq %rax, %rax
je 0x8d6a
movq %rax, %rcx
testq %r13, %r13
je 0x8def
movq %rax, 0x60(%rbp)
movq %r13, %rcx
movq %rax, %rbp
movq 0x60(%rax), %rax
testq %rax, %rax
jne 0x8def
movq %rcx, %r13
jmp 0x8d6a
leaq 0xa0(%rsp), %rdi
leaq 0x4e09(%rip), %rsi      # 0xdc1b
xorl %eax, %eax
callq 0x35e4
leaq 0xf8(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x6, (%r14)
jne 0x8e3a
movq %rbx, %rdi
callq 0x7522
movups 0x68(%rsp), %xmm0
movups 0x78(%rsp), %xmm1
movups 0x88(%rsp), %xmm2
movups %xmm2, 0x20(%rsp)
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
pushq $0x2
popq %rdi
pushq $0x1
popq %rsi
callq 0x333c
movq %r13, 0x60(%rax)
addq $0x128, %rsp            # imm = 0x128
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_sdef_body
vector parse_sdef_body(lexer *lx) {
	//Advance past '{'
	lex_adv(lx);

	//Parse list of declarations
	vector memb;
	vector_init(&memb, VECTOR_EMPTY);
	while (lex_peek(lx).type != TOK_RBR) {
		if (lex_peek(lx).type == TOK_END) {
			c_error(&lx->tgt->loc, "Expected '}' before end of file\n");
		}

		//Get type
		//TODO: no type classes when parsing for specifier
		token mname = {0};
		s_type *base_type = parse_decl_spec(lx);

		//Parse declarator
		//TODO: bitfields
		s_type *mtype = parse_decltr(lx, type_clone(base_type), &mname);
		if (mname.dat.sval != NULL) {
			//Create new member
			s_param *m = param_new(mtype, mname.dat.sval);
			vector_add(&memb, m);
		} else {
			c_error(&mname.loc, "Declaration declares nothing\n");
		}
		type_del(base_type);

		//Expect ';'
		token t = lex_peek(lx);
		if (t.type != TOK_SEM)
			c_error(&t.loc, "Missing ';' after member definition\n");
		lex_adv(lx);
	}

	//Missing '}'
	token t = lex_peek(lx);
	if (t.type != TOK_RBR)
		c_error(&t.loc, "Missing '}' after struct/union declaration\n");
	lex_adv(lx);

	return memb;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xd8, %rsp
movq %rdi, %rbx
callq 0x7522
movq %rsp, %rdi
xorl %esi, %esi
callq 0xbe8a
leaq 0xa8(%rsp), %r13
leaq 0x78(%rsp), %rbp
leaq 0x10(%rsp), %r15
leaq 0x48(%rsp), %r12
movq %r13, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x6, 0xa8(%rsp)
je 0x8f94
movq %rbp, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x0, 0x78(%rsp)
jne 0x8ef5
movq (%rbx), %rdi
addq $0x28, %rdi
leaq 0x4a58(%rip), %rsi      # 0xd946
xorl %eax, %eax
callq 0x35e4
xorps %xmm0, %xmm0
movaps %xmm0, 0x30(%rsp)
movaps %xmm0, 0x20(%rsp)
movaps %xmm0, 0x10(%rsp)
movq %rbx, %rdi
callq 0x7f3f
movq %rax, %r14
movq %rax, %rdi
callq 0xb949
movq %rbx, %rdi
movq %rax, %rsi
movq %r15, %rdx
callq 0x8998
movq 0x30(%rsp), %rsi
testq %rsi, %rsi
je 0x8f47
movq %rax, %rdi
callq 0xba37
movq %rsp, %rdi
movq %rax, %rsi
callq 0xbf10
jmp 0x8f5a
leaq 0x18(%rsp), %rdi
leaq 0x47c5(%rip), %rsi      # 0xd718
xorl %eax, %eax
callq 0x35e4
movq %r14, %rdi
callq 0xb8ba
movq %r12, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x1, 0x48(%rsp)
je 0x8f87
leaq 0x50(%rsp), %rdi
leaq 0x49e7(%rip), %rsi      # 0xd967
xorl %eax, %eax
callq 0x35e4
movq %rbx, %rdi
callq 0x7522
jmp 0x8eb5
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x6, (%r14)
je 0x8fbd
leaq 0x18(%rsp), %rdi
leaq 0x49d6(%rip), %rsi      # 0xd98c
xorl %eax, %eax
callq 0x35e4
movq %rbx, %rdi
callq 0x7522
movq (%rsp), %rax
movq 0x8(%rsp), %rdx
addq $0xd8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_enum
void parse_enum(lexer *lx, int *val) {
	//Read name
	token t = lex_peek(lx);
	if (t.type != TOK_IDENT) {
		c_error(&t.loc, "Invalid input in enumeration\n");
		return;
	}
	lex_adv(lx);

	//Read optional expression
	if (lex_peek(lx).type == TOK_ASSIGN) {
		lex_adv(lx);
		*val = parse_constexpr(lx);
	}

	//Define a macro for the enumeration
	char buf[64];
	snprintf(buf, 64, "%i", *val);
	symbol *sym = symtable_def(lx->stb, t.dat.sval, type_new(TYPE_MACRO), &t.loc);

	//Copy the expansion to a new string
	char *exp = malloc(strlen(buf)+1);
	strncpy(exp, buf, strlen(buf));
	sym->mac_exp = exp;
	
	(*val)++;
	return;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xa0, %rsp
movq %rsi, %rbx
movq %rdi, %r14
movq %rsp, %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0x74e5
cmpl $0x35, (%r15)
jne 0x903e
movq %r14, %rdi
callq 0x7522
leaq 0x30(%rsp), %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0x74e5
cmpl $0x27, (%r15)
jne 0x9053
movq %r14, %rdi
callq 0x7522
movq %r14, %rdi
callq 0x88f4
movl %eax, %ecx
movl %eax, (%rbx)
jmp 0x9055
leaq 0x8(%rsp), %rdi
leaq 0x49ac(%rip), %rsi      # 0xd9f6
xorl %eax, %eax
callq 0x35e4
jmp 0x90c3
movl (%rbx), %ecx
leaq 0x349a(%rip), %rdx      # 0xc4f6
leaq 0x60(%rsp), %r15
pushq $0x40
popq %rsi
movq %r15, %rdi
xorl %eax, %eax
callq 0x30d0
movq 0x60(%r14), %r14
leaq 0x8(%rsp), %r12
movq 0x18(%r12), %r13
pushq $0x1
popq %rdi
callq 0xb5ed
movq %r14, %rdi
movq %r13, %rsi
movq %rax, %rdx
movq %r12, %rcx
callq 0xb545
movq %rax, %r14
movq %r15, %rdi
callq 0x30b0
movq %rax, %r12
leaq 0x1(%rax), %rdi
callq 0x3170
movq %rax, %r13
movq %rax, %rdi
movq %r15, %rsi
movq %r12, %rdx
callq 0x3060
movq %r13, 0x48(%r14)
incl (%rbx)
addq $0xa0, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_expr
ast_n *parse_expr(lexer *lx) {
	ast_n *node = parse_expr_assign(lx);

	ast_n *n_node = node;
	while (lex_peek(lx).type == TOK_CMM) {
		lex_adv(lx);
		n_node->next = parse_expr_assign(lx);
		n_node = n_node->next;
	}

	return node;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %rdi, %rbx
callq 0x8ba6
movq %rax, %r14
leaq 0x8(%rsp), %r15
movq %rax, %r12
movq %r15, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x3, 0x8(%rsp)
jne 0x911b
movq %rbx, %rdi
callq 0x7522
movq %rbx, %rdi
callq 0x8ba6
movq %rax, 0x60(%r12)
jmp 0x90ef
movq %r14, %rax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_expr_cond
ast_n *parse_expr_cond(lexer *lx) {
	ast_n *node = parse_expr_logic_or(lx);

	if (lex_peek(lx).type == TOK_QMK) {
		//Construct ternary node
		ast_n *n_node = astn_new(EXPR, EXPR_COND, lex_peek(lx));
		ast_expr *n_expr = &n_node->dat.expr;
		n_expr->left = node;
		lex_adv(lx);

		//Read left result and check for ';'
		ast_n *res_true = parse_expr(lx);
		token t = lex_peek(lx);
		if (t.type != TOK_COL)
			c_error(&t.loc, "Expected ':' in ternary expression\n");
		lex_adv(lx);

		//Read right result and construct result node
		ast_n *res = astn_new(EXPR, EXPR_COND_RES, t);
		ast_n *res_false = parse_expr_cond(lx);
		res->dat.expr.left = res_true;
		res->dat.expr.right = res_false;
		n_expr->right = res;
		return n_node;
	}

	return node;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0xc8, %rsp
movq %rdi, %rbx
callq 0x923b
movq %rax, %r15
leaq 0x98(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0xf, (%r14)
jne 0x9226
leaq 0x68(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x74e5
movups (%r14), %xmm0
movups 0x10(%r14), %xmm1
movups 0x20(%r14), %xmm2
movups %xmm2, 0x20(%rsp)
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
pushq $0x1
popq %rdi
pushq $0x3
popq %rsi
callq 0x333c
movq %rax, %r14
movq %r15, 0x20(%rax)
movq %rbx, %rdi
callq 0x7522
movq %rbx, %rdi
callq 0x90d4
movq %rax, %r15
leaq 0x38(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x2, (%r12)
je 0x91db
leaq 0x40(%rsp), %rdi
leaq 0x48a4(%rip), %rsi      # 0xda78
xorl %eax, %eax
callq 0x35e4
movq %rbx, %rdi
callq 0x7522
movups 0x38(%rsp), %xmm0
movups 0x48(%rsp), %xmm1
movups 0x58(%rsp), %xmm2
movups %xmm2, 0x20(%rsp)
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
pushq $0x1
popq %rdi
pushq $0x4
popq %rsi
callq 0x333c
movq %rax, %r12
movq %rbx, %rdi
callq 0x912a
movq %r15, 0x20(%r12)
movq %rax, 0x28(%r12)
movq %r12, 0x28(%r14)
jmp 0x9229
movq %r15, %r14
movq %r14, %rax
addq $0xc8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_expr_logic_or
ast_n *parse_expr_logic_or(lexer *lx) {
	ast_n *node = parse_expr_logic_and(lx);

	if (lex_peek(lx).type == TOK_LOGIC_OR) {
		ast_n *n_node = astn_new(EXPR, EXPR_LOGIC_OR, lex_peek(lx));
		lex_adv(lx);
		ast_expr *n_expr = &n_node->dat.expr;
		n_expr->left = node;
		n_expr->right = parse_expr_logic_and(lx);
		return n_node;
	}
	return node;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x90, %rsp
movq %rdi, %rbx
callq 0x92cc
movq %rax, %r14
leaq 0x60(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x1f, (%r15)
jne 0x92bc
leaq 0x30(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x74e5
movups (%r15), %xmm0
movups 0x10(%r15), %xmm1
movups 0x20(%r15), %xmm2
movups %xmm2, 0x20(%rsp)
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
pushq $0x1
popq %rdi
movl %edi, %esi
callq 0x333c
movq %rax, %r15
movq %rbx, %rdi
callq 0x7522
movq %r14, 0x20(%r15)
movq %rbx, %rdi
callq 0x92cc
movq %rax, 0x28(%r15)
movq %r15, %r14
movq %r14, %rax
addq $0x90, %rsp
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_expr_logic_and
ast_n *parse_expr_logic_and(lexer *lx) {
	ast_n *node = parse_expr_or(lx);

	if (lex_peek(lx).type == TOK_LOGIC_AND) {
		ast_n *n_node = astn_new(EXPR, EXPR_LOGIC_AND, lex_peek(lx));
		lex_adv(lx);
		ast_expr *n_expr = &n_node->dat.expr;
		n_expr->left = node;
		n_expr->right = parse_expr_or(lx);
		return n_node;
	}
	return node;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x90, %rsp
movq %rdi, %rbx
callq 0x935e
movq %rax, %r14
leaq 0x60(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x20, (%r15)
jne 0x934e
leaq 0x30(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x74e5
movups (%r15), %xmm0
movups 0x10(%r15), %xmm1
movups 0x20(%r15), %xmm2
movups %xmm2, 0x20(%rsp)
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
pushq $0x1
popq %rdi
pushq $0x2
popq %rsi
callq 0x333c
movq %rax, %r15
movq %rbx, %rdi
callq 0x7522
movq %r14, 0x20(%r15)
movq %rbx, %rdi
callq 0x935e
movq %rax, 0x28(%r15)
movq %r15, %r14
movq %r14, %rax
addq $0x90, %rsp
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_expr_or
ast_n *parse_expr_or(lexer *lx) {
	ast_n *node = parse_expr_xor(lx);

	if (lex_peek(lx).type == TOK_OR) {
		ast_n *n_node = astn_new(EXPR, EXPR_OR, lex_peek(lx));
		lex_adv(lx);
		ast_expr *n_expr = &n_node->dat.expr;
		n_expr->left = node;
		n_expr->right = parse_expr_xor(lx);
		return n_node;
	}
	return node;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x90, %rsp
movq %rdi, %rbx
callq 0x93f0
movq %rax, %r14
leaq 0x60(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x16, (%r15)
jne 0x93e0
leaq 0x30(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x74e5
movups (%r15), %xmm0
movups 0x10(%r15), %xmm1
movups 0x20(%r15), %xmm2
movups %xmm2, 0x20(%rsp)
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
pushq $0x1
popq %rdi
pushq $0x5
popq %rsi
callq 0x333c
movq %rax, %r15
movq %rbx, %rdi
callq 0x7522
movq %r14, 0x20(%r15)
movq %rbx, %rdi
callq 0x93f0
movq %rax, 0x28(%r15)
movq %r15, %r14
movq %r14, %rax
addq $0x90, %rsp
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/Yamsman[P]scc/src/parse.c
// Function: parse_expr_xor
ast_n *parse_expr_xor(lexer *lx) {
	ast_n *node = parse_expr_and(lx);

	if (lex_peek(lx).type == TOK_XOR) {
		ast_n *n_node = astn_new(EXPR, EXPR_XOR, lex_peek(lx));
		lex_adv(lx);
		ast_expr *n_expr = &n_node->dat.expr;
		n_expr->left = node;
		n_expr->right = parse_expr_and(lx);
		return n_node;
	}
	return node;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x90, %rsp
movq %rdi, %rbx
callq 0x9482
movq %rax, %r14
leaq 0x60(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x74e5
cmpl $0x17, (%r15)
jne 0x9472
leaq 0x30(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x74e5
movups (%r15), %xmm0
movups 0x10(%r15), %xmm1
movups 0x20(%r15), %xmm2
movups %xmm2, 0x20(%rsp)
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
pushq $0x1
popq %rdi
pushq $0x6
popq %rsi
callq 0x333c
movq %rax, %r15
movq %rbx, %rdi
callq 0x7522
movq %r14, 0x20(%r15)
movq %rbx, %rdi
callq 0x9482
movq %rax, 0x28(%r15)
movq %r15, %r14
movq %r14, %rax
addq $0x90, %rsp
popq %rbx
popq %r14
popq %r15
retq