// File: /workspace/github_c_makefile_star2_O3/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 0x14e6d(%rip), %rsi     # 0x30ea3
callq 0x1341d
movzwl 0x18(%r14), %eax
xorl %edi, %edi
testb $0x4, %al
sete %dil
leaq 0x14e66(%rip), %rsi     # 0x30eb5
callq 0x1341d
movzwl 0x18(%r14), %eax
xorl %edi, %edi
testb $0x20, %al
sete %dil
leaq 0x14e5f(%rip), %rsi     # 0x30ec7
callq 0x1341d
movzwl 0x18(%rbx), %eax
testb $0x20, %al
jne 0x1c0bc
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1bd43
movl %eax, %ecx
movl $0x1, %eax
testl %ecx, %ecx
jne 0x1c0c5
movq %r14, %rdi
movq %rbx, %rsi
callq 0x1bd43
testl %eax, %eax
je 0x1c0cd
movups (%r14), %xmm0
movups %xmm0, (%rbx)
movq 0x10(%r14), %rax
movq %rax, 0x10(%rbx)
movzwl 0x18(%r14), %eax
movw %ax, 0x18(%rbx)
movq 0x1c(%r14), %rax
movq %rax, 0x1c(%rbx)
jmp 0x1c0c3
orl $0x4, %eax
movw %ax, 0x18(%rbx)
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
movq %rbx, %rdi
callq 0x1bdf2
movq %r14, %rdi
callq 0x1bdf2
movzwl 0x18(%rbx), %eax
movzwl %ax, %ecx
testb $0x40, %cl
jne 0x1c14e
movzwl 0x18(%r14), %edx
testb $0x40, %dl
jne 0x1c14e
andl %edx, %ecx
testb $0x1, %cl
je 0x1c106
movl 0x1c(%r14), %ecx
cmpl 0x1c(%rbx), %ecx
jge 0x1c106
movl %ecx, 0x1c(%rbx)
movl %eax, %ecx
andl %edx, %ecx
testb $0x2, %cl
je 0x1c11b
movl 0x20(%r14), %ecx
cmpl 0x20(%rbx), %ecx
jle 0x1c11b
movl %ecx, 0x20(%rbx)
testb $0x1, %al
jne 0x1c132
andl $0x1, %edx
je 0x1c132
orl $0x1, %eax
movw %ax, 0x18(%rbx)
movl 0x1c(%r14), %ecx
movl %ecx, 0x1c(%rbx)
testb $0x2, %al
jne 0x1c283
testb $0x2, 0x18(%r14)
je 0x1c283
orl $0x2, %eax
movl 0x20(%r14), %ecx
jmp 0x1c1c8
testb $0x40, %al
je 0x1c159
testb $0x40, 0x18(%r14)
jne 0x1c1af
testb $0x40, %cl
jne 0x1c165
testb $0x40, 0x18(%r14)
jne 0x1c1d0
testb $0x40, %al
je 0x1c283
testb $0x40, 0x18(%r14)
jne 0x1c283
andl $-0x41, %ecx
movw %cx, 0x18(%rbx)
movl 0x18(%r14), %eax
notl %eax
testb $0x3, %al
jne 0x1c212
movl 0x20(%r14), %eax
cmpl 0x20(%rbx), %eax
jge 0x1c247
movl 0x1c(%r14), %edx
cmpl 0x1c(%rbx), %edx
jle 0x1c250
orl $0x4, %ecx
jmp 0x1c281
movl 0x1c(%r14), %ecx
cmpl 0x1c(%rbx), %ecx
jle 0x1c1bb
movl %ecx, 0x1c(%rbx)
movl 0x20(%r14), %ecx
cmpl 0x20(%rbx), %ecx
jge 0x1c283
movl %ecx, 0x20(%rbx)
jmp 0x1c283
movl %ecx, %edx
notl %edx
testb $0x3, %dl
jne 0x1c1f5
movl 0x1c(%rbx), %esi
movl 0x1c(%r14), %ecx
movl 0x20(%r14), %edx
cmpl %edx, 0x20(%rbx)
jge 0x1c22b
cmpl %ecx, %esi
jg 0x1c242
movl %edx, 0x1c(%rbx)
jmp 0x1c283
testb $0x1, %cl
jne 0x1c239
testb $0x2, %cl
je 0x1c283
movl 0x20(%rbx), %ecx
cmpl 0x20(%r14), %ecx
jl 0x1c242
movl 0x1c(%r14), %ecx
jmp 0x1c1c8
testb $0x1, %cl
jne 0x1c255
testb $0x2, %cl
je 0x1c281
movl 0x20(%rbx), %eax
cmpl 0x20(%r14), %eax
jl 0x1c25e
movl 0x1c(%r14), %eax
jmp 0x1c250
cmpl %ecx, %esi
jg 0x1c1c8
movq $0x0, 0x1c(%rbx)
jmp 0x1c283
movl 0x1c(%rbx), %ecx
cmpl 0x1c(%r14), %ecx
jle 0x1c267
orl $0x4, %eax
jmp 0x1c283
movl 0x1c(%r14), %eax
cmpl %eax, 0x1c(%rbx)
jle 0x1c270
movl %eax, 0x20(%rbx)
jmp 0x1c281
movl 0x1c(%rbx), %eax
cmpl 0x1c(%r14), %eax
jle 0x1c27a
orl $0x4, %ecx
movw %cx, 0x18(%rbx)
jmp 0x1c281
movl 0x20(%r14), %ecx
movl %ecx, 0x1c(%rbx)
jmp 0x1c283
movq $0x0, 0x1c(%rbx)
jmp 0x1c281
movl 0x20(%r14), %eax
movl %eax, 0x1c(%rbx)
movl %ecx, %eax
andl $0xffe7, %eax           # imm = 0xFFE7
movw %ax, 0x18(%rbx)
movq %rbx, %rdi
callq 0x1bdf2
jmp 0x1c0c3
nopl (%rax)