// File: /workspace/github_c_makefile_star2_O0/oridb[P]mc/6/simp.c
// Function: simpinit
static void
simpinit(Simp *s, Node *f)
{
	Node *dcl;
	Type *ty;
	size_t i;

	assert(f->type == Nfunc);
	s->nstmts = 0;
	s->stmts = NULL;
	s->endlbl = genlbl(f->loc);
	s->rettype = ArgVoid;

	/* make a temp for the return type */
	ty = f->func.type->sub[0];
	s->rettype = classify(ty);

	switch(s->rettype) {
	case ArgVoid:
		break;
	case ArgAggrI:
	case ArgAggrF:
	case ArgAggrII:
	case ArgAggrIF:
	case ArgAggrFI:
	case ArgAggrFF:
		s->ret = gentemp(f->loc, mktyptr(f->loc, ty), &dcl);
		break;
	case ArgBig:
		s->ret = gentemp(f->loc, mktyptr(f->loc, ty), &dcl);
		declarearg(s, dcl);
		break;
	case ArgReg:
		s->ret = gentemp(f->loc, ty, NULL);
		break;
	}

	for (i = 0; i < f->func.nargs; i++) {
		declarearg(s, f->func.args[i]);
	}
	simp(s, f->func.body);

	append(s, s->endlbl);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
cmpl $0xc, 0x8(%rax)
jne 0x1af0c
jmp 0x1af2b
leaq 0x33558(%rip), %rdi     # 0x4e46b
leaq 0x331c6(%rip), %rsi     # 0x4e0e0
movl $0x57a, %edx            # imm = 0x57A
leaq 0x33556(%rip), %rcx     # 0x4e47c
callq 0x6160
movq -0x8(%rbp), %rax
movq $0x0, 0x10(%rax)
movq -0x8(%rbp), %rax
movq $0x0, 0x8(%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x2fd00
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x8(%rbp), %rax
movl $0x0, 0x28(%rax)
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movq 0x68(%rax), %rax
movq (%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rdi
callq 0x1c9b0
movl %eax, %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x28(%rax)
movq -0x8(%rbp), %rax
movl 0x28(%rax), %eax
movq %rax, -0x30(%rbp)
subq $0x8, %rax
ja 0x1b054
movq -0x30(%rbp), %rax
leaq 0x33112(%rip), %rcx     # 0x4e0bc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x1b054
movq -0x10(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rsi
movq (%rax), %rdi
callq 0x37430
movq %rax, %rsi
movq -0x38(%rbp), %rax
movq (%rax), %rdi
leaq -0x18(%rbp), %rdx
callq 0x2ffd0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x1b054
movq -0x10(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rsi
movq (%rax), %rdi
callq 0x37430
movq %rax, %rsi
movq -0x40(%rbp), %rax
movq (%rax), %rdi
leaq -0x18(%rbp), %rdx
callq 0x2ffd0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x1b170
jmp 0x1b054
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rsi
movq (%rax), %rdi
xorl %eax, %eax
movl %eax, %edx
callq 0x2ffd0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x20(%rax)
movq $0x0, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x30(%rcx), %rax
jae 0x1b091
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x28(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
callq 0x1b170
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x1b05c
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rsi
callq 0x1b1f0
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0x17710
addq $0x40, %rsp
popq %rbp
retq
nopl (%rax)