// File: /workspace/github_c_makefile_star2_O3/lucvoo[P]sparse-dev/compile-i386.c
// Function: x86_statement
static struct storage *x86_statement(struct statement *stmt)
{
	if (!stmt)
		return NULL;
	switch (stmt->type) {
	default:
		return NULL;
	case STMT_RETURN:
		return emit_return_stmt(stmt);
	case STMT_DECLARATION:
		x86_symbol_decl(stmt->declaration);
		break;
	case STMT_COMPOUND: {
		struct statement *s;
		struct storage *last = NULL;

		FOR_EACH_PTR(stmt->stmts, s) {
			last = x86_statement(s);
		} END_FOR_EACH_PTR(s);

		return last;
	}

	case STMT_EXPRESSION:
		return x86_expression(stmt->expression);
	case STMT_IF:
		emit_if_conditional(stmt);
		return NULL;

	case STMT_CASE:
		emit_case_statement(stmt);
		break;
	case STMT_SWITCH:
		emit_switch_statement(stmt);
		break;

	case STMT_ITERATOR:
		emit_loop(stmt);
		break;

	case STMT_NONE:
		break;

	case STMT_LABEL:
		printf(".L%p:\n", stmt->label_identifier);
		x86_statement(stmt->label_statement);
		break;

	case STMT_GOTO:
		if (stmt->goto_expression) {
			struct storage *val = x86_expression(stmt->goto_expression);
			printf("\tgoto *v%d\n", val->pseudo);
		} else if (!strcmp("break", show_ident(stmt->goto_label->ident))) {
			struct storage *lbv = new_storage(STOR_LABEL);
			lbv->label = loopstk_break();
			lbv->flags = STOR_WANTS_FREE;
			insn("jmp", lbv, NULL, "'break'; go to loop bottom");
		} else if (!strcmp("continue", show_ident(stmt->goto_label->ident))) {
			struct storage *lbv = new_storage(STOR_LABEL);
			lbv->label = loopstk_continue();
			lbv->flags = STOR_WANTS_FREE;
			insn("jmp", lbv, NULL, "'continue'; go to loop top");
		} else {
			struct storage *labelsym = new_labelsym(stmt->goto_label);
			insn("jmp", labelsym, NULL, NULL);
		}
		break;
	case STMT_ASM:
		printf("\tasm( .... )\n");
		break;
	}
	return NULL;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x78, %rsp
testq %rdi, %rdi
je 0x40bc7
movq %rdi, %rbx
xorl %r13d, %r13d
leaq 0xe56f(%rip), %rbp      # 0x4e844
leaq 0xeaa7(%rip), %r14      # 0x4ed83
leaq 0x30(%rsp), %r15
leaq 0x7d51(%rip), %r12      # 0x48039
movl (%rbx), %eax
decl %eax
cmpl $0xa, %eax
ja 0x40929
movslq (%rbp,%rax,4), %rax
addq %rbp, %rax
movq %rbx, 0x10(%rsp)
jmpq *%rax
movq 0x28(%rbx), %rdx
movq 0x566c9(%rip), %r13     # 0x969d8
movq %r15, %rdi
movq %r14, %rsi
xorl %eax, %eax
callq 0xe2f0
movq %r13, %rdi
movq %r15, %rsi
callq 0x41a0d
jmp 0x40337
movq 0x10(%rbx), %rsi
movq %r12, %rdi
xorl %eax, %eax
callq 0xe110
movq 0x20(%rbx), %rbx
movb $0x1, %r13b
testq %rbx, %rbx
jne 0x402e8
jmp 0x40bc7
movq 0x56689(%rip), %r15     # 0x969d8
movq 0x10(%rbx), %r14
testq %r14, %r14
je 0x40850
cmpq $0x0, 0x10(%r14)
je 0x40850
movq %r14, %rdi
callq 0x40caf
testq %rax, %rax
je 0x40c90
movq %rax, %rbx
movq 0x10(%r14), %rdx
leaq 0x2944a(%rip), %rsi     # 0x697d0
leaq 0x5602(%rip), %rcx      # 0x4598f
movq %rax, %rdi
callq 0x415bd
jmp 0x40852
movq 0x10(%rbx), %r14
testq %r14, %r14
je 0x40929
xorl %ebx, %ebx
movq %r14, %r15
movzwl (%r15), %eax
testb %al, %al
jle 0x403e7
xorl %r12d, %r12d
movq 0x18(%r15,%r12,8), %rdi
movzwl %ax, %ecx
cmpl $0x100, %ecx            # imm = 0x100
jb 0x403cc
testq %rdi, %rdi
je 0x403d8
callq 0x402b1
movq %rax, %rbx
movzwl (%r15), %eax
incq %r12
movzwl %ax, %ecx
movsbq %cl, %rcx
cmpq %rcx, %r12
jl 0x403b7
movq 0x10(%r15), %r15
cmpq %r14, %r15
jne 0x403ac
jmp 0x4092b
movq 0x10(%rbx), %rdi
callq 0x41437
jmp 0x4040c
leaq 0x82e1(%rip), %rdi      # 0x486e8
callq 0xe0b0
testb $0x1, %r13b
jmp 0x40bc7
movq 0x10(%rbx), %rdi
callq 0x40caf
movq %rax, %rdi
callq 0x417a8
movl %eax, %ebp
movq 0x18(%rbx), %rdi
callq 0x402b1
cmpq $0x0, 0x20(%rbx)
je 0x4044a
movl %ebp, %edi
callq 0x41826
movl %eax, %ebp
movq 0x20(%rbx), %rdi
callq 0x402b1
movq 0x56587(%rip), %r14     # 0x969d8
leaq 0xe91b(%rip), %rsi      # 0x4ed73
leaq 0xe84d(%rip), %rcx      # 0x4ecac
xorl %ebx, %ebx
leaq 0x30(%rsp), %r15
movq %r15, %rdi
movl %ebp, %edx
xorl %eax, %eax
callq 0xe2f0
movq %r14, %rdi
movq %r15, %rsi
jmp 0x40922
movq 0x10(%rbx), %rdi
callq 0x40caf
testb $0x1, %r13b
jne 0x40bc7
movq %rax, %rbx
jmp 0x40bc9
movq 0x10(%rbx), %rdi
callq 0x40caf
movq 0x10(%rbx), %rcx
movq 0x10(%rcx), %rdx
leaq 0x29320(%rip), %rsi     # 0x697d0
leaq 0xe8d4(%rip), %rcx      # 0x4ed8b
movq %rax, %rdi
callq 0x415bd
movq 0x28(%rbx), %rax
movq 0x98(%rax), %rax
testq %rax, %rax
je 0x4087f
movl %r13d, 0x4(%rsp)
leaq 0xe8e6(%rip), %rbp      # 0x4edc5
movq %rax, %rsi
movq $0x0, 0x20(%rsp)
movq %rax, 0x28(%rsp)
movzwl (%rsi), %eax
testb %al, %al
jle 0x4069e
xorl %r14d, %r14d
movq %rsi, 0x8(%rsp)
movq 0x18(%rsi,%r14,8), %r13
movzwl %ax, %eax
cmpl $0x100, %eax            # imm = 0x100
jb 0x4051b
testq %r13, %r13
je 0x4068c
movq 0x90(%r13), %rax
movq 0x10(%rax), %r12
testq %r12, %r12
je 0x40656
leaq 0x2929a(%rip), %rbx     # 0x697d0
movq 0x18(%rax), %r15
movq 0x20(%r12), %rax
movq %rax, 0x18(%rsp)
movl $0x4, %edi
callq 0x414f4
orb $0x2, 0x8(%rax)
movq 0x18(%rsp), %rcx
movq %rcx, 0x20(%rax)
cmpb $0x1, (%r12)
jne 0x40c52
movq %rbp, %rdi
movq %rax, %rsi
movq %rbx, %rdx
xorl %ecx, %ecx
callq 0x4151d
testq %r15, %r15
je 0x4065d
movl $0x5, %edi
callq 0x414f4
orb $0x2, 0x8(%rax)
movl 0x5644c(%rip), %r12d    # 0x969e0
incl %r12d
movl %r12d, 0x56442(%rip)    # 0x969e0
movl %r12d, 0x20(%rax)
leaq 0xe824(%rip), %rdi      # 0x4edcd
movq %rax, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4151d
movq 0x20(%r15), %rbx
movl $0x4, %edi
callq 0x414f4
orb $0x2, 0x8(%rax)
movq %rbx, 0x20(%rax)
movq %rbp, %rdi
movq %rax, %rsi
leaq 0x291f8(%rip), %rdx     # 0x697d0
xorl %ecx, %ecx
callq 0x4151d
movl $0x5, %edi
callq 0x414f4
orb $0x2, 0x8(%rax)
movl %r12d, 0x20(%rax)
leaq 0xe7d8(%rip), %rdi      # 0x4edd0
movq %rax, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4151d
movl $0x6, %edi
callq 0x414f4
orb $0x2, 0x8(%rax)
movq %r13, 0x20(%rax)
leaq 0x934c(%rip), %rdi      # 0x49969
movq %rax, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4151d
movq 0x563a8(%rip), %r13     # 0x969d8
leaq 0x30(%rsp), %rbx
movq %rbx, %rdi
leaq 0x7a40(%rip), %rsi      # 0x4807f
movl %r12d, %edx
xorl %eax, %eax
callq 0xe2f0
movq %r13, %rdi
movq %rbx, %rsi
callq 0x41a0d
jmp 0x40682
movq %r13, 0x20(%rsp)
jmp 0x4068c
movl $0x6, %edi
callq 0x414f4
orb $0x2, 0x8(%rax)
movq %r13, 0x20(%rax)
leaq 0xe754(%rip), %rdi      # 0x4edca
movq %rax, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4151d
movq 0x10(%rsp), %rbx
movq 0x8(%rsp), %rsi
incq %r14
movl (%rsi), %eax
movsbq %al, %rcx
cmpq %rcx, %r14
jl 0x40503
movq 0x10(%rsi), %rsi
movq 0x28(%rsp), %rax
cmpq %rax, %rsi
jne 0x404f0
movq 0x20(%rsp), %r14
testq %r14, %r14
movl 0x4(%rsp), %r13d
je 0x4087f
movl $0x6, %edi
callq 0x414f4
orb $0x2, 0x8(%rax)
movq %r14, 0x20(%rax)
leaq 0x928d(%rip), %rdi      # 0x49969
leaq 0x7dc6(%rip), %rcx      # 0x484a9
xorl %r14d, %r14d
jmp 0x408b0
movq 0x18(%rbx), %rdi
testq %rdi, %rdi
je 0x4093a
callq 0x40caf
movl 0x20(%rax), %esi
leaq 0xe46b(%rip), %rdi      # 0x4eb72
xorl %ebx, %ebx
xorl %eax, %eax
callq 0xe110
jmp 0x4092b
movl %r13d, 0x4(%rsp)
movq 0x28(%rbx), %r12
movq 0x30(%rbx), %rbp
movq 0x38(%rbx), %rax
movq %rax, 0x28(%rsp)
movq 0x40(%rbx), %rax
movq %rax, 0x20(%rsp)
movq 0x48(%rbx), %r15
movl 0x562a1(%rip), %r13d    # 0x969e0
leal 0x1(%r13), %r14d
addl $0x2, %r13d
movl %r13d, 0x56292(%rip)    # 0x969e0
movq 0x56283(%rip), %rbx     # 0x969d8
movl $0x10, %edi
callq 0xe230
movl %r13d, (%rax)
movl %r14d, 0x18(%rsp)
movl %r14d, 0x4(%rax)
movq 0x20(%rbx), %rcx
movq %rcx, 0x8(%rax)
movq %rax, 0x20(%rbx)
movq 0x10(%rsp), %rax
movq 0x20(%rax), %rdi
callq 0x41437
movq %r12, %rdi
callq 0x402b1
testq %r15, %r15
movq %r15, %rbx
je 0x407a6
cmpb $0x1, (%r15)
jne 0x407a6
cmpq $0x0, 0x20(%r15)
je 0x40c0e
movl 0x56233(%rip), %r12d    # 0x969e0
incl %r12d
movl %r12d, 0x56229(%rip)    # 0x969e0
movq 0x5621a(%rip), %r15     # 0x969d8
leaq 0xe5ae(%rip), %rsi      # 0x4ed73
leaq 0xe3df(%rip), %rcx      # 0x4ebab
leaq 0x30(%rsp), %r14
movq %r14, %rdi
movl %r12d, %edx
xorl %eax, %eax
callq 0xe2f0
movq %r15, %rdi
movq %r14, %rsi
callq 0x41a0d
testq %rbp, %rbp
je 0x409a6
cmpb $0x1, (%rbp)
jne 0x409af
movb $0x1, %al
movq %rax, 0x8(%rsp)
cmpq $0x0, 0x20(%rbp)
movq %rbx, %r15
jne 0x40a22
movl $0x5, %edi
callq 0x414f4
movl 0x18(%rsp), %ecx
movl %ecx, 0x20(%rax)
movq $0x2, 0x8(%rax)
leaq 0x9138(%rip), %rdi      # 0x49969
leaq 0xe34f(%rip), %rcx      # 0x4eb87
movq $0x0, 0x8(%rsp)
movq %rax, %rsi
xorl %edx, %edx
callq 0x4151d
jmp 0x40a22
xorl %ebx, %ebx
movl $0x5, %edi
callq 0x414f4
orb $0x2, 0x8(%rax)
movl 0x34(%r15), %ecx
movl %ecx, 0x20(%rax)
leaq 0x90fb(%rip), %rdi      # 0x49969
movq %rax, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4151d
jmp 0x4092b
movl $0x5, %edi
callq 0x414f4
orb $0x2, 0x8(%rax)
movl 0x5614c(%rip), %r14d    # 0x969e0
incl %r14d
movl %r14d, 0x56142(%rip)    # 0x969e0
movl %r14d, 0x20(%rax)
leaq 0x90c0(%rip), %rdi      # 0x49969
leaq 0xe523(%rip), %rcx      # 0x4edd3
movq %rax, %rsi
xorl %edx, %edx
callq 0x4151d
movq 0x18(%rbx), %rdi
callq 0x402b1
movq 0x20(%rbx), %rdx
testb $0x2, 0x2(%rdx)
je 0x408f5
movq 0x56104(%rip), %rbx     # 0x969d8
leaq 0xe4a8(%rip), %rsi      # 0x4ed83
leaq 0x30(%rsp), %r15
movq %r15, %rdi
xorl %eax, %eax
callq 0xe2f0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x41a0d
testl %r14d, %r14d
je 0x40929
movq 0x560d7(%rip), %r15     # 0x969d8
leaq 0x7777(%rip), %rsi      # 0x4807f
xorl %ebx, %ebx
leaq 0x30(%rsp), %r12
movq %r12, %rdi
movl %r14d, %edx
xorl %eax, %eax
callq 0xe2f0
movq %r15, %rdi
movq %r12, %rsi
callq 0x41a0d
jmp 0x4092b
xorl %ebx, %ebx
testb $0x1, %r13b
jne 0x40bc7
jmp 0x40bc9
movq 0x10(%rbx), %rax
movq 0x18(%rax), %rdi
callq 0x21ba5
leaq 0x46d0(%rip), %rdi      # 0x4501e
movq %rax, %rsi
callq 0xe1f0
testl %eax, %eax
je 0x40bdb
movq 0x10(%rbx), %rax
movq 0x18(%rax), %rdi
callq 0x21ba5
leaq 0x46b2(%rip), %rdi      # 0x45024
movq %rax, %rsi
callq 0xe1f0
testl %eax, %eax
je 0x40c16
movq 0x10(%rbx), %rbx
movl $0x6, %edi
callq 0x414f4
orb $0x2, 0x8(%rax)
movq %rbx, 0x20(%rax)
leaq 0x8fca(%rip), %rdi      # 0x49969
xorl %ebx, %ebx
jmp 0x4086e
movb $0x1, %al
movq %rax, 0x8(%rsp)
jmp 0x40a1f
movl $0x5, %edi
callq 0x414f4
movq %rax, %r14
movl 0x18(%rsp), %eax
movl %eax, 0x20(%r14)
movq $0x2, 0x8(%r14)
movq %rbp, %rdi
callq 0x40caf
leaq 0x28df5(%rip), %r15     # 0x697d0
leaq 0xe404(%rip), %rcx      # 0x4ede6
movq $0x0, 0x8(%rsp)
movq %rax, %rdi
movq %r15, %rsi
xorl %edx, %edx
callq 0x415bd
leaq 0xe2c9(%rip), %rdi      # 0x4ecc8
movq %r15, %rsi
movq %r15, %rdx
xorl %ecx, %ecx
callq 0x4151d
leaq 0xe2ba(%rip), %rdi      # 0x4eccd
movq %r14, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4151d
movq %rbx, %r15
movq 0x28(%rsp), %rdi
callq 0x402b1
movq 0x10(%rsp), %rax
movq 0x18(%rax), %rax
testb $0x2, 0x2(%rax)
je 0x40a70
movq 0x55f96(%rip), %r14     # 0x969d8
leaq 0xe32a(%rip), %rsi      # 0x4ed73
leaq 0xe3a9(%rip), %rcx      # 0x4edf9
leaq 0x30(%rsp), %r15
movq %r15, %rdi
movl %r13d, %edx
xorl %eax, %eax
callq 0xe2f0
movq %r14, %rdi
movq %r15, %rsi
movq %rbx, %r15
callq 0x41a0d
movq 0x20(%rsp), %rdi
callq 0x402b1
testq %r15, %r15
je 0x40ac2
cmpb $0x1, (%r15)
movl 0x4(%rsp), %ebp
jne 0x40af6
cmpq $0x0, 0x20(%r15)
je 0x40b59
movl $0x5, %edi
callq 0x414f4
movl %r12d, 0x20(%rax)
movq $0x2, 0x8(%rax)
leaq 0x8eb8(%rip), %rdi      # 0x49969
leaq 0xe0ed(%rip), %rcx      # 0x4eba5
movq %rax, %rsi
xorl %edx, %edx
jmp 0x40b54
movl $0x5, %edi
callq 0x414f4
movl %r12d, 0x20(%rax)
movq $0x2, 0x8(%rax)
leaq 0x8e8a(%rip), %rdi      # 0x49969
leaq 0xe0bf(%rip), %rcx      # 0x4eba5
movq %rax, %rsi
xorl %edx, %edx
callq 0x4151d
movl 0x4(%rsp), %ebp
jmp 0x40b59
movl $0x5, %edi
callq 0x414f4
movq %rax, %r14
movl %r12d, 0x20(%rax)
movq $0x2, 0x8(%rax)
movq %r15, %rdi
callq 0x40caf
leaq 0x28cb2(%rip), %r15     # 0x697d0
leaq 0xe2e8(%rip), %rcx      # 0x4ee0d
movq %rax, %rdi
movq %r15, %rsi
xorl %edx, %edx
callq 0x415bd
leaq 0xe18f(%rip), %rdi      # 0x4ecc8
movq %r15, %rsi
movq %r15, %rdx
xorl %ecx, %ecx
callq 0x4151d
leaq 0xe2d4(%rip), %rdi      # 0x4ee21
movq %r14, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4151d
cmpb $0x0, 0x8(%rsp)
je 0x40b6f
movq 0x10(%rsp), %rax
movq 0x10(%rax), %rax
testb $0x2, 0x2(%rax)
je 0x40ba2
movq 0x55e62(%rip), %rbx     # 0x969d8
leaq 0xe1f6(%rip), %rsi      # 0x4ed73
leaq 0xe009(%rip), %rcx      # 0x4eb8d
leaq 0x30(%rsp), %r14
movq %r14, %rdi
movl 0x18(%rsp), %edx
xorl %eax, %eax
callq 0xe2f0
movq %rbx, %rdi
movq %r14, %rsi
callq 0x41a0d
movq 0x55e2f(%rip), %rax     # 0x969d8
movq 0x20(%rax), %rdi
testq %rdi, %rdi
je 0x40c71
movq 0x8(%rdi), %rcx
movq %rcx, 0x20(%rax)
callq 0xe030
testb $0x1, %bpl
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x78, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x5, %edi
callq 0x414f4
movq 0x55dec(%rip), %rcx     # 0x969d8
movq 0x20(%rcx), %rcx
movl 0x4(%rcx), %ecx
movl %ecx, 0x20(%rax)
movq $0x2, 0x8(%rax)
leaq 0x8d64(%rip), %rdi      # 0x49969
leaq 0xdf72(%rip), %rcx      # 0x4eb7e
jmp 0x40c46
xorl %r12d, %r12d
jmp 0x407e9
movl $0x5, %edi
callq 0x414f4
movq 0x55db1(%rip), %rcx     # 0x969d8
movq 0x20(%rcx), %rcx
movl (%rcx), %ecx
movl %ecx, 0x20(%rax)
movq $0x2, 0x8(%rax)
leaq 0x8d2a(%rip), %rdi      # 0x49969
leaq 0xdf53(%rip), %rcx      # 0x4eb99
xorl %ebx, %ebx
movq %rax, %rsi
xorl %edx, %edx
jmp 0x40875
leaq 0xde5d(%rip), %rdi      # 0x4eab6
leaq 0xdd6c(%rip), %rsi      # 0x4e9cc
leaq 0xe12f(%rip), %rcx      # 0x4ed96
movl $0x6ca, %edx            # imm = 0x6CA
callq 0xe140
leaq 0xe1ad(%rip), %rdi      # 0x4ee25
leaq 0xdd4d(%rip), %rsi      # 0x4e9cc
leaq 0xe1b5(%rip), %rcx      # 0x4ee3b
movl $0x766, %edx            # imm = 0x766
callq 0xe140
leaq 0xdf1d(%rip), %rdi      # 0x4ebb4
leaq 0xdd2e(%rip), %rsi      # 0x4e9cc
leaq 0xdf1b(%rip), %rcx      # 0x4ebc0
movl $0x606, %edx            # imm = 0x606
callq 0xe140