// File: /workspace/github_c_makefile_star2_O0/oridb[P]mc/mi/flatten.c
// Function: flattenloop
static void
flattenloop(Flattenctx *s, Node *n)
{
	Stab *b;
	Loop l;
	Node *lbody;
	Node *lend;
	Node *ldec;
	Node *lcond;
	Node *lstep;

	lbody = genlbl(n->loc);
	ldec = genlbl(n->loc);
	lcond = genlbl(n->loc);
	lstep = genlbl(n->loc);
	lend = genlbl(n->loc);


	b = s->curst;
	s->curst = n->loopstmt.scope;
	l = s->loop;
	s->loop.lcnt = lstep;
	s->loop.lbrk = lend;
	s->loop.body = n->loopstmt.scope;
	s->inloop++;

	flatten(s, n->loopstmt.init);  /* init */
	jmp(s, lcond);              /* goto test */
	flatten(s, lbody);             /* body lbl */
	flatten(s, n->loopstmt.body);  /* body */
	flatten(s, lstep);             /* test lbl */
	flatten(s, n->loopstmt.step);  /* step */
	flatten(s, lcond);             /* test lbl */
	flattencond(s, n->loopstmt.cond, ldec, lend);    /* repeat? */
	flatten(s, ldec);        	/* drain decrements */
	draininc(s);
	jmp(s, lbody);              	/* goto test */
	flatten(s, lend);             	/* exit */
	draininc(s);

	s->inloop--;
	s->loop = l;
	s->curst = b;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x2fd00
movq %rax, -0x38(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x2fd00
movq %rax, -0x48(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x2fd00
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x2fd00
movq %rax, -0x58(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x2fd00
movq %rax, -0x40(%rbp)
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x50(%rax)
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rcx
movq %rcx, -0x30(%rbp)
movq 0x38(%rax), %rcx
movq %rcx, -0x28(%rbp)
movq 0x40(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x58(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x40(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x8(%rbp), %rax
movl 0x48(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x48(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0x41220
movq -0x8(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x42420
movq -0x8(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0x41220
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rsi
callq 0x41220
movq -0x8(%rbp), %rdi
movq -0x58(%rbp), %rsi
callq 0x41220
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rsi
callq 0x41220
movq -0x8(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x41220
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rsi
movq -0x48(%rbp), %rdx
movq -0x40(%rbp), %rcx
callq 0x42580
movq -0x8(%rbp), %rdi
movq -0x48(%rbp), %rsi
callq 0x41220
movq -0x8(%rbp), %rdi
callq 0x426c0
movq -0x8(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0x42420
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x41220
movq -0x8(%rbp), %rdi
callq 0x426c0
movq -0x8(%rbp), %rax
movl 0x48(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x48(%rax)
movq -0x8(%rbp), %rax
movq -0x30(%rbp), %rcx
movq %rcx, 0x30(%rax)
movq -0x28(%rbp), %rcx
movq %rcx, 0x38(%rax)
movq -0x20(%rbp), %rcx
movq %rcx, 0x40(%rax)
movq -0x18(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x50(%rax)
addq $0x60, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)