// File: /workspace/github_c_makefile_star2_O0/janet-lang[P]janet/src/core/compile.c
// Function: janetc_value
JanetSlot janetc_value(JanetFopts opts, Janet x) {
    JanetSlot ret;
    JanetCompiler *c = opts.compiler;
    JanetSourceMapping last_mapping = c->current_mapping;
    c->recursion_guard--;

    /* Guard against previous errors and unbounded recursion */
    if (c->result.status == JANET_COMPILE_ERROR) return janetc_cslot(janet_wrap_nil());
    if (c->recursion_guard <= 0) {
        janetc_cerror(c, "recursed too deeply");
        return janetc_cslot(janet_wrap_nil());
    }

    /* Macro expand. Also gets possible special form and
     * refines source mapping cursor if possible. */
    const JanetSpecial *spec = NULL;
    int macroi = JANET_MAX_MACRO_EXPAND;
    while (macroi &&
            c->result.status != JANET_COMPILE_ERROR &&
            macroexpand1(c, x, &x, &spec))
        macroi--;
    if (macroi == 0) {
        janetc_cerror(c, "recursed too deeply in macro expansion");
        return janetc_cslot(janet_wrap_nil());
    }

    /* Special forms */
    if (spec) {
        const Janet *tup = janet_unwrap_tuple(x);
        ret = spec->compile(opts, janet_tuple_length(tup) - 1, tup + 1);
    } else {
        switch (janet_type(x)) {
            case JANET_TUPLE: {
                JanetFopts subopts = janetc_fopts_default(c);
                const Janet *tup = janet_unwrap_tuple(x);
                /* Empty tuple is tuple literal */
                if (janet_tuple_length(tup) == 0) {
                    ret = janetc_cslot(janet_wrap_tuple(janet_tuple_n(NULL, 0)));
                } else if (janet_tuple_flag(tup) & JANET_TUPLE_FLAG_BRACKETCTOR) { /* [] tuples are not function call */
                    ret = janetc_tuple(opts, x);
                } else {
                    JanetSlot head = janetc_value(subopts, tup[0]);
                    subopts.flags = JANET_FUNCTION | JANET_CFUNCTION;
                    ret = janetc_call(opts, janetc_toslots(c, tup + 1, janet_tuple_length(tup) - 1), head);
                    janetc_freeslot(c, head);
                }
                ret.flags &= ~JANET_SLOT_SPLICED;
            }
            break;
            case JANET_SYMBOL:
                ret = janetc_resolve(c, janet_unwrap_symbol(x));
                break;
            case JANET_ARRAY:
                ret = janetc_array(opts, x);
                break;
            case JANET_STRUCT:
                ret = janetc_tablector(opts, x, JOP_MAKE_STRUCT);
                break;
            case JANET_TABLE:
                ret = janetc_tablector(opts, x, JOP_MAKE_TABLE);
                break;
            case JANET_BUFFER:
                ret = janetc_bufferctor(opts, x);
                break;
            default:
                ret = janetc_cslot(x);
                break;
        }
    }

    if (c->result.status == JANET_COMPILE_ERROR)
        return janetc_cslot(janet_wrap_nil());
    if (opts.flags & JANET_FOPTS_TAIL)
        ret = janetc_return(c, ret);
    if (opts.flags & JANET_FOPTS_HINT) {
        janetc_copy(c, opts.hint, ret);
        ret = opts.hint;
    }
    c->current_mapping = last_mapping;
    c->recursion_guard++;
    return ret;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x230, %rsp            # imm = 0x230
movq %rdi, -0x1d8(%rbp)
movq %rdi, -0x1d0(%rbp)
leaq 0x10(%rbp), %rax
movq %rax, -0x1c8(%rbp)
movq %rsi, -0x8(%rbp)
movq (%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq 0x50(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rax
movl 0x58(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x58(%rax)
movq -0x28(%rbp), %rax
cmpl $0x1, 0x48(%rax)
jne 0x2160a
movabsq $-0x77fffffffffff, %rdi # imm = 0xFFF8800000000001
callq 0x7b460
movq -0x1d8(%rbp), %rdi
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rsi
callq 0x1ff40
jmp 0x21ce8
movq -0x28(%rbp), %rax
cmpl $0x0, 0x58(%rax)
jg 0x2164c
movq -0x28(%rbp), %rdi
leaq 0x73fc4(%rip), %rsi     # 0x955e3
callq 0x1fff0
movabsq $-0x77fffffffffff, %rdi # imm = 0xFFF8800000000001
callq 0x7b460
movq -0x1d8(%rbp), %rdi
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rsi
callq 0x1ff40
jmp 0x21ce8
movq $0x0, -0x48(%rbp)
movl $0xc8, -0x4c(%rbp)
xorl %eax, %eax
cmpl $0x0, -0x4c(%rbp)
movb %al, -0x1d9(%rbp)
je 0x2169c
movq -0x28(%rbp), %rcx
xorl %eax, %eax
cmpl $0x1, 0x48(%rcx)
movb %al, -0x1d9(%rbp)
je 0x2169c
movq -0x28(%rbp), %rdi
movq -0x8(%rbp), %rsi
leaq -0x8(%rbp), %rdx
leaq -0x48(%rbp), %rcx
callq 0x22560
cmpl $0x0, %eax
setne %al
movb %al, -0x1d9(%rbp)
movb -0x1d9(%rbp), %al
testb $0x1, %al
jne 0x216a8
jmp 0x216b3
movl -0x4c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x2165b
cmpl $0x0, -0x4c(%rbp)
jne 0x216f1
movq -0x28(%rbp), %rdi
leaq 0x5ff3e(%rip), %rsi     # 0x81602
callq 0x1fff0
movabsq $-0x77fffffffffff, %rdi # imm = 0xFFF8800000000001
callq 0x7b460
movq -0x1d8(%rbp), %rdi
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rsi
callq 0x1ff40
jmp 0x21ce8
cmpq $0x0, -0x48(%rbp)
je 0x21762
movq -0x8(%rbp), %rdi
callq 0x7b260
movq -0x1c8(%rbp), %rdi
movq %rax, -0x60(%rbp)
movq -0x48(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x60(%rbp), %rcx
movl -0x10(%rcx), %esi
subl $0x1, %esi
movq -0x60(%rbp), %rdx
addq $0x8, %rdx
movq 0x20(%rdi), %r8
movq %rsp, %rcx
movq %r8, 0x20(%rcx)
movups (%rdi), %xmm0
movups 0x10(%rdi), %xmm1
movups %xmm1, 0x10(%rcx)
movups %xmm0, (%rcx)
leaq -0x78(%rbp), %rdi
callq *%rax
movq -0x78(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x68(%rbp), %rax
movq %rax, -0x10(%rbp)
jmp 0x21b99
movsd -0x8(%rbp), %xmm0
ucomisd %xmm0, %xmm0
setp %al
testb $0x1, %al
jne 0x21774
jmp 0x21788
movq -0x8(%rbp), %rax
shrq $0x2f, %rax
andq $0xf, %rax
movl %eax, -0x1e0(%rbp)
jmp 0x21792
xorl %eax, %eax
movl %eax, -0x1e0(%rbp)
jmp 0x21792
movl -0x1e0(%rbp), %eax
addl $-0x5, %eax
movl %eax, %ecx
movq %rcx, -0x1e8(%rbp)
subl $0x6, %eax
ja 0x21b66
movq -0x1e8(%rbp), %rax
leaq 0x5fb9d(%rip), %rcx     # 0x81358
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x28(%rbp), %rsi
leaq -0xa0(%rbp), %rdi
callq 0x1fed0
movq -0x8(%rbp), %rdi
callq 0x7b260
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
cmpl $0x0, -0x10(%rax)
jne 0x2184e
xorl %eax, %eax
movl %eax, %edi
xorl %esi, %esi
callq 0x6a7d0
movq %rax, %rdi
movabsq $-0x4000000000000, %rsi # imm = 0xFFFC000000000000
callq 0x7b550
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x1ff40
movq -0xc0(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0xb0(%rbp), %rax
movq %rax, -0x10(%rbp)
jmp 0x219a7
movq -0xa8(%rbp), %rax
movl -0x20(%rax), %eax
andl $0x10000, %eax          # imm = 0x10000
cmpl $0x0, %eax
je 0x218b8
movq -0x1c8(%rbp), %rcx
movq -0x8(%rbp), %rsi
movq 0x20(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x20(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq -0xe0(%rbp), %rdi
callq 0x22a30
movq -0xe0(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0xd8(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0xd0(%rbp), %rax
movq %rax, -0x10(%rbp)
jmp 0x219a5
movq -0xa8(%rbp), %rax
movq (%rax), %rsi
movq -0x80(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x20(%rax)
movups -0xa0(%rbp), %xmm0
movups -0x90(%rbp), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq -0xf8(%rbp), %rdi
callq 0x21590
movl $0xd, -0x80(%rbp)
movq -0x28(%rbp), %rdi
movq -0xa8(%rbp), %rsi
addq $0x8, %rsi
movq -0xa8(%rbp), %rax
movl -0x10(%rax), %edx
subl $0x1, %edx
callq 0x21480
movq -0x1c8(%rbp), %rcx
movq %rax, %rsi
movq -0xe8(%rbp), %rdx
movq %rsp, %rax
movq %rdx, 0x38(%rax)
movups -0xf8(%rbp), %xmm0
movups %xmm0, 0x28(%rax)
movq 0x20(%rcx), %rdx
movq %rdx, 0x20(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq -0x110(%rbp), %rdi
callq 0x22ab0
movq -0x110(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x108(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x100(%rbp), %rax
movq %rax, -0x10(%rbp)
movq -0x28(%rbp), %rdi
leaq -0xf8(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x202e0
jmp 0x219a7
movl -0x10(%rbp), %eax
andl $0xfeffffff, %eax       # imm = 0xFEFFFFFF
movl %eax, -0x10(%rbp)
jmp 0x21b97
movq -0x28(%rbp), %rax
movq %rax, -0x1f0(%rbp)
movq -0x8(%rbp), %rdi
callq 0x7b260
movq -0x1f0(%rbp), %rsi
movq %rax, %rdx
leaq -0x128(%rbp), %rdi
callq 0x208e0
movq -0x128(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x120(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x118(%rbp), %rax
movq %rax, -0x10(%rbp)
jmp 0x21b97
movq -0x1c8(%rbp), %rcx
movq -0x8(%rbp), %rsi
movq 0x20(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x20(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq -0x140(%rbp), %rdi
callq 0x23060
movq -0x140(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x138(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x130(%rbp), %rax
movq %rax, -0x10(%rbp)
jmp 0x21b97
movq -0x1c8(%rbp), %rcx
movq -0x8(%rbp), %rsi
movq 0x20(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x20(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq -0x158(%rbp), %rdi
movl $0x43, %edx
callq 0x230e0
movq -0x158(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x150(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x148(%rbp), %rax
movq %rax, -0x10(%rbp)
jmp 0x21b97
movq -0x1c8(%rbp), %rcx
movq -0x8(%rbp), %rsi
movq 0x20(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x20(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq -0x170(%rbp), %rdi
movl $0x44, %edx
callq 0x230e0
movq -0x170(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x168(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x160(%rbp), %rax
movq %rax, -0x10(%rbp)
jmp 0x21b97
movq -0x1c8(%rbp), %rcx
movq -0x8(%rbp), %rsi
movq 0x20(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x20(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq -0x188(%rbp), %rdi
callq 0x23150
movq -0x188(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x180(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x178(%rbp), %rax
movq %rax, -0x10(%rbp)
jmp 0x21b97
movq -0x8(%rbp), %rsi
leaq -0x1a0(%rbp), %rdi
callq 0x1ff40
movq -0x1a0(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x198(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x190(%rbp), %rax
movq %rax, -0x10(%rbp)
jmp 0x21b99
movq -0x28(%rbp), %rax
cmpl $0x1, 0x48(%rax)
jne 0x21bd1
movabsq $-0x77fffffffffff, %rdi # imm = 0xFFF8800000000001
callq 0x7b460
movq -0x1d8(%rbp), %rdi
movq %rax, -0x1a8(%rbp)
movq -0x1a8(%rbp), %rsi
callq 0x1ff40
jmp 0x21ce8
movq -0x1c8(%rbp), %rax
movl 0x20(%rax), %eax
andl $0x10000, %eax          # imm = 0x10000
cmpl $0x0, %eax
je 0x21c33
movq -0x28(%rbp), %rsi
leaq -0x1c0(%rbp), %rdi
leaq -0x20(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x212b0
movq -0x1c0(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x1b8(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x1b0(%rbp), %rax
movq %rax, -0x10(%rbp)
movq -0x1c8(%rbp), %rax
movl 0x20(%rax), %eax
andl $0x20000, %eax          # imm = 0x20000
cmpl $0x0, %eax
je 0x21cb1
movq -0x1c8(%rbp), %rcx
movq -0x28(%rbp), %rdi
addq $0x8, %rcx
leaq -0x20(%rbp), %rax
movq (%rcx), %rdx
movq %rdx, (%rsp)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rsp)
movq 0x10(%rcx), %rcx
movq %rcx, 0x10(%rsp)
movq (%rax), %rcx
movq %rcx, 0x18(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x20(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x28(%rsp)
callq 0x295a0
movq -0x1c8(%rbp), %rax
movq 0x8(%rax), %rcx
movq %rcx, -0x20(%rbp)
movq 0x10(%rax), %rcx
movq %rcx, -0x18(%rbp)
movq 0x18(%rax), %rax
movq %rax, -0x10(%rbp)
movq -0x1d8(%rbp), %rax
movq -0x28(%rbp), %rcx
movq -0x30(%rbp), %rdx
movq %rdx, 0x50(%rcx)
movq -0x28(%rbp), %rcx
movl 0x58(%rcx), %edx
addl $0x1, %edx
movl %edx, 0x58(%rcx)
movq -0x20(%rbp), %rcx
movq %rcx, (%rax)
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x10(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x1d0(%rbp), %rax
addq $0x230, %rsp            # imm = 0x230
popq %rbp
retq
nopl (%rax,%rax)