// File: /workspace/github_c_makefile_star2_O2/hsjoihs[P]c-compiler/codegen.c
// Function: generate
void generate(const struct Vector /*<Toplevel>*/ *ref_vec)
{
	struct PrinterState prs;
	prs.final_label_name = 1;
	prs.return_label_name = -1;
	prs.string_constant_pool = init_vector();
	prs.pool_largest_id = 0;
	prs.is_inside_switch = 0;

	for (int i = 0; i < ref_vec->length; i++) {
		const struct Toplevel *ptr = ref_vec->vector[i];
		print_toplevel_definition(&prs, ptr);
	}

	for (int i = 0; i < prs.string_constant_pool.length; ++i) {
		const char *str = prs.string_constant_pool.vector[i];
		gen_string_literal(i, escape(str));
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x498, %rsp            # imm = 0x498
movq %rdi, %r14
movabsq $-0xffffffff, %rax      # imm = 0xFFFFFFFF00000001
leaq -0x90(%rbp), %rbx
movq %rax, (%rbx)
callq 0x49e0
movq %rax, 0x10(%rbx)
movq %rdx, 0x18(%rbx)
andq $0x0, 0x20(%rbx)
xorl %r15d, %r15d
movq %r14, -0x30(%rbp)
movslq (%r14), %rax
cmpq %rax, %r15
jge 0x1bc0
movq 0x8(%r14), %rax
movq (%rax,%r15,8), %rbx
movl (%rbx), %eax
cmpl $0x2, %eax
je 0x1b4d
testl %eax, %eax
jne 0x18bd
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x1b4d
cmpl $0x0, 0x46c(%rbx)
jne 0x1b4d
movl 0x468(%rbx), %esi
callq 0xa071
jmp 0x1b4d
movq %r15, -0x38(%rbp)
xorl %edi, %edi
cmpl $0x1, %eax
sete %dil
xorl %eax, %eax
callq 0x128c
leaq 0x60(%rbx), %rsi
movl $0x390, %edx            # imm = 0x390
leaq -0x4c0(%rbp), %rdi
callq 0x1100
movl 0x3f0(%rbx), %r14d
movq 0x3f8(%rbx), %r12
leaq 0x400(%rbx), %rsi
pushq $0xa
popq %rcx
leaq -0xe0(%rbp), %rdi
rep  movsq (%rsi), %es:(%rdi)
movq 0x8(%rbx), %rsi
orq $-0x1, -0x8c(%rbp)
orl $-0x1, -0x84(%rbp)
movl 0x464(%rbx), %eax
movl %eax, -0x50(%rbp)
testl %eax, %eax
je 0x192c
movl %r14d, -0x4c(%rbp)
movl 0x450(%rbx), %ecx
leal 0xc0(%rcx), %r15d
testl %eax, %eax
cmovel %ecx, %r15d
cmpl $0x0, 0x454(%rbx)
movq %rbx, -0x40(%rbp)
movl %r15d, %edi
je 0x1956
callq 0x94d1
jmp 0x195b
callq 0x9371
testl %r14d, %r14d
movl $0x0, %eax
cmovlel %eax, %r14d
xorl %r13d, %r13d
cmpq %r13, %r14
je 0x19f8
cmpq $0x6, %r13
je 0x1bf9
movq (%r12,%r13,8), %rsi
movl 0x50(%rsi), %ebx
pushq $0xa
popq %rcx
leaq -0x130(%rbp), %rax
movq %rax, %rdi
rep  movsq (%rsi), %es:(%rdi)
movq %rax, %rdi
leaq 0xb935(%rip), %rsi      # 0xd2d3
callq 0x81de
cmpl $0x8, %eax
je 0x19de
cmpl $0x4, %eax
je 0x19ca
cmpl $0x1, %eax
jne 0x1c05
movl %r13d, %edi
callq 0xa676
movq %rax, %rdi
movl %ebx, %esi
callq 0xa13a
jmp 0x19f0
movl %r13d, %edi
callq 0xa676
movq %rax, %rdi
movl %ebx, %esi
callq 0xa183
jmp 0x19f0
movl %r13d, %edi
callq 0xa5ba
movq %rax, %rdi
movl %ebx, %esi
callq 0xa1cc
incq %r13
jmp 0x196a
movq -0x40(%rbp), %rax
cmpl $0x0, 0x464(%rax)
je 0x1a33
movl -0x90(%rbp), %edx
incl %edx
movl %edx, -0x90(%rbp)
pushq $0x8
popq %rdi
subl %r15d, %edi
negl %r15d
movl %edi, -0x48(%rbp)
movl %r15d, -0x44(%rbp)
pushq $0x1
popq %rsi
callq 0xa4ed
movl -0x44(%rbp), %edi
callq 0xa415
leaq -0x4c0(%rbp), %rdi
callq 0x1c29
movq %rax, %r14
movq %rdx, %r13
callq 0x9319
movq %rax, %rbx
testl %r14d, %r14d
movl $0x0, %eax
cmovlel %eax, %r14d
xorl %r12d, %r12d
cmpq %r12, %r14
je 0x1aa3
movq (%r13,%r12,8), %r15
cmpl $0x2, (%r15)
jne 0x1a9e
pushq $0x1
popq %rdi
pushq $0x18
popq %rsi
callq 0x10d0
movl -0x90(%rbp), %ecx
incl %ecx
movl %ecx, -0x90(%rbp)
movl %ecx, (%rax)
movups (%r15), %xmm0
movups %xmm0, 0x8(%rax)
movq 0x8(%r15), %rsi
movq %rbx, %rdi
movq %rax, %rdx
callq 0x9250
incq %r12
jmp 0x1a5c
movq %rbx, -0x58(%rbp)
leaq -0x90(%rbp), %rdi
leaq -0x4c0(%rbp), %rsi
callq 0x12b4
cmpl $0x7, -0xe0(%rbp)
movl -0x8c(%rbp), %edi
jne 0x1add
cmpl $-0x1, %edi
movq -0x30(%rbp), %r14
movq -0x38(%rbp), %r15
je 0x1b48
callq 0x9b55
jmp 0x1b48
cmpl $-0x1, %edi
movq -0x30(%rbp), %r14
movq -0x38(%rbp), %r15
je 0x1c11
leaq -0xe0(%rbp), %rdi
callq 0x81cb
testl %eax, %eax
movq -0x40(%rbp), %r12
je 0x1b55
cmpl $0x0, 0x464(%r12)
jne 0x1c1d
movl 0x45c(%r12), %ebx
cmpl $0x0, 0x458(%r12)
movl -0x8c(%rbp), %esi
je 0x1b95
movl %esi, %edi
callq 0x9b55
movl 0x460(%r12), %esi
pushq $0x8
popq %rdi
callq 0x979c
movl %ebx, %edi
callq 0xa385
callq 0x96c9
incq %r15
jmp 0x1870
cmpl $0x0, 0x464(%r12)
je 0x1b9e
movl -0x90(%rbp), %ebx
incl %ebx
movl %ebx, -0x90(%rbp)
leaq -0xe0(%rbp), %rdi
leaq 0xbdef(%rip), %rsi      # 0xd96b
callq 0x81de
movl -0x8c(%rbp), %esi
movl -0x44(%rbp), %edx
movl %eax, %edi
movl %ebx, %ecx
callq 0xa458
jmp 0x1b4d
movl %ebx, %edi
callq 0x957f
jmp 0x1b4d
leaq -0xe0(%rbp), %rdi
leaq 0xbdbf(%rip), %rsi      # 0xd96b
callq 0x81de
movl -0x8c(%rbp), %esi
movl %eax, %edi
callq 0x9525
jmp 0x1b4d
xorl %ebx, %ebx
movslq -0x80(%rbp), %rax
cmpq %rax, %rbx
jge 0x1be7
movq -0x78(%rbp), %rax
movq (%rax,%rbx,8), %rdi
callq 0xaf59
movl %ebx, %edi
movq %rax, %rsi
callq 0xa031
incq %rbx
jmp 0x1bc2
addq $0x498, %rsp            # imm = 0x498
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xb6a4(%rip), %rdi      # 0xd2a4
callq 0x8186
leaq 0xb6e9(%rip), %rdi      # 0xd2f5
callq 0x8186
leaq 0xb705(%rip), %rdi      # 0xd31d
callq 0x814d
leaq 0xb730(%rip), %rdi      # 0xd354
callq 0x8186