LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O2/johnvtan[P]ccccc/parse.c
// Function: parse_ternary
static expr_t *parse_ternary(list_t *tokens, env_t *env) {
    expr_t *cond = parse_logical_or(tokens, env);
    if (!check_next(tokens, TOK_QUESTION)) {
        debug("parse_ternary: no question mark found, not a ternary\n");
        return cond;
    }

    debug("parse_ternary: Found a ternary\n");
    expect_next(tokens, TOK_QUESTION);
    expr_t *then = parse_expr(tokens, env);
    debug("parse_ternary: got then\n");
    expect_next(tokens, TOK_COLON);
    expr_t *els = parse_ternary(tokens, env);
    debug("parse_ternary: got else\n");

    return new_ternary(cond, then, els);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rsi, %r14
movq %rdi, %r15
callq 0x3f7a
movq %rax, %rbx
pushq $0xb
popq %rbp
movq %r15, %rdi
callq 0x2d68
testq %rax, %rax
je 0x3d64
cmpl $0x1a, (%rax)
jne 0x3d64
movq %r15, %rdi
callq 0x2d0a
movq %r15, %rdi
movq %r14, %rsi
callq 0x3f7a
movl %ebp, %edi
movq %rbx, %rsi
movq %rax, %rdx
callq 0x3ea2
movq %rax, %rbx
jmp 0x3d2d
pushq $0x27
popq %rsi
movq %r15, %rdi
callq 0x3c7c
testb %al, %al
je 0x3dde
pushq $0x27
popq %rsi
movq %r15, %rdi
callq 0x3666
movq %r15, %rdi
movq %r14, %rsi
callq 0x3b59
movq %rax, %r12
pushq $0x26
popq %rsi
movq %r15, %rdi
callq 0x3666
movq %r15, %rdi
movq %r14, %rsi
callq 0x3d14
movl 0x4(%r12), %ebp
cmpl 0x4(%rax), %ebp
jne 0x3dea
movq %rax, %r14
pushq $0x10
popq %rdi
callq 0x10e0
movq %rax, %r15
movl $0x3, (%rax)
pushq $0x18
popq %rdi
callq 0x10e0
movq %rax, 0x8(%r15)
movq %rbx, (%rax)
movq %r12, 0x8(%rax)
movq %r14, 0x10(%rax)
movl %ebp, 0x4(%r15)
movq %r15, %rbx
movq %rbx, %rax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1343(%rip), %rdi      # 0x5134
leaq 0x1a84(%rip), %rsi      # 0x587c
leaq 0x1e1e(%rip), %rcx      # 0x5c1d
movl $0xaf, %edx
xorl %eax, %eax
callq 0x1080
pushq $-0x1
popq %rdi
callq 0x1110
// File: /workspace/github_c_makefile_star2_O2/johnvtan[P]ccccc/parse.c
// Function: new_assign
static expr_t *new_assign(expr_t *lhs, expr_t *rhs) {
    if (lhs->c_type != rhs->c_type) {
        // TODO implicit type conversions?
        UNREACHABLE("new_assign: lhs type doesn't equal rhs type\n");
    }
    expr_t *ret = malloc(sizeof(expr_t)); 
    ret->type = ASSIGN;
    ret->assign = malloc(sizeof(assign_t));
    ret->assign->lhs = lhs;
    ret->assign->rhs = rhs;
    ret->c_type = lhs->c_type;
    return ret;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movl 0x4(%rdi), %ebp
cmpl 0x4(%rsi), %ebp
jne 0x3e7b
movq %rsi, %rbx
movq %rdi, %r14
pushq $0x10
popq %r15
movq %r15, %rdi
callq 0x10e0
movq %rax, %r12
movl $0x4, (%rax)
movq %r15, %rdi
callq 0x10e0
movq %rax, 0x8(%r12)
movq %r14, (%rax)
movq %rbx, 0x8(%rax)
movl %ebp, 0x4(%r12)
movq %r12, %rax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x12b2(%rip), %rdi      # 0x5134
leaq 0x19f3(%rip), %rsi      # 0x587c
leaq 0x1dc6(%rip), %rcx      # 0x5c56
pushq $0x76
popq %rdx
xorl %eax, %eax
callq 0x1080
pushq $-0x1
popq %rdi
callq 0x1110
// File: /workspace/github_c_makefile_star2_O2/johnvtan[P]ccccc/parse.c
// Function: new_bin_expr
static expr_t *new_bin_expr(enum bin_op op, expr_t *lhs, expr_t *rhs) {
    if (!rhs || !lhs) {
        UNREACHABLE("");
    }

    if (rhs->c_type != lhs->c_type) {
        UNREACHABLE("new_bin_expr: lhs type doesn't match rhs type\n");
    }

    expr_t *expr = malloc(sizeof(bin_expr_t));
    if (!expr) {
        UNREACHABLE("");
    }

    expr->bin = malloc(sizeof(bin_expr_t));
    if (!expr->bin) {
        UNREACHABLE("");
    }
    expr->type = BIN_OP;
    expr->bin->op = op;
    expr->bin->lhs = lhs;
    expr->bin->rhs = rhs;
    expr->c_type = lhs->c_type;
    return expr;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
testq %rsi, %rsi
je 0x3f08
movq %rdx, %rbx
testq %rdx, %rdx
je 0x3f08
movq %rsi, %r14
movl 0x4(%rbx), %r12d
cmpl 0x4(%rsi), %r12d
jne 0x3f21
movl %edi, %ebp
pushq $0x18
popq %rdi
callq 0x10e0
testq %rax, %rax
je 0x3f3a
movq %rax, %r15
pushq $0x18
popq %rdi
callq 0x10e0
movq %rax, 0x8(%r15)
testq %rax, %rax
je 0x3f53
movl $0x2, (%r15)
movl %ebp, (%rax)
movq %r14, 0x8(%rax)
movq %rbx, 0x10(%rax)
movl %r12d, 0x4(%r15)
movq %r15, %rax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1225(%rip), %rdi      # 0x5134
leaq 0x1966(%rip), %rsi      # 0x587c
leaq 0x1d97(%rip), %rcx      # 0x5cb4
pushq $0x47
jmp 0x3f6a
leaq 0x120c(%rip), %rdi      # 0x5134
leaq 0x194d(%rip), %rsi      # 0x587c
leaq 0x1d4d(%rip), %rcx      # 0x5c83
pushq $0x4b
jmp 0x3f6a
leaq 0x11f3(%rip), %rdi      # 0x5134
leaq 0x1934(%rip), %rsi      # 0x587c
leaq 0x1d65(%rip), %rcx      # 0x5cb4
pushq $0x50
jmp 0x3f6a
leaq 0x11da(%rip), %rdi      # 0x5134
leaq 0x191b(%rip), %rsi      # 0x587c
leaq 0x1d4c(%rip), %rcx      # 0x5cb4
pushq $0x55
popq %rdx
xorl %eax, %eax
callq 0x1080
pushq $-0x1
popq %rdi
callq 0x1110
// File: /workspace/github_c_makefile_star2_O2/johnvtan[P]ccccc/parse.c
// Function: parse_logical_and
static expr_t *parse_logical_and(list_t *tokens, env_t *env) {
    expr_t *ret = parse_equality(tokens, env);

    token_t *curr;
    while ((curr = list_peek(tokens))) {
        if (curr->type == TOK_AND) {
            debug("Found logical and expr\n");
            list_pop(tokens);
            ret = new_bin_expr(BIN_AND, ret, parse_equality(tokens, env));
        } else {
            break;
        }
    }
    return ret;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
callq 0x3fd7
movq %rax, %r15
pushq $0xa
popq %rbp
movq %r14, %rdi
callq 0x2d68
testq %rax, %rax
je 0x3fc9
cmpl $0x19, (%rax)
jne 0x3fc9
movq %r14, %rdi
callq 0x2d0a
movq %r14, %rdi
movq %rbx, %rsi
callq 0x3fd7
movl %ebp, %edi
movq %r15, %rsi
movq %rax, %rdx
callq 0x3ea2
movq %rax, %r15
jmp 0x3f92
movq %r15, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/johnvtan[P]ccccc/parse.c
// Function: parse_equality
static expr_t *parse_equality(list_t *tokens, env_t *env) {
    expr_t *ret = parse_relational(tokens, env);

    token_t *curr;
    while ((curr = list_peek(tokens))) {
        if (curr->type == TOK_NE) {
            debug("Found not equal\n");
            list_pop(tokens);
            ret = new_bin_expr(BIN_NE, ret, parse_relational(tokens, env));
        } else if (curr->type == TOK_EQ) {
            debug("Found equal to\n");
            list_pop(tokens);
            ret = new_bin_expr(BIN_EQ, ret, parse_relational(tokens, env));
        } else {
            break;
        }
    }
    return ret;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
callq 0x404e
movq %rax, %r15
pushq $0x9
popq %r12
pushq $0x8
popq %r13
movq %r14, %rdi
callq 0x2d68
testq %rax, %rax
je 0x403c
movl (%rax), %eax
movl %r12d, %ebp
cmpl $0x1c, %eax
je 0x4017
cmpl $0x1b, %eax
jne 0x403c
movl %r13d, %ebp
movq %r14, %rdi
callq 0x2d0a
movq %r14, %rdi
movq %rbx, %rsi
callq 0x404e
movl %ebp, %edi
movq %r15, %rsi
movq %rax, %rdx
callq 0x3ea2
movq %rax, %r15
jmp 0x3ff8
movq %r15, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/johnvtan[P]ccccc/parse.c
// Function: parse_relational
static expr_t *parse_relational(list_t *tokens, env_t *env) {
    expr_t *ret = parse_add_sub(tokens, env);

    token_t *curr;
    while ((curr = list_peek(tokens))) {
        if (curr->type == TOK_GT) {
            debug("Found gt");
            list_pop(tokens);
            ret = new_bin_expr(BIN_GT, ret, parse_add_sub(tokens, env));
        } else if (curr->type == TOK_LT) {
            debug("Found lt");
            list_pop(tokens);
            ret = new_bin_expr(BIN_LT, ret, parse_add_sub(tokens, env));
        } else if (curr->type == TOK_GTE) {
            debug("Found lte");
            list_pop(tokens);
            ret = new_bin_expr(BIN_GTE, ret, parse_add_sub(tokens, env));
        } else if (curr->type == TOK_LTE) {
            debug("Found lte");
            list_pop(tokens);
            ret = new_bin_expr(BIN_LTE, ret, parse_add_sub(tokens, env));
        } else {
            break;
        }
    }
    return ret;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
callq 0x40b9
movq %rax, %r15
leaq 0x17e5(%rip), %r12      # 0x5850
movq %r14, %rdi
callq 0x2d68
testq %rax, %rax
je 0x40ad
movl (%rax), %eax
addl $-0x1d, %eax
cmpl $0x3, %eax
ja 0x40ad
movl %eax, %eax
movl (%r12,%rax,4), %ebp
movq %r14, %rdi
callq 0x2d0a
movq %r14, %rdi
movq %rbx, %rsi
callq 0x40b9
movl %ebp, %edi
movq %r15, %rsi
movq %rax, %rdx
callq 0x3ea2
movq %rax, %r15
jmp 0x406b
movq %r15, %rax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/johnvtan[P]ccccc/parse.c
// Function: parse_add_sub
static expr_t *parse_add_sub(list_t *tokens, env_t *env) {
    expr_t *ret = parse_mul_div(tokens, env);

    while (tokens->len) {
        if (match(tokens, TOK_PLUS)) {
            debug("Found plus\n");
            ret = new_bin_expr(BIN_ADD, ret, parse_mul_div(tokens, env));
        } else if (match(tokens, TOK_MINUS)) {
            debug("Found minus\n");
            ret = new_bin_expr(BIN_SUB, ret, parse_mul_div(tokens, env));
        } else {
            break;
        }
    }
    return ret;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
callq 0x413d
movq %rax, %r13
pushq $0x8
popq %rbp
pushq $0x14
popq %r15
pushq $0x1
popq %r12
cmpl $0x0, 0x18(%r14)
je 0x412b
movq %r14, %rdi
movl %ebp, %esi
callq 0x35a8
movq %r14, %rdi
testb %al, %al
je 0x4101
movq %rbx, %rsi
callq 0x413d
xorl %edi, %edi
jmp 0x411b
movl %r15d, %esi
callq 0x35a8
testb %al, %al
je 0x412b
movq %r14, %rdi
movq %rbx, %rsi
callq 0x413d
movl %r12d, %edi
movq %r13, %rsi
movq %rax, %rdx
callq 0x3ea2
movq %rax, %r13
jmp 0x40dd
movq %r13, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/johnvtan[P]ccccc/parse.c
// Function: parse_mul_div
static expr_t *parse_mul_div(list_t *tokens, env_t *env) {
    expr_t *ret = parse_unary(tokens, env);

    while (tokens->len) {
        if (match(tokens, TOK_MULT)) {
            debug("Found mult\n");
            ret = new_bin_expr(BIN_MUL, ret, parse_unary(tokens, env));
        } else if (match(tokens, TOK_DIV)) {
            debug("Found div\n");
            ret = new_bin_expr(BIN_DIV, ret, parse_unary(tokens, env));
        } else if (match(tokens, TOK_MODULO)){
            debug("Found modulo\n");
            ret = new_bin_expr(BIN_MODULO, ret, parse_mul_div(tokens, env));
        } else {
            break;
        }
    }
    return ret;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
callq 0x41dd
movq %rax, %r13
pushq $0x9
popq %rbp
pushq $0x2
popq %r15
pushq $0xa
popq %r12
cmpl $0x0, 0x18(%r14)
je 0x41cb
movq %r14, %rdi
movl %ebp, %esi
callq 0x35a8
movq %r14, %rdi
testb %al, %al
je 0x4186
movq %rbx, %rsi
callq 0x41dd
movl %r15d, %edi
jmp 0x41bb
movl %r12d, %esi
callq 0x35a8
movq %r14, %rdi
testb %al, %al
je 0x41a1
movq %rbx, %rsi
callq 0x41dd
pushq $0x3
jmp 0x41ba
pushq $0x21
popq %rsi
callq 0x35a8
testb %al, %al
je 0x41cb
movq %r14, %rdi
movq %rbx, %rsi
callq 0x413d
pushq $0xc
popq %rdi
movq %r13, %rsi
movq %rax, %rdx
callq 0x3ea2
movq %rax, %r13
jmp 0x4161
movq %r13, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/johnvtan[P]ccccc/parse.c
// Function: new_unary_expr
static expr_t *new_unary_expr(enum unary_op op, expr_t *inner) {
    if (!inner) {
        UNREACHABLE("");
    }

    expr_t *expr = malloc(sizeof(unary_expr_t));
    if (!expr) {
        UNREACHABLE("");
    }
    expr->unary = malloc(sizeof(unary_expr_t));
    if (!expr->unary) {
        UNREACHABLE("");
    }
    expr->type = UNARY_OP;
    expr->unary->op = op;
    expr->unary->expr = inner;
    expr->c_type = inner->c_type;
    return expr;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
testq %rsi, %rsi
je 0x47a5
movq %rsi, %rbx
movl %edi, %ebp
pushq $0x10
popq %rdi
callq 0x10e0
testq %rax, %rax
je 0x47be
movq %rax, %r14
pushq $0x10
popq %rdi
callq 0x10e0
movq %rax, 0x8(%r14)
testq %rax, %rax
je 0x47d7
movl $0x1, (%r14)
movl %ebp, (%rax)
movq %rbx, 0x8(%rax)
movl 0x4(%rbx), %eax
movl %eax, 0x4(%r14)
movq %r14, %rax
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x988(%rip), %rdi       # 0x5134
leaq 0x10c9(%rip), %rsi      # 0x587c
leaq 0x14fa(%rip), %rcx      # 0x5cb4
pushq $0x61
jmp 0x47ee
leaq 0x96f(%rip), %rdi       # 0x5134
leaq 0x10b0(%rip), %rsi      # 0x587c
leaq 0x14e1(%rip), %rcx      # 0x5cb4
pushq $0x66
jmp 0x47ee
leaq 0x956(%rip), %rdi       # 0x5134
leaq 0x1097(%rip), %rsi      # 0x587c
leaq 0x14c8(%rip), %rcx      # 0x5cb4
pushq $0x6a
popq %rdx
xorl %eax, %eax
callq 0x1080
pushq $-0x1
popq %rdi
callq 0x1110
nop
// File: /workspace/github_c_makefile_star2_O2/johnvtan[P]ccccc/string.c
// Function: file_to_string
string_t *file_to_string(char *filename) {
    FILE *fp = fopen(filename, "r");
    if (!fp)
        return NULL;
    char buf[1024];
    string_t *new = string_new(); 
    while (1) {
        int nread = fread(buf, 1, sizeof(buf), fp);
        if (nread == 0)
            break;
        string_append(new, buf, nread);
    }

    string_append(new, "\n\n", 2);
    return new;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x408, %rsp            # imm = 0x408
leaq 0x1525(%rip), %rsi      # 0x5d3a
callq 0x1100
testq %rax, %rax
je 0x486b
movq %rax, %r14
callq 0x487f
movq %rax, %rbx
movq %rsp, %r15
pushq $0x1
popq %r12
movl $0x400, %edx            # imm = 0x400
movq %r15, %rdi
movq %r12, %rsi
movq %r14, %rcx
callq 0x1060
testl %eax, %eax
je 0x4857
movq %rbx, %rdi
movq %r15, %rsi
movl %eax, %edx
callq 0x48a0
jmp 0x4831
leaq 0x1454(%rip), %rsi      # 0x5cb2
pushq $0x2
popq %rdx
movq %rbx, %rdi
callq 0x48a0
jmp 0x486d
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x408, %rsp            # imm = 0x408
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/johnvtan[P]ccccc/string.c
// Function: string_new
string_t *string_new(void) {
    string_t *new = malloc(sizeof(string_t));
    if (string_init(new) < 0)
        return NULL;
    return new;
}

// Assembly:
pushq %rbx
pushq $0x10
popq %rdi
callq 0x10e0
movq %rax, %rbx
movq %rax, %rdi
callq 0x48dd
xorl %ecx, %ecx
testl %eax, %eax
cmovnsq %rbx, %rcx
movq %rcx, %rax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/johnvtan[P]ccccc/string.c
// Function: string_init
int string_init(string_t *string) {
    if (!string)
        return -1;
    string->buf = malloc(sizeof(char) * STRING_DEFAULT_CAPACITY);
    if (!string->buf)
        return -1;
    string->len = 0;
    string->capacity = STRING_DEFAULT_CAPACITY;
    return 0;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
pushq $-0x1
popq %rbx
testq %rdi, %rdi
je 0x490c
movq %rdi, %r14
pushq $0x8
popq %rdi
callq 0x10e0
movq %rax, (%r14)
testq %rax, %rax
je 0x490c
movabsq $0x800000000, %rax      # imm = 0x800000000
movq %rax, 0x8(%r14)
xorl %ebx, %ebx
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/johnvtan[P]ccccc/string.c
// Function: string_free
void string_free(string_t *string) {
    if (!string)
        return;
    if (string->buf)
        free(string->buf);
    free(string);
}

// Assembly:
testq %rdi, %rdi
je 0x498f
pushq %rbx
movq %rdi, %rbx
movq (%rdi), %rdi
callq 0x1030
movq %rbx, %rdi
popq %rbx
jmp 0x1030
retq
// File: /workspace/github_c_makefile_star2_O2/johnvtan[P]ccccc/string.c
// Function: string_eq
int string_eq(string_t *s1, string_t *s2) {
    // I guess they might be equal if the user passes in two NULL pointers, but I'm going to say
    // that's invalid
    if (!s1 || !s2)
        return -1;
    
    if (s1->len != s2->len)
        return -1;

    // I'm pretty sure this handles empty string, but I'm not sure
    for (int i = 0; i < s1->len; i++) {
        if (s1->buf[i] != s2->buf[i]) {
            return -1;
        }
    }
    return 0;
}

// Assembly:
testq %rdi, %rdi
sete %cl
testq %rsi, %rsi
sete %dl
pushq $-0x1
popq %rax
orb %cl, %dl
jne 0x49df
movslq 0x8(%rdi), %rcx
cmpl 0x8(%rsi), %ecx
jne 0x49df
xorl %r8d, %r8d
testl %ecx, %ecx
movl $0x0, %eax
cmovgl %ecx, %eax
movq %r8, %rdx
cmpq %r8, %rax
je 0x49d5
movq (%rdi), %r8
movb (%r8,%rdx), %r9b
movq (%rsi), %r10
leaq 0x1(%rdx), %r8
cmpb (%r10,%rdx), %r9b
je 0x49b9
xorl %eax, %eax
cmpq %rcx, %rdx
setl %al
negl %eax
retq
// File: /workspace/github_c_makefile_star2_O2/johnvtan[P]ccccc/tokenize.c
// Function: print_token
void print_token(token_t *token) {
    if (!token)
        return;

    if (token->type == TOK_INT_LIT) {
        printf("integer literal: %d\n", token->int_literal);
        return;
    }

    if (token->type == TOK_CHAR_LIT) {
        printf("char literal: %c\n", token->char_literal);
        return;
    }

    if (token->type == TOK_IDENT) {
        printf("identifier: %s\n", string_get(token->ident));
        return;
    }

    // try special chars and keywords now
    keyword_pair_t keyword;
    int i = 0;
    do {
        keyword = keywords[i++];
        if (token->type == keyword.type) {
            printf("keyword: %s\n", keyword.keyword);
            return;
        }
    } while (keyword.keyword);

    special_char_pair_t special;
    i = 0;
    do {
        special = special_chars[i++];
        if (token->type == special.type) {
            printf("special char: %c\n", special.c);
            return;
        }
    } while (special.c);

    printf("UNKNOWN TOKEN!!!!!!\n");
}

// Assembly:
testq %rdi, %rdi
je 0x4c39
movl (%rdi), %eax
cmpl $0x1, %eax
je 0x4c47
cmpl $0x2, %eax
je 0x4c3a
cmpl $0x3, %eax
jne 0x4c58
pushq %rax
movq 0x8(%rdi), %rdi
callq 0x4958
leaq 0x10ae(%rip), %rdi      # 0x5cdc
movq %rax, %rsi
xorl %eax, %eax
popq %rcx
jmp 0x1080
retq
movsbl 0x8(%rdi), %esi
leaq 0x1085(%rip), %rdi      # 0x5cca
jmp 0x4c51
movl 0x8(%rdi), %esi
leaq 0x1064(%rip), %rdi      # 0x5cb5
xorl %eax, %eax
jmp 0x1080
pushq $0x8
popq %rcx
leaq 0x402e(%rip), %rdx      # 0x8c90
cmpl (%rcx,%rdx), %eax
je 0x4c98
addq $0x10, %rcx
cmpq $0x168, %rcx            # imm = 0x168
jne 0x4c62
xorl %ecx, %ecx
leaq 0x1133(%rip), %rdx      # 0x5db0
cmpl 0x4(%rdx,%rcx,8), %eax
je 0x4cab
incq %rcx
cmpq $0x16, %rcx
jne 0x4c7d
leaq 0x1103(%rip), %rdi      # 0x5d96
jmp 0x1050
movq -0x8(%rcx,%rdx), %rsi
leaq 0x1048(%rip), %rdi      # 0x5cec
xorl %eax, %eax
jmp 0x1080
movsbl (%rdx,%rcx,8), %esi
leaq 0x1043(%rip), %rdi      # 0x5cf9
jmp 0x4c51
// File: /workspace/github_c_makefile_star2_O2/ohkimur[P]the-c-programming-language-2nd-edition-solutions/chapter_6/exercise_6_05/undef.c
// Function: install
struct list_node *install(char *name, char *definition)
{
  struct list_node *node_p;
  if ((node_p = lookup(name)) == NULL)
  {
    node_p = (struct list_node *)malloc(sizeof(*node_p));
    if (node_p == NULL || (node_p->name = str_dup(name)) == NULL)
    {
      return NULL;
    }
    size_t hash_value = hash(name);
    node_p->next = hash_table[hash_value];
    hash_table[hash_value] = node_p;
  }
  else
  {
    free(node_p->definition);
  }

  if ((node_p->definition = str_dup(definition)) == NULL)
  {
    return NULL;
  }

  return node_p;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
movq %rdi, %r15
callq 0x1303
testq %rax, %rax
je 0x12bb
movq %rax, %rbx
movq 0x8(%rax), %rdi
callq 0x1030
movq %r14, %rdi
callq 0x13cc
movq %rax, 0x8(%rbx)
testq %rax, %rax
cmoveq %rax, %rbx
jmp 0x12fa
pushq $0x18
popq %rdi
callq 0x1090
testq %rax, %rax
je 0x12f8
movq %rax, %rbx
movq %r15, %rdi
callq 0x13cc
movq %rax, (%rbx)
testq %rax, %rax
je 0x12f8
movq %r15, %rdi
callq 0x13f1
leaq 0x2d86(%rip), %rcx      # 0x4070
movq (%rcx,%rax,8), %rdx
movq %rdx, 0x10(%rbx)
movq %rbx, (%rcx,%rax,8)
jmp 0x12a6
xorl %ebx, %ebx
movq %rbx, %rax
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/ohkimur[P]the-c-programming-language-2nd-edition-solutions/chapter_6/exercise_6_05/undef.c
// Function: undef
enum boolean undef(char *name)
{
  struct list_node *node_p;
  struct list_node *prev_node_p;
  size_t hash_value = hash(name);
  for (node_p = hash_table[hash_value], prev_node_p = NULL;
       node_p != NULL;
       prev_node_p = node_p, node_p = node_p->next)
  {
    if (strcmp(name, node_p->name) == 0)
    {
      free(node_p->name);
      free(node_p->definition);

      if (prev_node_p == NULL)
      {
        hash_table[hash_value] = node_p->next;
      }
      else
      {
        prev_node_p->next = node_p->next;
      }

      free(node_p);
      return TRUE;
    }
  }

  return FALSE;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %r14
callq 0x13f1
leaq 0x2d14(%rip), %rcx      # 0x4070
leaq (%rcx,%rax,8), %r13
xorl %r15d, %r15d
movq %r13, %rax
xorl %ebp, %ebp
movq (%rax), %rbx
testq %rbx, %rbx
je 0x13ba
movq (%rbx), %r12
movq %r14, %rdi
movq %r12, %rsi
callq 0x1080
testl %eax, %eax
je 0x138b
leaq 0x10(%rbx), %rax
movq %rbx, %rbp
jmp 0x1368
movq %r12, %rdi
callq 0x1030
movq 0x8(%rbx), %rdi
callq 0x1030
leaq 0x10(%rbp), %rax
testq %rbp, %rbp
movq 0x10(%rbx), %rcx
cmoveq %r13, %rax
movq %rcx, (%rax)
movq %rbx, %rdi
callq 0x1030
pushq $0x1
popq %r15
movl %r15d, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/ohkimur[P]the-c-programming-language-2nd-edition-solutions/chapter_6/exercise_6_05/undef.c
// Function: hash
size_t hash(char *str)
{
  size_t hash_value = 0;
  while (*str != '\0')
  {
    hash_value = *str + 31 * hash_value;
    ++str;
  }
  return hash_value % HASH_SIZE;
}

// Assembly:
xorl %eax, %eax
movsbq (%rdi), %rcx
testq %rcx, %rcx
je 0x1408
imulq $0x1f, %rax, %rax
addq %rcx, %rax
incq %rdi
jmp 0x13f3
pushq $0x65
popq %rcx
xorl %edx, %edx
divq %rcx
movq %rdx, %rax
retq
// File: /workspace/github_c_makefile_star2_O2/eiselekd[P]MinimalLisp/./f1.c
// Function: foptoa
char *foptoa(struct fctx *cctx, struct v *v) {
    struct v *c, *e, *n;
    for (c = cctx->env; c; c = cdr(c)) {
        n = caar(c); e = cdar(c);
        if ((v == (fwordp(v) ? e : car(e))))
            return str(n);
    }
    return "<undef>";
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
addq $0x148, %rdi            # imm = 0x148
leaq 0x8c07(%rip), %rax      # 0xa3b4
movl $0x10f, %ecx            # imm = 0x10F
movq (%rdi), %rdi
testq %rdi, %rdi
je 0x1801
movq 0x8(%rdi), %r8
testq %r8, %r8
je 0x17cd
movq 0x8(%r8), %rdx
movq 0x10(%r8), %r8
jmp 0x17d2
xorl %edx, %edx
xorl %r8d, %r8d
testq %rsi, %rsi
je 0x17e6
movl (%rsi), %r9d
andl %ecx, %r9d
cmpl $0x100, %r9d            # imm = 0x100
je 0x17f4
testq %r8, %r8
je 0x17f1
movq 0x8(%r8), %r8
jmp 0x17f4
xorl %r8d, %r8d
addq $0x10, %rdi
cmpq %rsi, %r8
jne 0x17b2
movq 0x8(%rdx), %rax
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/eiselekd[P]MinimalLisp/./l1.c
// Function: eval
v *
eval(ctx *cctx, v *e, v *env) 
{
    v *r = 0, *f;
    switch(e->tag) {
    case INT: case STR:
        r = e;
        break;
    case SYM:
        if (QUOTED(e)) {
            r = e;
        } else {
            if ((r = assq(e, env))) {
                r = cdr(r);
            } else {
                fprintf(stderr, "Undefined symbol \"%s\"\n", str(e));
            }
        }
        break;
    case FUNC:
        break;
    case CONS:
        if (QUOTED(e)) {
            r = evargs(cctx, e, env);
        } else {
            f = eval(cctx, car(e), env);
            r = apply(cctx, f, cdr(e), env);
        }
        break;
    }
    return r;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r14
movq %rsi, %rbx
movl (%rsi), %eax
movl %eax, %ecx
andl $0xf, %ecx
leal -0x1(%rcx), %edx
cmpl $0x2, %edx
jb 0x1e37
testl %ecx, %ecx
je 0x1e03
cmpl $0x3, %ecx
jne 0x1e35
testb %al, %al
js 0x1e37
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1772
testq %rax, %rax
je 0x1e5d
movq 0x10(%rax), %rbx
jmp 0x1e37
movq %rdi, %r15
testb %al, %al
js 0x1e45
movq 0x8(%rbx), %rsi
movq %r15, %rdi
movq %r14, %rdx
callq 0x1dc1
movq 0x10(%rbx), %rdx
movq %r15, %rdi
movq %rax, %rsi
movq %r14, %rcx
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x2156
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movq %r15, %rdi
movq %rbx, %rsi
movq %r14, %rdx
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x2088
movq 0xc194(%rip), %rax      # 0xdff8
movq (%rax), %rdi
movq 0x8(%rbx), %rdx
leaq 0x82d3(%rip), %rsi      # 0xa145
xorl %ebx, %ebx
xorl %eax, %eax
callq 0x10b0
jmp 0x1e37
// File: /workspace/github_c_makefile_star2_O2/eiselekd[P]MinimalLisp/./l1.c
// Function: evbind
v *
evbind(v *n, v *a, v *ev)
{
    if (ConsP(n)) {
        for (; n; n = cdr(n), a = cdr(a)) {
            ev = mkCons(mkCons(car(n), car(a)),ev);
        }
    } else {
        ev = mkCons(mkCons(n,a),ev);
    }
    return ev;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %rbx
movq %rdi, %r14
testq %rdi, %rdi
je 0x20ed
testb $0xf, (%r14)
je 0x2143
movq %r14, %rdi
callq 0x1322
movq %rax, %rdi
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x1322
movq %rsi, %r15
testq %rsi, %rsi
je 0x2118
movq 0x8(%r15), %rsi
jmp 0x211a
xorl %esi, %esi
movq 0x8(%r14), %rdi
callq 0x1322
movq %rax, %rdi
movq %rbx, %rsi
callq 0x1322
movq %rax, %rbx
movq 0x10(%r14), %r14
movl $0x0, %esi
testq %r15, %r15
je 0x2143
movq 0x10(%r15), %rsi
testq %r14, %r14
jne 0x210a
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/eiselekd[P]MinimalLisp/./l1.c
// Function: apply
v *
apply(ctx *cctx, v *fn, v *args, v *env) 
{
    v *r = 0, *benv;
    if (!fn)
        return 0;
    switch(fn->tag) {
    case OP:
        if (OP_ARGEVALP(fn))
            args = evargs(cctx,args,env);
        r = op(fn)(cctx, args, env);
        break;
    case FUNC:
        benv = env;
        if (FN_ARGEVALP(fn))
            args = evargs(cctx,args,env);
        if (FN_FUNCENVP(fn))
            benv = funcenv(fn);
        if (FN_ARGBINDP(fn))
            benv = evbind(car(func(fn)), args, benv);
        r = evlist(cctx, cdr(func(fn)),benv);
        break;
    default:
        fprintf(stderr, "Cannot apply to "); print(cctx, stderr, fn); fprintf(stderr, "\n"); 
        break;
    }
    return r;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
testq %rsi, %rsi
je 0x2253
movq %rcx, %r15
movq %rsi, %r14
movq %rdi, %rbx
movl (%rsi), %eax
movl %eax, %ecx
andl $0xf, %ecx
cmpl $0x4, %ecx
je 0x21b5
cmpl $0x5, %ecx
jne 0x221e
testb $0x10, %al
je 0x219c
movq %rbx, %rdi
movq %rdx, %rsi
movq %r15, %rdx
callq 0x2088
movq %rax, %rdx
movq 0x8(%r14), %rax
movq %rbx, %rdi
movq %rdx, %rsi
movq %r15, %rdx
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmpq *%rax
testb $0x10, %al
je 0x21cd
movq %rbx, %rdi
movq %rdx, %rsi
movq %r15, %rdx
callq 0x2088
movq %rax, %rdx
movl (%r14), %eax
testb $0x20, %al
je 0x21d5
movq 0x10(%r14), %r15
testb $0x40, %al
je 0x21f8
movq 0x8(%r14), %rax
testq %rax, %rax
je 0x21e8
movq 0x8(%rax), %rdi
jmp 0x21ea
xorl %edi, %edi
movq %rdx, %rsi
movq %r15, %rdx
callq 0x20d2
movq %rax, %r15
movq 0x8(%r14), %rax
testq %rax, %rax
je 0x2207
movq 0x10(%rax), %rsi
jmp 0x2209
xorl %esi, %esi
movq %rbx, %rdi
movq %r15, %rdx
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x1e7d
movq 0xbdd3(%rip), %r15      # 0xdff8
movq (%r15), %rcx
leaq 0x7f2d(%rip), %rdi      # 0xa15c
pushq $0x10
popq %rsi
pushq $0x1
popq %rdx
callq 0x1160
movq (%r15), %rsi
movq %rbx, %rdi
movq %r14, %rdx
callq 0x1838
movq (%r15), %rsi
pushq $0xa
popq %rdi
callq 0x1080
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/eiselekd[P]MinimalLisp/./l1.c
// Function: unique
v *
unique(ctx *cctx, char *s, int l) 
{
    v *v; char *cmp;
    for (v = cctx->sym; v; v = cdr(v)) {
        cmp = str(car(v));
        if (strlen(cmp) == l && strncasecmp(cmp, s, l) == 0) {
            return car(v);
        }
    }
    if (!v) {
        cctx->sym = mkCons((v = mkSym(s,l)), cctx->sym);
    }
    return v;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rsi, %r15
movq %rdi, %rbx
movl %edx, -0x2c(%rbp)
movslq %edx, %r12
movq %rdi, -0x38(%rbp)
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x22b6
movq 0x8(%rbx), %r13
movq 0x8(%r13), %r14
movq %r14, %rdi
callq 0x1050
cmpq %r12, %rax
jne 0x22b0
movq %r14, %rdi
movq %r15, %rsi
movq %r12, %rdx
callq 0x10f0
testl %eax, %eax
je 0x22d9
addq $0x10, %rbx
jmp 0x2281
pushq $0x3
popq %rdx
movq %r15, %rdi
movl -0x2c(%rbp), %esi
callq 0x13b9
movq %rax, %r13
movq -0x38(%rbp), %rbx
movq (%rbx), %rsi
movq %rax, %rdi
callq 0x1322
movq %rax, (%rbx)
movq %r13, %rax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/eiselekd[P]MinimalLisp/./l1.c
// Function: nth
v *
_nth(v *v, int i, int f)
{
    struct v *r;
    if (f && !v) {
        v = mkCons(0,0);
    }
    while(v && (i-- > 0)) {
        if (!(v = cdr(r = v))) {
            if (f)
                rplacd(r, v = mkCons(0,0));
        }
    }
    return v;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %edx, %ebx
movl %esi, %r14d
movq %rdi, %r15
testl %edx, %edx
sete %al
testq %rdi, %rdi
setne %cl
orb %al, %cl
jne 0x2318
xorl %edi, %edi
xorl %esi, %esi
callq 0x1322
movq %rax, %r15
testq %r15, %r15
je 0x2341
testl %r14d, %r14d
jle 0x2341
movq 0x10(%r15), %rax
testl %ebx, %ebx
je 0x233c
testq %rax, %rax
jne 0x233c
xorl %edi, %edi
xorl %esi, %esi
callq 0x1322
movq %rax, 0x10(%r15)
decl %r14d
jmp 0x2315
movq %r15, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/eiselekd[P]MinimalLisp/./l1.c
// Function: nreverse
v *
nreverse(v *v)
{
    struct v *r = 0, *h, *l = v, *lt, *c, *p, *n, *t;
    int tq = 0;
    h = l;
    lt = c = cdr(l);
    if (c) {
        if (cdr(c)) {
            p = 0;
            do {
                n = cdr(c);
                rplacd(c,p);
                p = c;
                c = n;
            } while(cdr(c));
            rplacd(l, p);
            rplacd(lt, c);
        }
        /* swap head,c */
        tq = QUOTED(h);
        t = car(h);
        QUOTEV(h, QUOTED(c));
        rplaca(h, car(c));
        rplaca(c, t);
        QUOTEV(c, tq);
    }
    return h;
}

// Assembly:
movq %rdi, %rax
testq %rdi, %rdi
je 0x23d0
movq 0x10(%rax), %rdx
testq %rdx, %rdx
je 0x23d0
pushq %rbp
movq %rsp, %rbp
movq 0x10(%rdx), %rsi
testq %rsi, %rsi
je 0x2392
xorl %edi, %edi
movq %rdx, %rcx
movq %rcx, %r8
movq %rsi, %rcx
movq %rdi, 0x10(%r8)
movq 0x10(%rsi), %rsi
movq %r8, %rdi
testq %rsi, %rsi
jne 0x2372
movq %r8, 0x10(%rax)
movq %rcx, 0x10(%rdx)
jmp 0x2395
movq %rdx, %rcx
movl (%rax), %edx
movq 0x8(%rax), %rsi
movl $0x80, %edi
movl (%rcx), %r8d
andl %edi, %r8d
movl $0xffffff7f, %r9d       # imm = 0xFFFFFF7F
movl %edx, %r10d
andl %r9d, %r10d
orl %r8d, %r10d
movl %r10d, (%rax)
movq 0x8(%rcx), %r8
movq %r8, 0x8(%rax)
movq %rsi, 0x8(%rcx)
andl %edi, %edx
andl (%rcx), %r9d
orl %edx, %r9d
movl %r9d, (%rcx)
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/eiselekd[P]MinimalLisp/./l1.c
// Function: sreverse
v *
sreverse(v *v)
{
    struct v *r = 0, *h, *e, *l = v, *n;
    if (!v)
        return v;
    h = l;
    n = cdr(l);
    rplacd(l,0); 
    while (e = n) {
        n = cdr(n);
        rplacd(e,h); 
        h = e;
    } 
    return h;
}

// Assembly:
testq %rdi, %rdi
je 0x23f1
pushq %rbp
movq %rsp, %rbp
xorl %ecx, %ecx
movq %rdi, %rax
movq 0x10(%rdi), %rdi
movq %rcx, 0x10(%rax)
movq %rax, %rcx
testq %rdi, %rdi
jne 0x23dc
popq %rbp
retq
xorl %eax, %eax
retq
// File: /workspace/github_c_makefile_star2_O2/eiselekd[P]MinimalLisp/./f1.c
// Function: comma
v *
comma(fctx *cctx, struct v *f, struct v *v) 
{
    struct v *e, *l = cdr(f); 
    rplaca(l,v);
    rplacd(f,e=mkCons(0,cdr(f)));
    FPRINTF(FDBG, "%-10s: @ ",""); 
    dbgfdef(cctx, car(f), cdr(f)); FPRINTF(FDBG, "\n");
    return l;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movq %rsi, %rbx
testq %rsi, %rsi
je 0x4968
movq 0x10(%rbx), %r14
testq %r14, %r14
je 0x4968
movq %rdx, 0x8(%r14)
movq 0x10(%rbx), %rsi
jmp 0x496d
xorl %r14d, %r14d
xorl %esi, %esi
xorl %edi, %edi
callq 0x1322
testq %rbx, %rbx
je 0x497d
movq %rax, 0x10(%rbx)
movq %r14, %rax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/eiselekd[P]MinimalLisp/./f1.c
// Function: next
v *
next(fctx *cctx, int *imm) 
{
    char *b;
    v *w= 0, *s, *s2, *nm; char *e, *n; long v; int l;
    if ((s = cctx->peek)) {
        if(imm)
            *imm = cctx->peek_imm; 
        cctx->peek = 0;
        return s;
    }
    nm = s = word(cctx);
    n = str(s); l = strlen(n); 
    if (!(w = find(cctx, s))) {
        if (n[0] == '_' && l > 1) { /* search for maybe immediate version _<name> but return non-imm */
            if ((s2 = unique(&cctx->lctx, n+1, l-1))) {
                if ((w = find(cctx, s2))) {
                    *imm = 0;
                    goto doword;
                }
            }
        }
        if ((strchr("+-",n[0]) && isdigit(n[1])) ||
            isdigit(n[0])) {
            v = (long)strtoul(n, &e, 0);
            if (n + l == e) {
                s = mkInt(v);
            }
        }
        FPRINTF(FDBG, ">"); PRINT(LCTX,FDBG, s); FPRINTF(FDBG, "\n");
        if (imm)
            *imm = 0;
    } else {
        if (imm)
            *imm = FOP_IMMEDIATE(w);
        doword:
        s = cdr(w);
        FPRINTF(FDBG, ">["); PRINT(LCTX,FDBG, nm); FPRINTF(FDBG, "]\n");
    }
    return s;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rsi, %rbx
movq %rdi, %r13
movq 0x168(%rdi), %r14
testq %r14, %r14
je 0x4a3d
testq %rbx, %rbx
je 0x4a30
movl 0x170(%r13), %eax
movl %eax, (%rbx)
andq $0x0, 0x168(%r13)
jmp 0x4b40
movq %r13, %rdi
callq 0x932d
movq %rax, %r14
movq 0x8(%rax), %r15
movq %r15, %rdi
callq 0x1050
movq %rax, %r12
movq %r13, %rdi
movq %r14, %rsi
callq 0x9435
testq %rax, %rax
je 0x4a7f
testq %rbx, %rbx
je 0x4a76
movl (%rax), %ecx
shrl $0x7, %ecx
andl $0x1, %ecx
movl %ecx, (%rbx)
movq 0x10(%rax), %r14
jmp 0x4b40
movq %r12, %rcx
movb (%r15), %r12b
cmpb $0x5f, %r12b
sete %al
movq %rcx, -0x30(%rbp)
cmpl $0x2, %ecx
setge %cl
andb %al, %cl
cmpb $0x1, %cl
jne 0x4acc
leaq 0x1(%r15), %rsi
movq -0x30(%rbp), %rax
leal -0x1(%rax), %edx
movq %r13, %rdi
callq 0x2260
testq %rax, %rax
je 0x4ac9
movq %r13, %rdi
movq %rax, %rsi
callq 0x9435
testq %rax, %rax
je 0x4ac9
xorl %ecx, %ecx
jmp 0x4a74
movb (%r15), %r12b
cmpb $0x2d, %r12b
ja 0x4afc
movzbl %r12b, %eax
movabsq $0x280000000001, %rcx   # imm = 0x280000000001
btq %rax, %rcx
jae 0x4afc
callq 0x1180
movq (%rax), %rcx
movsbq 0x1(%r15), %rdx
testb $0x8, 0x1(%rcx,%rdx,2)
je 0x4b01
jmp 0x4b0f
callq 0x1180
movq (%rax), %rax
movsbq %r12b, %rcx
testb $0x8, 0x1(%rax,%rcx,2)
je 0x4b38
leaq -0x38(%rbp), %r13
movq %r15, %rdi
movq %r13, %rsi
xorl %edx, %edx
callq 0x1130
movslq -0x30(%rbp), %rcx
addq %r15, %rcx
cmpq (%r13), %rcx
jne 0x4b38
movq %rax, %rdi
callq 0x1343
movq %rax, %r14
testq %rbx, %rbx
je 0x4b40
andl $0x0, (%rbx)
movq %r14, %rax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/eiselekd[P]MinimalLisp/./f1.c
// Function: fop_interpret
v *
fop_interpret(fctx *cctx)
{
    int lit, imm = 0; long val;
    struct v *v = next(cctx, &imm);
    if (v) {
        switch(v->tag) {
            
        case CONS:
            
            if ((cctx->w = v)) {
                if (imm || !FCTX_COMPILE(cctx)) {
                    return car(cctx->w);
                } else { /* compiling */
                    comma(cctx, cctx->here, v);
                }
            }
            return NEXT(cctx);
            break;
            
        case STR: case INT:
            
            if (FCTX_COMPILE(cctx)) {
                comma(cctx, cctx->here, g_LIT);
                comma(cctx, cctx->here, v);
            } else {
                PUSH(v);
            }
            return NEXT(cctx);
            break;
        
        case SYM:
            if (FCTX_COMPILE(cctx)) {
                comma(cctx, cctx->here, g_SYM);
                comma(cctx, cctx->here, v);
                return NEXT(cctx);
            }
            break;
            
        }
    }
    dbgprint(cctx," * ");

    if (cctx->fc >= 0) 
        return NEXT(cctx);
    else 
        return 0;
    
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rdi, %rbx
leaq -0x14(%rbp), %rsi
andl $0x0, (%rsi)
callq 0x49ff
testq %rax, %rax
je 0x5207
movq %rax, %r14
movl (%rax), %eax
andl $0xf, %eax
leal -0x1(%rax), %ecx
cmpl $0x2, %ecx
jb 0x51dd
cmpl $0x3, %eax
je 0x51fe
testl %eax, %eax
jne 0x5207
movq %r14, 0x138(%rbx)
cmpl $0x0, -0x14(%rbp)
jne 0x51d4
testb $0x1, 0x118(%rbx)
jne 0x5236
movq 0x8(%r14), %rax
jmp 0x5281
testb $0x1, 0x118(%rbx)
jne 0x5213
movq 0x120(%rbx), %rsi
movq %r14, %rdi
callq 0x1322
movq %rax, 0x120(%rbx)
jmp 0x5245
testb $0x1, 0x118(%rbx)
jne 0x5223
cmpq $0x0, 0x90(%rbx)
jns 0x5245
jmp 0x527f
movq 0x158(%rbx), %rsi
movq 0x90a7(%rip), %rdx      # 0xe2c8
jmp 0x5231
movq 0x158(%rbx), %rsi
movq 0x909f(%rip), %rdx      # 0xe2d0
callq 0x4946
movq 0x158(%rbx), %rsi
movq %r14, %rdx
callq 0x4946
movq 0x130(%rbx), %rax
testq %rax, %rax
je 0x5272
movq 0x8(%rax), %rcx
movq %rcx, 0x138(%rbx)
movq 0x10(%rax), %rax
movq %rax, 0x130(%rbx)
testq %rcx, %rcx
je 0x527f
movq 0x8(%rcx), %rax
jmp 0x5281
addq $0x130, %rbx            # imm = 0x130
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
xorl %eax, %eax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/eiselekd[P]MinimalLisp/./f1.c
// Function: key
int 
key(fctx *cctx)
{
    int c = EOF;
    if (cctx->fc >= 0) {
        while ((c = getc(cctx->f[cctx->fc])) == EOF) {
            fclose(cctx->f[cctx->fc--]);
            if (cctx->fc < 0)
                return c;
        }
    }
    return c;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movq 0x90(%rdi), %rax
pushq $-0x1
popq %rbx
testq %rax, %rax
js 0x534d
movq %rdi, %r14
movq 0x10(%r14,%rax,8), %rdi
callq 0x1170
cmpl $-0x1, %eax
jne 0x534b
movq 0x90(%r14), %rax
leaq -0x1(%rax), %rcx
movq %rcx, 0x90(%r14)
movq 0x10(%r14,%rax,8), %rdi
callq 0x1040
movq 0x90(%r14), %rax
testq %rax, %rax
jns 0x5312
jmp 0x534d
movl %eax, %ebx
movl %ebx, %eax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/eiselekd[P]MinimalLisp/./f1.c
// Function: fdef
v *
fdef(fctx *cctx, char *n, int cnt, ...) 
{
    va_list ap; int i, j; unsigned long b;
    va_start(ap, cnt);
    v *e, *l = mkCons(car(g_DOCOL), 0), *u;
    for (i = 0; i < cnt; i++) {
        e = (v *)va_arg(ap, v *);
        if ((b = ((unsigned long)e)-1) < 128) {
            for (j = 0, e = l; j < b; j++) {
                e = cdr(e);
            }
        }
        l = mkCons(e, l);
    }
    l = nreverse(mkCons(g_EXIT, l));
    u = unique(&cctx->lctx, n, strlen(n));
    cctx->env = mkCons(e = mkCons(u, l),cctx->env);
    va_end(ap);
    FOP_IMMEDIATE_VAL(e,1);
    CONS_WORD_VAL(l,1);
    dbgfdef(cctx, u, l);
    return l;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0xd0, %rsp
movl %edx, %r15d
movq %rsi, %r14
movq %rdi, %rbx
leaq -0xf0(%rbp), %rdx
movq %rcx, 0x18(%rdx)
movq %r8, 0x20(%rdx)
movq %r9, 0x28(%rdx)
testb %al, %al
je 0x658c
movaps %xmm0, -0xc0(%rbp)
movaps %xmm1, -0xb0(%rbp)
movaps %xmm2, -0xa0(%rbp)
movaps %xmm3, -0x90(%rbp)
movaps %xmm4, -0x80(%rbp)
movaps %xmm5, -0x70(%rbp)
movaps %xmm6, -0x60(%rbp)
movaps %xmm7, -0x50(%rbp)
movq %rdx, -0x30(%rbp)
leaq 0x10(%rbp), %rax
movq %rax, -0x38(%rbp)
movabsq $0x3000000018, %rax     # imm = 0x3000000018
movq %rax, -0x40(%rbp)
movq 0x7d0b(%rip), %rax      # 0xe2b8
xorl %r12d, %r12d
testq %rax, %rax
je 0x65bb
movq 0x8(%rax), %rdi
jmp 0x65bd
xorl %edi, %edi
xorl %esi, %esi
callq 0x1322
testl %r15d, %r15d
cmovlel %r12d, %r15d
cmpl %r15d, %r12d
je 0x6626
movl -0x40(%rbp), %edx
cmpq $0x28, %rdx
ja 0x65e8
movq %rdx, %rcx
addq -0x30(%rbp), %rcx
addl $0x8, %edx
movl %edx, -0x40(%rbp)
jmp 0x65f4
movq -0x38(%rbp), %rcx
leaq 0x8(%rcx), %rdx
movq %rdx, -0x38(%rbp)
movq (%rcx), %rdi
leaq -0x1(%rdi), %rcx
cmpq $0x7f, %rcx
ja 0x6619
movq %rax, %rdi
subq $0x1, %rcx
jb 0x6619
testq %rdi, %rdi
je 0x6615
movq 0x10(%rdi), %rdi
jmp 0x6604
xorl %edi, %edi
jmp 0x6604
movq %rax, %rsi
callq 0x1322
incl %r12d
jmp 0x65cb
movq 0x7c93(%rip), %rdi      # 0xe2c0
movq %rax, %rsi
callq 0x1322
movq %rax, %r15
movq %rax, %rdi
callq 0x234f
movq %r14, %rdi
callq 0x1050
movq %rbx, %rdi
movq %r14, %rsi
movl %eax, %edx
callq 0x2260
movq %rax, %rdi
movq %r15, %rsi
callq 0x1322
movq %rax, %r14
movq 0x148(%rbx), %rsi
movq %rax, %rdi
callq 0x1322
movq %rax, 0x148(%rbx)
orb $-0x80, (%r14)
orb $0x1, 0x1(%r15)
movq %r15, %rax
addq $0xd0, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/eiselekd[P]MinimalLisp/./f1.c
// Function: word
v *
word(fctx *cctx)
{
    int c, l = 0, bc = 0; char *n = 0; v *s;
retry:
    while(strchr(" \n\t",(c = key(cctx))));
    if (c == '(') { /* eat comments */
        cctx->b[l++] = c; 
        if (strchr(" \t",(c = key(cctx)))) {
            l--; bc = 1;
            do { 
                c = key(cctx);
                switch(c) {
                case ')': bc--; break;
                case '(': bc++; break;
                };
            } while(!(bc <= 0 || c == EOF));
            goto retry;
        };
    } else if (c == '\\') {
        do {
            c = key(cctx);
        } while(!(c == '\n' || c == EOF));
        goto retry;
    } 
    do {
        cctx->b[l++] = c; 
        c = key(cctx);
    } while(!(c == ' ' || c == '\n' || c == EOF));
    s = unique(&cctx->lctx, cctx->b, l);
    return s;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %r14
leaq 0x98(%rdi), %rax
movq %rax, -0x30(%rbp)
leaq 0x1060(%rip), %r12      # 0xa3b0
pushq $0x4
popq %r13
pushq $0x1
popq %r15
movq %r14, %rdi
callq 0x52f9
movl %eax, %ebx
movq %r12, %rdi
movl %eax, %esi
movq %r13, %rdx
callq 0x1090
testq %rax, %rax
jne 0x9358
cmpl $0x28, %ebx
je 0x9392
cmpl $0x5c, %ebx
jne 0x93e9
movq %r14, %rdi
callq 0x52f9
cmpl $-0x1, %eax
je 0x9358
cmpl $0xa, %eax
jne 0x937e
jmp 0x9358
movb $0x28, 0x98(%r14)
movq %r14, %rdi
callq 0x52f9
movl %eax, %ebx
cmpb $0x20, %bl
ja 0x93ec
movzbl %bl, %eax
movabsq $0x100000201, %rcx      # imm = 0x100000201
btq %rax, %rcx
jae 0x93ec
pushq $0x1
popq %rbx
movq %r14, %rdi
callq 0x52f9
cmpl $0x28, %eax
je 0x93d5
cmpl $0x29, %eax
jne 0x93d7
decl %ebx
jmp 0x93d7
incl %ebx
cmpl $-0x1, %eax
je 0x9358
testl %ebx, %ebx
jg 0x93bf
jmp 0x9358
xorl %r15d, %r15d
movabsq $0x200000801, %r12      # imm = 0x200000801
movb %bl, 0x98(%r14,%r15)
incq %r15
movq %r14, %rdi
callq 0x52f9
movl %eax, %ebx
incl %eax
cmpl $0x21, %eax
ja 0x93f6
btq %rax, %r12
jae 0x93f6
movq %r14, %rdi
movq -0x30(%rbp), %rsi
movl %r15d, %edx
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2260
// File: /workspace/github_c_makefile_star2_O2/eiselekd[P]MinimalLisp/f.c
// Function: main
int
main(int argc, char **argv) 
{
    fctx cctx; int c, i; FILE *f; char v[32];
    struct v *fx = 0, *r;
    memset(&cctx,0,sizeof(cctx));

    atexit(colreset);
    signal(SIGINT, sigint);
    
    /* input */
    cctx.f[cctx.fc = 0] = stdin;
    for (i = argc-1; i >= 1; i--) {
        if (f = fopen(argv[i],"r")) {
            cctx.f[++cctx.fc] = f;
        }
    }
    
    f_init(&cctx) ;
    
    r = mkCons(g_QUIT, 0);
    cctx.ip = r;
    fx = NEXT(&cctx);
    
    /* main loop */
    while(fx) {
        fx = fop(fx)(&cctx);
    }

    fprintf(FDBG, "[39m"); /* col def */
    
    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x180, %rsp            # imm = 0x180
movq %rsi, %rbx
movl %edi, %r14d
leaq -0x198(%rbp), %r15
xorl %r12d, %r12d
movl $0x178, %edx            # imm = 0x178
movq %r15, %rdi
xorl %esi, %esi
callq 0x1070
leaq -0x67(%rip), %rdi       # 0x9457
callq 0x95b0
leaq -0x7e(%rip), %rsi       # 0x944c
pushq $0x2
popq %rdi
callq 0x10a0
movq 0x4aff(%rip), %rax      # 0xdfd8
movq (%rax), %rax
movq %rax, 0x10(%r15)
movl %r14d, %r15d
leaq 0xe3d(%rip), %r14       # 0xa327
cmpl $0x2, %r15d
jl 0x9512
movq -0x8(%rbx,%r15,8), %rdi
decq %r15
movq %r14, %rsi
callq 0x1120
testq %rax, %rax
je 0x94ea
movq %rax, -0x180(%rbp,%r12,8)
incq %r12
jmp 0x94ea
leaq -0x198(%rbp), %rdi
movq %r12, 0x90(%rdi)
callq 0x6695
movq 0x50cc(%rip), %rdi      # 0xe5f8
xorl %esi, %esi
callq 0x1322
testq %rax, %rax
je 0x9553
movq 0x8(%rax), %rcx
movq %rcx, -0x60(%rbp)
movq 0x10(%rax), %rax
movq %rax, -0x68(%rbp)
testq %rcx, %rcx
je 0x955d
movq 0x8(%rcx), %rax
jmp 0x955f
leaq -0x68(%rbp), %rax
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
xorl %eax, %eax
leaq -0x198(%rbp), %rbx
testq %rax, %rax
je 0x9573
movq %rbx, %rdi
callq *0x8(%rax)
jmp 0x9566
movq 0x4a56(%rip), %rax      # 0xdfd0
movq (%rax), %rcx
leaq 0xe3d(%rip), %rdi       # 0xa3c1
pushq $0x5
popq %rsi
pushq $0x1
popq %rdx
callq 0x1160
xorl %eax, %eax
addq $0x180, %rsp            # imm = 0x180
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O2/USArmyResearchLab[P]ARL_OpenSHMEM/src/autogen/shmem_int_atomic_set.c
// Function: shmem_int_atomic_set
void shmem_int_atomic_set( int* ptr, int val, int pe)
{
	int* remote_ptr = (int*)shmem_ptr((void*)ptr, pe ); 
	long* x = (long*)shmem_ptr((void*)&__shmem.lock_atomic_int, pe);
	__set_spin_lock(x);
	*remote_ptr = val;
	__clear_spin_lock(x);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebx
movl %esi, %ebp
movl %edx, %esi
callq 0x1b9c
movq %rax, %r14
leaq 0x33cb(%rip), %rdi      # 0x61f0
addq $0x10, %rdi
movl %ebx, %esi
callq 0x1b9c
movq %rax, %rbx
movq %rax, %rdi
callq 0x30b0
movl %ebp, (%r14)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x30a0
nop
// File: /workspace/github_c_makefile_star2_O2/vusec[P]fpvi-scsb/fp_reverse_engineering/find_operands/find_operands.c
// Function: main
int main(int argc, char **argv)
{
    uint64_t target;

    if (argc < 2)
    {
        printf("Usage: %s <pointer in hex>\n", argv[0]);
        return -1;
    }

    sscanf(argv[1], "0x%lx", &target);
    target = target & 0x00007ffffffffffULL;
    printf("Finding X,Y for target 0x%016lx\n", target);

    uint64_t yh = 0x0000000000000001ULL;
    double   y  = *((double *) &yh);

    //0xfffb is String tag
    uint64_t xh = 0xbffb000000000000ULL;
    xh = xh | (target & 0x00007ffffffffff0ULL);
    double   x  = *((double *) &xh);

    uint64_t offset = target & 0xfULL;
    if(offset == 0ULL) {
        xh |= 0x7ULL;
    } else if(offset == 8ULL) {
        xh |= 0xfULL;
    } else {
        printf("Only target addresses ending i 0x0 or 0x8 are supported\n");
        return -1;
    }

    printf("X = 0x%016lx\t%.16e\n", xh, x);
    printf("Y = 0x%016lx\t%.16e\n", yh, y);

    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
cmpl $0x1, %edi
jg 0x1181
movq (%rsi), %rsi
leaq 0xe9b(%rip), %rdi       # 0x2010
xorl %eax, %eax
callq 0x1040
jmp 0x122c
movabsq $-0x4005000000000000, %r15 # imm = 0xBFFB000000000000
movq 0x8(%rsi), %rdi
leaq 0xe96(%rip), %rsi       # 0x202c
xorl %ebx, %ebx
leaq -0x20(%rbp), %r14
movq %r14, %rdx
xorl %eax, %eax
callq 0x1050
movabsq $0x7ffffffffff, %rsi    # imm = 0x7FFFFFFFFFF
andq (%r14), %rsi
movq %rsi, (%r14)
leaq 0xe75(%rip), %rdi       # 0x2032
xorl %eax, %eax
callq 0x1040
movq (%r14), %rsi
movq %rsi, %rax
andq $0xf, %rax
je 0x11db
cmpl $0x8, %eax
jne 0x1220
leaq 0xf(%r15), %rax
jmp 0x11df
leaq 0x7(%r15), %rax
movabsq $0x7ffffffffff0, %rcx   # imm = 0x7FFFFFFFFFF0
andq %rcx, %rsi
orq %rsi, %r15
movq %r15, %xmm0
orq %rax, %rsi
leaq 0xe55(%rip), %rdi       # 0x2053
movb $0x1, %al
callq 0x1040
leaq 0xe5b(%rip), %rdi       # 0x2067
pushq $0x1
popq %rsi
movsd 0xdf1(%rip), %xmm0      # 0x2008
movb $0x1, %al
callq 0x1040
jmp 0x122f
leaq 0xe54(%rip), %rdi       # 0x207b
callq 0x1030
pushq $-0x1
popq %rbx
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq