// File: /workspace/github_c_makefile_star2_O0/georgeweigt[P]eigenmath/eigenmath.c
// Function: cmp
int
cmp(struct atom *p1, struct atom *p2)
{
	int t;

	if (p1 == p2)
		return 0;

	if (p1 == symbol(NIL))
		return -1;

	if (p2 == symbol(NIL))
		return 1;

	if (isnum(p1) && isnum(p2))
		return cmp_numbers(p1, p2);

	if (isnum(p1))
		return -1;

	if (isnum(p2))
		return 1;

	if (isstr(p1) && isstr(p2))
		return strcmp(p1->u.str, p2->u.str);

	if (isstr(p1))
		return -1;

	if (isstr(p2))
		return 1;

	if (issymbol(p1) && issymbol(p2))
		return strcmp(printname(p1), printname(p2));

	if (issymbol(p1))
		return -1;

	if (issymbol(p2))
		return 1;

	if (istensor(p1) && istensor(p2))
		return cmp_tensors(p1, p2);

	if (istensor(p1))
		return -1;

	if (istensor(p2))
		return 1;

	while (iscons(p1) && iscons(p2)) {
		t = cmp(car(p1), car(p2));
		if (t)
			return t;
		p1 = cdr(p1);
		p2 = cdr(p2);
	}

	if (iscons(p2))
		return -1; // lengthf(p1) < lengthf(p2)

	if (iscons(p1))
		return 1; // lengthf(p1) > lengthf(p2)

	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
cmpq -0x18(%rbp), %rax
jne 0x93d6
movl $0x0, -0x4(%rbp)
jmp 0x9747
movq -0x10(%rbp), %rax
cmpq 0x5561f(%rip), %rax     # 0x5ea00
jne 0x93ef
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x9747
movq -0x18(%rbp), %rax
cmpq 0x55606(%rip), %rax     # 0x5ea00
jne 0x9408
movl $0x1, -0x4(%rbp)
jmp 0x9747
movq -0x10(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x4, %eax
je 0x9422
movq -0x10(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x5, %eax
jne 0x9451
movq -0x18(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x4, %eax
je 0x943c
movq -0x18(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x5, %eax
jne 0x9451
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x97d0
movl %eax, -0x4(%rbp)
jmp 0x9747
movq -0x10(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x4, %eax
je 0x946b
movq -0x10(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x5, %eax
jne 0x9477
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x9747
movq -0x18(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x4, %eax
je 0x9491
movq -0x18(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x5, %eax
jne 0x949d
movl $0x1, -0x4(%rbp)
jmp 0x9747
movq -0x10(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x6, %eax
jne 0x94d2
movq -0x18(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x6, %eax
jne 0x94d2
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
callq 0x71e0
movl %eax, -0x4(%rbp)
jmp 0x9747
movq -0x10(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x6, %eax
jne 0x94eb
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x9747
movq -0x18(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x6, %eax
jne 0x9504
movl $0x1, -0x4(%rbp)
jmp 0x9747
movq -0x10(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x2, %eax
je 0x951e
movq -0x10(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x3, %eax
jne 0x9562
movq -0x18(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x2, %eax
je 0x9538
movq -0x18(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x3, %eax
jne 0x9562
movq -0x10(%rbp), %rdi
callq 0x9870
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rdi
callq 0x9870
movq -0x28(%rbp), %rdi
movq %rax, %rsi
callq 0x71e0
movl %eax, -0x4(%rbp)
jmp 0x9747
movq -0x10(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x2, %eax
je 0x957c
movq -0x10(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x3, %eax
jne 0x9588
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x9747
movq -0x18(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x2, %eax
je 0x95a2
movq -0x18(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x3, %eax
jne 0x95ae
movl $0x1, -0x4(%rbp)
jmp 0x9747
movq -0x10(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x7, %eax
jne 0x95dd
movq -0x18(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x7, %eax
jne 0x95dd
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x98c0
movl %eax, -0x4(%rbp)
jmp 0x9747
movq -0x10(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x7, %eax
jne 0x95f6
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x9747
movq -0x18(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x7, %eax
jne 0x960f
movl $0x1, -0x4(%rbp)
jmp 0x9747
jmp 0x9611
movq -0x10(%rbp), %rax
movzbl 0x10(%rax), %ecx
xorl %eax, %eax
cmpl $0x1, %ecx
movb %al, -0x29(%rbp)
jne 0x9634
movq -0x18(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x1, %eax
sete %al
movb %al, -0x29(%rbp)
movb -0x29(%rbp), %al
testb $0x1, %al
jne 0x9640
jmp 0x9714
movq -0x10(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x1, %eax
jne 0x965a
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x38(%rbp)
jmp 0x9665
movq 0x5539f(%rip), %rax     # 0x5ea00
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x1, %eax
jne 0x9687
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x48(%rbp)
jmp 0x9692
movq 0x55372(%rip), %rax     # 0x5ea00
movq %rax, -0x48(%rbp)
movq -0x40(%rbp), %rdi
movq -0x48(%rbp), %rsi
callq 0x93b0
movl %eax, -0x1c(%rbp)
cmpl $0x0, -0x1c(%rbp)
je 0x96b3
movl -0x1c(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x9747
movq -0x10(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x1, %eax
jne 0x96ce
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x50(%rbp)
jmp 0x96d9
movq 0x5532b(%rip), %rax     # 0x5ea00
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
movq %rax, -0x10(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x1, %eax
jne 0x96fc
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x58(%rbp)
jmp 0x9707
movq 0x552fd(%rip), %rax     # 0x5ea00
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rax
movq %rax, -0x18(%rbp)
jmp 0x9611
movq -0x18(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x1, %eax
jne 0x972a
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x9747
movq -0x10(%rbp), %rax
movzbl 0x10(%rax), %eax
cmpl $0x1, %eax
jne 0x9740
movl $0x1, -0x4(%rbp)
jmp 0x9747
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x60, %rsp
popq %rbp
retq