LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_mul
struct value*
builtin_mul(struct vm* vm, struct value* args)
{
    ASSERT_ARITY_GTE("*", args, 2);
    ASSERT_TYPE_ALL("*", args, VALUE_NUMBER);

    long res = 1;
    while (!value_is_empty_list(args)) {
        res *= CAR(args)->as.number;
        args = CDR(args);
    }

    return vm_make_number(vm, res);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
movq %rsi, %rdi
callq 0x502c
cmpq $0x2, %rax
jl 0x2937
xorl %r15d, %r15d
movq %rbx, %rdi
callq 0x502c
cmpq %r15, %rax
jle 0x28ae
movq %rbx, %rdi
movq %r15, %rsi
callq 0x5075
cmpl $0x4, (%rax)
jne 0x28e7
incq %r15
jmp 0x288c
pushq $0x1
popq %r15
cmpl $0x1, (%rbx)
je 0x28d1
movq %rbx, %rdi
callq 0x50ce
imulq 0x10(%rax), %r15
movq %rbx, %rdi
callq 0x5046
movq %rax, %rbx
jmp 0x28b2
movq %r14, %rdi
movq %r15, %rsi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0x67d8
movq 0x96f2(%rip), %rax      # 0xbfe0
movq (%rax), %r14
pushq $0x4
popq %rdi
callq 0x6409
movq %rax, %r12
movq %rbx, %rdi
movq %r15, %rsi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x496e(%rip), %rsi      # 0x7283
leaq 0x473b(%rip), %rdx      # 0x7057
movq %r14, %rdi
movl %r15d, %ecx
movq %r12, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
movq 0x96a2(%rip), %rax      # 0xbfe0
movq (%rax), %r14
movq %rbx, %rdi
callq 0x502c
leaq 0x48f5(%rip), %rsi      # 0x7245
leaq 0x4700(%rip), %rdx      # 0x7057
pushq $0x2
popq %rcx
movq %r14, %rdi
movq %rax, %r8
xorl %eax, %eax
callq 0x1220
jmp 0x292f
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_sub
struct value*
builtin_sub(struct vm* vm, struct value* args)
{
    ASSERT_ARITY_GTE("-", args, 2);
    ASSERT_TYPE_ALL("-", args, VALUE_NUMBER);

    long res = CAR(args)->as.number;
    args = CDR(args);

    while (!value_is_empty_list(args)) {
        res -= CAR(args)->as.number;
        args = CDR(args);
    }

    return vm_make_number(vm, res);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movq %rsi, %rdi
callq 0x502c
cmpq $0x2, %rax
jl 0x2a3b
xorl %r15d, %r15d
movq %r14, %rdi
callq 0x502c
movq %r14, %rdi
cmpq %r15, %rax
jle 0x29ae
movq %r15, %rsi
callq 0x5075
cmpl $0x4, (%rax)
jne 0x29eb
incq %r15
jmp 0x298c
callq 0x50ce
movq 0x10(%rax), %r15
movq %r14, %rdi
callq 0x5046
movq %rax, %r14
cmpl $0x1, (%rax)
je 0x29d5
movq %r14, %rdi
callq 0x50ce
subq 0x10(%rax), %r15
jmp 0x29b7
movq %rbx, %rdi
movq %r15, %rsi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0x67d8
movq 0x95ee(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
pushq $0x4
popq %rdi
callq 0x6409
movq %rax, %r12
movq %r14, %rdi
movq %r15, %rsi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x486a(%rip), %rsi      # 0x7283
leaq 0x4639(%rip), %rdx      # 0x7059
movq %rbx, %rdi
movl %r15d, %ecx
movq %r12, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
movq 0x959e(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
movq %r14, %rdi
callq 0x502c
leaq 0x47f1(%rip), %rsi      # 0x7245
leaq 0x45fe(%rip), %rdx      # 0x7059
pushq $0x2
popq %rcx
movq %rbx, %rdi
movq %rax, %r8
xorl %eax, %eax
callq 0x1220
jmp 0x2a33
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_div
struct value*
builtin_div(struct vm* vm, struct value* args)
{
    ASSERT_ARITY_GTE("/", args, 2);
    ASSERT_TYPE_ALL("/", args, VALUE_NUMBER);

    long res = CAR(args)->as.number;
    args = CDR(args);

    while (!value_is_empty_list(args)) {
        if (CAR(args)->as.number == 0) {
            fprintf(stderr, "error: divide by zero\n");
            exit(EXIT_FAILURE);
        }

        res /= CAR(args)->as.number;
        args = CDR(args);
    }

    return vm_make_number(vm, res);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movq %rsi, %rdi
callq 0x502c
cmpq $0x2, %rax
jl 0x2b77
xorl %r15d, %r15d
movq %r14, %rdi
callq 0x502c
movq %r14, %rdi
cmpq %r15, %rax
jle 0x2ab2
movq %r15, %rsi
callq 0x5075
cmpl $0x4, (%rax)
jne 0x2b09
incq %r15
jmp 0x2a90
callq 0x50ce
movq 0x10(%rax), %r15
movq %r14, %rdi
callq 0x5046
movq %rax, %r14
cmpl $0x1, (%rax)
je 0x2af3
movq %r14, %rdi
callq 0x50ce
cmpq $0x0, 0x10(%rax)
je 0x2b53
movq %r14, %rdi
callq 0x50ce
movq %rax, %rcx
movq %r15, %rax
cqto
idivq 0x10(%rcx)
movq %rax, %r15
jmp 0x2abb
movq %rbx, %rdi
movq %r15, %rsi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0x67d8
movq 0x94d0(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
pushq $0x4
popq %rdi
callq 0x6409
movq %rax, %r12
movq %r14, %rdi
movq %r15, %rsi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x474c(%rip), %rsi      # 0x7283
leaq 0x451d(%rip), %rdx      # 0x705b
movq %rbx, %rdi
movl %r15d, %ecx
movq %r12, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
jmp 0x2b6f
movq 0x9486(%rip), %rax      # 0xbfe0
movq (%rax), %rcx
leaq 0x4760(%rip), %rdi      # 0x72c4
pushq $0x16
popq %rsi
pushq $0x1
popq %rdx
callq 0x1260
pushq $0x1
popq %rdi
callq 0x11b0
movq 0x9462(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
movq %r14, %rdi
callq 0x502c
leaq 0x46b5(%rip), %rsi      # 0x7245
leaq 0x44c4(%rip), %rdx      # 0x705b
pushq $0x2
popq %rcx
movq %rbx, %rdi
movq %rax, %r8
xorl %eax, %eax
callq 0x1220
jmp 0x2b6f
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_cons
struct value*
builtin_cons(struct vm* vm, struct value* args)
{
    ASSERT_ARITY("cons", args, 2);

    struct value* a = CAR(args);
    struct value* b = CADR(args);
    return vm_make_pair(vm, a, b);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
movq %rdi, %rbx
movq %rsi, %rdi
callq 0x502c
cmpq $0x2, %rax
jne 0x2ccc
movq %r14, %rdi
callq 0x50ce
movq %rax, %r15
movq %r14, %rdi
callq 0x5046
movq %rax, %rdi
callq 0x50ce
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rdx
popq %rbx
popq %r14
popq %r15
jmp 0x68d9
movq 0x930d(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
movq %r14, %rdi
callq 0x502c
leaq 0x451f(%rip), %rsi      # 0x7204
leaq 0x4380(%rip), %rdx      # 0x706c
pushq $0x2
popq %rcx
movq %rbx, %rdi
movq %rax, %r8
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_car
struct value*
builtin_car(struct vm* vm, struct value* args)
{
    ASSERT_ARITY("car", args, 1);
    ASSERT_TYPE("car", args, 0, VALUE_PAIR);

    struct value* pair = CAR(args);
    return CAR(pair);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %rbx
movq %rsi, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x2d3e
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
cmpl $0x7, (%rax)
jne 0x2d77
movq %rbx, %rdi
callq 0x50ce
movq %rax, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x50ce
movq 0x929b(%rip), %rax      # 0xbfe0
movq (%rax), %r14
movq %rbx, %rdi
callq 0x502c
leaq 0x44ad(%rip), %rsi      # 0x7204
leaq 0x4313(%rip), %rdx      # 0x7071
pushq $0x1
popq %rbx
movq %r14, %rdi
movl %ebx, %ecx
movq %rax, %r8
xorl %eax, %eax
callq 0x1220
movl %ebx, %edi
callq 0x11b0
movq 0x9262(%rip), %rax      # 0xbfe0
movq (%rax), %r14
pushq $0x7
popq %rdi
callq 0x6409
movq %rax, %r15
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x44df(%rip), %rsi      # 0x7283
leaq 0x42c6(%rip), %rdx      # 0x7071
movq %r14, %rdi
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_cdr
struct value*
builtin_cdr(struct vm* vm, struct value* args)
{
    ASSERT_ARITY("cdr", args, 1);
    ASSERT_TYPE("cdr", args, 0, VALUE_PAIR);

    struct value* pair = CAR(args);
    return CDR(pair);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %rbx
movq %rsi, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x2dff
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
cmpl $0x7, (%rax)
jne 0x2e38
movq %rbx, %rdi
callq 0x50ce
movq %rax, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x5046
movq 0x91da(%rip), %rax      # 0xbfe0
movq (%rax), %r14
movq %rbx, %rdi
callq 0x502c
leaq 0x43ec(%rip), %rsi      # 0x7204
leaq 0x4256(%rip), %rdx      # 0x7075
pushq $0x1
popq %rbx
movq %r14, %rdi
movl %ebx, %ecx
movq %rax, %r8
xorl %eax, %eax
callq 0x1220
movl %ebx, %edi
callq 0x11b0
movq 0x91a1(%rip), %rax      # 0xbfe0
movq (%rax), %r14
pushq $0x7
popq %rdi
callq 0x6409
movq %rax, %r15
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x441e(%rip), %rsi      # 0x7283
leaq 0x4209(%rip), %rdx      # 0x7075
movq %r14, %rdi
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_set_car
struct value*
builtin_set_car(struct vm* vm, struct value* args)
{
    ASSERT_ARITY("set-car!", args, 2);
    ASSERT_TYPE("set-car!", args, 0, VALUE_PAIR);

    struct value* pair = CAR(args);
    struct value* val = CADR(args);
    pair->as.pair.car = val;
    return vm_make_empty_list(vm);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
movq %rsi, %rdi
callq 0x502c
cmpq $0x2, %rax
jne 0x2eda
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
cmpl $0x7, (%rax)
jne 0x2f0c
movq %rbx, %rdi
callq 0x50ce
movq %rax, %r15
movq %rbx, %rdi
callq 0x5046
movq %rax, %rdi
callq 0x50ce
movq %rax, 0x10(%r15)
movq %r14, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x66fc
movq 0x90ff(%rip), %rax      # 0xbfe0
movq (%rax), %r14
movq %rbx, %rdi
callq 0x502c
leaq 0x4311(%rip), %rsi      # 0x7204
leaq 0x417f(%rip), %rdx      # 0x7079
pushq $0x2
popq %rcx
movq %r14, %rdi
movq %rax, %r8
xorl %eax, %eax
callq 0x1220
jmp 0x2f52
movq 0x90cd(%rip), %rax      # 0xbfe0
movq (%rax), %r14
pushq $0x7
popq %rdi
callq 0x6409
movq %rax, %r15
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x434a(%rip), %rsi      # 0x7283
leaq 0x4139(%rip), %rdx      # 0x7079
movq %r14, %rdi
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_set_cdr
struct value*
builtin_set_cdr(struct vm* vm, struct value* args)
{
    ASSERT_ARITY("set-cdr!", args, 2);
    ASSERT_TYPE("set-cdr!", args, 0, VALUE_PAIR);

    struct value* pair = CAR(args);
    struct value* val = CADR(args);
    pair->as.pair.cdr = val;
    return vm_make_empty_list(vm);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
movq %rsi, %rdi
callq 0x502c
cmpq $0x2, %rax
jne 0x2fae
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
cmpl $0x7, (%rax)
jne 0x2fe0
movq %rbx, %rdi
callq 0x50ce
movq %rax, %r15
movq %rbx, %rdi
callq 0x5046
movq %rax, %rdi
callq 0x50ce
movq %rax, 0x18(%r15)
movq %r14, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x66fc
movq 0x902b(%rip), %rax      # 0xbfe0
movq (%rax), %r14
movq %rbx, %rdi
callq 0x502c
leaq 0x423d(%rip), %rsi      # 0x7204
leaq 0x40b4(%rip), %rdx      # 0x7082
pushq $0x2
popq %rcx
movq %r14, %rdi
movq %rax, %r8
xorl %eax, %eax
callq 0x1220
jmp 0x3026
movq 0x8ff9(%rip), %rax      # 0xbfe0
movq (%rax), %r14
pushq $0x7
popq %rdi
callq 0x6409
movq %rax, %r15
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x4276(%rip), %rsi      # 0x7283
leaq 0x406e(%rip), %rdx      # 0x7082
movq %r14, %rdi
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_open_input_file
struct value*
builtin_open_input_file(struct vm* vm, struct value* args)
{
    ASSERT_ARITY("open-input-file", args, 1);
    ASSERT_TYPE("open-input-file", args, 0, VALUE_STRING);

    struct value* path = CAR(args);

    FILE* port = fopen(path->as.string, "rb");
    if (port == NULL) {
        fprintf(stderr, "failed to open input file: %s\n", path->as.string);
        perror("reason");
        exit(EXIT_FAILURE);
    }

    return vm_make_input_port(vm, port);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
movq %rsi, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x33ee
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
cmpl $0x5, (%rax)
jne 0x3427
movq %rbx, %rdi
callq 0x50ce
movq %rax, %rbx
movq 0x10(%rax), %rdi
leaq 0x3f0b(%rip), %rsi      # 0x72db
callq 0x1190
testq %rax, %rax
je 0x346f
movq %r14, %rdi
movq %rax, %rsi
popq %rbx
popq %r14
popq %r15
jmp 0x69aa
movq 0x8beb(%rip), %rax      # 0xbfe0
movq (%rax), %r14
movq %rbx, %rdi
callq 0x502c
leaq 0x3dfd(%rip), %rsi      # 0x7204
leaq 0x3ce9(%rip), %rdx      # 0x70f7
pushq $0x1
popq %rbx
movq %r14, %rdi
movl %ebx, %ecx
movq %rax, %r8
xorl %eax, %eax
callq 0x1220
movl %ebx, %edi
callq 0x11b0
movq 0x8bb2(%rip), %rax      # 0xbfe0
movq (%rax), %r14
pushq $0x5
popq %rdi
callq 0x6409
movq %rax, %r15
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x3e2f(%rip), %rsi      # 0x7283
leaq 0x3c9c(%rip), %rdx      # 0x70f7
movq %r14, %rdi
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
jmp 0x3497
movq 0x8b6a(%rip), %rax      # 0xbfe0
movq (%rax), %rdi
movq 0x10(%rbx), %rdx
leaq 0x3e5a(%rip), %rsi      # 0x72de
xorl %eax, %eax
callq 0x1220
leaq 0x3e6b(%rip), %rdi      # 0x72fd
callq 0x1120
pushq $0x1
popq %rdi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_open_output_file
struct value*
builtin_open_output_file(struct vm* vm, struct value* args)
{
    ASSERT_ARITY("open-output-file", args, 1);
    ASSERT_TYPE("open-output-file", args, 0, VALUE_STRING);

    struct value* path = CAR(args);

    FILE* port = fopen(path->as.string, "wb");
    if (port == NULL) {
        fprintf(stderr, "failed to open output file: %s\n", path->as.string);
        perror("reason");
        exit(EXIT_FAILURE);
    }

    return vm_make_output_port(vm, port);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
movq %rsi, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x34fb
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
cmpl $0x5, (%rax)
jne 0x3534
movq %rbx, %rdi
callq 0x50ce
movq %rax, %rbx
movq 0x10(%rax), %rdi
leaq 0x3e27(%rip), %rsi      # 0x7304
callq 0x1190
testq %rax, %rax
je 0x357c
movq %r14, %rdi
movq %rax, %rsi
popq %rbx
popq %r14
popq %r15
jmp 0x69e3
movq 0x8ade(%rip), %rax      # 0xbfe0
movq (%rax), %r14
movq %rbx, %rdi
callq 0x502c
leaq 0x3cf0(%rip), %rsi      # 0x7204
leaq 0x3bec(%rip), %rdx      # 0x7107
pushq $0x1
popq %rbx
movq %r14, %rdi
movl %ebx, %ecx
movq %rax, %r8
xorl %eax, %eax
callq 0x1220
movl %ebx, %edi
callq 0x11b0
movq 0x8aa5(%rip), %rax      # 0xbfe0
movq (%rax), %r14
pushq $0x5
popq %rdi
callq 0x6409
movq %rax, %r15
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x3d22(%rip), %rsi      # 0x7283
leaq 0x3b9f(%rip), %rdx      # 0x7107
movq %r14, %rdi
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
jmp 0x35a4
movq 0x8a5d(%rip), %rax      # 0xbfe0
movq (%rax), %rdi
movq 0x10(%rbx), %rdx
leaq 0x3d76(%rip), %rsi      # 0x7307
xorl %eax, %eax
callq 0x1220
leaq 0x3d5e(%rip), %rdi      # 0x72fd
callq 0x1120
pushq $0x1
popq %rdi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_close_input_port
struct value*
builtin_close_input_port(struct vm* vm, struct value* args)
{
    ASSERT_ARITY("close-input-port", args, 1);
    ASSERT_TYPE("close-input-port", args, 0, VALUE_INPUT_PORT);

    struct value* port = CAR(args);
    fclose(port->as.port);

    return vm_make_empty_list(vm);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
movq %rsi, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x35f2
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
cmpl $0xa, (%rax)
jne 0x362b
movq %rbx, %rdi
callq 0x50ce
movq 0x10(%rax), %rdi
callq 0x1160
movq %r14, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x66fc
movq 0x89e7(%rip), %rax      # 0xbfe0
movq (%rax), %r14
movq %rbx, %rdi
callq 0x502c
leaq 0x3bf9(%rip), %rsi      # 0x7204
leaq 0x3b06(%rip), %rdx      # 0x7118
pushq $0x1
popq %rbx
movq %r14, %rdi
movl %ebx, %ecx
movq %rax, %r8
xorl %eax, %eax
callq 0x1220
movl %ebx, %edi
callq 0x11b0
movq 0x89ae(%rip), %rax      # 0xbfe0
movq (%rax), %r14
pushq $0xa
popq %rdi
callq 0x6409
movq %rax, %r15
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x3c2b(%rip), %rsi      # 0x7283
leaq 0x3ab9(%rip), %rdx      # 0x7118
movq %r14, %rdi
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_close_output_port
struct value*
builtin_close_output_port(struct vm* vm, struct value* args)
{
    ASSERT_ARITY("close-output-port", args, 1);
    ASSERT_TYPE("close-output-port", args, 0, VALUE_OUTPUT_PORT);

    struct value* port = CAR(args);
    fclose(port->as.port);

    return vm_make_empty_list(vm);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
movq %rsi, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x36bf
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
cmpl $0xb, (%rax)
jne 0x36f8
movq %rbx, %rdi
callq 0x50ce
movq 0x10(%rax), %rdi
callq 0x1160
movq %r14, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x66fc
movq 0x891a(%rip), %rax      # 0xbfe0
movq (%rax), %r14
movq %rbx, %rdi
callq 0x502c
leaq 0x3b2c(%rip), %rsi      # 0x7204
leaq 0x3a4a(%rip), %rdx      # 0x7129
pushq $0x1
popq %rbx
movq %r14, %rdi
movl %ebx, %ecx
movq %rax, %r8
xorl %eax, %eax
callq 0x1220
movl %ebx, %edi
callq 0x11b0
movq 0x88e1(%rip), %rax      # 0xbfe0
movq (%rax), %r14
pushq $0xb
popq %rdi
callq 0x6409
movq %rax, %r15
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x3b5e(%rip), %rsi      # 0x7283
leaq 0x39fd(%rip), %rdx      # 0x7129
movq %r14, %rdi
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_read
struct value*
builtin_read(struct vm* vm, struct value* args)
{
    ASSERT_ARITY_OR("read", args, 0, 1);

    long arity = list_length(args);
    if (arity == 1) {
        ASSERT_TYPE("read", args, 0, VALUE_INPUT_PORT);
    }

    struct value* port = NULL;
    if (arity == 1) {
        port = CAR(args);
    } else {
        port = vm_make_input_port(vm, stdin);
    }

    FILE* fp = port->as.port;
    return reader_read(vm, fp);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movq %rsi, %rdi
callq 0x502c
testq %rax, %rax
je 0x376e
movq %r14, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x37bd
movq %r14, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x3795
movq %r14, %rdi
xorl %esi, %esi
callq 0x5075
cmpl $0xa, (%rax)
jne 0x37f9
movq %r14, %rdi
callq 0x50ce
jmp 0x37a7
movq 0x883c(%rip), %rax      # 0xbfd8
movq (%rax), %rsi
movq %rbx, %rdi
callq 0x69aa
movq 0x10(%rax), %rsi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x5ed2
movq 0x881c(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
movq %r14, %rdi
callq 0x502c
leaq 0x3b51(%rip), %rsi      # 0x7327
leaq 0x395e(%rip), %rdx      # 0x713b
pushq $0x1
popq %rbp
movq %rbx, %rdi
xorl %ecx, %ecx
movl %ebp, %r8d
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
movl %ebp, %edi
callq 0x11b0
movq 0x87e0(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
pushq $0xa
popq %rdi
callq 0x6409
movq %rax, %r15
movq %r14, %rdi
xorl %esi, %esi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x3a5d(%rip), %rsi      # 0x7283
leaq 0x390e(%rip), %rdx      # 0x713b
movq %rbx, %rdi
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_read_char
struct value*
builtin_read_char(struct vm* vm, struct value* args)
{
    ASSERT_ARITY_OR("read-char", args, 0, 1);

    long arity = list_length(args);
    if (arity == 1) {
        ASSERT_TYPE("read-char", args, 0, VALUE_INPUT_PORT);
    }

    struct value* port = NULL;
    if (arity == 1) {
        port = CAR(args);
    } else {
        port = vm_make_input_port(vm, stdin);
    }

    FILE* fp = port->as.port;

    int c = fgetc(fp);
    if (ferror(fp)) {
        perror("error reading from port");
        exit(EXIT_FAILURE);
    }

    if (c == EOF && feof(fp)) {
        return vm_make_eof(vm);
    }

    return vm_make_character(vm, c);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movq %rsi, %rdi
callq 0x502c
testq %rax, %rax
je 0x3873
movq %r14, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x3912
movq %r14, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x389e
movq %r14, %rdi
xorl %esi, %esi
callq 0x5075
cmpl $0xa, (%rax)
jne 0x394e
movq %r14, %rdi
callq 0x50ce
jmp 0x38b0
movq 0x8733(%rip), %rax      # 0xbfd8
movq (%rax), %rsi
movq %rbx, %rdi
callq 0x69aa
movq 0x10(%rax), %r14
movq %r14, %rdi
callq 0x1240
movl %eax, %ebp
movq %r14, %rdi
callq 0x1250
testl %eax, %eax
jne 0x3901
cmpl $-0x1, %ebp
je 0x38e3
movq %rbx, %rdi
movl %ebp, %esi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x67a1
movq %r14, %rdi
callq 0x1230
testl %eax, %eax
je 0x38cf
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x6b19
leaq 0x3a66(%rip), %rdi      # 0x736e
callq 0x1120
jmp 0x3994
movq 0x86c7(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
movq %r14, %rdi
callq 0x502c
leaq 0x39fc(%rip), %rsi      # 0x7327
leaq 0x380e(%rip), %rdx      # 0x7140
pushq $0x1
popq %rbp
movq %rbx, %rdi
xorl %ecx, %ecx
movl %ebp, %r8d
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
movl %ebp, %edi
callq 0x11b0
movq 0x868b(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
pushq $0xa
popq %rdi
callq 0x6409
movq %rax, %r15
movq %r14, %rdi
xorl %esi, %esi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x3908(%rip), %rsi      # 0x7283
leaq 0x37be(%rip), %rdx      # 0x7140
movq %rbx, %rdi
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_peek_char
struct value*
builtin_peek_char(struct vm* vm, struct value* args)
{
    ASSERT_ARITY_OR("peek-char", args, 0, 1);

    long arity = list_length(args);
    if (arity == 1) {
        ASSERT_TYPE("peek-char", args, 0, VALUE_INPUT_PORT);
    }

    struct value* port = NULL;
    if (arity == 1) {
        port = CAR(args);
    } else {
        port = vm_make_input_port(vm, stdin);
    }

    FILE* fp = port->as.port;

    int c = fgetc(fp);
    if (ferror(fp)) {
        perror("error reading from port");
        exit(EXIT_FAILURE);
    }

    if (c == EOF && feof(fp)) {
        return vm_make_eof(vm);
    }

    ungetc(c, fp);

    return vm_make_character(vm, c);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movq %rsi, %rdi
callq 0x502c
testq %rax, %rax
je 0x39c8
movq %r14, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x3a71
movq %r14, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x39f3
movq %r14, %rdi
xorl %esi, %esi
callq 0x5075
cmpl $0xa, (%rax)
jne 0x3aad
movq %r14, %rdi
callq 0x50ce
jmp 0x3a05
movq 0x85de(%rip), %rax      # 0xbfd8
movq (%rax), %rsi
movq %rbx, %rdi
callq 0x69aa
movq 0x10(%rax), %r14
movq %r14, %rdi
callq 0x1240
movl %eax, %ebp
movq %r14, %rdi
callq 0x1250
testl %eax, %eax
jne 0x3a60
cmpl $-0x1, %ebp
je 0x3a42
movl %ebp, %edi
movq %r14, %rsi
callq 0x1090
movq %rbx, %rdi
movl %ebp, %esi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x67a1
movq %r14, %rdi
callq 0x1230
testl %eax, %eax
je 0x3a24
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x6b19
leaq 0x3907(%rip), %rdi      # 0x736e
callq 0x1120
jmp 0x3af3
movq 0x8568(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
movq %r14, %rdi
callq 0x502c
leaq 0x389d(%rip), %rsi      # 0x7327
leaq 0x36b9(%rip), %rdx      # 0x714a
pushq $0x1
popq %rbp
movq %rbx, %rdi
xorl %ecx, %ecx
movl %ebp, %r8d
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
movl %ebp, %edi
callq 0x11b0
movq 0x852c(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
pushq $0xa
popq %rdi
callq 0x6409
movq %rax, %r15
movq %r14, %rdi
xorl %esi, %esi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x37a9(%rip), %rsi      # 0x7283
leaq 0x3669(%rip), %rdx      # 0x714a
movq %rbx, %rdi
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_is_char_ready
struct value*
builtin_is_char_ready(struct vm* vm, struct value* args)
{
    ASSERT_ARITY_OR("char-ready?", args, 0, 1);

    long arity = list_length(args);
    if (arity == 1) {
        ASSERT_TYPE("char-ready?", args, 0, VALUE_INPUT_PORT);
    }

    struct value* port = NULL;
    if (arity == 1) {
        port = CAR(args);
    } else {
        port = vm_make_input_port(vm, stdin);
    }

    FILE* fp = port->as.port;

    int c = fgetc(fp);
    if (ferror(fp)) {
        perror("error reading from port");
        exit(EXIT_FAILURE);
    }

    if (c == EOF && feof(fp)) {
        return vm_make_boolean(vm, true);
    }

    ungetc(c, fp);

    return vm_make_boolean(vm, true);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movq %rsi, %rdi
callq 0x502c
testq %rax, %rax
je 0x3b95
movq %r14, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x3c2f
movq %r14, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x3bc0
movq %r14, %rdi
xorl %esi, %esi
callq 0x5075
cmpl $0xa, (%rax)
jne 0x3c6b
movq %r14, %rdi
callq 0x50ce
jmp 0x3bd2
movq 0x8411(%rip), %rax      # 0xbfd8
movq (%rax), %rsi
movq %rbx, %rdi
callq 0x69aa
movq 0x10(%rax), %r14
movq %r14, %rdi
callq 0x1240
movl %eax, %ebp
movq %r14, %rdi
callq 0x1250
testl %eax, %eax
jne 0x3c1e
cmpl $-0x1, %ebp
je 0x3bfd
movl %ebp, %edi
movq %r14, %rsi
callq 0x1090
jmp 0x3c09
movq %r14, %rdi
callq 0x1230
testl %eax, %eax
je 0x3bf1
pushq $0x1
popq %rsi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x676a
leaq 0x3749(%rip), %rdi      # 0x736e
callq 0x1120
jmp 0x3cb1
movq 0x83aa(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
movq %r14, %rdi
callq 0x502c
leaq 0x36df(%rip), %rsi      # 0x7327
leaq 0x3511(%rip), %rdx      # 0x7160
pushq $0x1
popq %rbp
movq %rbx, %rdi
xorl %ecx, %ecx
movl %ebp, %r8d
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
movl %ebp, %edi
callq 0x11b0
movq 0x836e(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
pushq $0xa
popq %rdi
callq 0x6409
movq %rax, %r15
movq %r14, %rdi
xorl %esi, %esi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x35eb(%rip), %rsi      # 0x7283
leaq 0x34c1(%rip), %rdx      # 0x7160
movq %rbx, %rdi
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_write
struct value*
builtin_write(struct vm* vm, struct value* args)
{
    ASSERT_ARITY_OR("write", args, 1, 2);

    long arity = list_length(args);
    if (arity == 2) {
        ASSERT_TYPE("write", args, 1, VALUE_OUTPUT_PORT);
    }

    struct value* obj = CAR(args);

    struct value* port = NULL;
    if (arity == 2) {
        port = CADR(args);
    } else {
        port = vm_make_output_port(vm, stdout);
    }

    value_print(port->as.port, obj);
    return vm_make_empty_list(vm);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rsi, %r14
movq %rdi, %rbx
movq %rsi, %rdi
callq 0x502c
cmpq $0x1, %rax
je 0x3ce3
movq %r14, %rdi
callq 0x502c
cmpq $0x2, %rax
jne 0x3d59
movq %r14, %rdi
callq 0x502c
movq %rax, %r12
cmpq $0x2, %rax
jne 0x3d08
pushq $0x1
popq %rsi
movq %r14, %rdi
callq 0x5075
cmpl $0xb, (%rax)
jne 0x3d91
movq %r14, %rdi
callq 0x50ce
movq %rax, %r15
cmpq $0x2, %r12
jne 0x3d2b
movq %r14, %rdi
callq 0x5046
movq %rax, %rdi
callq 0x50ce
jmp 0x3d3d
movq 0x828e(%rip), %rax      # 0xbfc0
movq (%rax), %rsi
movq %rbx, %rdi
callq 0x69e3
movq 0x10(%rax), %rdi
movq %r15, %rsi
callq 0x61e9
movq %rbx, %rdi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x66fc
movq 0x8280(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
movq %r14, %rdi
callq 0x502c
leaq 0x35b5(%rip), %rsi      # 0x7327
leaq 0x33f3(%rip), %rdx      # 0x716c
pushq $0x1
popq %rbp
pushq $0x2
popq %r8
movq %rbx, %rdi
movl %ebp, %ecx
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
jmp 0x3ddb
movq 0x8248(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
pushq $0xb
popq %rdi
callq 0x6409
movq %rax, %r15
pushq $0x1
popq %rsi
movq %r14, %rdi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x34c4(%rip), %rsi      # 0x7283
leaq 0x33a6(%rip), %rdx      # 0x716c
pushq $0x1
popq %rbp
movq %rbx, %rdi
movl %ebp, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
movl %ebp, %edi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_display
struct value*
builtin_display(struct vm* vm, struct value* args)
{
    ASSERT_ARITY_OR("display", args, 1, 2);

    long arity = list_length(args);
    if (arity == 2) {
        ASSERT_TYPE("display", args, 1, VALUE_OUTPUT_PORT);
    }

    struct value* obj = CAR(args);

    struct value* port = NULL;
    if (arity == 2) {
        port = CADR(args);
    } else {
        port = vm_make_output_port(vm, stdout);
    }

    value_print(port->as.port, obj);
    return vm_make_empty_list(vm);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rsi, %r14
movq %rdi, %rbx
movq %rsi, %rdi
callq 0x502c
cmpq $0x1, %rax
je 0x3e0c
movq %r14, %rdi
callq 0x502c
cmpq $0x2, %rax
jne 0x3e82
movq %r14, %rdi
callq 0x502c
movq %rax, %r12
cmpq $0x2, %rax
jne 0x3e31
pushq $0x1
popq %rsi
movq %r14, %rdi
callq 0x5075
cmpl $0xb, (%rax)
jne 0x3eba
movq %r14, %rdi
callq 0x50ce
movq %rax, %r15
cmpq $0x2, %r12
jne 0x3e54
movq %r14, %rdi
callq 0x5046
movq %rax, %rdi
callq 0x50ce
jmp 0x3e66
movq 0x8165(%rip), %rax      # 0xbfc0
movq (%rax), %rsi
movq %rbx, %rdi
callq 0x69e3
movq 0x10(%rax), %rdi
movq %r15, %rsi
callq 0x61e9
movq %rbx, %rdi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x66fc
movq 0x8157(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
movq %r14, %rdi
callq 0x502c
leaq 0x348c(%rip), %rsi      # 0x7327
leaq 0x32d0(%rip), %rdx      # 0x7172
pushq $0x1
popq %rbp
pushq $0x2
popq %r8
movq %rbx, %rdi
movl %ebp, %ecx
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
jmp 0x3f04
movq 0x811f(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
pushq $0xb
popq %rdi
callq 0x6409
movq %rax, %r15
pushq $0x1
popq %rsi
movq %r14, %rdi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x339b(%rip), %rsi      # 0x7283
leaq 0x3283(%rip), %rdx      # 0x7172
pushq $0x1
popq %rbp
movq %rbx, %rdi
movl %ebp, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
movl %ebp, %edi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_newline
struct value*
builtin_newline(struct vm* vm, struct value* args)
{
    ASSERT_ARITY_OR("newline", args, 0, 1);

    long arity = list_length(args);
    if (arity == 1) {
        ASSERT_TYPE("newline", args, 0, VALUE_OUTPUT_PORT);
    }

    struct value* port = NULL;
    if (arity == 1) {
        port = CAR(args);
    } else {
        port = vm_make_output_port(vm, stdout);
    }

    fputc('\n', port->as.port);
    return vm_make_empty_list(vm);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movq %rsi, %rdi
callq 0x502c
testq %rax, %rax
je 0x3f33
movq %r14, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x3f8a
movq %r14, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x3f5a
movq %r14, %rdi
xorl %esi, %esi
callq 0x5075
cmpl $0xb, (%rax)
jne 0x3fc6
movq %r14, %rdi
callq 0x50ce
jmp 0x3f6c
movq 0x805f(%rip), %rax      # 0xbfc0
movq (%rax), %rsi
movq %rbx, %rdi
callq 0x69e3
movq 0x10(%rax), %rsi
pushq $0xa
popq %rdi
callq 0x11c0
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x66fc
movq 0x804f(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
movq %r14, %rdi
callq 0x502c
leaq 0x3384(%rip), %rsi      # 0x7327
leaq 0x3dec(%rip), %rdx      # 0x7d96
pushq $0x1
popq %rbp
movq %rbx, %rdi
xorl %ecx, %ecx
movl %ebp, %r8d
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
movl %ebp, %edi
callq 0x11b0
movq 0x8013(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
pushq $0xb
popq %rdi
callq 0x6409
movq %rax, %r15
movq %r14, %rdi
xorl %esi, %esi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x3290(%rip), %rsi      # 0x7283
leaq 0x3d9c(%rip), %rdx      # 0x7d96
movq %rbx, %rdi
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_write_char
struct value*
builtin_write_char(struct vm* vm, struct value* args)
{
    ASSERT_ARITY_OR("write-char", args, 1, 2);
    ASSERT_TYPE("write-char", args, 0, VALUE_CHARACTER);

    long arity = list_length(args);
    if (arity == 2) {
        ASSERT_TYPE("write-char", args, 1, VALUE_OUTPUT_PORT);
    }

    struct value* obj = CAR(args);

    struct value* port = NULL;
    if (arity == 2) {
        port = CADR(args);
    } else {
        port = vm_make_output_port(vm, stdout);
    }

    fputc(obj->as.character, port->as.port);
    return vm_make_empty_list(vm);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rsi, %r14
movq %rdi, %rbx
movq %rsi, %rdi
callq 0x502c
cmpq $0x1, %rax
je 0x4042
movq %r14, %rdi
callq 0x502c
cmpq $0x2, %rax
jne 0x4116
movq %r14, %rdi
xorl %esi, %esi
callq 0x5075
cmpl $0x3, (%rax)
jne 0x40c8
movq %r14, %rdi
callq 0x502c
movq %rax, %r12
cmpq $0x2, %rax
jne 0x4076
pushq $0x1
popq %rsi
movq %r14, %rdi
callq 0x5075
cmpl $0xb, (%rax)
jne 0x414e
movq %r14, %rdi
callq 0x50ce
movq %rax, %r15
cmpq $0x2, %r12
jne 0x4099
movq %r14, %rdi
callq 0x5046
movq %rax, %rdi
callq 0x50ce
jmp 0x40ab
movq 0x7f20(%rip), %rax      # 0xbfc0
movq (%rax), %rsi
movq %rbx, %rdi
callq 0x69e3
movl 0x10(%r15), %edi
movq 0x10(%rax), %rsi
callq 0x11c0
movq %rbx, %rdi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x66fc
movq 0x7f11(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
pushq $0x3
popq %rdi
callq 0x6409
movq %rax, %r15
movq %r14, %rdi
xorl %esi, %esi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x318e(%rip), %rsi      # 0x7283
leaq 0x307e(%rip), %rdx      # 0x717a
movq %rbx, %rdi
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
movq 0x7ec3(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
movq %r14, %rdi
callq 0x502c
leaq 0x31f8(%rip), %rsi      # 0x7327
leaq 0x3044(%rip), %rdx      # 0x717a
pushq $0x1
popq %rbp
pushq $0x2
popq %r8
movq %rbx, %rdi
movl %ebp, %ecx
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
jmp 0x4198
movq 0x7e8b(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
pushq $0xb
popq %rdi
callq 0x6409
movq %rax, %r15
pushq $0x1
popq %rsi
movq %r14, %rdi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x3107(%rip), %rsi      # 0x7283
leaq 0x2ff7(%rip), %rdx      # 0x717a
pushq $0x1
popq %rbp
movq %rbx, %rdi
movl %ebp, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
movl %ebp, %edi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_make_window
struct value*
builtin_make_window(struct vm* vm, struct value* args)
{
    ASSERT_ARITY("make-window", args, 3);
    ASSERT_TYPE("make-window", args, 0, VALUE_STRING);
    ASSERT_TYPE("make-window", args, 1, VALUE_NUMBER);
    ASSERT_TYPE("make-window", args, 2, VALUE_NUMBER);

    struct value* title = list_nth(args, 0);
    struct value* width = list_nth(args, 1);
    struct value* height = list_nth(args, 2);

    return vm_make_window(vm, title->as.string, width->as.number, height->as.number);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
movq %rsi, %rdi
callq 0x502c
cmpq $0x3, %rax
jne 0x42ae
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
cmpl $0x5, (%rax)
jne 0x42e3
pushq $0x1
popq %rsi
movq %rbx, %rdi
callq 0x5075
cmpl $0x4, (%rax)
jne 0x4321
pushq $0x2
popq %rsi
movq %rbx, %rdi
callq 0x5075
cmpl $0x4, (%rax)
jne 0x4372
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
movq %rax, %r15
pushq $0x1
popq %rsi
movq %rbx, %rdi
callq 0x5075
movq %rax, %r12
pushq $0x2
popq %rsi
movq %rbx, %rdi
callq 0x5075
movq 0x10(%r15), %rsi
movq 0x10(%r12), %rdx
movq 0x10(%rax), %rcx
movq %r14, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0x6a1c
movq 0x7d2b(%rip), %rax      # 0xbfe0
movq (%rax), %r14
movq %rbx, %rdi
callq 0x502c
leaq 0x2f3d(%rip), %rsi      # 0x7204
leaq 0x2ebf(%rip), %rdx      # 0x718d
pushq $0x3
popq %rcx
movq %r14, %rdi
movq %rax, %r8
xorl %eax, %eax
callq 0x1220
jmp 0x43ba
movq 0x7cf6(%rip), %rax      # 0xbfe0
movq (%rax), %r14
pushq $0x5
popq %rdi
callq 0x6409
movq %rax, %r15
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x2f73(%rip), %rsi      # 0x7283
leaq 0x2e76(%rip), %rdx      # 0x718d
movq %r14, %rdi
xorl %ecx, %ecx
jmp 0x43ad
movq 0x7cb8(%rip), %rax      # 0xbfe0
movq (%rax), %r14
pushq $0x4
popq %rdi
callq 0x6409
movq %rax, %r15
pushq $0x1
popq %rsi
movq %rbx, %rdi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x2f34(%rip), %rsi      # 0x7283
leaq 0x2e37(%rip), %rdx      # 0x718d
pushq $0x1
popq %rbx
movq %r14, %rdi
movl %ebx, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
movl %ebx, %edi
callq 0x11b0
movq 0x7c67(%rip), %rax      # 0xbfe0
movq (%rax), %r14
pushq $0x4
popq %rdi
callq 0x6409
movq %rax, %r15
pushq $0x2
popq %rsi
movq %rbx, %rdi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x2ee3(%rip), %rsi      # 0x7283
leaq 0x2de6(%rip), %rdx      # 0x718d
pushq $0x2
popq %rcx
movq %r14, %rdi
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_window_clear
struct value*
builtin_window_clear(struct vm* vm, struct value* args)
{
    ASSERT_ARITY("window-clear!", args, 1);
    ASSERT_TYPE("window-clear!", args, 0, VALUE_WINDOW);

    struct value* window = CAR(args);

    SDL_SetRenderDrawColor(window->as.window.renderer, 0, 0, 0, 255);
    SDL_RenderClear(window->as.window.renderer);

    return vm_make_empty_list(vm);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movq %rsi, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x4427
movq %r14, %rdi
xorl %esi, %esi
callq 0x5075
cmpl $0xc, (%rax)
jne 0x4460
movq %r14, %rdi
callq 0x50ce
movq %rax, %r14
movq 0x18(%rax), %rdi
xorl %esi, %esi
xorl %edx, %edx
xorl %ecx, %ecx
movl $0xff, %r8d
callq 0x1210
movq 0x18(%r14), %rdi
callq 0x1150
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x66fc
movq 0x7bb2(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
movq %r14, %rdi
callq 0x502c
leaq 0x2dc4(%rip), %rsi      # 0x7204
leaq 0x2d52(%rip), %rdx      # 0x7199
pushq $0x1
popq %rbp
movq %rbx, %rdi
movl %ebp, %ecx
movq %rax, %r8
xorl %eax, %eax
callq 0x1220
movl %ebp, %edi
callq 0x11b0
movq 0x7b79(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
pushq $0xc
popq %rdi
callq 0x6409
movq %rax, %r15
movq %r14, %rdi
xorl %esi, %esi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x2df6(%rip), %rsi      # 0x7283
leaq 0x2d05(%rip), %rdx      # 0x7199
movq %rbx, %rdi
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_window_present
struct value*
builtin_window_present(struct vm* vm, struct value* args)
{
    ASSERT_ARITY("window-present!", args, 1);
    ASSERT_TYPE("window-present!", args, 0, VALUE_WINDOW);

    struct value* window = CAR(args);
    SDL_RenderPresent(window->as.window.renderer);

    return vm_make_empty_list(vm);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
movq %rsi, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x4797
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
cmpl $0xc, (%rax)
jne 0x47d0
movq %rbx, %rdi
callq 0x50ce
movq 0x18(%rax), %rdi
callq 0x1080
movq %r14, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x66fc
movq 0x7842(%rip), %rax      # 0xbfe0
movq (%rax), %r14
movq %rbx, %rdi
callq 0x502c
leaq 0x2a54(%rip), %rsi      # 0x7204
leaq 0x2a02(%rip), %rdx      # 0x71b9
pushq $0x1
popq %rbx
movq %r14, %rdi
movl %ebx, %ecx
movq %rax, %r8
xorl %eax, %eax
callq 0x1220
movl %ebx, %edi
callq 0x11b0
movq 0x7809(%rip), %rax      # 0xbfe0
movq (%rax), %r14
pushq $0xc
popq %rdi
callq 0x6409
movq %rax, %r15
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x2a86(%rip), %rsi      # 0x7283
leaq 0x29b5(%rip), %rdx      # 0x71b9
movq %r14, %rdi
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_event_poll
struct value*
builtin_event_poll(struct vm* vm, struct value* args)
{
    ASSERT_ARITY("event-poll", args, 1);
    ASSERT_TYPE("event-poll", args, 0, VALUE_WINDOW);

    SDL_Event* event = malloc(sizeof(SDL_Event));
    int rc = SDL_PollEvent(event);
    if (rc == 0) {
        free(event);
        return vm_make_empty_list(vm);
    } else {
        return vm_make_event(vm, event);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movq %rsi, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x48fc
movq %r14, %rdi
xorl %esi, %esi
callq 0x5075
cmpl $0xc, (%rax)
jne 0x4935
pushq $0x38
popq %rdi
callq 0x11d0
movq %rax, %r14
movq %rax, %rdi
callq 0x10e0
testl %eax, %eax
je 0x48e2
movq %rbx, %rdi
movq %r14, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x6ae0
movq %r14, %rdi
callq 0x11a0
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x66fc
movq 0x76dd(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
movq %r14, %rdi
callq 0x502c
leaq 0x28ef(%rip), %rsi      # 0x7204
leaq 0x28b4(%rip), %rdx      # 0x71d0
pushq $0x1
popq %rbp
movq %rbx, %rdi
movl %ebp, %ecx
movq %rax, %r8
xorl %eax, %eax
callq 0x1220
movl %ebp, %edi
callq 0x11b0
movq 0x76a4(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
pushq $0xc
popq %rdi
callq 0x6409
movq %rax, %r15
movq %r14, %rdi
xorl %esi, %esi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x2921(%rip), %rsi      # 0x7283
leaq 0x2867(%rip), %rdx      # 0x71d0
movq %rbx, %rdi
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_event_type
struct value*
builtin_event_type(struct vm* vm, struct value* args)
{
    ASSERT_ARITY("event-type", args, 1);
    ASSERT_TYPE("event-type", args, 0, VALUE_EVENT);

    struct value* event = CAR(args);
    switch (event->as.event->type) {
        case SDL_KEYDOWN:
//        case SDL_KEYUP:
            return vm_make_symbol(vm, "event-keyboard");
        case SDL_MOUSEMOTION:
            return vm_make_symbol(vm, "event-mousemotion");
//        case SDL_MOUSEBUTTONDOWN:
        case SDL_MOUSEBUTTONUP:
            return vm_make_symbol(vm, "event-mousebutton");
        case SDL_QUIT:
            return vm_make_symbol(vm, "event-quit");
        case SDL_WINDOWEVENT:
            return vm_make_symbol(vm, "event-window");
        default:
            return vm_make_symbol(vm, "event-undefined");
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movq %rsi, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x4a2c
movq %r14, %rdi
xorl %esi, %esi
callq 0x5075
cmpl $0xd, (%rax)
jne 0x4a65
movq %r14, %rdi
callq 0x50ce
movq 0x10(%rax), %rax
movl (%rax), %eax
cmpl $0x100, %eax            # imm = 0x100
je 0x4a13
cmpl $0x200, %eax            # imm = 0x200
je 0x49ef
cmpl $0x300, %eax            # imm = 0x300
je 0x4a01
cmpl $0x402, %eax            # imm = 0x402
je 0x49f8
cmpl $0x400, %eax            # imm = 0x400
jne 0x4a0a
leaq 0x29a8(%rip), %rsi      # 0x7395
jmp 0x4a1a
leaq 0x29ce(%rip), %rsi      # 0x73c4
jmp 0x4a1a
leaq 0x29a8(%rip), %rsi      # 0x73a7
jmp 0x4a1a
leaq 0x297e(%rip), %rsi      # 0x7386
jmp 0x4a1a
leaq 0x29c0(%rip), %rsi      # 0x73d1
jmp 0x4a1a
leaq 0x299f(%rip), %rsi      # 0x73b9
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x6875
movq 0x75ad(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
movq %r14, %rdi
callq 0x502c
leaq 0x27bf(%rip), %rsi      # 0x7204
leaq 0x278f(%rip), %rdx      # 0x71db
pushq $0x1
popq %rbp
movq %rbx, %rdi
movl %ebp, %ecx
movq %rax, %r8
xorl %eax, %eax
callq 0x1220
movl %ebp, %edi
callq 0x11b0
movq 0x7574(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
pushq $0xd
popq %rdi
callq 0x6409
movq %rax, %r15
movq %r14, %rdi
xorl %esi, %esi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x27f1(%rip), %rsi      # 0x7283
leaq 0x2742(%rip), %rdx      # 0x71db
movq %rbx, %rdi
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/builtin.c
// Function: builtin_event_key
struct value*
builtin_event_key(struct vm* vm, struct value* args)
{
    ASSERT_ARITY("event-type", args, 1);
    ASSERT_TYPE("event-type", args, 0, VALUE_EVENT);

    struct value* event = CAR(args);
    switch (event->as.event->key.keysym.sym) {
        case SDLK_ESCAPE:
            return vm_make_symbol(vm, "key-escape");
        case SDLK_LEFT:
            return vm_make_symbol(vm, "key-left");
        case SDLK_RIGHT:
            return vm_make_symbol(vm, "key-right");
        default:
            return vm_make_symbol(vm, "key-undefined");
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movq %rsi, %rdi
callq 0x502c
cmpq $0x1, %rax
jne 0x4b37
movq %r14, %rdi
xorl %esi, %esi
callq 0x5075
cmpl $0xd, (%rax)
jne 0x4b70
movq %r14, %rdi
callq 0x50ce
movq 0x10(%rax), %rax
movl 0x14(%rax), %eax
cmpl $0x1b, %eax
je 0x4b15
cmpl $0x4000004f, %eax       # imm = 0x4000004F
je 0x4b0c
cmpl $0x40000050, %eax       # imm = 0x40000050
jne 0x4b1e
leaq 0x28e2(%rip), %rsi      # 0x73ec
jmp 0x4b25
leaq 0x28e2(%rip), %rsi      # 0x73f5
jmp 0x4b25
leaq 0x28c5(%rip), %rsi      # 0x73e1
jmp 0x4b25
leaq 0x28da(%rip), %rsi      # 0x73ff
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x6875
movq 0x74a2(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
movq %r14, %rdi
callq 0x502c
leaq 0x26b4(%rip), %rsi      # 0x7204
leaq 0x2684(%rip), %rdx      # 0x71db
pushq $0x1
popq %rbp
movq %rbx, %rdi
movl %ebp, %ecx
movq %rax, %r8
xorl %eax, %eax
callq 0x1220
movl %ebp, %edi
callq 0x11b0
movq 0x7469(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
pushq $0xd
popq %rdi
callq 0x6409
movq %rax, %r15
movq %r14, %rdi
xorl %esi, %esi
callq 0x5075
movl (%rax), %edi
callq 0x6409
leaq 0x26e6(%rip), %rsi      # 0x7283
leaq 0x2637(%rip), %rdx      # 0x71db
movq %rbx, %rdi
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rdi
callq 0x11b0
nop
// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/env.c
// Function: env_empty
struct value*
env_empty(struct vm* vm)
{
    return env_extend(vm,
        vm_make_empty_list(vm),
        vm_make_empty_list(vm),
        vm_make_empty_list(vm));
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
callq 0x66fc
movq %rax, %r14
movq %rbx, %rdi
callq 0x66fc
movq %rax, %r15
movq %rbx, %rdi
callq 0x66fc
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %rax, %rcx
popq %rbx
popq %r14
popq %r15
jmp 0x4bf9