// File: /workspace/github_c_makefile_star2_O0/minoki[P]icfpc2006/run_directthreaded_tailcall.c
// Function: OP_Abandon
void OP_Abandon(PARAMS)
{
    uint32_t op = arr0->data[pc];
    uint32_t c = op & 7;
    uint32_t i = reg[c];
    assert(i < arrsize);
    assert(i != 0);
    assert(arr[i] != NULL);
    free(arr[i]);
    arr[i] = NULL;
    if (freelist_end - freelist == freelist_capacity) {
        uint32_t freelist_new_capacity = freelist_capacity == 0 ? 32 : freelist_capacity * 2;
        freelist = realloc(freelist, freelist_new_capacity * sizeof(uint32_t));
        memset(freelist + freelist_capacity, 0, (freelist_new_capacity - freelist_capacity) * sizeof(uint32_t));
        freelist_end = freelist + freelist_capacity;
        freelist_capacity = freelist_new_capacity;
    }
    *freelist_end++ = i;
    ++pc;
    MUSTTAIL return program[pc](ARGS);
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq %rsi, 0x18(%rsp)
movq 0x18(%rsp), %rax
movq 0x20(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x14(%rsp)
movl 0x14(%rsp), %eax
andl $0x7, %eax
movl %eax, 0x10(%rsp)
movl 0x10(%rsp), %eax
movl %eax, %ecx
leaq 0x3658(%rip), %rax      # 0x50d0
movl (%rax,%rcx,4), %eax
movl %eax, 0xc(%rsp)
movl 0xc(%rsp), %eax
cmpq 0x362e(%rip), %rax      # 0x50b8
jae 0x1a8e
jmp 0x1aad
leaq 0x156f(%rip), %rdi      # 0x3004
leaq 0x1574(%rip), %rsi      # 0x3010
movl $0xa3, %edx
leaq 0x167e(%rip), %rcx      # 0x3126
callq 0x1080
cmpl $0x0, 0xc(%rsp)
je 0x1ab6
jmp 0x1ad5
leaq 0x1691(%rip), %rdi      # 0x314e
leaq 0x154c(%rip), %rsi      # 0x3010
movl $0xa4, %edx
leaq 0x1656(%rip), %rcx      # 0x3126
callq 0x1080
movq 0x3634(%rip), %rax      # 0x5110
movl 0xc(%rsp), %ecx
cmpq $0x0, (%rax,%rcx,8)
je 0x1ae9
jmp 0x1b08
leaq 0x1665(%rip), %rdi      # 0x3155
leaq 0x1519(%rip), %rsi      # 0x3010
movl $0xa5, %edx
leaq 0x1623(%rip), %rcx      # 0x3126
callq 0x1080
movq 0x3601(%rip), %rax      # 0x5110
movl 0xc(%rsp), %ecx
movq (%rax,%rcx,8), %rdi
callq 0x1030
movq 0x35ed(%rip), %rax      # 0x5110
movl 0xc(%rsp), %ecx
movq $0x0, (%rax,%rcx,8)
movq 0x35c2(%rip), %rax      # 0x50f8
movq 0x35b3(%rip), %rcx      # 0x50f0
subq %rcx, %rax
sarq $0x2, %rax
movl 0x35b6(%rip), %ecx      # 0x5100
cmpq %rcx, %rax
jne 0x1bea
cmpl $0x0, 0x35a6(%rip)      # 0x5100
jne 0x1b67
movl $0x20, %eax
movl %eax, 0x4(%rsp)
jmp 0x1b73
movl 0x3593(%rip), %eax      # 0x5100
shll %eax
movl %eax, 0x4(%rsp)
movl 0x4(%rsp), %eax
movl %eax, 0x8(%rsp)
movq 0x356e(%rip), %rdi      # 0x50f0
movl 0x8(%rsp), %eax
movl %eax, %esi
shlq $0x2, %rsi
callq 0x1120
movq %rax, 0x3558(%rip)      # 0x50f0
movq 0x3551(%rip), %rdi      # 0x50f0
movl 0x355b(%rip), %eax      # 0x5100
shlq $0x2, %rax
addq %rax, %rdi
movl 0x8(%rsp), %eax
subl 0x354a(%rip), %eax      # 0x5100
movl %eax, %eax
movl %eax, %edx
shlq $0x2, %rdx
xorl %esi, %esi
callq 0x1090
movq 0x3524(%rip), %rax      # 0x50f0
movl 0x352e(%rip), %ecx      # 0x5100
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, 0x3518(%rip)      # 0x50f8
movl 0x8(%rsp), %eax
movl %eax, 0x3516(%rip)      # 0x5100
movl 0xc(%rsp), %ecx
movq 0x3503(%rip), %rax      # 0x50f8
movq %rax, %rdx
addq $0x4, %rdx
movq %rdx, 0x34f5(%rip)      # 0x50f8
movl %ecx, (%rax)
movq 0x20(%rsp), %rax
incq %rax
movq %rax, 0x20(%rsp)
movq 0x34ef(%rip), %rax      # 0x5108
movq 0x20(%rsp), %rdi
movq (%rax,%rdi,8), %rax
movq 0x18(%rsp), %rsi
addq $0x28, %rsp
jmpq *%rax
nopl (%rax)