// File: /workspace/github_c_makefile_star2_O2/Liutos[P]Eloquent/interp.c
// Function: interp_execute
value_kind_t interp_execute(interp_t *interp, ast_t *ast, value_t **value)
{
    switch (ast->kind) {
        case AST_CONS:
            return interp_execute_cons(interp, ast, value);
        case AST_END_OF_CONS:
            if (value != NULL)
                *value = value_int_new(0);
            return VALUE_INT;
        case AST_IDENTIFIER:
            return interp_execute_ident(interp, ast, value);
        case AST_INTEGER:
            if (value != NULL)
                *value = value_int_new(AST_INT_VALUE(ast));
            return VALUE_INT;
        default :
            fprintf(stderr, "Don't know how to execute: %d", ast->kind);
            exit(1);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdx, %rbx
movl (%rsi), %edx
leal -0x1(%rdx), %eax
cmpl $0x4, %eax
ja 0x3c56
movq %rsi, %r12
movq %rdi, %r14
leaq 0x2b90(%rip), %rcx      # 0x63a8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x10(%r12), %r15
cmpl $0x4, (%r15)
jne 0x38aa
movq 0x10(%r15), %rax
movq (%rax), %rsi
movq 0x8(%r14), %rdi
xorl %edx, %edx
callq 0x59c8
testq %rax, %rax
je 0x3903
movq 0x18(%r12), %rsi
movq (%rax), %rax
movq %r14, %rdi
movq %rbx, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmpq *%rax
movq 0x10(%r12), %rax
movq (%rax), %r15
movq 0x18(%r14), %rdi
movq %r15, %rsi
callq 0x5453
testq %rax, %rax
je 0x38cc
testq %rbx, %rbx
je 0x3886
movq %rax, (%rbx)
movl (%rax), %ebp
jmp 0x38f2
pushq $0x5
popq %rbp
testq %rbx, %rbx
je 0x38f2
movl 0x10(%r12), %edi
jmp 0x38a3
pushq $0x5
popq %rbp
testq %rbx, %rbx
je 0x38f2
xorl %edi, %edi
callq 0x2562
jmp 0x38ef
pushq $0x2
popq %rbp
testq %rbx, %rbx
je 0x38f2
movl 0x4(%r12), %esi
movl 0x8(%r12), %edx
leaq 0x2bd8(%rip), %rdi      # 0x649b
xorl %eax, %eax
callq 0x2486
jmp 0x38ef
pushq $0x2
popq %rbp
testq %rbx, %rbx
je 0x38f2
movl 0x4(%r12), %esi
movl 0x8(%r12), %edx
leaq 0x2b24(%rip), %rdi      # 0x6409
movq %r15, %rcx
xorl %eax, %eax
callq 0x2486
movq %rax, (%rbx)
movl %ebp, %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x8(%rsp), %rdx
andq $0x0, (%rdx)
movq %r14, %rdi
movq %r15, %rsi
callq 0x37ec
cmpl $0x4, %eax
je 0x3930
pushq $0x2
popq %rbp
cmpl $0x2, %eax
jne 0x399b
testq %rbx, %rbx
je 0x38f2
movq 0x8(%rsp), %rax
jmp 0x38ef
movq 0x8(%rsp), %r15
movq 0x18(%r12), %r13
movl 0x10(%r15), %r12d
movq %r13, %rdi
callq 0x56df
cmpl %r12d, %eax
jne 0x39ba
cmpl $0x0, 0x8(%r15)
je 0x39e7
callq 0x5dbb
movq %rax, %r12
movq %rsp, %rbp
cmpl $0x2, (%r13)
je 0x3a44
movq 0x10(%r13), %rsi
andq $0x0, (%rsp)
movq %r14, %rdi
movq %rbp, %rdx
callq 0x37ec
movq (%rsp), %rsi
cmpl $0x2, %eax
je 0x3a7e
movq %r12, %rdi
callq 0x5de3
movq 0x18(%r13), %r13
jmp 0x3961
testq %rbx, %rbx
je 0x38f2
movl 0x4(%r12), %esi
movl 0x8(%r12), %edx
leaq 0x2b1f(%rip), %rdi      # 0x64d4
jmp 0x38c3
pushq $0x2
popq %rbp
testq %rbx, %rbx
je 0x38f2
movl 0x4(%r13), %esi
movl 0x8(%r13), %edx
leaq 0x2b42(%rip), %rdi      # 0x6517
movl %r12d, %ecx
movl %eax, %r8d
xorl %eax, %eax
callq 0x2486
jmp 0x38ef
movq 0x18(%r15), %rdi
callq 0x5297
movq %rax, %r12
movq %r15, 0x10(%rsp)
movq 0x20(%r15), %r15
cmpl $0x1, (%r15)
jne 0x3a8d
movq 0x10(%r15), %rbp
movq 0x10(%r13), %rsi
andq $0x0, (%rsp)
movq %r14, %rdi
movq %rsp, %rdx
callq 0x37ec
cmpl $0x2, %eax
je 0x3b39
movq 0x10(%rbp), %rax
movq (%rax), %rsi
movq (%rsp), %rdx
movq %r12, %rdi
callq 0x5321
movq 0x18(%r15), %r15
movq 0x18(%r13), %r13
jmp 0x39fc
movl 0x10(%r15), %esi
cmpl $0x2, %esi
je 0x3bd6
cmpl $0x1, %esi
je 0x3baa
testl %esi, %esi
jne 0x3c37
movq %r14, %rdi
movq %r15, %rsi
xorl %edx, %edx
xorl %eax, %eax
callq 0x411e
movq 0x20(%r14), %rdi
callq *0x20(%r15)
jmp 0x3c15
testq %rbx, %rbx
je 0x3a86
movq %rsi, (%rbx)
movl (%rsi), %ebp
jmp 0x38f2
movq %rsp, %rdx
andq $0x0, (%rdx)
movq %r14, %rdi
movq 0x10(%rsp), %r15
movq %r15, %rsi
callq 0x4337
testl %eax, %eax
je 0x3b58
movq %r14, %rdi
callq 0x4377
movq 0x6515(%rip), %rbp      # 0x9fd0
movq (%rbp), %rdi
movl (%r14), %edx
leaq 0x2ace(%rip), %rsi      # 0x6597
xorl %eax, %eax
callq 0x20d0
movq (%rbp), %rsi
movq (%rsp), %rax
movq (%rax), %rdi
callq 0x2070
movq (%rbp), %rsi
pushq $0x28
popq %rdi
callq 0x20a0
movq 0x20(%r15), %r13
cmpl $0x2, (%r13)
je 0x3b42
movq 0x10(%r13), %rax
movq 0x10(%rax), %rax
movq (%rax), %rsi
movq %r12, %rdi
callq 0x5453
movq (%rbp), %rsi
movq %rax, %rdi
callq 0x2612
movq 0x18(%r13), %r13
cmpl $0x2, (%r13)
je 0x3af0
movq (%rbp), %rcx
leaq 0x273d(%rip), %rdi      # 0x6269
pushq $0x2
popq %rsi
pushq $0x1
popq %rdx
callq 0x2140
jmp 0x3af0
movq (%rsp), %rax
jmp 0x387e
movq (%rbp), %rcx
leaq 0x271f(%rip), %rdi      # 0x626c
pushq $0x2
popq %rsi
pushq $0x1
popq %rdx
callq 0x2140
incl (%r14)
movq %r15, %r13
movq 0x18(%r14), %r15
movq 0x20(%r14), %rdi
movq %r12, 0x18(%r14)
callq 0x5297
movq %rax, 0x20(%r14)
movq 0x28(%r13), %rsi
movq %r14, %rdi
movq %rbx, %rdx
callq 0x3dc5
movl %eax, %ebp
decl (%r14)
movq %r15, 0x18(%r14)
movq 0x20(%r14), %rax
movq 0x18(%rax), %rax
movq %rax, 0x20(%r14)
movq (%rbx), %rdx
movq %r14, %rdi
movq %r13, %rsi
callq 0x42ae
jmp 0x38f2
movq %r12, %rdi
xorl %esi, %esi
callq 0x5e9f
movq %rax, %r12
movq %r14, %rdi
movq %r15, %rsi
movq %rax, %rdx
xorl %ecx, %ecx
xorl %eax, %eax
callq 0x411e
movq 0x20(%r14), %rdi
movq %r12, %rsi
callq *0x20(%r15)
jmp 0x3c15
movq %r12, %rdi
xorl %esi, %esi
callq 0x5e9f
movq %rax, %r13
pushq $0x1
popq %rsi
movq %r12, %rdi
callq 0x5e9f
movq %rax, %r12
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
movq %rax, %rcx
xorl %r8d, %r8d
xorl %eax, %eax
callq 0x411e
movq 0x20(%r14), %rdi
movq %r13, %rsi
movq %r12, %rdx
callq *0x20(%r15)
movq %rax, %r12
movq %r14, %rdi
movq %r15, %rsi
movq %rax, %rdx
callq 0x42ae
testq %rbx, %rbx
je 0x3c2e
movq %r12, (%rbx)
movl (%r12), %ebp
jmp 0x38f2
pushq $0x2
popq %rbp
testq %rbx, %rbx
je 0x38f2
leaq 0x2918(%rip), %rdi      # 0x6562
xorl %eax, %eax
callq 0x2486
jmp 0x38ef
movq 0x639b(%rip), %rax      # 0x9ff8
movq (%rax), %rdi
leaq 0x2755(%rip), %rsi      # 0x63bc
xorl %eax, %eax
callq 0x20d0
pushq $0x1
popq %rdi
callq 0x2130