// File: /workspace/github_c_makefile_star2_O1/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 $0x88, %rsp
movq %rdi, %rbx
xorl %r14d, %r14d
leaq 0xe528(%rip), %r15      # 0x4f8b4
leaq 0x40(%rsp), %r12
leaq 0x7ce1(%rip), %r13      # 0x49079
xorl %eax, %eax
testq %rbx, %rbx
movq %rax, 0x38(%rsp)
je 0x41c5c
movl (%rbx), %eax
decl %eax
cmpl $0xa, %eax
ja 0x41c5c
movslq (%r15,%rax,4), %rax
addq %r15, %rax
movq %rbx, 0x10(%rsp)
jmpq *%rax
movq 0x28(%rbx), %rdx
movq %rbp, %rbx
movq 0x57607(%rip), %rbp     # 0x989d8
movq %r12, %rdi
leaq 0xea18(%rip), %rsi      # 0x4fdf3
xorl %eax, %eax
callq 0xe2f0
movq %rbp, %rdi
movq %rbx, %rbp
movq 0x10(%rsp), %rbx
movq %r12, %rsi
callq 0x42a90
jmp 0x41405
movq 0x10(%rbx), %rsi
movq %r13, %rdi
xorl %eax, %eax
callq 0xe110
movq 0x20(%rbx), %rbx
testb $0x1, 0x38(%rsp)
cmoveq %r14, %rbp
movb $0x1, %al
jmp 0x4139a
movq 0x575bb(%rip), %r15     # 0x989d8
movq 0x10(%rbx), %rbx
testq %rbx, %rbx
je 0x418e6
cmpq $0x0, 0x10(%rbx)
je 0x418e6
movq %rbx, %rdi
callq 0x41d4f
testq %rax, %rax
je 0x41d30
movq %rax, %r14
movq 0x10(%rbx), %rdx
leaq 0x2a37c(%rip), %rsi     # 0x6b7d0
leaq 0x5540(%rip), %rcx      # 0x4699b
movq %rax, %rdi
callq 0x4263e
jmp 0x418e9
movq %rbp, %r12
movq 0x10(%rbx), %rdi
callq 0x41d4f
movq %rax, %rdi
callq 0x4282b
movl %eax, %ebp
movq 0x18(%rbx), %rdi
callq 0x4136e
cmpq $0x0, 0x20(%rbx)
je 0x414a0
movl %ebp, %edi
callq 0x428a5
movl %eax, %ebp
movq 0x20(%rbx), %rdi
callq 0x4136e
movq 0x57531(%rip), %rbx     # 0x989d8
leaq 0xe935(%rip), %rsi      # 0x4fde3
leaq 0xe867(%rip), %rcx      # 0x4fd1c
xorl %r14d, %r14d
leaq 0x40(%rsp), %r15
movq %r15, %rdi
movl %ebp, %edx
xorl %eax, %eax
callq 0xe2f0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x42a90
movq %r12, %rbp
jmp 0x41c5c
movq 0x10(%rbx), %rdi
callq 0x41d4f
movq %rax, %r14
jmp 0x41c5c
movq 0x10(%rbx), %rdi
callq 0x424bd
jmp 0x41c59
movq 0x10(%rbx), %rbx
testq %rbx, %rbx
je 0x41c59
xorl %r14d, %r14d
movq %rbx, %r15
movzwl (%r15), %eax
testb %al, %al
jle 0x41544
xorl %r12d, %r12d
movq 0x18(%r15,%r12,8), %rdi
movzwl %ax, %eax
cmpl $0x100, %eax            # imm = 0x100
jb 0x4152d
testq %rdi, %rdi
je 0x41535
callq 0x4136e
movq %rax, %r14
incq %r12
movl (%r15), %eax
movsbq %al, %rcx
cmpq %rcx, %r12
jl 0x41519
movq 0x10(%r15), %r15
cmpq %rbx, %r15
jne 0x4150e
jmp 0x41c5c
leaq 0x81cf(%rip), %rdi      # 0x49728
callq 0xe0b0
jmp 0x41c59
movq 0x18(%rbx), %rdi
testq %rdi, %rdi
je 0x41916
callq 0x41d4f
movl 0x20(%rax), %esi
leaq 0xe663(%rip), %rdi      # 0x4fbe2
xorl %r14d, %r14d
xorl %eax, %eax
callq 0xe110
jmp 0x41c5c
movq %rbp, 0x28(%rsp)
movq 0x10(%rbx), %rdi
callq 0x41d4f
movq 0x10(%rbx), %rcx
movq 0x10(%rcx), %rdx
leaq 0x2a225(%rip), %rsi     # 0x6b7d0
leaq 0xe849(%rip), %rcx      # 0x4fdfb
movq %rax, %rdi
callq 0x4263e
movq 0x28(%rbx), %rax
movq 0x98(%rax), %rax
testq %rax, %rax
je 0x41980
leaq 0xe860(%rip), %rbp      # 0x4fe35
movq %rax, %rsi
movq $0x0, 0x18(%rsp)
movq %rax, 0x30(%rsp)
movzwl (%rsi), %eax
testb %al, %al
jle 0x41794
xorl %r14d, %r14d
movq %rsi, 0x8(%rsp)
movq 0x18(%rsi,%r14,8), %r13
movzwl %ax, %eax
cmpl $0x100, %eax            # imm = 0x100
jb 0x41611
testq %r13, %r13
je 0x41782
movq 0x90(%r13), %rax
movq 0x10(%rax), %r12
testq %r12, %r12
je 0x4174c
leaq 0x2a1a4(%rip), %rbx     # 0x6b7d0
movq 0x18(%rax), %r15
movq 0x20(%r12), %rax
movq %rax, 0x20(%rsp)
movl $0x4, %edi
callq 0x42575
orb $0x2, 0x8(%rax)
movq 0x20(%rsp), %rcx
movq %rcx, 0x20(%rax)
cmpb $0x1, (%r12)
jne 0x41cf2
movq %rbp, %rdi
movq %rax, %rsi
movq %rbx, %rdx
xorl %ecx, %ecx
callq 0x4259e
testq %r15, %r15
je 0x41753
movl $0x5, %edi
callq 0x42575
orb $0x2, 0x8(%rax)
movl 0x57356(%rip), %r12d    # 0x989e0
incl %r12d
movl %r12d, 0x5734c(%rip)    # 0x989e0
movl %r12d, 0x20(%rax)
leaq 0xe79e(%rip), %rdi      # 0x4fe3d
movq %rax, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4259e
movq 0x20(%r15), %rbx
movl $0x4, %edi
callq 0x42575
orb $0x2, 0x8(%rax)
movq %rbx, 0x20(%rax)
movq %rbp, %rdi
movq %rax, %rsi
leaq 0x2a102(%rip), %rdx     # 0x6b7d0
xorl %ecx, %ecx
callq 0x4259e
movl $0x5, %edi
callq 0x42575
orb $0x2, 0x8(%rax)
movl %r12d, 0x20(%rax)
leaq 0xe752(%rip), %rdi      # 0x4fe40
movq %rax, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4259e
movl $0x6, %edi
callq 0x42575
orb $0x2, 0x8(%rax)
movq %r13, 0x20(%rax)
leaq 0x9296(%rip), %rdi      # 0x4a9a9
movq %rax, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4259e
movq 0x572b2(%rip), %r13     # 0x989d8
leaq 0x40(%rsp), %rbx
movq %rbx, %rdi
leaq 0x798a(%rip), %rsi      # 0x490bf
movl %r12d, %edx
xorl %eax, %eax
callq 0xe2f0
movq %r13, %rdi
movq %rbx, %rsi
callq 0x42a90
jmp 0x41778
movq %r13, 0x18(%rsp)
jmp 0x41782
movl $0x6, %edi
callq 0x42575
orb $0x2, 0x8(%rax)
movq %r13, 0x20(%rax)
leaq 0xe6ce(%rip), %rdi      # 0x4fe3a
movq %rax, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4259e
movq 0x10(%rsp), %rbx
movq 0x8(%rsp), %rsi
incq %r14
movl (%rsi), %eax
movsbq %al, %rcx
cmpq %rcx, %r14
jl 0x415f9
movq 0x10(%rsi), %rsi
movq 0x30(%rsp), %rax
cmpq %rax, %rsi
jne 0x415e6
jmp 0x41989
movq %rbp, 0x28(%rsp)
movq 0x28(%rbx), %r12
movq 0x30(%rbx), %rbp
movq 0x38(%rbx), %rax
movq %rax, 0x30(%rsp)
movq 0x40(%rbx), %rax
movq %rax, 0x18(%rsp)
movq 0x48(%rbx), %r15
movl 0x5720b(%rip), %r13d    # 0x989e0
leal 0x1(%r13), %r14d
addl $0x2, %r13d
movl %r13d, 0x571fc(%rip)    # 0x989e0
movq 0x571ed(%rip), %rbx     # 0x989d8
movl $0x10, %edi
callq 0xe230
movl %r13d, (%rax)
movl %r14d, 0x20(%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 0x424bd
movq %r12, %rdi
callq 0x4136e
testq %r15, %r15
movq %r15, %rbx
je 0x4183c
cmpb $0x1, (%r15)
jne 0x4183c
cmpq $0x0, 0x20(%r15)
je 0x41cad
movl 0x5719d(%rip), %r12d    # 0x989e0
incl %r12d
movl %r12d, 0x57193(%rip)    # 0x989e0
movq 0x57184(%rip), %r15     # 0x989d8
leaq 0xe588(%rip), %rsi      # 0x4fde3
leaq 0xe3b9(%rip), %rcx      # 0x4fc1b
leaq 0x40(%rsp), %r14
movq %r14, %rdi
movl %r12d, %edx
xorl %eax, %eax
callq 0xe2f0
movq %r15, %rdi
movq %r14, %rsi
callq 0x42a90
testq %rbp, %rbp
je 0x419b8
cmpb $0x1, (%rbp)
jne 0x41a7b
movb $0x1, %al
movq %rax, 0x8(%rsp)
cmpq $0x0, 0x20(%rbp)
movq %rbx, %r15
jne 0x41aee
movl $0x5, %edi
callq 0x42575
movl 0x20(%rsp), %ecx
movl %ecx, 0x20(%rax)
movq $0x2, 0x8(%rax)
leaq 0x90e2(%rip), %rdi      # 0x4a9a9
leaq 0xe329(%rip), %rcx      # 0x4fbf7
movq $0x0, 0x8(%rsp)
movq %rax, %rsi
xorl %edx, %edx
callq 0x4259e
jmp 0x41aee
xorl %r14d, %r14d
movl $0x5, %edi
callq 0x42575
orb $0x2, 0x8(%rax)
movl 0x34(%r15), %ecx
movl %ecx, 0x20(%rax)
leaq 0x90a4(%rip), %rdi      # 0x4a9a9
movq %rax, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4259e
jmp 0x41c5c
movq 0x10(%rbx), %rax
movq 0x18(%rax), %rdi
callq 0x21d75
leaq 0x4700(%rip), %rdi      # 0x4602a
movq %rax, %rsi
callq 0xe1f0
testl %eax, %eax
je 0x41c7a
movq 0x10(%rbx), %rax
movq 0x18(%rax), %rdi
callq 0x21d75
leaq 0x46e2(%rip), %rdi      # 0x46030
movq %rax, %rsi
callq 0xe1f0
testl %eax, %eax
je 0x41cb5
movq 0x10(%rbx), %rbx
movl $0x6, %edi
callq 0x42575
orb $0x2, 0x8(%rax)
movq %rbx, 0x20(%rax)
leaq 0x902e(%rip), %rdi      # 0x4a9a9
xorl %r14d, %r14d
jmp 0x41905
movq $0x0, 0x18(%rsp)
movq 0x18(%rsp), %r14
testq %r14, %r14
je 0x419c4
movl $0x6, %edi
callq 0x42575
orb $0x2, 0x8(%rax)
movq %r14, 0x20(%rax)
leaq 0x8ffd(%rip), %rdi      # 0x4a9a9
leaq 0x7b36(%rip), %rcx      # 0x494e9
xorl %r15d, %r15d
jmp 0x419f5
movb $0x1, %al
movq %rax, 0x8(%rsp)
jmp 0x41aeb
movl $0x5, %edi
callq 0x42575
orb $0x2, 0x8(%rax)
movl 0x57007(%rip), %r15d    # 0x989e0
incl %r15d
movl %r15d, 0x56ffd(%rip)    # 0x989e0
movl %r15d, 0x20(%rax)
leaq 0x8fbb(%rip), %rdi      # 0x4a9a9
leaq 0xe44e(%rip), %rcx      # 0x4fe43
movq %rax, %rsi
xorl %edx, %edx
callq 0x4259e
movq 0x28(%rsp), %rbp
movq 0x18(%rbx), %rdi
callq 0x4136e
movq 0x20(%rbx), %rdx
testb $0x2, 0x2(%rdx)
je 0x41a3f
movq 0x56fba(%rip), %rbx     # 0x989d8
leaq 0xe3ce(%rip), %rsi      # 0x4fdf3
leaq 0x40(%rsp), %r14
movq %r14, %rdi
xorl %eax, %eax
callq 0xe2f0
movq %rbx, %rdi
movq %r14, %rsi
callq 0x42a90
testl %r15d, %r15d
je 0x41c59
movq 0x56f89(%rip), %rbx     # 0x989d8
leaq 0x7669(%rip), %rsi      # 0x490bf
xorl %r14d, %r14d
leaq 0x40(%rsp), %r12
movq %r12, %rdi
movl %r15d, %edx
xorl %eax, %eax
callq 0xe2f0
movq %rbx, %rdi
movq %r12, %rsi
callq 0x42a90
jmp 0x41c5c
movl $0x5, %edi
callq 0x42575
movq %rax, %r14
movl 0x20(%rsp), %eax
movl %eax, 0x20(%r14)
movq $0x2, 0x8(%r14)
movq %rbp, %rdi
callq 0x41d4f
leaq 0x29d29(%rip), %r15     # 0x6b7d0
leaq 0xe3a8(%rip), %rcx      # 0x4fe56
movq $0x0, 0x8(%rsp)
movq %rax, %rdi
movq %r15, %rsi
xorl %edx, %edx
callq 0x4263e
leaq 0xe26d(%rip), %rdi      # 0x4fd38
movq %r15, %rsi
movq %r15, %rdx
xorl %ecx, %ecx
callq 0x4259e
leaq 0xe25e(%rip), %rdi      # 0x4fd3d
movq %r14, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4259e
movq %rbx, %r15
movq 0x30(%rsp), %rdi
callq 0x4136e
movq 0x10(%rsp), %rax
movq 0x18(%rax), %rax
testb $0x2, 0x2(%rax)
movq 0x28(%rsp), %rbp
je 0x41b41
movq 0x56ec5(%rip), %r14     # 0x989d8
leaq 0xe2c9(%rip), %rsi      # 0x4fde3
leaq 0xe348(%rip), %rcx      # 0x4fe69
leaq 0x40(%rsp), %r15
movq %r15, %rdi
movl %r13d, %edx
xorl %eax, %eax
callq 0xe2f0
movq %r14, %rdi
movq %r15, %rsi
movq %rbx, %r15
callq 0x42a90
movq 0x18(%rsp), %rdi
callq 0x4136e
testq %r15, %r15
je 0x41b61
cmpb $0x1, (%r15)
jne 0x41b8c
cmpq $0x0, 0x20(%r15)
je 0x41bef
movl $0x5, %edi
callq 0x42575
movl %r12d, 0x20(%rax)
movq $0x2, 0x8(%rax)
leaq 0x8e2b(%rip), %rdi      # 0x4a9a9
leaq 0xe090(%rip), %rcx      # 0x4fc15
movq %rax, %rsi
xorl %edx, %edx
jmp 0x41bea
movl $0x5, %edi
callq 0x42575
movq %rax, %r14
movl %r12d, 0x20(%rax)
movq $0x2, 0x8(%rax)
movq %r15, %rdi
callq 0x41d4f
leaq 0x29c1c(%rip), %r15     # 0x6b7d0
leaq 0xe2c2(%rip), %rcx      # 0x4fe7d
movq %rax, %rdi
movq %r15, %rsi
xorl %edx, %edx
callq 0x4263e
leaq 0xe169(%rip), %rdi      # 0x4fd38
movq %r15, %rsi
movq %r15, %rdx
xorl %ecx, %ecx
callq 0x4259e
leaq 0xe2ae(%rip), %rdi      # 0x4fe91
movq %r14, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4259e
cmpb $0x0, 0x8(%rsp)
je 0x41c05
movq 0x10(%rsp), %rax
movq 0x10(%rax), %rax
testb $0x2, 0x2(%rax)
je 0x41c38
movq 0x56dcc(%rip), %rbx     # 0x989d8
leaq 0xe1d0(%rip), %rsi      # 0x4fde3
leaq 0xdfe3(%rip), %rcx      # 0x4fbfd
leaq 0x40(%rsp), %r14
movq %r14, %rdi
movl 0x20(%rsp), %edx
xorl %eax, %eax
callq 0xe2f0
movq %rbx, %rdi
movq %r14, %rsi
callq 0x42a90
movq 0x56d99(%rip), %rax     # 0x989d8
movq 0x20(%rax), %rdi
testq %rdi, %rdi
je 0x41d11
movq 0x8(%rdi), %rcx
movq %rcx, 0x20(%rax)
callq 0xe030
xorl %r14d, %r14d
testb $0x1, 0x38(%rsp)
cmovneq %rbp, %r14
movq %r14, %rax
addq $0x88, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x5, %edi
callq 0x42575
movq 0x56d4d(%rip), %rcx     # 0x989d8
movq 0x20(%rcx), %rcx
movl 0x4(%rcx), %ecx
movl %ecx, 0x20(%rax)
movq $0x2, 0x8(%rax)
leaq 0x8d05(%rip), %rdi      # 0x4a9a9
leaq 0xdf43(%rip), %rcx      # 0x4fbee
jmp 0x41ce5
xorl %r12d, %r12d
jmp 0x4187f
movl $0x5, %edi
callq 0x42575
movq 0x56d12(%rip), %rcx     # 0x989d8
movq 0x20(%rcx), %rcx
movl (%rcx), %ecx
movl %ecx, 0x20(%rax)
movq $0x2, 0x8(%rax)
leaq 0x8ccb(%rip), %rdi      # 0x4a9a9
leaq 0xdf24(%rip), %rcx      # 0x4fc09
xorl %r14d, %r14d
movq %rax, %rsi
xorl %edx, %edx
jmp 0x4190c
leaq 0xde2d(%rip), %rdi      # 0x4fb26
leaq 0xdd3c(%rip), %rsi      # 0x4fa3c
leaq 0xe0ff(%rip), %rcx      # 0x4fe06
movl $0x6ca, %edx            # imm = 0x6CA
callq 0xe140
leaq 0xe17d(%rip), %rdi      # 0x4fe95
leaq 0xdd1d(%rip), %rsi      # 0x4fa3c
leaq 0xe185(%rip), %rcx      # 0x4feab
movl $0x766, %edx            # imm = 0x766
callq 0xe140
leaq 0xdeed(%rip), %rdi      # 0x4fc24
leaq 0xdcfe(%rip), %rsi      # 0x4fa3c
leaq 0xdeeb(%rip), %rcx      # 0x4fc30
movl $0x606, %edx            # imm = 0x606
callq 0xe140