// File: zgimbutas[P]mwrap/src/mwrap-cgen.cc
// Function: mex_marshal_result(_IO_FILE*, Var*, bool)
void mex_marshal_result(FILE* fp, Var* v, bool return_flag)
{
    char namebuf[1280];
    if (is_obj(v->tinfo) && is_mxarray_type(v->basetype)) {
        if (!return_flag)
            fprintf(fp, "    plhs[%d] = mxWrapSet_%s(%s);\n",
                    v->output_label, v->basetype, vname(v,namebuf));
    } else if (is_obj(v->tinfo))
        fprintf(fp, "    plhs[%d] = mxWrapCreateP(out%d_, \"%s:%%p\");\n",
                v->output_label, v->output_label, v->basetype);
    else if (is_array(v->tinfo) ||
             v->tinfo == VT_rarray)
        mex_marshal_array(fp, v);
    else if (v->tinfo == VT_scalar ||
             v->tinfo == VT_r_scalar ||
             v->tinfo == VT_p_scalar)
        fprintf(fp,
		"#if MX_HAS_INTERLEAVED_COMPLEX\n"
                "    plhs[%d] = mxCreateDoubleMatrix(1, 1, mxREAL);\n"
                "    *mxGetDoubles(plhs[%d]) = %s;\n"
		"#else\n"
                "    plhs[%d] = mxCreateDoubleMatrix(1, 1, mxREAL);\n"
                "    *mxGetPr(plhs[%d]) = %s;\n"
		"#endif\n",
                v->output_label, v->output_label, vname(v, namebuf),
		v->output_label, v->output_label, vname(v, namebuf));
    else if (v->tinfo == VT_cscalar || v->tinfo == VT_zscalar ||
             v->tinfo == VT_r_cscalar || v->tinfo == VT_r_zscalar ||
             v->tinfo == VT_p_cscalar || v->tinfo == VT_p_zscalar)
        fprintf(fp,
		"#if MX_HAS_INTERLEAVED_COMPLEX\n"
                "    plhs[%d] = mxCreateDoubleMatrix(1, 1, mxCOMPLEX);\n"
                "    *mxGetComplexDoubles(plhs[%d]) = %s;\n"
		"#else\n"
                "    plhs[%d] = mxCreateDoubleMatrix(1, 1, mxCOMPLEX);\n"
                "    *mxGetPr(plhs[%d]) = real_%s(%s);\n"
                "    *mxGetPi(plhs[%d]) = imag_%s(%s);\n"
		"#endif\n",
                v->output_label,
                v->output_label, vname(v, namebuf),
                v->output_label,
                v->output_label, v->basetype, vname(v, namebuf),
                v->output_label, v->basetype, vname(v, namebuf));
    else if (v->tinfo == VT_string)
        fprintf(fp, "    plhs[%d] = mxCreateString(%s);\n",
                v->output_label, vname(v, namebuf));
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x5b8, %rsp            # imm = 0x5B8
movb %dl, %al
movq %rdi, -0x20(%rbp)
movq %rsi, -0x28(%rbp)
andb $0x1, %al
movb %al, -0x29(%rbp)
movq -0x28(%rbp), %rax
movl 0x20(%rax), %edi
callq 0xcc90
testb $0x1, %al
jne 0x10bf1
jmp 0x10c6b
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8290
testb $0x1, %al
jne 0x10c04
jmp 0x10c6b
testb $0x1, -0x29(%rbp)
jne 0x10c66
movq -0x20(%rbp), %rax
movq %rax, -0x548(%rbp)
movq -0x28(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x53c(%rbp)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x538(%rbp)
movq -0x28(%rbp), %rdi
leaq -0x530(%rbp), %rsi
callq 0xcd60
movq -0x548(%rbp), %rdi
movl -0x53c(%rbp), %edx
movq -0x538(%rbp), %rcx
movq %rax, %r8
leaq 0xc0de(%rip), %rsi      # 0x1cd3d
movb $0x0, %al
callq 0x33a0
jmp 0x10f30
movq -0x28(%rbp), %rax
movl 0x20(%rax), %edi
callq 0xcc90
testb $0x1, %al
jne 0x10c7d
jmp 0x10caa
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rax
movl 0x4(%rax), %edx
movq -0x28(%rbp), %rax
movl 0x4(%rax), %ecx
movq -0x28(%rbp), %rax
movq 0x10(%rax), %r8
leaq 0xc0c1(%rip), %rsi      # 0x1cd5f
movb $0x0, %al
callq 0x33a0
jmp 0x10f2e
movq -0x28(%rbp), %rax
movl 0x20(%rax), %edi
callq 0xcc60
testb $0x1, %al
jne 0x10cc4
movq -0x28(%rbp), %rax
cmpl $0x5, 0x20(%rax)
jne 0x10cd6
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x103b0
jmp 0x10f2c
movq -0x28(%rbp), %rax
cmpl $0x6, 0x20(%rax)
je 0x10cf8
movq -0x28(%rbp), %rax
cmpl $0x10, 0x20(%rax)
je 0x10cf8
movq -0x28(%rbp), %rax
cmpl $0xc, 0x20(%rax)
jne 0x10da2
movq -0x20(%rbp), %rax
movq %rax, -0x568(%rbp)
movq -0x28(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x560(%rbp)
movq -0x28(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x55c(%rbp)
movq -0x28(%rbp), %rdi
leaq -0x530(%rbp), %rsi
callq 0xcd60
movq %rax, -0x558(%rbp)
movq -0x28(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x550(%rbp)
movq -0x28(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x54c(%rbp)
movq -0x28(%rbp), %rdi
leaq -0x530(%rbp), %rsi
callq 0xcd60
movq -0x568(%rbp), %rdi
movl -0x560(%rbp), %edx
movl -0x55c(%rbp), %ecx
movq -0x558(%rbp), %r8
movl -0x550(%rbp), %r9d
movl -0x54c(%rbp), %r10d
leaq 0xc003(%rip), %rsi      # 0x1cd90
movl %r10d, (%rsp)
movq %rax, 0x8(%rsp)
movb $0x0, %al
callq 0x33a0
jmp 0x10f2a
movq -0x28(%rbp), %rax
cmpl $0x7, 0x20(%rax)
je 0x10de2
movq -0x28(%rbp), %rax
cmpl $0x8, 0x20(%rax)
je 0x10de2
movq -0x28(%rbp), %rax
cmpl $0x11, 0x20(%rax)
je 0x10de2
movq -0x28(%rbp), %rax
cmpl $0x12, 0x20(%rax)
je 0x10de2
movq -0x28(%rbp), %rax
cmpl $0xd, 0x20(%rax)
je 0x10de2
movq -0x28(%rbp), %rax
cmpl $0xe, 0x20(%rax)
jne 0x10ed6
movq -0x20(%rbp), %rax
movq %rax, -0x590(%rbp)
movq -0x28(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x588(%rbp)
movq -0x28(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x584(%rbp)
movq -0x28(%rbp), %rdi
leaq -0x530(%rbp), %rsi
callq 0xcd60
movq %rax, -0x580(%rbp)
movq -0x28(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x578(%rbp)
movq -0x28(%rbp), %rax
movl 0x4(%rax), %r15d
movq -0x28(%rbp), %rax
movq 0x10(%rax), %r14
movq -0x28(%rbp), %rdi
leaq -0x530(%rbp), %rsi
callq 0xcd60
movq %rax, %rbx
movq -0x28(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x574(%rbp)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x570(%rbp)
movq -0x28(%rbp), %rdi
leaq -0x530(%rbp), %rsi
callq 0xcd60
movq -0x590(%rbp), %rdi
movl -0x588(%rbp), %edx
movl -0x584(%rbp), %ecx
movq -0x580(%rbp), %r8
movl -0x578(%rbp), %r9d
movl -0x574(%rbp), %r11d
movq -0x570(%rbp), %r10
leaq 0xbfb2(%rip), %rsi      # 0x1ce62
movl %r15d, (%rsp)
movq %r14, 0x8(%rsp)
movq %rbx, 0x10(%rsp)
movl %r11d, 0x18(%rsp)
movq %r10, 0x20(%rsp)
movq %rax, 0x28(%rsp)
movb $0x0, %al
callq 0x33a0
jmp 0x10f28
movq -0x28(%rbp), %rax
cmpl $0x9, 0x20(%rax)
jne 0x10f26
movq -0x20(%rbp), %rax
movq %rax, -0x5a0(%rbp)
movq -0x28(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x594(%rbp)
movq -0x28(%rbp), %rdi
leaq -0x530(%rbp), %rsi
callq 0xcd60
movq -0x5a0(%rbp), %rdi
movl -0x594(%rbp), %edx
movq %rax, %rcx
leaq 0xc051(%rip), %rsi      # 0x1cf70
movb $0x0, %al
callq 0x33a0
jmp 0x10f28
jmp 0x10f2a
jmp 0x10f2c
jmp 0x10f2e
jmp 0x10f30
addq $0x5b8, %rsp            # imm = 0x5B8
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
nop