// File: /workspace/github_c_makefile_star2_O0/codeplea[P]tinyexpr/tinyexpr.c
// Function: te_eval
double te_eval(const te_expr *n) {
    if (!n) return NAN;

    switch(TYPE_MASK(n->type)) {
        case TE_CONSTANT: return n->value;
        case TE_VARIABLE: return *n->bound;

        case TE_FUNCTION0: case TE_FUNCTION1: case TE_FUNCTION2: case TE_FUNCTION3:
        case TE_FUNCTION4: case TE_FUNCTION5: case TE_FUNCTION6: case TE_FUNCTION7:
            switch(ARITY(n->type)) {
                case 0: return TE_FUN(void)();
                case 1: return TE_FUN(double)(M(0));
                case 2: return TE_FUN(double, double)(M(0), M(1));
                case 3: return TE_FUN(double, double, double)(M(0), M(1), M(2));
                case 4: return TE_FUN(double, double, double, double)(M(0), M(1), M(2), M(3));
                case 5: return TE_FUN(double, double, double, double, double)(M(0), M(1), M(2), M(3), M(4));
                case 6: return TE_FUN(double, double, double, double, double, double)(M(0), M(1), M(2), M(3), M(4), M(5));
                case 7: return TE_FUN(double, double, double, double, double, double, double)(M(0), M(1), M(2), M(3), M(4), M(5), M(6));
                default: return NAN;
            }

        case TE_CLOSURE0: case TE_CLOSURE1: case TE_CLOSURE2: case TE_CLOSURE3:
        case TE_CLOSURE4: case TE_CLOSURE5: case TE_CLOSURE6: case TE_CLOSURE7:
            switch(ARITY(n->type)) {
                case 0: return TE_FUN(void*)(n->parameters[0]);
                case 1: return TE_FUN(void*, double)(n->parameters[1], M(0));
                case 2: return TE_FUN(void*, double, double)(n->parameters[2], M(0), M(1));
                case 3: return TE_FUN(void*, double, double, double)(n->parameters[3], M(0), M(1), M(2));
                case 4: return TE_FUN(void*, double, double, double, double)(n->parameters[4], M(0), M(1), M(2), M(3));
                case 5: return TE_FUN(void*, double, double, double, double, double)(n->parameters[5], M(0), M(1), M(2), M(3), M(4));
                case 6: return TE_FUN(void*, double, double, double, double, double, double)(n->parameters[6], M(0), M(1), M(2), M(3), M(4), M(5));
                case 7: return TE_FUN(void*, double, double, double, double, double, double, double)(n->parameters[7], M(0), M(1), M(2), M(3), M(4), M(5), M(6));
                default: return NAN;
            }

        default: return NAN;
    }

}

// Assembly:
subq $0x238, %rsp            # imm = 0x238
movq %rdi, 0x228(%rsp)
cmpq $0x0, 0x228(%rsp)
jne 0x8480
movsd 0x3746(%rip), %xmm0     # 0xbbb8
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movq 0x228(%rsp), %rax
movl (%rax), %eax
andl $0x1f, %eax
movl %eax, %ecx
movq %rcx, 0x220(%rsp)
subl $0x17, %eax
ja 0x8fc4
movq 0x220(%rsp), %rax
leaq 0x3609(%rip), %rcx      # 0xbab8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x228(%rsp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movq 0x228(%rsp), %rax
movq 0x8(%rax), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movq 0x228(%rsp), %rax
movl (%rax), %eax
andl $0x18, %eax
cmpl $0x0, %eax
je 0x8519
movq 0x228(%rsp), %rax
movl (%rax), %eax
andl $0x7, %eax
movl %eax, 0x21c(%rsp)
jmp 0x8524
xorl %eax, %eax
movl %eax, 0x21c(%rsp)
jmp 0x8524
movl 0x21c(%rsp), %eax
movl %eax, %ecx
movq %rcx, 0x210(%rsp)
subl $0x7, %eax
ja 0x8a0b
movq 0x210(%rsp), %rax
leaq 0x35eb(%rip), %rcx      # 0xbb38
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x228(%rsp), %rax
callq *0x8(%rax)
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movq 0x228(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x208(%rsp)
movq 0x228(%rsp), %rax
movq 0x10(%rax), %rdi
callq 0x8450
movq 0x208(%rsp), %rax
callq *%rax
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movq 0x228(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x1f8(%rsp)
movq 0x228(%rsp), %rax
movq 0x10(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x200(%rsp)
movq 0x228(%rsp), %rax
movq 0x18(%rax), %rdi
callq 0x8450
movq 0x1f8(%rsp), %rax
movaps %xmm0, %xmm1
movsd 0x200(%rsp), %xmm0
callq *%rax
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movq 0x228(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x1e8(%rsp)
movq 0x228(%rsp), %rax
movq 0x10(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x1f0(%rsp)
movq 0x228(%rsp), %rax
movq 0x18(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x1e0(%rsp)
movq 0x228(%rsp), %rax
movq 0x20(%rax), %rdi
callq 0x8450
movsd 0x1e0(%rsp), %xmm1
movq 0x1e8(%rsp), %rax
movaps %xmm0, %xmm2
movsd 0x1f0(%rsp), %xmm0
callq *%rax
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movq 0x228(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x1d0(%rsp)
movq 0x228(%rsp), %rax
movq 0x10(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x1d8(%rsp)
movq 0x228(%rsp), %rax
movq 0x18(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x1c0(%rsp)
movq 0x228(%rsp), %rax
movq 0x20(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x1c8(%rsp)
movq 0x228(%rsp), %rax
movq 0x28(%rax), %rdi
callq 0x8450
movsd 0x1c0(%rsp), %xmm1
movsd 0x1c8(%rsp), %xmm2
movq 0x1d0(%rsp), %rax
movaps %xmm0, %xmm3
movsd 0x1d8(%rsp), %xmm0
callq *%rax
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movq 0x228(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x1b0(%rsp)
movq 0x228(%rsp), %rax
movq 0x10(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x1b8(%rsp)
movq 0x228(%rsp), %rax
movq 0x18(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x198(%rsp)
movq 0x228(%rsp), %rax
movq 0x20(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x1a0(%rsp)
movq 0x228(%rsp), %rax
movq 0x28(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x1a8(%rsp)
movq 0x228(%rsp), %rax
movq 0x30(%rax), %rdi
callq 0x8450
movsd 0x198(%rsp), %xmm1
movsd 0x1a0(%rsp), %xmm2
movsd 0x1a8(%rsp), %xmm3
movq 0x1b0(%rsp), %rax
movaps %xmm0, %xmm4
movsd 0x1b8(%rsp), %xmm0
callq *%rax
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movq 0x228(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x188(%rsp)
movq 0x228(%rsp), %rax
movq 0x10(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x190(%rsp)
movq 0x228(%rsp), %rax
movq 0x18(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x168(%rsp)
movq 0x228(%rsp), %rax
movq 0x20(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x170(%rsp)
movq 0x228(%rsp), %rax
movq 0x28(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x178(%rsp)
movq 0x228(%rsp), %rax
movq 0x30(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x180(%rsp)
movq 0x228(%rsp), %rax
movq 0x38(%rax), %rdi
callq 0x8450
movsd 0x168(%rsp), %xmm1
movsd 0x170(%rsp), %xmm2
movsd 0x178(%rsp), %xmm3
movsd 0x180(%rsp), %xmm4
movq 0x188(%rsp), %rax
movaps %xmm0, %xmm5
movsd 0x190(%rsp), %xmm0
callq *%rax
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movq 0x228(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x158(%rsp)
movq 0x228(%rsp), %rax
movq 0x10(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x160(%rsp)
movq 0x228(%rsp), %rax
movq 0x18(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x130(%rsp)
movq 0x228(%rsp), %rax
movq 0x20(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x138(%rsp)
movq 0x228(%rsp), %rax
movq 0x28(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x140(%rsp)
movq 0x228(%rsp), %rax
movq 0x30(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x148(%rsp)
movq 0x228(%rsp), %rax
movq 0x38(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x150(%rsp)
movq 0x228(%rsp), %rax
movq 0x40(%rax), %rdi
callq 0x8450
movsd 0x130(%rsp), %xmm1
movsd 0x138(%rsp), %xmm2
movsd 0x140(%rsp), %xmm3
movsd 0x148(%rsp), %xmm4
movsd 0x150(%rsp), %xmm5
movq 0x158(%rsp), %rax
movaps %xmm0, %xmm6
movsd 0x160(%rsp), %xmm0
callq *%rax
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movsd 0x31a5(%rip), %xmm0     # 0xbbb8
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movq 0x228(%rsp), %rax
movl (%rax), %eax
andl $0x18, %eax
cmpl $0x0, %eax
je 0x8a49
movq 0x228(%rsp), %rax
movl (%rax), %eax
andl $0x7, %eax
movl %eax, 0x12c(%rsp)
jmp 0x8a54
xorl %eax, %eax
movl %eax, 0x12c(%rsp)
jmp 0x8a54
movl 0x12c(%rsp), %eax
movl %eax, %ecx
movq %rcx, 0x120(%rsp)
subl $0x7, %eax
ja 0x8fb1
movq 0x120(%rsp), %rax
leaq 0x309b(%rip), %rcx      # 0xbb18
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x228(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x228(%rsp), %rcx
movq 0x10(%rcx), %rdi
callq *%rax
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movq 0x228(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x118(%rsp)
movq 0x228(%rsp), %rax
movq 0x18(%rax), %rax
movq %rax, 0x110(%rsp)
movq 0x228(%rsp), %rax
movq 0x10(%rax), %rdi
callq 0x8450
movq 0x110(%rsp), %rdi
movq 0x118(%rsp), %rax
callq *%rax
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movq 0x228(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x100(%rsp)
movq 0x228(%rsp), %rax
movq 0x20(%rax), %rax
movq %rax, 0xf8(%rsp)
movq 0x228(%rsp), %rax
movq 0x10(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x108(%rsp)
movq 0x228(%rsp), %rax
movq 0x18(%rax), %rdi
callq 0x8450
movq 0xf8(%rsp), %rdi
movq 0x100(%rsp), %rax
movaps %xmm0, %xmm1
movsd 0x108(%rsp), %xmm0
callq *%rax
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movq 0x228(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0xe8(%rsp)
movq 0x228(%rsp), %rax
movq 0x28(%rax), %rax
movq %rax, 0xd8(%rsp)
movq 0x228(%rsp), %rax
movq 0x10(%rax), %rdi
callq 0x8450
movsd %xmm0, 0xf0(%rsp)
movq 0x228(%rsp), %rax
movq 0x18(%rax), %rdi
callq 0x8450
movsd %xmm0, 0xe0(%rsp)
movq 0x228(%rsp), %rax
movq 0x20(%rax), %rdi
callq 0x8450
movq 0xd8(%rsp), %rdi
movsd 0xe0(%rsp), %xmm1
movq 0xe8(%rsp), %rax
movaps %xmm0, %xmm2
movsd 0xf0(%rsp), %xmm0
callq *%rax
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movq 0x228(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0xc8(%rsp)
movq 0x228(%rsp), %rax
movq 0x30(%rax), %rax
movq %rax, 0xb0(%rsp)
movq 0x228(%rsp), %rax
movq 0x10(%rax), %rdi
callq 0x8450
movsd %xmm0, 0xd0(%rsp)
movq 0x228(%rsp), %rax
movq 0x18(%rax), %rdi
callq 0x8450
movsd %xmm0, 0xb8(%rsp)
movq 0x228(%rsp), %rax
movq 0x20(%rax), %rdi
callq 0x8450
movsd %xmm0, 0xc0(%rsp)
movq 0x228(%rsp), %rax
movq 0x28(%rax), %rdi
callq 0x8450
movq 0xb0(%rsp), %rdi
movsd 0xb8(%rsp), %xmm1
movsd 0xc0(%rsp), %xmm2
movq 0xc8(%rsp), %rax
movaps %xmm0, %xmm3
movsd 0xd0(%rsp), %xmm0
callq *%rax
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movq 0x228(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0xa0(%rsp)
movq 0x228(%rsp), %rax
movq 0x38(%rax), %rax
movq %rax, 0x80(%rsp)
movq 0x228(%rsp), %rax
movq 0x10(%rax), %rdi
callq 0x8450
movsd %xmm0, 0xa8(%rsp)
movq 0x228(%rsp), %rax
movq 0x18(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x88(%rsp)
movq 0x228(%rsp), %rax
movq 0x20(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x90(%rsp)
movq 0x228(%rsp), %rax
movq 0x28(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x98(%rsp)
movq 0x228(%rsp), %rax
movq 0x30(%rax), %rdi
callq 0x8450
movq 0x80(%rsp), %rdi
movsd 0x88(%rsp), %xmm1
movsd 0x90(%rsp), %xmm2
movsd 0x98(%rsp), %xmm3
movq 0xa0(%rsp), %rax
movaps %xmm0, %xmm4
movsd 0xa8(%rsp), %xmm0
callq *%rax
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movq 0x228(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x70(%rsp)
movq 0x228(%rsp), %rax
movq 0x40(%rax), %rax
movq %rax, 0x48(%rsp)
movq 0x228(%rsp), %rax
movq 0x10(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x78(%rsp)
movq 0x228(%rsp), %rax
movq 0x18(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x50(%rsp)
movq 0x228(%rsp), %rax
movq 0x20(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x58(%rsp)
movq 0x228(%rsp), %rax
movq 0x28(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x60(%rsp)
movq 0x228(%rsp), %rax
movq 0x30(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x68(%rsp)
movq 0x228(%rsp), %rax
movq 0x38(%rax), %rdi
callq 0x8450
movq 0x48(%rsp), %rdi
movsd 0x50(%rsp), %xmm1
movsd 0x58(%rsp), %xmm2
movsd 0x60(%rsp), %xmm3
movsd 0x68(%rsp), %xmm4
movq 0x70(%rsp), %rax
movaps %xmm0, %xmm5
movsd 0x78(%rsp), %xmm0
callq *%rax
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movq 0x228(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x38(%rsp)
movq 0x228(%rsp), %rax
movq 0x48(%rax), %rax
movq %rax, 0x8(%rsp)
movq 0x228(%rsp), %rax
movq 0x10(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x40(%rsp)
movq 0x228(%rsp), %rax
movq 0x18(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x10(%rsp)
movq 0x228(%rsp), %rax
movq 0x20(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x18(%rsp)
movq 0x228(%rsp), %rax
movq 0x28(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x20(%rsp)
movq 0x228(%rsp), %rax
movq 0x30(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x28(%rsp)
movq 0x228(%rsp), %rax
movq 0x38(%rax), %rdi
callq 0x8450
movsd %xmm0, 0x30(%rsp)
movq 0x228(%rsp), %rax
movq 0x40(%rax), %rdi
callq 0x8450
movq 0x8(%rsp), %rdi
movsd 0x10(%rsp), %xmm1
movsd 0x18(%rsp), %xmm2
movsd 0x20(%rsp), %xmm3
movsd 0x28(%rsp), %xmm4
movsd 0x30(%rsp), %xmm5
movq 0x38(%rsp), %rax
movaps %xmm0, %xmm6
movsd 0x40(%rsp), %xmm0
callq *%rax
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movsd 0x2bff(%rip), %xmm0     # 0xbbb8
movsd %xmm0, 0x230(%rsp)
jmp 0x8fd5
movsd 0x2bec(%rip), %xmm0     # 0xbbb8
movsd %xmm0, 0x230(%rsp)
movsd 0x230(%rsp), %xmm0
addq $0x238, %rsp            # imm = 0x238
retq
nopw %cs:(%rax,%rax)