// File: zgimbutas[P]mwrap/src/mwrap-cgen.cc
// Function: mex_fortran_decls(_IO_FILE*, Func*)
void mex_fortran_decls(FILE* fp, Func* f)
{
    fprintf(fp,
            "#ifdef __cplusplus\n"
            "extern \"C\" { /* Prevent C++ name mangling */\n"
            "#endif\n\n"
            "#ifndef MWF77_RETURN\n"
            "#define MWF77_RETURN int\n"
            "#endif\n\n");

    set<string> fnames;
    for (; f; f = f->next) {
        if (f->fort && fnames.find(f->funcv) == fnames.end()) {
            mex_fortran_decl(fp, f);
            fnames.insert(f->funcv);
        }
    }

    fprintf(fp,
            "\n#ifdef __cplusplus\n"
            "} /* end extern C */\n"
            "#endif\n\n");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x110, %rsp            # imm = 0x110
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rdi
leaq 0xd00c(%rip), %rsi      # 0x1b23a
movb $0x0, %al
callq 0x33a0
leaq -0x40(%rbp), %rdi
callq 0x9200
cmpq $0x0, -0x10(%rbp)
je 0xe465
movq -0x10(%rbp), %rax
movb 0x24(%rax), %cl
movb $0x0, -0x6a(%rbp)
movb $0x0, -0x7d(%rbp)
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0xc1(%rbp)
je 0xe2f0
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0xd8(%rbp)
leaq -0x69(%rbp), %rdi
movq %rdi, -0xd0(%rbp)
callq 0x3420
movq -0xd8(%rbp), %rsi
movq -0xd0(%rbp), %rdx
movb $0x1, -0x6a(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x9150
jmp 0xe2a5
movb $0x1, -0x7d(%rbp)
leaq -0x40(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x92c0
movq %rax, -0xe0(%rbp)
jmp 0xe2bf
movq -0xe0(%rbp), %rax
movq %rax, -0x48(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x9300
movq %rax, -0x88(%rbp)
leaq -0x48(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x118a0
movb %al, -0xc1(%rbp)
movb -0xc1(%rbp), %al
movb %al, -0xe1(%rbp)
testb $0x1, -0x7d(%rbp)
jne 0xe304
jmp 0xe30d
leaq -0x68(%rbp), %rdi
callq 0x34c8
testb $0x1, -0x6a(%rbp)
jne 0xe315
jmp 0xe31e
leaq -0x69(%rbp), %rdi
callq 0x32a0
movb -0xe1(%rbp), %al
testb $0x1, %al
jne 0xe32d
jmp 0xe452
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0xe180
jmp 0xe33c
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0xf8(%rbp)
leaq -0xa9(%rbp), %rdi
movq %rdi, -0xf0(%rbp)
callq 0x3420
movq -0xf8(%rbp), %rsi
movq -0xf0(%rbp), %rdx
leaq -0xa8(%rbp), %rdi
callq 0x9150
jmp 0xe37a
leaq -0x40(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x9240
movb %dl, -0x101(%rbp)
movq %rax, -0x100(%rbp)
jmp 0xe399
movb -0x101(%rbp), %al
movq -0x100(%rbp), %rcx
movq %rcx, -0xc0(%rbp)
movb %al, -0xb8(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x34c8
leaq -0xa9(%rbp), %rdi
callq 0x32a0
jmp 0xe452
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0xe3fd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
testb $0x1, -0x7d(%rbp)
jne 0xe3f2
jmp 0xe3fb
leaq -0x68(%rbp), %rdi
callq 0x34c8
jmp 0xe3fd
testb $0x1, -0x6a(%rbp)
jne 0xe405
jmp 0xe40e
leaq -0x69(%rbp), %rdi
callq 0x32a0
jmp 0xe489
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0xe489
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0xe444
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x34c8
leaq -0xa9(%rbp), %rdi
callq 0x32a0
jmp 0xe489
jmp 0xe454
movq -0x10(%rbp), %rax
movq 0x58(%rax), %rax
movq %rax, -0x10(%rbp)
jmp 0xe23e
movq -0x8(%rbp), %rdi
leaq 0xce49(%rip), %rsi      # 0x1b2b9
movb $0x0, %al
callq 0x33a0
leaq -0x40(%rbp), %rdi
callq 0x9220
addq $0x110, %rsp            # imm = 0x110
popq %rbp
retq
leaq -0x40(%rbp), %rdi
callq 0x9220
movq -0x78(%rbp), %rdi
callq 0x3410
nopl (%rax,%rax)