// File: zgimbutas[P]mwrap/src/mwrap-cgen.cc
// Function: mex_declare_type(char*, Var*)
void mex_declare_type(char* typebuf, Var* v)
{
    if (is_obj(v->tinfo) || is_array(v->tinfo)){
        if(v->devicespec == 'g'){
            sprintf(typebuf, "%s*", basetype_to_cucomplex(v->basetype));
        }
        else{
            sprintf(typebuf, "%s*", v->basetype);
        }
    }
    else if (v->tinfo == VT_rarray){
        if(v->devicespec == 'g'){
            sprintf(typebuf, "const %s*", basetype_to_cucomplex(v->basetype));
        }
        else{
            sprintf(typebuf, "const %s*", v->basetype);
        }
    }
    else if (v->tinfo == VT_scalar ||
             v->tinfo == VT_cscalar ||
             v->tinfo == VT_zscalar ||
             v->tinfo == VT_r_scalar ||
             v->tinfo == VT_r_cscalar ||
             v->tinfo == VT_r_zscalar ||
             v->tinfo == VT_p_scalar ||
             v->tinfo == VT_p_cscalar ||
             v->tinfo == VT_p_zscalar)
        sprintf(typebuf, "%s", v->basetype);
    else if (v->tinfo == VT_string)
        sprintf(typebuf, "char*");
    else if (v->tinfo == VT_mx && v->iospec == 'i')
        sprintf(typebuf, "const mxArray*");
    else if (v->tinfo == VT_mx && v->iospec == 'o')
        sprintf(typebuf, "mxArray*");
    else {
        fprintf(stderr, "v->tinfo == %d; v->name = %s\n", v->tinfo, v->name);
        assert(0);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movl 0x20(%rax), %edi
callq 0xcc90
testb $0x1, %al
jne 0xe7c2
movq -0x10(%rbp), %rax
movl 0x20(%rax), %edi
callq 0xcc60
testb $0x1, %al
jne 0xe7c2
jmp 0xe81a
movq -0x10(%rbp), %rax
movsbl 0x9(%rax), %eax
cmpl $0x67, %eax
jne 0xe7fb
movq -0x8(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0xca70
movq -0x18(%rbp), %rdi
movq %rax, %rdx
leaq 0xce76(%rip), %rsi      # 0x1b668
movb $0x0, %al
callq 0x30a0
jmp 0xe815
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdx
leaq 0xce5a(%rip), %rsi      # 0x1b668
movb $0x0, %al
callq 0x30a0
jmp 0xe9bc
movq -0x10(%rbp), %rax
cmpl $0x5, 0x20(%rax)
jne 0xe87c
movq -0x10(%rbp), %rax
movsbl 0x9(%rax), %eax
cmpl $0x67, %eax
jne 0xe85d
movq -0x8(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0xca70
movq -0x20(%rbp), %rdi
movq %rax, %rdx
leaq 0xce0e(%rip), %rsi      # 0x1b662
movb $0x0, %al
callq 0x30a0
jmp 0xe877
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdx
leaq 0xcdf2(%rip), %rsi      # 0x1b662
movb $0x0, %al
callq 0x30a0
jmp 0xe9ba
movq -0x10(%rbp), %rax
cmpl $0x6, 0x20(%rax)
je 0xe8d6
movq -0x10(%rbp), %rax
cmpl $0x7, 0x20(%rax)
je 0xe8d6
movq -0x10(%rbp), %rax
cmpl $0x8, 0x20(%rax)
je 0xe8d6
movq -0x10(%rbp), %rax
cmpl $0x10, 0x20(%rax)
je 0xe8d6
movq -0x10(%rbp), %rax
cmpl $0x11, 0x20(%rax)
je 0xe8d6
movq -0x10(%rbp), %rax
cmpl $0x12, 0x20(%rax)
je 0xe8d6
movq -0x10(%rbp), %rax
cmpl $0xc, 0x20(%rax)
je 0xe8d6
movq -0x10(%rbp), %rax
cmpl $0xd, 0x20(%rax)
je 0xe8d6
movq -0x10(%rbp), %rax
cmpl $0xe, 0x20(%rax)
jne 0xe8f5
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdx
leaq 0x66a8(%rip), %rsi      # 0x14f91
movb $0x0, %al
callq 0x30a0
jmp 0xe9b8
movq -0x10(%rbp), %rax
cmpl $0x9, 0x20(%rax)
jne 0xe916
movq -0x8(%rbp), %rdi
leaq 0xcd62(%rip), %rsi      # 0x1b66c
movb $0x0, %al
callq 0x30a0
jmp 0xe9b6
movq -0x10(%rbp), %rax
cmpl $0xa, 0x20(%rax)
jne 0xe941
movq -0x10(%rbp), %rax
movsbl 0x8(%rax), %eax
cmpl $0x69, %eax
jne 0xe941
movq -0x8(%rbp), %rdi
leaq 0xc8db(%rip), %rsi      # 0x1b213
movb $0x0, %al
callq 0x30a0
jmp 0xe9b4
movq -0x10(%rbp), %rax
cmpl $0xa, 0x20(%rax)
jne 0xe96c
movq -0x10(%rbp), %rax
movsbl 0x8(%rax), %eax
cmpl $0x6f, %eax
jne 0xe96c
movq -0x8(%rbp), %rdi
leaq 0xc8b6(%rip), %rsi      # 0x1b219
movb $0x0, %al
callq 0x30a0
jmp 0xe9b2
movq 0x16665(%rip), %rax     # 0x24fd8
movq (%rax), %rdi
movq -0x10(%rbp), %rax
movl 0x20(%rax), %edx
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rcx
leaq 0xcce6(%rip), %rsi      # 0x1b672
movb $0x0, %al
callq 0x33a0
leaq 0x65f3(%rip), %rdi      # 0x14f8d
leaq 0xccef(%rip), %rsi      # 0x1b690
movl $0x241, %edx            # imm = 0x241
leaq 0xccf1(%rip), %rcx      # 0x1b69e
callq 0x3160
jmp 0xe9b4
jmp 0xe9b6
jmp 0xe9b8
jmp 0xe9ba
jmp 0xe9bc
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)