// File: /workspace/github_c_makefile_star2_O0/Oric4ever[P]lcc65/6502/build/../src/expr.c
// Function: idnode
Tree idnode(p) Symbol p; {
	Opcode op;
	Tree e;
	Type ty = p->type ? unqual(p->type) : voidtype;

	p->ref += refinc;
	p->initialized = 1;	/* in case p->ref overflows */
	if (p->scope == PARAM) {
#ifdef NOARGB
		if (isstruct(p->type)) {
			e = tree(ADDRF+P, ptr(ptr(p->type)), 0, 0);
			e->u.sym = p;
			e = rvalue(e);
		} else
#endif
		{	e = tree(ADDRF+P, ptr(p->type), 0, 0);
			e->u.sym = p;
		}
		return rvalue(e);
	}
	if (p->scope == GLOBAL || p->sclass == STATIC || p->sclass == EXTERN) {
		op = ADDRG+P;
		if (isfunc(ty))
			p->addressed = 1;
	} else
		op = ADDRL+P;
	if (isarray(ty) || isfunc(ty)) {
		e = tree(op, p->type ? p->type : voidtype, 0, 0);
		e->u.sym = p;
		return e;
	} else {
		e = tree(op, ptr(p->type), 0, 0);
		e->u.sym = p;
		return rvalue(e);
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
cmpq $0x0, 0x20(%rax)
je 0xde3c
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
cmpl $0xf, (%rax)
jb 0xde26
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0xde32
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x38(%rbp)
jmp 0xde4a
leaq 0x363fd(%rip), %rax     # 0x44240
movq (%rax), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x28(%rbp)
leaq 0x2c15b(%rip), %rax     # 0x39fb4
movl (%rax), %ecx
movq -0x10(%rbp), %rax
addl 0x1c(%rax), %ecx
movl %ecx, 0x1c(%rax)
movq -0x10(%rbp), %rax
movb 0x1b(%rax), %cl
andb $-0x21, %cl
orb $0x20, %cl
movb %cl, 0x1b(%rax)
movq -0x10(%rbp), %rax
movzwl 0x18(%rax), %eax
cmpl $0x4, %eax
jne 0xdec5
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x27120
movq %rax, %rsi
movl $0x117, %edi            # imm = 0x117
xorl %eax, %eax
movl %eax, %ecx
movq %rcx, %rdx
callq 0x256f0
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x20(%rbp), %rdi
callq 0xf780
movq %rax, -0x8(%rbp)
jmp 0xe020
movq -0x10(%rbp), %rax
movzwl 0x18(%rax), %eax
cmpl $0x3, %eax
je 0xdeec
movq -0x10(%rbp), %rax
movzbl 0x1a(%rax), %eax
cmpl $0x51, %eax
je 0xdeec
movq -0x10(%rbp), %rax
movzbl 0x1a(%rax), %eax
cmpl $0x4a, %eax
jne 0xdf2d
movl $0x107, -0x14(%rbp)     # imm = 0x107
movq -0x28(%rbp), %rax
cmpl $0xf, (%rax)
jb 0xdf0a
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x40(%rbp)
jmp 0xdf12
movq -0x28(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
cmpl $0xb, (%rax)
jne 0xdf2b
movq -0x10(%rbp), %rax
movb 0x1b(%rax), %cl
andb $-0x11, %cl
orb $0x10, %cl
movb %cl, 0x1b(%rax)
jmp 0xdf34
movl $0x127, -0x14(%rbp)     # imm = 0x127
movq -0x28(%rbp), %rax
cmpl $0xf, (%rax)
jb 0xdf4b
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x48(%rbp)
jmp 0xdf53
movq -0x28(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
cmpl $0xc, (%rax)
je 0xdf84
movq -0x28(%rbp), %rax
cmpl $0xf, (%rax)
jb 0xdf73
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x50(%rbp)
jmp 0xdf7b
movq -0x28(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
cmpl $0xb, (%rax)
jne 0xdfde
movl -0x14(%rbp), %eax
movl %eax, -0x54(%rbp)
movq -0x10(%rbp), %rax
cmpq $0x0, 0x20(%rax)
je 0xdfa3
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x60(%rbp)
jmp 0xdfb1
leaq 0x36296(%rip), %rax     # 0x44240
movq (%rax), %rax
movq %rax, -0x60(%rbp)
movl -0x54(%rbp), %edi
movq -0x60(%rbp), %rsi
xorl %eax, %eax
movl %eax, %ecx
movq %rcx, %rdx
callq 0x256f0
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xe020
movl -0x14(%rbp), %eax
movl %eax, -0x64(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x27120
movl -0x64(%rbp), %edi
movq %rax, %rsi
xorl %eax, %eax
movl %eax, %ecx
movq %rcx, %rdx
callq 0x256f0
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x20(%rbp), %rdi
callq 0xf780
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x70, %rsp
popq %rbp
retq
nopw (%rax,%rax)