// File: /workspace/github_c_makefile_star2_O0/Oric4ever[P]lcc65/6502/build/../src/gen.c
// Function: function
void function(Symbol f, Symbol caller[], Symbol callee[], int ncalls) {
    int i;

    if (graph_output) {
        printf("subgraph cluster%s {\n", f->x.name);
        printf("\tlabel=\"%s\";\n",f->x.name);
    }
    localsize=offset=tmpsize=nbregs=0; fname=f->x.name;

    for (i=0;i<32;i++) flt_temp[i]->x.name="******";
    for (i=8;i<32;i++) temp[i]->x.name="******";

    for (i = 0; caller[i] && callee[i]; i++) {
        caller[i]->x.name=stringf(graph_output?"param(%d)":"(ap),%d",offset);
        caller[i]->x.adrmode='A';
        offset+=caller[i]->type->size;
        if (optimizelevel>1 && callee[i]->sclass==REGISTER && allocreg(callee[i]))
            ; /* allocreg ok */
        else {
            callee[i]->x.adrmode=caller[i]->x.adrmode;
            callee[i]->x.name=caller[i]->x.name;
            callee[i]->sclass=AUTO;
        }
    }
    busy=localsize=0; offset=6;
    gencode(caller,callee);

    omit_frame=(i==0 && localsize==6);
    if (!graph_output) {
        print("%s\n",fname);
        if (optimizelevel>1 && omit_frame && nbregs==0)
            ;
        else print("\tENTER(%d,%d)\n",nbregs,localsize);
        if (isstruct(freturn(f->type)))
            print("\tMOVW_DY(op1,(fp),6)\n");
    }
    emitcode();

    if (graph_output) printf("}\n");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
testb $0x1, 0x19c2a(%rip)     # 0x446a8
je 0x2aaaa
movq -0x8(%rbp), %rax
movq (%rax), %rsi
leaq 0x97ae(%rip), %rdi      # 0x3423c
movb $0x0, %al
callq 0x30b0
movq -0x8(%rbp), %rax
movq (%rax), %rsi
leaq 0x97af(%rip), %rdi      # 0x34252
movb $0x0, %al
callq 0x30b0
movl $0x0, 0x19e3c(%rip)     # 0x448f0
movl $0x0, 0x19e36(%rip)     # 0x448f4
movl $0x0, 0x19e30(%rip)     # 0x448f8
movl $0x0, 0x19e2a(%rip)     # 0x448fc
movq -0x8(%rbp), %rax
movq (%rax), %rcx
leaq 0x10f30(%rip), %rax     # 0x3ba10
movq %rcx, (%rax)
movl $0x0, -0x20(%rbp)
cmpl $0x20, -0x20(%rbp)
jge 0x2ab14
movslq -0x20(%rbp), %rcx
leaq 0x19cf5(%rip), %rax     # 0x447f0
movq (%rax,%rcx,8), %rax
leaq 0x9900(%rip), %rcx      # 0x34406
movq %rcx, (%rax)
movl -0x20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20(%rbp)
jmp 0x2aaea
movl $0x8, -0x20(%rbp)
cmpl $0x20, -0x20(%rbp)
jge 0x2ab45
movslq -0x20(%rbp), %rcx
leaq 0x19bc4(%rip), %rax     # 0x446f0
movq (%rax,%rcx,8), %rax
leaq 0x98cf(%rip), %rcx      # 0x34406
movq %rcx, (%rax)
movl -0x20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20(%rbp)
jmp 0x2ab1b
movl $0x0, -0x20(%rbp)
movq -0x10(%rbp), %rcx
movslq -0x20(%rbp), %rdx
xorl %eax, %eax
cmpq $0x0, (%rcx,%rdx,8)
movb %al, -0x21(%rbp)
je 0x2ab73
movq -0x18(%rbp), %rax
movslq -0x20(%rbp), %rcx
cmpq $0x0, (%rax,%rcx,8)
setne %al
movb %al, -0x21(%rbp)
movb -0x21(%rbp), %al
testb $0x1, %al
jne 0x2ab7f
jmp 0x2ac7a
movb 0x19b23(%rip), %cl      # 0x446a8
leaq 0x96de(%rip), %rdi      # 0x3426a
leaq 0x96cd(%rip), %rax      # 0x34260
testb $0x1, %cl
cmovneq %rax, %rdi
movl 0x19d58(%rip), %esi     # 0x448f8
movb $0x0, %al
callq 0x1afc0
movq %rax, %rcx
movq -0x10(%rbp), %rax
movslq -0x20(%rbp), %rdx
movq (%rax,%rdx,8), %rax
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movslq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movb $0x41, 0x8(%rax)
movq -0x10(%rbp), %rax
movslq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x20(%rax), %rax
movl 0x8(%rax), %eax
addl 0x19d16(%rip), %eax     # 0x448f8
movl %eax, 0x19d10(%rip)     # 0x448f8
cmpl $0x1, 0x10d35(%rip)     # 0x3b924
jle 0x2ac1e
movq -0x18(%rbp), %rax
movslq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movzbl 0x1a(%rax), %eax
cmpl $0x4e, %eax
jne 0x2ac1e
movq -0x18(%rbp), %rax
movslq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x2a9f0
cmpl $0x0, %eax
je 0x2ac1e
jmp 0x2ac6a
movq -0x10(%rbp), %rax
movslq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movb 0x8(%rax), %cl
movq -0x18(%rbp), %rax
movslq -0x20(%rbp), %rdx
movq (%rax,%rdx,8), %rax
movb %cl, 0x8(%rax)
movq -0x10(%rbp), %rax
movslq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq (%rax), %rcx
movq -0x18(%rbp), %rax
movslq -0x20(%rbp), %rdx
movq (%rax,%rdx,8), %rax
movq %rcx, (%rax)
movq -0x18(%rbp), %rax
movslq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movb $0x43, 0x1a(%rax)
jmp 0x2ac6c
movl -0x20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20(%rbp)
jmp 0x2ab4c
movl $0x0, 0x19c78(%rip)     # 0x448fc
movl $0x0, 0x19c72(%rip)     # 0x44900
movl $0x6, 0x19c60(%rip)     # 0x448f8
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x3720
xorl %eax, %eax
cmpl $0x0, -0x20(%rbp)
movb %al, -0x22(%rbp)
jne 0x2acbd
cmpl $0x6, 0x19c45(%rip)     # 0x448fc
sete %al
movb %al, -0x22(%rbp)
movb -0x22(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, 0x19c39(%rip)     # 0x44904
testb $0x1, 0x199d6(%rip)     # 0x446a8
jne 0x2adbd
leaq 0x10d31(%rip), %rax     # 0x3ba10
movq (%rax), %rsi
leaq 0x9483(%rip), %rdi      # 0x3416c
movb $0x0, %al
callq 0x1a890
cmpl $0x1, 0x10c2d(%rip)     # 0x3b924
jle 0x2ad0d
cmpl $0x0, 0x19c04(%rip)     # 0x44904
je 0x2ad0d
cmpl $0x0, 0x19be7(%rip)     # 0x448f0
jne 0x2ad0d
jmp 0x2ad27
movl 0x19bdd(%rip), %esi     # 0x448f0
movl 0x19be3(%rip), %edx     # 0x448fc
leaq 0x9552(%rip), %rdi      # 0x34272
movb $0x0, %al
callq 0x1a890
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x28a30
cmpl $0xf, (%rax)
jb 0x2ad50
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x28a30
movq 0x10(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0x2ad61
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x28a30
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
cmpl $0x9, (%rax)
je 0x2adad
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x28a30
cmpl $0xf, (%rax)
jb 0x2ad93
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x28a30
movq 0x10(%rax), %rax
movq %rax, -0x38(%rbp)
jmp 0x2ada4
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x28a30
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
cmpl $0xa, (%rax)
jne 0x2adbb
leaq 0x94cd(%rip), %rdi      # 0x34281
movb $0x0, %al
callq 0x1a890
jmp 0x2adbd
callq 0x3440
testb $0x1, 0x198df(%rip)     # 0x446a8
je 0x2add9
leaq 0x612f(%rip), %rdi      # 0x30f01
movb $0x0, %al
callq 0x30b0
addq $0x40, %rsp
popq %rbp
retq
nop