// File: /workspace/github_c_makefile_star2_O2/been-jamming[P]MinimalCC/expression.c
// Function: compile_variable
void compile_variable(value *output, char **c, unsigned char dereference, unsigned char force_stack, FILE *output_file){
	char *start;
	char varname[32] = {0};
	unsigned int varname_length = 0;
	variable *var;
	int i;

	skip_whitespace(c);
	start = *c;
	while(alphanumeric(**c) && varname_length < 31){
		++*c;
		varname_length++;
	}
	memcpy(varname, start, varname_length);
	varname[31] = '\0';

	for(i = current_scope; i >= 0; i--){
		var = read_dictionary(*local_variables[i], varname, 0);
		if(var){
			break;
		}
	}

	if(!var){
		var = read_dictionary(global_variables, varname, 0);
		if(!var){
			snprintf(error_message, sizeof(error_message), "Unrecognized variable '%s'", varname);
			do_error(1);
		}
		compile_global_variable(output, var, dereference, force_stack, output_file);
	} else {
		compile_local_variable(output, var, dereference, force_stack, output_file);
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xc8, %rsp
movq %r8, %r14
movl %ecx, 0x48(%rsp)
movl %edx, %ebp
movq %rsi, %r15
movq %rdi, %rbx
xorps %xmm0, %xmm0
movaps %xmm0, 0xb0(%rsp)
movaps %xmm0, 0xa0(%rsp)
movq %rsi, %rdi
callq 0x7549
movq (%r15), %r12
xorl %r13d, %r13d
movq %r12, %rax
movsbl (%rax), %edi
callq 0x71d9
testb %al, %al
je 0x2bbc
cmpl $0x1e, %r13d
ja 0x2bbc
movq (%r15), %rax
incq %rax
movq %rax, (%r15)
incq %r13
jmp 0x2b9c
movl %ebp, 0x54(%rsp)
movq %r14, 0x58(%rsp)
movq %rbx, %r14
leaq 0xa0(%rsp), %r15
movq %r15, %rdi
movq %r12, %rsi
movq %r13, %rdx
callq 0x1130
movb $0x0, 0x1f(%r15)
movl 0x96df(%rip), %ebp      # 0xc2c8
leaq 0x96e0(%rip), %rbx      # 0xc2d0
pushq $0x9
popq %r13
testl %ebp, %ebp
js 0x2d0d
movl %ebp, %eax
movq (%rbx,%rax,8), %rsi
movq %r13, %rcx
movq %rsp, %rdi
rep  movsq (%rsi), %es:(%rdi)
movq %r15, %rdi
xorl %esi, %esi
callq 0x6ff5
decl %ebp
testq %rax, %rax
je 0x2bf4
movq %rax, %r12
movq %rax, %rbp
addq $0x8, %rbp
movups 0x8(%rax), %xmm0
movups 0x18(%rax), %xmm1
movups 0x28(%rax), %xmm2
movups 0x38(%rax), %xmm3
movaps %xmm3, 0x90(%rsp)
movaps %xmm2, 0x80(%rsp)
movaps %xmm1, 0x70(%rsp)
movaps %xmm0, 0x60(%rsp)
movzbl 0x48(%rsp), %edi
callq 0x12e0
movq %rax, %r13
movq %r14, %rbx
leaq 0x10(%r14), %rax
movq %rax, 0x48(%rsp)
movaps 0x60(%rsp), %xmm0
movaps 0x70(%rsp), %xmm1
movaps 0x80(%rsp), %xmm2
movaps 0x90(%rsp), %xmm3
movups %xmm0, 0x10(%r14)
movups %xmm1, 0x20(%r14)
movups %xmm2, 0x30(%r14)
movups %xmm3, 0x40(%r14)
movq %r13, (%r14)
movq %r13, %r15
shrq $0x20, %r15
movl %edx, %r14d
movl %edx, 0x8(%rbx)
movq %rbp, %rdi
callq 0x7603
movl 0x54(%rsp), %ebp
testb %bpl, %bpl
je 0x2e62
cmpl $0x7, %eax
movq 0x58(%rsp), %rdi
jne 0x2ead
cmpl $0x1, %r13d
je 0x2fb2
testl %r13d, %r13d
jne 0x2ffb
leaq 0x9568(%rip), %rax      # 0xc24c
movl (%rax), %ecx
leaq 0x955b(%rip), %rax      # 0xc248
addl (%rax), %ecx
subl 0x48(%r12), %ecx
addl $-0x4, %ecx
leaq 0x5e03(%rip), %rsi      # 0x8b01
movl %r15d, %edx
xorl %eax, %eax
callq 0x14e8
jmp 0x2ffb
leaq 0x956c(%rip), %rsi      # 0xc280
pushq $0x9
popq %rcx
movq %rsp, %rdi
rep  movsq (%rsi), %es:(%rdi)
leaq 0xa0(%rsp), %rdi
xorl %esi, %esi
callq 0x6ff5
movq %rax, %r12
testq %rax, %rax
jne 0x2d5e
leaq 0x97a5(%rip), %rdi      # 0xc4e0
leaq 0x5884(%rip), %rdx      # 0x85c6
leaq 0xa0(%rsp), %rcx
movl $0x100, %esi            # imm = 0x100
xorl %eax, %eax
callq 0x10c0
pushq $0x1
popq %rdi
callq 0x56c5
movups 0x8(%r12), %xmm0
movups 0x18(%r12), %xmm1
movups 0x28(%r12), %xmm2
movups 0x38(%r12), %xmm3
movaps %xmm3, 0x90(%rsp)
movaps %xmm2, 0x80(%rsp)
movaps %xmm1, 0x70(%rsp)
movaps %xmm0, 0x60(%rsp)
movzbl 0x48(%rsp), %edi
callq 0x12e0
movq %rax, %r15
movl %edx, %ebp
movq %rax, %r13
shrq $0x20, %r13
movq (%r12), %rcx
testl %r15d, %r15d
movq %r14, %rbx
je 0x2dcd
leaq 0x5d3c(%rip), %rsi      # 0x8af5
movq 0x58(%rsp), %r14
movq %r14, %rdi
movq %rcx, %rdx
xorl %eax, %eax
callq 0x14e8
jmp 0x2de6
leaq 0x5d14(%rip), %rsi      # 0x8ae8
movq 0x58(%rsp), %r14
movq %r14, %rdi
movl %r13d, %edx
xorl %eax, %eax
callq 0x14e8
movq %r15, (%rbx)
movl %ebp, 0x8(%rbx)
cmpb $0x0, 0x54(%rsp)
sete 0x50(%rbx)
je 0x2e03
cmpb $0x0, 0x48(%r12)
je 0x2f07
leaq 0x60(%rsp), %rdi
pushq $0x4
popq %rsi
callq 0x7204
cmpl $0x1, %r15d
jne 0x2e33
movq %r15, %rdi
movl %ebp, %esi
callq 0x1393
leaq 0x578e(%rip), %rsi      # 0x85b5
movq %r14, %rdi
movl %eax, %edx
xorl %eax, %eax
callq 0x14e8
movaps 0x60(%rsp), %xmm0
movaps 0x70(%rsp), %xmm1
movaps 0x80(%rsp), %xmm2
movaps 0x90(%rsp), %xmm3
movups %xmm3, 0x40(%rbx)
movups %xmm2, 0x30(%rbx)
movups %xmm1, 0x20(%rbx)
movups %xmm0, 0x10(%rbx)
jmp 0x301d
cmpl $0x7, %eax
movq 0x58(%rsp), %rdi
cmpl $0x1, %r13d
je 0x2f33
testl %r13d, %r13d
jne 0x2f7c
leaq 0x93c8(%rip), %rax      # 0xc24c
movl (%rax), %ecx
leaq 0x93bb(%rip), %rax      # 0xc248
addl (%rax), %ecx
subl 0x48(%r12), %ecx
addl $-0x4, %ecx
leaq 0x5c63(%rip), %rsi      # 0x8b01
movl %r15d, %edx
xorl %eax, %eax
callq 0x14e8
jmp 0x2f7c
cmpl $0x1, %r13d
je 0x302f
testl %r13d, %r13d
jne 0x3016
movq %rdi, %r14
leaq 0x60(%rsp), %rdi
xorl %esi, %esi
callq 0x1756
cmpl $0x4, %eax
je 0x30aa
cmpl $0x1, %eax
jne 0x3016
leaq 0x9364(%rip), %rax      # 0xc24c
movl (%rax), %ecx
leaq 0x9357(%rip), %rax      # 0xc248
addl (%rax), %ecx
subl 0x48(%r12), %ecx
addl $-0x4, %ecx
leaq 0x5c26(%rip), %rsi      # 0x8b28
jmp 0x30cb
leaq 0x60(%rsp), %rdi
callq 0x7603
cmpl $0x7, %eax
jne 0x2f89
leaq 0x60(%rsp), %r12
movq %r12, %rdi
callq 0x761b
decl 0x38(%r12)
pushq $0x4
popq %rsi
movq %r12, %rdi
jmp 0x2e0b
leaq 0x9312(%rip), %rax      # 0xc24c
movl (%rax), %edx
leaq 0x9305(%rip), %rax      # 0xc248
addl (%rax), %edx
subl 0x48(%r12), %edx
addl $-0x4, %edx
leaq 0x5bc1(%rip), %rsi      # 0x8b15
movq %rdi, %r15
xorl %eax, %eax
callq 0x14e8
movq %r13, %rdi
movl %r14d, %esi
callq 0x1393
leaq 0x5645(%rip), %rsi      # 0x85b5
movq %r15, %rdi
movl %eax, %edx
xorl %eax, %eax
callq 0x14e8
pushq $0x4
popq %rsi
movq 0x48(%rsp), %rdi
jmp 0x3011
testl %r15d, %r15d
je 0x308e
cmpl $0x1, %r15d
jne 0x2e33
leaq 0x57cb(%rip), %rsi      # 0x876e
movq %r14, %rdi
xorl %eax, %eax
callq 0x14e8
jmp 0x2e16
leaq 0x9293(%rip), %rax      # 0xc24c
movl (%rax), %edx
leaq 0x9286(%rip), %rax      # 0xc248
addl (%rax), %edx
subl 0x48(%r12), %edx
addl $-0x4, %edx
leaq 0x5b42(%rip), %rsi      # 0x8b15
movq %rdi, %r15
xorl %eax, %eax
callq 0x14e8
movq %r13, %rdi
movl %r14d, %esi
callq 0x1393
leaq 0x55c6(%rip), %rsi      # 0x85b5
movq %r15, %rdi
movl %eax, %edx
xorl %eax, %eax
callq 0x14e8
movq 0x48(%rsp), %r14
movq %r14, %rdi
callq 0x761b
decl 0x48(%rbx)
pushq $0x4
popq %rsi
movq %r14, %rdi
callq 0x7204
testb %bpl, %bpl
sete 0x50(%rbx)
addq $0xc8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rdi, %r15
leaq 0x60(%rsp), %rdi
xorl %esi, %esi
callq 0x1756
cmpl $0x4, %eax
je 0x30dd
cmpl $0x1, %eax
jne 0x3016
leaq 0x91f9(%rip), %rax      # 0xc24c
movl (%rax), %edx
leaq 0x91ec(%rip), %rax      # 0xc248
addl (%rax), %edx
subl 0x48(%r12), %edx
addl $-0x4, %edx
leaq 0x560e(%rip), %rsi      # 0x867b
movq %r15, %rdi
xorl %eax, %eax
callq 0x14e8
movq %r13, %rdi
movl %r14d, %esi
callq 0x1393
leaq 0x56d4(%rip), %rsi      # 0x875d
jmp 0x311a
leaq 0x56a6(%rip), %rsi      # 0x873b
movq %r14, %rdi
movl %r13d, %edx
movl %r13d, %ecx
xorl %eax, %eax
callq 0x14e8
jmp 0x2e33
leaq 0x919b(%rip), %rax      # 0xc24c
movl (%rax), %ecx
leaq 0x918e(%rip), %rax      # 0xc248
addl (%rax), %ecx
subl 0x48(%r12), %ecx
addl $-0x4, %ecx
leaq 0x4f4b(%rip), %rsi      # 0x8016
movq %r14, %rdi
movl %r15d, %edx
xorl %eax, %eax
callq 0x14e8
jmp 0x3016
leaq 0x9168(%rip), %rax      # 0xc24c
movl (%rax), %edx
leaq 0x915b(%rip), %rax      # 0xc248
addl (%rax), %edx
subl 0x48(%r12), %edx
addl $-0x4, %edx
leaq 0x5548(%rip), %rsi      # 0x8646
movq %r15, %rdi
xorl %eax, %eax
callq 0x14e8
movq %r13, %rdi
movl %r14d, %esi
callq 0x1393
leaq 0x549b(%rip), %rsi      # 0x85b5
movq %r15, %rdi
movl %eax, %edx
xorl %eax, %eax
callq 0x14e8
jmp 0x3016