// File: /workspace/github_c_makefile_star2_O0/Oric4ever[P]lcc65/6502/build/../src/enode.c
// Function: subnode
static Tree subnode(int op, Tree l, Tree r) {
	int n;
	Type ty = inttype;

	if (isarith(l->type) && isarith(r->type)) {
		ty = binary(l->type, r->type);
		l = cast(l, ty);
		r = cast(r, ty);
	} else if (isptr(l->type) && isint(r->type)) {
		ty = unqual(l->type);
		if ((n = ty->type->size) == 0)
			error("unknown size of type `%t'\n", ty->type);
		r = cast(r, promote(r->type));
		if (n > 1)
			r = mulnode(MUL, constnode(n, inttype), r);
		return simplify(SUB+P, ty, l, r);
	} else if (compatible(l->type, r->type)) {
		if ((n = deref(l->type)->size) == 0)
			error("unknown size of type `%t'\n", deref(l->type));
		l = simplify(SUB+U, unsignedtype, cast(l, unsignedtype),
			cast(r, unsignedtype));
		return simplify(DIV+I, inttype, cast(l, inttype), constnode(n, inttype));
	} else
		typeerror(op, l, r);
	return simplify(op, ty, l, r);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
movl %edi, -0xc(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
leaq 0x38d2b(%rip), %rax     # 0x441f8
movq (%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0xf, (%rax)
jb 0xb4f3
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0x38(%rbp)
jmp 0xb4ff
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
cmpl $0x6, (%rax)
ja 0xb57c
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0xf, (%rax)
jb 0xb527
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0x40(%rbp)
jmp 0xb533
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
cmpl $0x6, (%rax)
ja 0xb57c
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0xc840
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rdi
movq -0x30(%rbp), %rsi
callq 0xe9b0
movq %rax, -0x18(%rbp)
movq -0x20(%rbp), %rdi
movq -0x30(%rbp), %rsi
callq 0xe9b0
movq %rax, -0x20(%rbp)
jmp 0xb802
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0xf, (%rax)
jb 0xb59b
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0x48(%rbp)
jmp 0xb5a7
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
cmpl $0x7, (%rax)
jne 0xb6f1
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0xf, (%rax)
jb 0xb5d3
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0x50(%rbp)
jmp 0xb5df
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
cmpl $0x3, (%rax)
jb 0xb6f1
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0xf, (%rax)
jb 0xb60b
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0x58(%rbp)
jmp 0xb617
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rax
cmpl $0x6, (%rax)
ja 0xb6f1
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0xf, (%rax)
jb 0xb643
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0x60(%rbp)
jmp 0xb64f
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rax
movl 0x8(%rax), %eax
movl %eax, -0x24(%rbp)
cmpl $0x0, %eax
jne 0xb680
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rsi
leaq 0x246c9(%rip), %rdi     # 0x2fd42
movb $0x0, %al
callq 0xd530
movq -0x20(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xfae0
movq -0x68(%rbp), %rdi
movq %rax, %rsi
callq 0xe9b0
movq %rax, -0x20(%rbp)
cmpl $0x1, -0x24(%rbp)
jle 0xb6d2
movl -0x24(%rbp), %edi
leaq 0x38b43(%rip), %rax     # 0x441f8
movq (%rax), %rsi
callq 0xc7b0
movq %rax, %rsi
movq -0x20(%rbp), %rdx
movl $0x1d0, %edi            # imm = 0x1D0
callq 0xb3c0
movq %rax, -0x20(%rbp)
movq -0x30(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movl $0x147, %edi            # imm = 0x147
callq 0x1c390
movq %rax, -0x8(%rbp)
jmp 0xb81a
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0xd3d0
cmpl $0x0, %eax
je 0xb7ee
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x27ec0
movl 0x8(%rax), %eax
movl %eax, -0x24(%rbp)
cmpl $0x0, %eax
jne 0xb745
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x27ec0
movq %rax, %rsi
leaq 0x24604(%rip), %rdi     # 0x2fd42
movb $0x0, %al
callq 0xd530
leaq 0x38aec(%rip), %rax     # 0x44238
movq (%rax), %rax
movq %rax, -0x88(%rbp)
movq -0x18(%rbp), %rdi
leaq 0x38ad7(%rip), %rax     # 0x44238
movq (%rax), %rsi
callq 0xe9b0
movq %rax, -0x80(%rbp)
movq -0x20(%rbp), %rdi
leaq 0x38ac0(%rip), %rax     # 0x44238
movq (%rax), %rsi
callq 0xe9b0
movq -0x88(%rbp), %rsi
movq -0x80(%rbp), %rdx
movq %rax, %rcx
movl $0x146, %edi            # imm = 0x146
callq 0x1c390
movq %rax, -0x18(%rbp)
leaq 0x38a55(%rip), %rax     # 0x441f8
movq (%rax), %rax
movq %rax, -0x78(%rbp)
movq -0x18(%rbp), %rdi
leaq 0x38a43(%rip), %rax     # 0x441f8
movq (%rax), %rsi
callq 0xe9b0
movq %rax, -0x70(%rbp)
movl -0x24(%rbp), %edi
leaq 0x38a2d(%rip), %rax     # 0x441f8
movq (%rax), %rsi
callq 0xc7b0
movq -0x78(%rbp), %rsi
movq -0x70(%rbp), %rdx
movq %rax, %rcx
movl $0x1c5, %edi            # imm = 0x1C5
callq 0x1c390
movq %rax, -0x8(%rbp)
jmp 0xb81a
movl -0xc(%rbp), %edi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0xc6a0
jmp 0xb800
jmp 0xb802
movl -0xc(%rbp), %edi
movq -0x30(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
callq 0x1c390
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x90, %rsp
popq %rbp
retq
nopw (%rax,%rax)