// File: /workspace/github_c_makefile_star2_O1/nimble-code[P]Uno/Src/uno_intervals.c
// Function: merge_bounds
int
merge_bounds(ArBound *a, ArBound *b)	/* rewrite a as (a/\b)  FIX! */
{	/* returns 1 if nothing   changed */
	/* returns 0 if something changed */

	if (debug>1)
	{	printf("merge_bounds\n");
		explain_bound("a:", a, ZT);
		explain_bound("b:", b, ZT);
	}
	uno_assert(!(a->bounds & UNK), "merging unknown a");
	uno_assert(!(b->bounds & UNK), "merging unknown b");
	uno_assert(!(b->bounds & DUP), "merging dup b");

	if (a->bounds & DUP)
	{	if (debug>1) printf("	a was dup, now unknown\n");
		a->bounds |= UNK;	/* fixable dups were resolved before we got here */
		return 0;
	}

	if (first_inside_second(a, b))
	{	if (debug>1) printf("	a inside b\n");
		return 1;
	}
	if (first_inside_second(b, a))
	{	if (debug>1) printf("	b inside a\n");
		copy_bound(a, b);
		return 0;
	}

	and_bounds(a, b);

	if (debug>1)
	{	printf("result of AND:\n");
		explain_bound("a:", a, ZT);
	}

	return 0;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movzwl 0x18(%rdi), %eax
xorl %edi, %edi
testb $0x4, %al
sete %dil
leaq 0x1452a(%rip), %rsi     # 0x30ecb
callq 0x13f8c
movzwl 0x18(%r14), %eax
xorl %edi, %edi
testb $0x4, %al
sete %dil
leaq 0x14523(%rip), %rsi     # 0x30edd
callq 0x13f8c
movzwl 0x18(%r14), %eax
xorl %edi, %edi
testb $0x20, %al
sete %dil
leaq 0x1451c(%rip), %rsi     # 0x30eef
callq 0x13f8c
movzwl 0x18(%rbx), %eax
testb $0x20, %al
jne 0x1ca34
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1c68b
movl %eax, %ecx
movl $0x1, %eax
testl %ecx, %ecx
jne 0x1ca3d
movq %r14, %rdi
movq %rbx, %rsi
callq 0x1c68b
testl %eax, %eax
je 0x1ca45
movq (%r14), %rax
movq %rax, (%rbx)
movq 0x8(%r14), %rax
movq %rax, 0x8(%rbx)
movq 0x10(%r14), %rax
movq %rax, 0x10(%rbx)
movzwl 0x18(%r14), %eax
movw %ax, 0x18(%rbx)
movl 0x20(%r14), %eax
movl %eax, 0x20(%rbx)
movl 0x1c(%r14), %eax
movl %eax, 0x1c(%rbx)
jmp 0x1ca3b
orl $0x4, %eax
movw %ax, 0x18(%rbx)
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
movq %rbx, %rdi
callq 0x1c768
movq %r14, %rdi
callq 0x1c768
movzwl 0x18(%rbx), %eax
testb $0x40, %al
jne 0x1cac8
movzwl 0x18(%r14), %ecx
testb $0x40, %cl
jne 0x1cac8
movl %eax, %edx
andl %ecx, %edx
testb $0x1, %dl
je 0x1ca7c
movl 0x1c(%r14), %esi
cmpl 0x1c(%rbx), %esi
jge 0x1ca7c
movl %esi, 0x1c(%rbx)
testb $0x2, %dl
je 0x1ca8d
movl 0x20(%r14), %edx
cmpl 0x20(%rbx), %edx
jle 0x1ca8d
movl %edx, 0x20(%rbx)
testb $0x1, %al
jne 0x1caa4
andl $0x1, %ecx
je 0x1caa4
orl $0x1, %eax
movw %ax, 0x18(%rbx)
movl 0x1c(%r14), %eax
movl %eax, 0x1c(%rbx)
movzwl 0x18(%rbx), %eax
testb $0x2, %al
jne 0x1cba3
testb $0x2, 0x18(%r14)
je 0x1cba3
orl $0x2, %eax
movw %ax, 0x18(%rbx)
movl 0x20(%r14), %eax
jmp 0x1cb30
testb $0x40, %al
je 0x1cad3
testb $0x40, 0x18(%r14)
jne 0x1cb1b
testb $0x40, %al
jne 0x1cade
testb $0x40, 0x18(%r14)
jne 0x1cb35
testb $0x40, %al
je 0x1cba3
testb $0x40, 0x18(%r14)
jne 0x1cba3
andl $-0x41, %eax
movw %ax, 0x18(%rbx)
movl 0x18(%r14), %ecx
notl %ecx
testb $0x3, %cl
jne 0x1cb57
movl 0x20(%r14), %ecx
cmpl 0x20(%rbx), %ecx
jge 0x1cb92
movl 0x1c(%r14), %edx
cmpl 0x1c(%rbx), %edx
jg 0x1cb77
jmp 0x1cb84
movl 0x1c(%r14), %eax
cmpl 0x1c(%rbx), %eax
jle 0x1cb27
movl %eax, 0x1c(%rbx)
movl 0x20(%r14), %eax
cmpl 0x20(%rbx), %eax
jge 0x1cba3
movl %eax, 0x20(%rbx)
jmp 0x1cba3
movl %eax, %ecx
notl %ecx
testb $0x3, %cl
jne 0x1cb57
movl 0x1c(%rbx), %esi
movl 0x1c(%r14), %ecx
movl 0x20(%r14), %edx
cmpl %edx, 0x20(%rbx)
jge 0x1cb80
cmpl %ecx, %esi
jg 0x1cb77
movl %edx, 0x1c(%rbx)
jmp 0x1cba3
testb $0x1, %al
jne 0x1cb6e
testb $0x2, %al
je 0x1cba3
movl 0x20(%rbx), %ecx
cmpl 0x20(%r14), %ecx
jl 0x1cb77
movl 0x1c(%r14), %eax
jmp 0x1cb30
movl 0x1c(%rbx), %ecx
cmpl 0x1c(%r14), %ecx
jle 0x1cb89
orl $0x4, %eax
movw %ax, 0x18(%rbx)
jmp 0x1cba3
cmpl %ecx, %esi
jle 0x1cb9b
movl %ecx, 0x20(%rbx)
jmp 0x1cba3
movl 0x20(%r14), %eax
movl %eax, 0x1c(%rbx)
jmp 0x1cba3
movl 0x1c(%r14), %eax
cmpl %eax, 0x1c(%rbx)
jg 0x1cb30
movq $0x0, 0x1c(%rbx)
andb $-0x19, 0x18(%rbx)
movq %rbx, %rdi
callq 0x1c768
jmp 0x1ca3b