// File: zgimbutas[P]mwrap/src/mwrap-cgen.cc
// Function: mex_dealloc(_IO_FILE*, Var*, bool)
void mex_dealloc(FILE* fp, Var* v, bool return_flag)
{
    if (!v)
        return;

    if (v->devicespec != 'g'){
    if (is_array(v->tinfo) || v->tinfo == VT_string) {
        if (v->iospec == 'o')
            fprintf(fp, "    if (out%d_) mxFree(out%d_);\n",
                    v->output_label, v->output_label);
        else if (v->iospec == 'b' || !(strcmp(v->basetype, "double") == 0 || strcmp(v->basetype, "float") == 0) )
            fprintf(fp, "    if (in%d_)  mxFree(in%d_);\n",
                    v->input_label, v->input_label);
    } else if (is_obj(v->tinfo) && is_mxarray_type(v->basetype)) {
        if (v->iospec == 'i' || v->iospec == 'b')
            fprintf(fp, "    if (in%d_)  mxWrapFree_%s(in%d_);\n",
                    v->input_label, v->basetype, v->input_label);
        else if (v->iospec == 'o' && !return_flag)
            fprintf(fp, "    if (out%d_) mxWrapFree_%s(out%d_);\n",
                    v->output_label, v->basetype, v->output_label);
    }
    }
    if (v->devicespec == 'g'){
        if (v->iospec == 'i' || v->iospec == 'b'){
            fprintf(fp, "    if (mxGPUArray_in%d_)  mxGPUDestroyGPUArray(mxGPUArray_in%d_);\n",
                    v->input_label, v->input_label);
        }
        if (v->iospec == 'o'){
            fprintf(fp, "    if (mxGPUArray_out%d_)  mxGPUDestroyGPUArray(mxGPUArray_out%d_);\n",
                    v->output_label, v->output_label);
        }
    }

    mex_dealloc(fp, v->next, return_flag);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movb %dl, %al
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
andb $0x1, %al
movb %al, -0x11(%rbp)
cmpq $0x0, -0x10(%rbp)
jne 0x11023
jmp 0x11224
movq -0x10(%rbp), %rax
movsbl 0x9(%rax), %eax
cmpl $0x67, %eax
je 0x11197
movq -0x10(%rbp), %rax
movl 0x20(%rax), %edi
callq 0xcc60
testb $0x1, %al
jne 0x11052
movq -0x10(%rbp), %rax
cmpl $0x9, 0x20(%rax)
jne 0x110e5
movq -0x10(%rbp), %rax
movsbl 0x8(%rax), %eax
cmpl $0x6f, %eax
jne 0x11081
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
movq -0x10(%rbp), %rax
movl 0x4(%rax), %ecx
leaq 0xbf1c(%rip), %rsi      # 0x1cf94
movb $0x0, %al
callq 0x33a0
jmp 0x110e0
movq -0x10(%rbp), %rax
movsbl 0x8(%rax), %eax
cmpl $0x62, %eax
je 0x110c0
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0x3a7f(%rip), %rsi      # 0x14b1c
callq 0x3390
cmpl $0x0, %eax
je 0x110de
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0x3a6d(%rip), %rsi      # 0x14b23
callq 0x3390
cmpl $0x0, %eax
je 0x110de
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movl (%rax), %edx
movq -0x10(%rbp), %rax
movl (%rax), %ecx
leaq 0xbede(%rip), %rsi      # 0x1cfb5
movb $0x0, %al
callq 0x33a0
jmp 0x110e0
jmp 0x11195
movq -0x10(%rbp), %rax
movl 0x20(%rax), %edi
callq 0xcc90
testb $0x1, %al
jne 0x110fa
jmp 0x11193
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8290
testb $0x1, %al
jne 0x11110
jmp 0x11193
movq -0x10(%rbp), %rax
movsbl 0x8(%rax), %eax
cmpl $0x69, %eax
je 0x1112a
movq -0x10(%rbp), %rax
movsbl 0x8(%rax), %eax
cmpl $0x62, %eax
jne 0x11153
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movl (%rax), %edx
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x10(%rbp), %rax
movl (%rax), %r8d
leaq 0xbe8b(%rip), %rsi      # 0x1cfd5
movb $0x0, %al
callq 0x33a0
jmp 0x11191
movq -0x10(%rbp), %rax
movsbl 0x8(%rax), %eax
cmpl $0x6f, %eax
jne 0x1118f
testb $0x1, -0x11(%rbp)
jne 0x1118f
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x10(%rbp), %rax
movl 0x4(%rax), %r8d
leaq 0xbe74(%rip), %rsi      # 0x1cffc
movb $0x0, %al
callq 0x33a0
jmp 0x11191
jmp 0x11193
jmp 0x11195
jmp 0x11197
movq -0x10(%rbp), %rax
movsbl 0x9(%rax), %eax
cmpl $0x67, %eax
jne 0x1120b
movq -0x10(%rbp), %rax
movsbl 0x8(%rax), %eax
cmpl $0x69, %eax
je 0x111be
movq -0x10(%rbp), %rax
movsbl 0x8(%rax), %eax
cmpl $0x62, %eax
jne 0x111dc
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movl (%rax), %edx
movq -0x10(%rbp), %rax
movl (%rax), %ecx
leaq 0xbe4f(%rip), %rsi      # 0x1d024
movb $0x0, %al
callq 0x33a0
movq -0x10(%rbp), %rax
movsbl 0x8(%rax), %eax
cmpl $0x6f, %eax
jne 0x11209
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
movq -0x10(%rbp), %rax
movl 0x4(%rax), %ecx
leaq 0xbe66(%rip), %rsi      # 0x1d068
movb $0x0, %al
callq 0x33a0
jmp 0x1120b
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rsi
movb -0x11(%rbp), %al
andb $0x1, %al
movzbl %al, %edx
callq 0x11000
addq $0x20, %rsp
popq %rbp
retq
nopw (%rax,%rax)