// File: /workspace/github_c_makefile_star2_O0/nimble-code[P]Uno/Src/uno_bounds.c
// Function: bound_push
static int
bound_push(State *s, treenode *exp_in, treenode *t_cond, State *prev_s)
{	ArBound	*a, *b;
	BoundStack *f;
	int any_updates;

	f = uno_bframe();
	f->curbounds = (ArBound *) 0;

	if (boundstack)		/* carry known bounds forward onto new stackframe */
	for (b = boundstack->curbounds; b; b = b->nxt)
	{	if (b->bounds&UNK)
			continue;
		if (debug>1) explain_bound("imprt", b, ZT);

		a = loose_bound(b->s, b->lb, b->ub, b->bounds);
		a->sameas = b->sameas;
		a->dup = b->dup;
		a->nxt = f->curbounds;
		a->level_set = b->level_set;
		f->curbounds = a;
	}

	f->nxt = boundstack;
	boundstack = f;

	/* pick up new bounds from the immediately preceding step that brought us here */
	dual_work(prev_s);		/* possible initializers in decls */
	expr_bound(exp_in, t_cond);	/* possible bound from branch cond */
	asgn_bound(prev_s);		/* possible bound from asgn */
	gather_bounds(prev_s);		/* reconcile the bounds */

	any_updates = 0;
	fix_dups(s);

	for (b = boundstack->curbounds; b; b = b->nxt)
	{
#if 0
		/* bound could have been known before */
		if (b->bounds & UNK)
			continue;
#endif
		if (debug>1) explain_bound("stack", b, ZT);

		if (unsatisfiable(b))	/* something became unsatisfiable at this step */
		{	if (debug) explain_bound("unsatisfiable", b, s->n);
			return 3;	/* don't update state - no run can get here */
		}

		for (a = s->pvb; a; a = a->nxt)	/* previously seen bounds at this step */
			if (same_bounds(a, b))
				break;

		if (!a)
		{	any_updates = 1;
			a = loose_bound(b->s, b->lb, b->ub, b->bounds);
			a->sameas = b->sameas;
			a->dup = b->dup;
			a->nxt = s->pvb;
			a->level_set = b->level_set;
			s->pvb = a;
	}	}

	if (debug>1)
	{	for (b = s->pvb; b; b = b->nxt)
			explain_bound("pvb", b, s->n);
	}

	if (!any_updates)		/* bounds stored @ state are unchanged */
	{	if (s->visited)
			return 2;	/* old state */
		s->visited = 1;
		return 1;		/* new state */
	}
	s->visited = 1;
	return 0;			/* revisit state */
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
callq 0x2d2b0
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq $0x0, (%rax)
cmpq $0x0, 0x6a264(%rip)     # 0x96b68
je 0x2c9d6
movq 0x6a257(%rip), %rax     # 0x96b68
movq (%rax), %rax
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0x2c9d4
movq -0x38(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0x2c938
jmp 0x2c9c3
cmpl $0x1, 0x6a219(%rip)     # 0x96b58
jle 0x2c955
movq -0x38(%rbp), %rsi
leaq 0x19fb1(%rip), %rdi     # 0x468fd
xorl %eax, %eax
movl %eax, %edx
callq 0x2b960
movq -0x38(%rbp), %rax
movq (%rax), %rdi
movq -0x38(%rbp), %rax
movl 0x20(%rax), %esi
movq -0x38(%rbp), %rax
movl 0x1c(%rax), %edx
movq -0x38(%rbp), %rax
movswl 0x18(%rax), %ecx
callq 0x2d310
movq %rax, -0x30(%rbp)
movq -0x38(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x38(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x40(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x38(%rbp), %rax
movl 0x24(%rax), %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x24(%rax)
movq -0x30(%rbp), %rcx
movq -0x40(%rbp), %rax
movq %rcx, (%rax)
movq -0x38(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x38(%rbp)
jmp 0x2c918
jmp 0x2c9d6
movq 0x6a18b(%rip), %rcx     # 0x96b68
movq -0x40(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x40(%rbp), %rax
movq %rax, 0x6a178(%rip)     # 0x96b68
movq -0x28(%rbp), %rdi
callq 0x2d380
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x2d4b0
movq -0x28(%rbp), %rdi
callq 0x2d620
movq -0x28(%rbp), %rdi
callq 0x2d6a0
movl $0x0, -0x44(%rbp)
movq -0x10(%rbp), %rdi
callq 0x2db20
movq 0x6a139(%rip), %rax     # 0x96b68
movq (%rax), %rax
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0x2cb60
cmpl $0x1, 0x6a110(%rip)     # 0x96b58
jle 0x2ca5e
movq -0x38(%rbp), %rsi
leaq 0x18f4b(%rip), %rdi     # 0x459a0
xorl %eax, %eax
movl %eax, %edx
callq 0x2b960
movq -0x38(%rbp), %rdi
callq 0x2e450
cmpl $0x0, %eax
je 0x2ca98
cmpl $0x0, 0x6a0e5(%rip)     # 0x96b58
je 0x2ca8c
movq -0x38(%rbp), %rsi
movq -0x10(%rbp), %rax
movq (%rax), %rdx
leaq 0x19e7c(%rip), %rdi     # 0x46903
callq 0x2b960
movl $0x3, -0x4(%rbp)
jmp 0x2cbe1
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x2cacf
movq -0x30(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0x2eaf0
cmpl $0x0, %eax
je 0x2cabf
jmp 0x2cacf
jmp 0x2cac1
movq -0x30(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0x2caa4
cmpq $0x0, -0x30(%rbp)
jne 0x2cb4d
movl $0x1, -0x44(%rbp)
movq -0x38(%rbp), %rax
movq (%rax), %rdi
movq -0x38(%rbp), %rax
movl 0x20(%rax), %esi
movq -0x38(%rbp), %rax
movl 0x1c(%rax), %edx
movq -0x38(%rbp), %rax
movswl 0x18(%rax), %ecx
callq 0x2d310
movq %rax, -0x30(%rbp)
movq -0x38(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x38(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x38(%rbp), %rax
movl 0x24(%rax), %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x24(%rax)
movq -0x30(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x38(%rax)
jmp 0x2cb4f
movq -0x38(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x38(%rbp)
jmp 0x2ca36
cmpl $0x1, 0x69ff1(%rip)     # 0x96b58
jle 0x2cba3
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0x2cba1
movq -0x38(%rbp), %rsi
movq -0x10(%rbp), %rax
movq (%rax), %rdx
leaq 0x19d83(%rip), %rdi     # 0x46911
callq 0x2b960
movq -0x38(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x38(%rbp)
jmp 0x2cb75
jmp 0x2cba3
cmpl $0x0, -0x44(%rbp)
jne 0x2cbd0
movq -0x10(%rbp), %rax
cmpw $0x0, 0x4a(%rax)
je 0x2cbbd
movl $0x2, -0x4(%rbp)
jmp 0x2cbe1
movq -0x10(%rbp), %rax
movw $0x1, 0x4a(%rax)
movl $0x1, -0x4(%rbp)
jmp 0x2cbe1
movq -0x10(%rbp), %rax
movw $0x1, 0x4a(%rax)
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopw (%rax,%rax)