// File: /workspace/github_c_makefile_star2_O0/nimble-code[P]Uno/Src/uno_intervals.c
// Function: and_bounds
static void
and_bounds(ArBound *a, ArBound *b)	/* replace 'a' with 'a/\b' */
{
	if (debug>1)
	{	printf("start and-bounds:\n");
		explain_bound("a:", a, ZT);
		explain_bound("b:", b, ZT);
	}

	sanitize(a);
	sanitize(b);
	if (!(a->bounds&NEG)
	&&  !(b->bounds&NEG))
	{	if ((a->bounds & UB) && (b->bounds & UB))
		{	if (b->ub < a->ub)
				a->ub = b->ub;
		}
		if ((a->bounds & LB) && (b->bounds & LB))
		{	if (b->lb > a->lb)
				a->lb = b->lb;
		}

		if (!(a->bounds & UB) && (b->bounds & UB))
		{	a->bounds |= UB;
			a->ub = b->ub;
		}

		if (!(a->bounds & LB) && (b->bounds & LB))
		{	a->bounds |= LB;
			a->lb = b->lb;
		}
		goto done;
	}

	if ((a->bounds&NEG)
	&&  (b->bounds&NEG))		/* both known to be intervals */
	{	if (b->ub > a->ub)
			a->ub = b->ub;
		if (b->lb < a->lb)
			a->lb = b->lb;
		goto done;
	}

	if (!(a->bounds&NEG)
	&&   (b->bounds&NEG))		/* b known to be an interval */
	{	if ((a->bounds & UB)
		&&  (a->bounds & LB))
		{	if (a->lb < b->lb)
			{	if (a->ub > b->ub)
					a->bounds |= UNK; /* creates 2 intervals */
				else
					a->ub = b->lb;
				goto done;
			}
			if (a->ub > b->ub)
			{	a->lb = b->ub;
				goto done;
			} else
			{	a->lb = a->ub = 0;	/* not satisfiable */
				goto done;
			}
		} else if (a->bounds & UB)
		{	if (a->ub > b->ub)
				a->bounds |= UNK;	/* creates 2 intervals */
			else
				a->ub = b->lb;
		} else if (a->bounds & LB)
		{	if (a->lb < b->lb)
				a->bounds |= UNK;	/* creates 2 intervals */
			else
				a->lb = b->ub;
		}
		goto done;
	}
	if ( (a->bounds&NEG)		/* a known to be an interval */
	&&  !(b->bounds&NEG))
	{	a->bounds &= ~NEG;

		if ((b->bounds & UB)
		&&  (b->bounds & LB))
		{	if (b->lb < a->lb)
			{	if (b->ub > a->ub)
					a->bounds |= UNK; /* creates 2 intervals */
				else
					a->lb = b->lb;
				goto done;
			}
			if (a->ub > b->ub)
			{	a->lb = b->ub;
				goto done;
			} else
			{	a->lb = a->ub = 0;	/* not satisfiable */
				goto done;
			}
		} else if (a->bounds & UB)
		{	if (a->ub > b->ub)
				a->bounds |= UNK;	/* creates 2 intervals */
			else
				a->ub = b->lb;
		} else if (a->bounds & LB)
		{	if (a->lb < b->lb)
				a->bounds |= UNK;	/* creates 2 intervals */
			else
				a->lb = b->ub;
		}
		goto done;
	}
done:
	a->bounds &= ~FROMASGN;
	a->bounds &= ~FROMEXPR;
	sanitize(a);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpl $0x1, 0x67db9(%rip)     # 0x96b80
jle 0x2edff
leaq 0x17f4c(%rip), %rdi     # 0x46d1c
movb $0x0, %al
callq 0x30f0
movq -0x8(%rbp), %rsi
leaq 0x17ebf(%rip), %rdi     # 0x46ca1
xorl %eax, %eax
movl %eax, %edx
callq 0x2b960
movq -0x10(%rbp), %rsi
leaq 0x17eae(%rip), %rdi     # 0x46ca4
xorl %eax, %eax
movl %eax, %edx
callq 0x2b960
movq -0x8(%rbp), %rdi
callq 0x2e680
movq -0x10(%rbp), %rdi
callq 0x2e680
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x40, %eax
cmpl $0x0, %eax
jne 0x2ef38
movq -0x10(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x40, %eax
cmpl $0x0, %eax
jne 0x2ef38
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x2ee79
movq -0x10(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x2ee79
movq -0x10(%rbp), %rax
movl 0x1c(%rax), %eax
movq -0x8(%rbp), %rcx
cmpl 0x1c(%rcx), %eax
jge 0x2ee77
movq -0x10(%rbp), %rax
movl 0x1c(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x1c(%rax)
jmp 0x2ee79
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x2eeb9
movq -0x10(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x2eeb9
movq -0x10(%rbp), %rax
movl 0x20(%rax), %eax
movq -0x8(%rbp), %rcx
cmpl 0x20(%rcx), %eax
jle 0x2eeb7
movq -0x10(%rbp), %rax
movl 0x20(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x20(%rax)
jmp 0x2eeb9
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
jne 0x2eef6
movq -0x10(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x2eef6
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %ecx
orl $0x1, %ecx
movw %cx, 0x18(%rax)
movq -0x10(%rbp), %rax
movl 0x1c(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x1c(%rax)
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
jne 0x2ef33
movq -0x10(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x2ef33
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %ecx
orl $0x2, %ecx
movw %cx, 0x18(%rax)
movq -0x10(%rbp), %rax
movl 0x20(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x20(%rax)
jmp 0x2f261
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x40, %eax
cmpl $0x0, %eax
je 0x2ef99
movq -0x10(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x40, %eax
cmpl $0x0, %eax
je 0x2ef99
movq -0x10(%rbp), %rax
movl 0x1c(%rax), %eax
movq -0x8(%rbp), %rcx
cmpl 0x1c(%rcx), %eax
jle 0x2ef76
movq -0x10(%rbp), %rax
movl 0x1c(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x1c(%rax)
movq -0x10(%rbp), %rax
movl 0x20(%rax), %eax
movq -0x8(%rbp), %rcx
cmpl 0x20(%rcx), %eax
jge 0x2ef94
movq -0x10(%rbp), %rax
movl 0x20(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x20(%rax)
jmp 0x2f261
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x40, %eax
cmpl $0x0, %eax
jne 0x2f0f6
movq -0x10(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x40, %eax
cmpl $0x0, %eax
je 0x2f0f6
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x2f06b
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x2f06b
movq -0x8(%rbp), %rax
movl 0x20(%rax), %eax
movq -0x10(%rbp), %rcx
cmpl 0x20(%rcx), %eax
jge 0x2f02d
movq -0x8(%rbp), %rax
movl 0x1c(%rax), %eax
movq -0x10(%rbp), %rcx
cmpl 0x1c(%rcx), %eax
jle 0x2f01a
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %ecx
orl $0x4, %ecx
movw %cx, 0x18(%rax)
jmp 0x2f028
movq -0x10(%rbp), %rax
movl 0x20(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x1c(%rax)
jmp 0x2f261
movq -0x8(%rbp), %rax
movl 0x1c(%rax), %eax
movq -0x10(%rbp), %rcx
cmpl 0x1c(%rcx), %eax
jle 0x2f050
movq -0x10(%rbp), %rax
movl 0x1c(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x20(%rax)
jmp 0x2f261
movq -0x8(%rbp), %rax
movl $0x0, 0x1c(%rax)
movq -0x8(%rbp), %rax
movl $0x0, 0x20(%rax)
jmp 0x2f261
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x2f0ac
movq -0x8(%rbp), %rax
movl 0x1c(%rax), %eax
movq -0x10(%rbp), %rcx
cmpl 0x1c(%rcx), %eax
jle 0x2f09c
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %ecx
orl $0x4, %ecx
movw %cx, 0x18(%rax)
jmp 0x2f0aa
movq -0x10(%rbp), %rax
movl 0x20(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x1c(%rax)
jmp 0x2f0ef
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x2f0ed
movq -0x8(%rbp), %rax
movl 0x20(%rax), %eax
movq -0x10(%rbp), %rcx
cmpl 0x20(%rcx), %eax
jge 0x2f0dd
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %ecx
orl $0x4, %ecx
movw %cx, 0x18(%rax)
jmp 0x2f0eb
movq -0x10(%rbp), %rax
movl 0x1c(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x20(%rax)
jmp 0x2f0ed
jmp 0x2f0ef
jmp 0x2f0f1
jmp 0x2f261
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x40, %eax
cmpl $0x0, %eax
je 0x2f25f
movq -0x10(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x40, %eax
cmpl $0x0, %eax
jne 0x2f25f
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %ecx
andl $-0x41, %ecx
movw %cx, 0x18(%rax)
movq -0x10(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x2f1d7
movq -0x10(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x2f1d7
movq -0x10(%rbp), %rax
movl 0x20(%rax), %eax
movq -0x8(%rbp), %rcx
cmpl 0x20(%rcx), %eax
jge 0x2f199
movq -0x10(%rbp), %rax
movl 0x1c(%rax), %eax
movq -0x8(%rbp), %rcx
cmpl 0x1c(%rcx), %eax
jle 0x2f186
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %ecx
orl $0x4, %ecx
movw %cx, 0x18(%rax)
jmp 0x2f194
movq -0x10(%rbp), %rax
movl 0x20(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x20(%rax)
jmp 0x2f261
movq -0x8(%rbp), %rax
movl 0x1c(%rax), %eax
movq -0x10(%rbp), %rcx
cmpl 0x1c(%rcx), %eax
jle 0x2f1bc
movq -0x10(%rbp), %rax
movl 0x1c(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x20(%rax)
jmp 0x2f261
movq -0x8(%rbp), %rax
movl $0x0, 0x1c(%rax)
movq -0x8(%rbp), %rax
movl $0x0, 0x20(%rax)
jmp 0x2f261
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x2f218
movq -0x8(%rbp), %rax
movl 0x1c(%rax), %eax
movq -0x10(%rbp), %rcx
cmpl 0x1c(%rcx), %eax
jle 0x2f208
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %ecx
orl $0x4, %ecx
movw %cx, 0x18(%rax)
jmp 0x2f216
movq -0x10(%rbp), %rax
movl 0x20(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x1c(%rax)
jmp 0x2f25b
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x2f259
movq -0x8(%rbp), %rax
movl 0x20(%rax), %eax
movq -0x10(%rbp), %rcx
cmpl 0x20(%rcx), %eax
jge 0x2f249
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %ecx
orl $0x4, %ecx
movw %cx, 0x18(%rax)
jmp 0x2f257
movq -0x10(%rbp), %rax
movl 0x1c(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x20(%rax)
jmp 0x2f259
jmp 0x2f25b
jmp 0x2f25d
jmp 0x2f261
jmp 0x2f261
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %ecx
andl $-0x9, %ecx
movw %cx, 0x18(%rax)
movq -0x8(%rbp), %rax
movswl 0x18(%rax), %ecx
andl $-0x11, %ecx
movw %cx, 0x18(%rax)
movq -0x8(%rbp), %rdi
callq 0x2e680
addq $0x10, %rsp
popq %rbp
retq
nop