// File: /workspace/github_c_makefile_star2_O0/hsjoihs[P]c-compiler/codegen.c
// Function: print_statement
void print_statement(struct PrinterState *ptr_prs,
                     const struct Statement *ref_sta)
{
	if (ref_sta->category != DECLARATION_STATEMENT) {
		for (int j = 0; j < ref_sta->labels.length; j++) {
			const struct SourceLabel *ptr_label = ref_sta->labels.vector[j];

			if (ptr_label->category == IDENT_LABEL) {
				const struct SourceLabelAndAssemblyLabel *p =
				    lookup(ptr_prs->source_label_to_assembly_label,
				           ptr_label->ident_str);
				if (!p) {
					fprintf(stderr,
					        "****************************\n"
					        "* INTERNAL COMPILER ERROR @ %s\n"
					        "* Lookup failed; cannot find an identifier `%s`\n"
					        "****************************\n",
					        __func__, ptr_label->ident_str);
					exit(EXIT_FAILURE);
				}
				gen_label(p->assembly_label);
				continue;
			}

			if (!ptr_prs->is_inside_switch) {
				simple_error(
				    "`default` or `case` was detected, but is not inside "
				    "`switch`.\n");
			}
			for (int k = 0; k < ptr_prs->case_default_vec.length; k++) {
				const struct SourceLabelAndAssemblyLabel *ptr_ll =
				    ptr_prs->case_default_vec.vector[k];
				if (is_label_compatible(&ptr_ll->source_label, ptr_label)) {
					gen_label(ptr_ll->assembly_label);
				}
			}
		}
	}
	switch (ref_sta->category) {
	case DECLARATION_STATEMENT: {
		/* do nothing */
		return;
	}
	case BREAK_STATEMENT: {
		if (ptr_prs->break_label_name == -1) {
			simple_error("invalid `break`; no loop, no switch\n");
		} else {
			gen_jump(ptr_prs->break_label_name, "break");
		}
		return;
	}
	case EXPRESSION_STATEMENT: {
		print_expression(ptr_prs, &ref_sta->expr1);
		gen_discard();
		return;
	}
	case RETURN_STATEMENT: {

		print_expression_or_addr_of_struct_or_union(ptr_prs, &ref_sta->expr1,
		                                            "returning a struct");

		/* the first occurrence of return within a function */
		if (ptr_prs->return_label_name == -1) {
			int ret_label = get_new_label_name(ptr_prs);
			ptr_prs->return_label_name = ret_label;
			gen_jump(ret_label, "return");
		} else {
			gen_jump(ptr_prs->return_label_name, "return");
		}

		return;
	}
	case GOTO_STATEMENT: {
		const char *destination = ref_sta->destination;
		const struct SourceLabelAndAssemblyLabel *p =
		    lookup(ptr_prs->source_label_to_assembly_label, destination);
		if (!p) {
			fprintf(stderr, "undefined label `%s` used in `goto`\n",
			        destination);
			exit(EXIT_FAILURE);
		}
		gen_jump(p->assembly_label, "goto");
		return;
	}
	case CONTINUE_STATEMENT: {
		if (ptr_prs->continue_label_name == -1) {
			simple_error("invalid `continue`; no loop\n");
		} else {
			gen_jump(ptr_prs->continue_label_name, "continue");
		}
		return;
	}
	case COMPOUND_STATEMENT: {
		struct Vector /*<Statement>*/ vec = ref_sta->statement_vector;

		for (int counter = 0; counter != vec.length; ++counter) {
			const struct Statement *ptr_ith = vec.vector[counter];
			print_statement(ptr_prs, ptr_ith);
		}
		return;
	}
	case IF_ELSE_STATEMENT: {
		int label1 = get_new_label_name(ptr_prs);
		int label2 = get_new_label_name(ptr_prs);
		const struct Expr expr = ref_sta->expr1;
		print_expression(ptr_prs, &expr);

		gen_if_zero_jmp_nbyte(
		    size_of_basic(&expr.details.type, "condition of `if`"), label1, 0);
		gen_discard();

		const struct Statement *ptr_inner_s =
		    ref_sta->statement_vector.vector[0];
		print_statement(ptr_prs, ptr_inner_s);

		gen_jump(label2, "if statement");
		gen_label(label1);
		gen_discard();

		const struct Statement *ptr_inner_s2 =
		    ref_sta->statement_vector.vector[1];
		print_statement(ptr_prs, ptr_inner_s2);
		gen_label(label2);

		return;
	}
	case SWITCH_STATEMENT: {
		codegen_switch(ptr_prs, ref_sta);
		return;
	}
	case IF_STATEMENT: {

		int label1 = get_new_label_name(ptr_prs);
		int label2 = get_new_label_name(ptr_prs);
		const struct Expr expr = ref_sta->expr1;
		print_expression(ptr_prs, &expr);

		gen_if_zero_jmp_nbyte(
		    size_of_basic(&expr.details.type, "condition of `if`"), label1, 0);
		gen_discard();

		print_statement(ptr_prs, ref_sta->inner_statement);

		gen_jump(label2, "if statement");
		gen_label(label1);
		gen_discard();

		gen_label(label2);

		return;
	}
	case DO_WHILE_STATEMENT: {
		int stashed_break_label = ptr_prs->break_label_name;
		int stashed_continue_label = ptr_prs->continue_label_name;
		int label1 = get_new_label_name(ptr_prs);
		int break_label = get_new_label_name(ptr_prs);
		int cont_label = get_new_label_name(ptr_prs);
		ptr_prs->break_label_name = break_label;
		ptr_prs->continue_label_name = cont_label;

		gen_label(label1);
		print_statement(ptr_prs, ref_sta->inner_statement);

		gen_label(cont_label);

		const struct Expr expr = ref_sta->expr1;
		print_expression(ptr_prs, &expr);

		gen_discard();
		gen_if_nonzero_jmp_nbyte(
		    size_of_basic(&expr.details.type, "condition of do-while"), label1,
		    -8);
		gen_label(break_label);

		ptr_prs->break_label_name = stashed_break_label;
		ptr_prs->continue_label_name = stashed_continue_label;

		return;
	}

	case WHILE_STATEMENT: {
		const struct Expr expr = ref_sta->expr1;

		int stashed_break_label = ptr_prs->break_label_name;
		int stashed_continue_label = ptr_prs->continue_label_name;

		int label1 = get_new_label_name(ptr_prs);
		int break_label = get_new_label_name(ptr_prs);
		int cont_label = get_new_label_name(ptr_prs);
		ptr_prs->break_label_name = break_label;
		ptr_prs->continue_label_name = cont_label;

		gen_label(label1);

		print_expression(ptr_prs, &expr);

		gen_discard();
		gen_if_zero_jmp_nbyte(
		    size_of_basic(&expr.details.type, "condition of `while`"),
		    break_label, -8);

		print_statement(ptr_prs, ref_sta->inner_statement);

		gen_label(cont_label);
		gen_jump(label1, "for(part4)");
		gen_label(break_label);

		ptr_prs->break_label_name = stashed_break_label;
		ptr_prs->continue_label_name = stashed_continue_label;

		return;
	}
	case FOR_STATEMENT: {
		int stashed_break_label = ptr_prs->break_label_name;
		int stashed_continue_label = ptr_prs->continue_label_name;
		int label1 = get_new_label_name(ptr_prs);
		int break_label = get_new_label_name(ptr_prs);
		int cont_label = get_new_label_name(ptr_prs);
		ptr_prs->break_label_name = break_label;
		ptr_prs->continue_label_name = cont_label;

		print_expression(ptr_prs, &ref_sta->expr1); /* expression1 */
		gen_discard();
		gen_label(label1);
		print_expression(ptr_prs, &ref_sta->expr2); /* expression2 */

		gen_discard();
		gen_if_zero_jmp_nbyte(
		    size_of_basic(&ref_sta->expr2.details.type, "condition of `for`"),
		    break_label, -8);

		print_statement(ptr_prs, ref_sta->inner_statement);
		gen_label(cont_label);
		print_expression(ptr_prs, &ref_sta->expr3);
		gen_discard();
		gen_jump(label1, "for(part4)");
		gen_label(break_label);

		ptr_prs->break_label_name = stashed_break_label;
		ptr_prs->continue_label_name = stashed_continue_label;

		return;
	}
	}
	fprintf(
	    stderr,
	    "****************************\n"
	    "* INTERNAL COMPILER ERROR @ %s\n"
	    "* Unexpected value of StatementCategory: `ref_sta->category` is %d\n"
	    "****************************\n",
	    __func__, ref_sta->category);
	exit(EXIT_FAILURE);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x4e0, %rsp            # imm = 0x4E0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
cmpl $0xa, (%rax)
je 0x1405
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x10(%rbp), %rcx
cmpl 0x378(%rcx), %eax
jge 0x1403
movq -0x10(%rbp), %rax
movq 0x380(%rax), %rax
movslq -0x14(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
cmpl $0x2, (%rax)
jne 0x1388
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0xcc00
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0x137b
movq 0x1aca7(%rip), %rax     # 0x1bff8
movq (%rax), %rdi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rcx
leaq 0x11cd5(%rip), %rsi     # 0x13038
leaq 0x11d58(%rip), %rdx     # 0x130c2
movb $0x0, %al
callq 0x10d0
movl $0x1, %edi
callq 0x1150
movq -0x28(%rbp), %rax
movl (%rax), %edi
callq 0xd6f0
jmp 0x13f5
movq -0x8(%rbp), %rax
cmpl $0x0, 0x24(%rax)
jne 0x139e
leaq 0x11d39(%rip), %rdi     # 0x130d2
callq 0xb150
movl $0x0, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpl 0x28(%rcx), %eax
jge 0x13f3
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
movslq -0x2c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rdi
addq $0x8, %rdi
movq -0x20(%rbp), %rsi
callq 0x1af0
cmpl $0x0, %eax
je 0x13e6
movq -0x38(%rbp), %rax
movl (%rax), %edi
callq 0xd6f0
jmp 0x13e8
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x13a5
jmp 0x13f5
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x12f7
jmp 0x1405
movq -0x10(%rbp), %rax
movl (%rax), %eax
movq %rax, -0x4d8(%rbp)
subq $0xc, %rax
ja 0x1ab8
movq -0x4d8(%rbp), %rax
leaq 0x11bda(%rip), %rcx     # 0x13004
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x1ae7
movq -0x8(%rbp), %rax
cmpl $-0x1, 0x8(%rax)
jne 0x144e
leaq 0x11cc8(%rip), %rdi     # 0x13111
callq 0xb150
movq -0x8(%rbp), %rax
movl 0x8(%rax), %edi
leaq 0x11cda(%rip), %rsi     # 0x13136
callq 0xd4f0
jmp 0x1ae7
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
addq $0x18, %rsi
callq 0x4f90
callq 0xd880
jmp 0x1ae7
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
addq $0x18, %rsi
leaq 0x11ca8(%rip), %rdx     # 0x1313c
callq 0x5b90
movq -0x8(%rbp), %rax
cmpl $-0x1, 0x4(%rax)
jne 0x14ca
movq -0x8(%rbp), %rdi
callq 0x12b0
movl %eax, -0x3c(%rbp)
movl -0x3c(%rbp), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x4(%rax)
movl -0x3c(%rbp), %edi
leaq 0x15fca(%rip), %rsi     # 0x1748d
callq 0xd4f0
jmp 0x14dd
movq -0x8(%rbp), %rax
movl 0x4(%rax), %edi
leaq 0x15fb5(%rip), %rsi     # 0x1748d
callq 0xd4f0
jmp 0x1ae7
movq -0x10(%rbp), %rax
movq 0x388(%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x48(%rbp), %rsi
callq 0xcc00
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x50(%rbp)
jne 0x1533
movq 0x1aae4(%rip), %rax     # 0x1bff8
movq (%rax), %rdi
movq -0x48(%rbp), %rdx
leaq 0x11c2d(%rip), %rsi     # 0x1314f
movb $0x0, %al
callq 0x10d0
movl $0x1, %edi
callq 0x1150
movq -0x50(%rbp), %rax
movl (%rax), %edi
leaq 0x11c34(%rip), %rsi     # 0x13174
callq 0xd4f0
jmp 0x1ae7
movq -0x8(%rbp), %rax
cmpl $-0x1, 0xc(%rax)
jne 0x1560
leaq 0x11c1e(%rip), %rdi     # 0x13179
callq 0xb150
movq -0x8(%rbp), %rax
movl 0xc(%rax), %edi
leaq 0x11c28(%rip), %rsi     # 0x13196
callq 0xd4f0
jmp 0x1ae7
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
movq %rcx, -0x60(%rbp)
movq 0x10(%rax), %rax
movq %rax, -0x58(%rbp)
movl $0x0, -0x64(%rbp)
movl -0x64(%rbp), %eax
cmpl -0x60(%rbp), %eax
je 0x15c3
movq -0x58(%rbp), %rax
movslq -0x64(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x70(%rbp)
movq -0x8(%rbp), %rdi
movq -0x70(%rbp), %rsi
callq 0x12d0
movl -0x64(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x64(%rbp)
jmp 0x1593
jmp 0x1ae7
movq -0x8(%rbp), %rdi
callq 0x12b0
movl %eax, -0x74(%rbp)
movq -0x8(%rbp), %rdi
callq 0x12b0
movl %eax, -0x78(%rbp)
movq -0x10(%rbp), %rsi
addq $0x18, %rsi
leaq -0x178(%rbp), %rdi
movl $0x100, %edx            # imm = 0x100
callq 0x10e0
movq -0x8(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x4f90
leaq -0x178(%rbp), %rdi
leaq 0x11b88(%rip), %rsi     # 0x1319f
callq 0xb280
movl %eax, %edi
movl -0x74(%rbp), %esi
xorl %edx, %edx
callq 0xd550
callq 0xd880
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rax
movq %rax, -0x180(%rbp)
movq -0x8(%rbp), %rdi
movq -0x180(%rbp), %rsi
callq 0x12d0
movl -0x78(%rbp), %edi
leaq 0x11b58(%rip), %rsi     # 0x131b1
callq 0xd4f0
movl -0x74(%rbp), %edi
callq 0xd6f0
callq 0xd880
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x188(%rbp)
movq -0x8(%rbp), %rdi
movq -0x188(%rbp), %rsi
callq 0x12d0
movl -0x78(%rbp), %edi
callq 0xd6f0
jmp 0x1ae7
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x11280
jmp 0x1ae7
movq -0x8(%rbp), %rdi
callq 0x12b0
movl %eax, -0x18c(%rbp)
movq -0x8(%rbp), %rdi
callq 0x12b0
movl %eax, -0x190(%rbp)
movq -0x10(%rbp), %rsi
addq $0x18, %rsi
leaq -0x290(%rbp), %rdi
movl $0x100, %edx            # imm = 0x100
callq 0x10e0
movq -0x8(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x4f90
leaq -0x290(%rbp), %rdi
leaq 0x11a9d(%rip), %rsi     # 0x1319f
callq 0xb280
movl %eax, %edi
movl -0x18c(%rbp), %esi
xorl %edx, %edx
callq 0xd550
callq 0xd880
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x318(%rax), %rsi
callq 0x12d0
movl -0x190(%rbp), %edi
leaq 0x11a75(%rip), %rsi     # 0x131b1
callq 0xd4f0
movl -0x18c(%rbp), %edi
callq 0xd6f0
callq 0xd880
movl -0x190(%rbp), %edi
callq 0xd6f0
jmp 0x1ae7
movq -0x8(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x294(%rbp)
movq -0x8(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0x298(%rbp)
movq -0x8(%rbp), %rdi
callq 0x12b0
movl %eax, -0x29c(%rbp)
movq -0x8(%rbp), %rdi
callq 0x12b0
movl %eax, -0x2a0(%rbp)
movq -0x8(%rbp), %rdi
callq 0x12b0
movl %eax, -0x2a4(%rbp)
movl -0x2a0(%rbp), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x8(%rax)
movl -0x2a4(%rbp), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0xc(%rax)
movl -0x29c(%rbp), %edi
callq 0xd6f0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x318(%rax), %rsi
callq 0x12d0
movl -0x2a4(%rbp), %edi
callq 0xd6f0
movq -0x10(%rbp), %rsi
addq $0x18, %rsi
leaq -0x3a8(%rbp), %rdi
movl $0x100, %edx            # imm = 0x100
callq 0x10e0
movq -0x8(%rbp), %rdi
leaq -0x3a8(%rbp), %rsi
callq 0x4f90
callq 0xd880
leaq -0x3a8(%rbp), %rdi
leaq 0x11996(%rip), %rsi     # 0x131be
callq 0xb280
movl %eax, %edi
movl -0x29c(%rbp), %esi
movl $0xfffffff8, %edx       # imm = 0xFFFFFFF8
callq 0xd630
movl -0x2a0(%rbp), %edi
callq 0xd6f0
movl -0x294(%rbp), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x8(%rax)
movl -0x298(%rbp), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0xc(%rax)
jmp 0x1ae7
movq -0x10(%rbp), %rsi
addq $0x18, %rsi
leaq -0x4a8(%rbp), %rdi
movl $0x100, %edx            # imm = 0x100
callq 0x10e0
movq -0x8(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x4ac(%rbp)
movq -0x8(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0x4b0(%rbp)
movq -0x8(%rbp), %rdi
callq 0x12b0
movl %eax, -0x4b4(%rbp)
movq -0x8(%rbp), %rdi
callq 0x12b0
movl %eax, -0x4b8(%rbp)
movq -0x8(%rbp), %rdi
callq 0x12b0
movl %eax, -0x4bc(%rbp)
movl -0x4b8(%rbp), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x8(%rax)
movl -0x4bc(%rbp), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0xc(%rax)
movl -0x4b4(%rbp), %edi
callq 0xd6f0
movq -0x8(%rbp), %rdi
leaq -0x4a8(%rbp), %rsi
callq 0x4f90
callq 0xd880
leaq -0x4a8(%rbp), %rdi
leaq 0x118c3(%rip), %rsi     # 0x131d4
callq 0xb280
movl %eax, %edi
movl -0x4b8(%rbp), %esi
movl $0xfffffff8, %edx       # imm = 0xFFFFFFF8
callq 0xd550
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x318(%rax), %rsi
callq 0x12d0
movl -0x4bc(%rbp), %edi
callq 0xd6f0
movl -0x4b4(%rbp), %edi
leaq 0x11895(%rip), %rsi     # 0x131e9
callq 0xd4f0
movl -0x4b8(%rbp), %edi
callq 0xd6f0
movl -0x4ac(%rbp), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x8(%rax)
movl -0x4b0(%rbp), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0xc(%rax)
jmp 0x1ae7
movq -0x8(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x4c0(%rbp)
movq -0x8(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0x4c4(%rbp)
movq -0x8(%rbp), %rdi
callq 0x12b0
movl %eax, -0x4c8(%rbp)
movq -0x8(%rbp), %rdi
callq 0x12b0
movl %eax, -0x4cc(%rbp)
movq -0x8(%rbp), %rdi
callq 0x12b0
movl %eax, -0x4d0(%rbp)
movl -0x4cc(%rbp), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x8(%rax)
movl -0x4d0(%rbp), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0xc(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
addq $0x18, %rsi
callq 0x4f90
callq 0xd880
movl -0x4c8(%rbp), %edi
callq 0xd6f0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
addq $0x118, %rsi            # imm = 0x118
callq 0x4f90
callq 0xd880
movq -0x10(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
leaq 0x117c4(%rip), %rsi     # 0x131f4
callq 0xb280
movl %eax, %edi
movl -0x4cc(%rbp), %esi
movl $0xfffffff8, %edx       # imm = 0xFFFFFFF8
callq 0xd550
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x318(%rax), %rsi
callq 0x12d0
movl -0x4d0(%rbp), %edi
callq 0xd6f0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
addq $0x218, %rsi            # imm = 0x218
callq 0x4f90
callq 0xd880
movl -0x4c8(%rbp), %edi
leaq 0x1175d(%rip), %rsi     # 0x131e9
callq 0xd4f0
movl -0x4cc(%rbp), %edi
callq 0xd6f0
movl -0x4c0(%rbp), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x8(%rax)
movl -0x4c4(%rbp), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0xc(%rax)
jmp 0x1ae7
movq 0x1a539(%rip), %rax     # 0x1bff8
movq (%rax), %rdi
movq -0x10(%rbp), %rax
movl (%rax), %ecx
leaq 0x11738(%rip), %rsi     # 0x13207
leaq 0x115ec(%rip), %rdx     # 0x130c2
movb $0x0, %al
callq 0x10d0
movl $0x1, %edi
callq 0x1150
addq $0x4e0, %rsp            # imm = 0x4E0
popq %rbp
retq