// File: /workspace/github_c_makefile_star2_O0/michaelforney[P]cproc/type.c
// Function: typecommonreal
struct type *
typecommonreal(struct type *t1, unsigned w1, struct type *t2, unsigned w2)
{
	struct type *tmp;

	assert(t1->prop & PROPREAL && t2->prop & PROPREAL);
	if (t1 == &typeldouble || t2 == &typeldouble)
		return &typeldouble;
	if (t1 == &typedouble || t2 == &typedouble)
		return &typedouble;
	if (t1 == &typefloat || t2 == &typefloat)
		return &typefloat;
	t1 = typepromote(t1, w1);
	t2 = typepromote(t2, w2);
	if (t1 == t2)
		return t1;
	if (t1->u.basic.issigned == t2->u.basic.issigned)
		return typerank(t1) > typerank(t2) ? t1 : t2;
	if (t1->u.basic.issigned) {
		tmp = t1;
		t1 = t2;
		t2 = tmp;
	}
	if (typerank(t1) >= typerank(t2))
		return t1;
	if (t1->size < t2->size)
		return t2;
	if (t2 == &typelong)
		return &typeulong;
	if (t2 == &typellong)
		return &typeullong;
	fatal("internal error; could not find common real type");
	return NULL;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movq %rdx, -0x20(%rbp)
movl %ecx, -0x24(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0x11ce6
movq -0x20(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0x11ce6
jmp 0x11d05
leaq 0x9e27(%rip), %rdi      # 0x1bb14
leaq 0x9e4b(%rip), %rsi      # 0x1bb3f
movl $0xbe, %edx
leaq 0x9e46(%rip), %rcx      # 0x1bb46
callq 0x30f0
leaq 0x10254(%rip), %rax     # 0x21f60
cmpq %rax, -0x10(%rbp)
je 0x11d1f
leaq 0x10247(%rip), %rax     # 0x21f60
cmpq %rax, -0x20(%rbp)
jne 0x11d2f
leaq 0x1023a(%rip), %rax     # 0x21f60
movq %rax, -0x8(%rbp)
jmp 0x11ec4
leaq 0x101d2(%rip), %rax     # 0x21f08
cmpq %rax, -0x10(%rbp)
je 0x11d49
leaq 0x101c5(%rip), %rax     # 0x21f08
cmpq %rax, -0x20(%rbp)
jne 0x11d59
leaq 0x101b8(%rip), %rax     # 0x21f08
movq %rax, -0x8(%rbp)
jmp 0x11ec4
leaq 0x10150(%rip), %rax     # 0x21eb0
cmpq %rax, -0x10(%rbp)
je 0x11d73
leaq 0x10143(%rip), %rax     # 0x21eb0
cmpq %rax, -0x20(%rbp)
jne 0x11d83
leaq 0x10136(%rip), %rax     # 0x21eb0
movq %rax, -0x8(%rbp)
jmp 0x11ec4
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %esi
callq 0x11b00
movq %rax, -0x10(%rbp)
movq -0x20(%rbp), %rdi
movl -0x24(%rbp), %esi
callq 0x11b00
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
cmpq -0x20(%rbp), %rax
jne 0x11dba
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x11ec4
movq -0x10(%rbp), %rax
movb 0x40(%rax), %al
andb $0x1, %al
movzbl %al, %eax
movq -0x20(%rbp), %rcx
movb 0x40(%rcx), %cl
andb $0x1, %cl
movzbl %cl, %ecx
cmpl %ecx, %eax
jne 0x11e14
movq -0x10(%rbp), %rdi
callq 0x11be0
movl %eax, -0x34(%rbp)
movq -0x20(%rbp), %rdi
callq 0x11be0
movl %eax, %ecx
movl -0x34(%rbp), %eax
cmpl %ecx, %eax
jle 0x11dff
movq -0x10(%rbp), %rax
movq %rax, -0x40(%rbp)
jmp 0x11e07
movq -0x20(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x11ec4
movq -0x10(%rbp), %rax
testb $0x1, 0x40(%rax)
je 0x11e36
movq -0x10(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x10(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rdi
callq 0x11be0
movl %eax, -0x44(%rbp)
movq -0x20(%rbp), %rdi
callq 0x11be0
movl %eax, %ecx
movl -0x44(%rbp), %eax
cmpl %ecx, %eax
jl 0x11e5e
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x11ec4
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x20(%rbp), %rcx
cmpq 0x10(%rcx), %rax
jae 0x11e7a
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x11ec4
leaq 0xfecf(%rip), %rax      # 0x21d50
cmpq %rax, -0x20(%rbp)
jne 0x11e94
leaq 0xff1a(%rip), %rax      # 0x21da8
movq %rax, -0x8(%rbp)
jmp 0x11ec4
leaq 0xff65(%rip), %rax      # 0x21e00
cmpq %rax, -0x20(%rbp)
jne 0x11eae
leaq 0xffb0(%rip), %rax      # 0x21e58
movq %rax, -0x8(%rbp)
jmp 0x11ec4
leaq 0x9ce7(%rip), %rdi      # 0x1bb9c
movb $0x0, %al
callq 0x12650
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x50, %rsp
popq %rbp
retq
nop