// File: /workspace/github_c_makefile_star2_O0/dwelch67[P]lc3/vsim.c
// Function: sim
int sim ( void )
{
    unsigned short inst;
    unsigned short test;
    unsigned short simm;
    unsigned short dest;
    unsigned short rd,rd_data;
    unsigned short sr1,sr1_data;
    unsigned short sr2,sr2_data;
    while(1)
    {
        printf("\n");
        inst=fetch_mem(pc);
        printf("---- 0x%04X: 0x%04X ",pc,inst);
        pc=(pc+1)&MEMMASK;
        switch((inst>>12)&0xF)
        {
            case 0x0: //br
            {
                printf("br");
                if(inst&0x0800) printf("n");
                if(inst&0x0400) printf("z");
                if(inst&0x0200) printf("p");
                simm=sext9(inst);
                dest=(pc+simm)&0xFFFF;
                printf(" 0x%04X",dest);
                if(simm&0x8000) printf(" ; -%u",(simm^0xFFFF)+1);
                else            printf(" ; +%u",simm);
                printf("\n");

                test=(psr&7)&((inst>>9)&7);
                if(test)
                {
                    pc=pc+sext9(inst&0x1FF);
                }
                break;
            }
            case 0x1: //add
            {
                rd=(inst>>9)&7;
                sr1=(inst>>6)&7;
                if(inst&0x20)
                {
                    simm=sext5(inst);
                    printf("add r%u,r%u,#0x%04X\n",rd,sr1,simm);

                    sr1_data=read_reg(sr1);
                    rd_data=sr1_data+simm;
                }
                else
                {
                    sr2=(inst>>0)&7;
                    printf("add r%u,r%u,r%u",rd,sr1,sr2);

                    sr1_data=read_reg(sr1);
                    sr2_data=read_reg(sr2);
                    rd_data=sr1_data+sr2_data;
                }
                write_reg(rd,rd_data);
                docc(rd_data);
                break;
            }
            case 0x2: //ld
            {
                rd=(inst>>9)&7;
                simm=sext9(inst);
                dest=(pc+simm)&0xFFFF;
                printf("ld r%u,0x%04X",rd,dest);
                if(simm&0x8000) printf(" ; -%u",(simm^0xFFFF)+1);
                else            printf(" ; +%u",simm);
                printf("\n");

                rd_data=read_mem(dest);
                write_reg(rd,rd_data);
                docc(rd_data);
                break;
            }
            case 0x3: //st
            {
                rd=(inst>>9)&7;
                simm=sext9(inst);
                dest=(pc+simm)&0xFFFF;
                printf("st r%u,0x%04X",rd,dest);
                if(simm&0x8000) printf(" ; -%u",(simm^0xFFFF)+1);
                else            printf(" ; +%u",simm);
                printf("\n");

                rd_data=read_reg(rd);
                write_mem(dest,rd_data);
                break;
            }
            case 0x4: //jsr/jsrr
            {
                if(inst&0x0800)
                {
                    simm=sext11(inst);
                    dest=(pc+simm)&0xFFFF;
                    printf("jsr 0x%04X",dest);
                    if(simm&0x8000) printf(" ; -%u",(simm^0xFFFF)+1);
                    else            printf(" ; +%u",simm);
                    printf("\n");

                    write_reg(7,pc);
                    pc=dest;
                }
                else
                {
                    rd=(inst>>6)&7;
                    printf("jsrr r%u\n",rd);

                    write_reg(7,pc);
                    pc=read_reg(rd);
                }
                break;
            }
            case 0x5: //and
            {
                rd=(inst>>9)&7;
                sr1=(inst>>6)&7;
                if(inst&0x20)
                {
                    simm=sext5(inst);
                    printf("and r%u,r%u,#0x%04X\n",rd,sr1,simm);

                    sr1_data=read_reg(sr1);
                    rd_data=sr1_data&simm;
                }
                else
                {
                    sr2=(inst>>0)&7;
                    printf("add r%u,r%u,r%u",rd,sr1,sr2);

                    sr1_data=read_reg(sr1);
                    sr2_data=read_reg(sr2);
                    rd_data=sr1_data&sr2_data;
                }
                write_reg(rd,rd_data);
                docc(rd_data);
                break;
            }
            case 0x6: //ldr
            {
                rd=(inst>>9)&7;
                sr1=(inst>>6)&7;
                simm=sext6(inst);
                printf("ldr r%u,r%u,#0x%04X",rd,sr1,simm);
                if(simm&0x8000) printf(" ; -%u",(simm^0xFFFF)+1);
                else            printf(" ; +%u",simm);
                printf("\n");

                sr1_data=read_reg(sr1);
                dest=(sr1_data+simm)&0xFFFF;
                rd_data=read_mem(dest);
                write_reg(rd,rd_data);
                docc(rd_data);
                break;
            }
            case 0x7: //str
            {
                rd=(inst>>9)&7;
                sr1=(inst>>6)&7;
                simm=sext6(inst);
                printf("str r%u,r%u,#0x%04X",rd,sr1,simm);
                if(simm&0x8000) printf(" ; -%u",(simm^0xFFFF)+1);
                else            printf(" ; +%u",simm);
                printf("\n");

                sr1_data=read_reg(sr1);
                dest=(sr1_data+simm)&0xFFFF;
                rd_data=read_reg(rd);
                write_mem(dest,rd_data);
                break;
            }
            case 0x8: //rti
            {
                printf("rti\n");
                if(psr&0x8000)
                {
                    printf("exception\n");
                    exit(1);
                }
                else
                {
                    rd_data=read_reg(6);
                    pc=read_mem(rd_data);
                    write_reg(6,(rd_data+1)&0xFFFF);
                    rd_data=read_reg(6);
                    psr=read_mem(rd_data);
                    write_reg(6,(rd_data+1)&0xFFFF);
                }
                break;
            }
            case 0x9: //not
            {
                rd=(inst>>9)&7;
                sr1=(inst>>6)&7;
                printf("not r%u,r%u\n",rd,sr1);

                sr1_data=read_reg(sr1);
                rd_data = ~sr1_data;
                write_reg(rd,rd_data);
                docc(rd_data);
                break;
            }
            case 0xA: //ldi
            {
                rd=(inst>>9)&7;
                simm=sext9(inst);
                dest=(pc+simm)&0xFFFF;
                printf("ldi r%u,0x%04X",rd,dest);
                if(simm&0x8000) printf(" ; -%u",(simm^0xFFFF)+1);
                else            printf(" ; +%u",simm);
                printf("\n");

                rd_data=read_mem(read_mem(dest));
                write_reg(rd,rd_data);
                docc(rd_data);
                break;
            }
            case 0xB: //sti
            {
                rd=(inst>>9)&7;
                simm=sext9(inst);
                dest=(pc+simm)&0xFFFF;
                printf("sti r%u,0x%04X",rd,dest);
                if(simm&0x8000) printf(" ; -%u",(simm^0xFFFF)+1);
                else            printf(" ; +%u",simm);
                printf("\n");

                rd_data=read_reg(rd);
                write_mem(read_mem(dest),rd_data);
                break;
            }
            case 0xC: //jmp/ret
            {
                sr1=(inst>>6)&7;
                printf("jmp r%u",sr1);
                if(sr1==7) printf(" ; ret");
                printf("\n");

                pc=read_reg(sr1);
                break;
            }
            case 0xD: //undefined
            {
                printf("undefined instruction\n");
                exit(1);
                break;
            }
            case 0xE: //lea
            {
                rd=(inst>>9)&7;
                simm=sext9(inst);
                dest=(pc+simm)&0xFFFF;
                printf("lea r%u,0x%04X",rd,dest);
                if(simm&0x8000) printf(" ; -%u",(simm^0xFFFF)+1);
                else            printf(" ; +%u",simm);
                printf("\n");

                write_reg(rd,dest);
                docc(dest);
                break;
            }
            case 0xF: //trap
            {
                printf("trap 0x%02X\n",inst&0xFF);
                if((inst&0xFF)==0x67)
                {
                    printf("show 0x%04X\n",reg[0]);
                }
                else
                if((inst&0xFF)==0x25)
                {
                    printf("halt\n");
                    return(0);
                }
                else
                {
                    reg[7]=pc;
                    pc=mem[inst&0xFF];
                }
                break;
            }
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
leaq 0x1dad(%rip), %rdi      # 0x32bc
xorl %eax, %eax
movb %al, -0x21(%rbp)
callq 0x1040
movzwl 0x23b92(%rip), %edi     # 0x250b2
callq 0x11b0
movw %ax, %cx
movb -0x21(%rbp), %al
movw %cx, -0x2(%rbp)
movzwl 0x23b7c(%rip), %esi     # 0x250b2
movzwl -0x2(%rbp), %edx
leaq 0x1b8c(%rip), %rdi      # 0x30cd
callq 0x1040
movw 0x23b65(%rip), %ax      # 0x250b2
incw %ax
movw %ax, 0x23b5b(%rip)      # 0x250b2
movzwl -0x2(%rbp), %eax
shrl $0xc, %eax
movl %eax, %ecx
movq %rcx, -0x20(%rbp)
subl $0xf, %eax
ja 0x20bd
movq -0x20(%rbp), %rax
leaq 0x1a8c(%rip), %rcx      # 0x3004
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x1b5a(%rip), %rdi      # 0x30e2
movb $0x0, %al
callq 0x1040
movzwl -0x2(%rbp), %eax
andl $0x800, %eax            # imm = 0x800
cmpl $0x0, %eax
je 0x15ab
leaq 0x1b41(%rip), %rdi      # 0x30e5
movb $0x0, %al
callq 0x1040
movzwl -0x2(%rbp), %eax
andl $0x400, %eax            # imm = 0x400
cmpl $0x0, %eax
je 0x15c7
leaq 0x1b27(%rip), %rdi      # 0x30e7
movb $0x0, %al
callq 0x1040
movzwl -0x2(%rbp), %eax
andl $0x200, %eax            # imm = 0x200
cmpl $0x0, %eax
je 0x15e3
leaq 0x1b0d(%rip), %rdi      # 0x30e9
movb $0x0, %al
callq 0x1040
movzwl -0x2(%rbp), %edi
callq 0x13f0
movw %ax, -0x6(%rbp)
movzwl 0x23abb(%rip), %eax     # 0x250b2
movzwl -0x6(%rbp), %ecx
addl %ecx, %eax
andl $0xffff, %eax           # imm = 0xFFFF
movw %ax, -0x8(%rbp)
movzwl -0x8(%rbp), %esi
leaq 0x1b2c(%rip), %rdi      # 0x313d
movb $0x0, %al
callq 0x1040
movzwl -0x6(%rbp), %eax
andl $0x8000, %eax           # imm = 0x8000
cmpl $0x0, %eax
je 0x1643
movzwl -0x6(%rbp), %esi
xorl $0xffff, %esi           # imm = 0xFFFF
addl $0x1, %esi
leaq 0x1ab1(%rip), %rdi      # 0x30eb
movb $0x0, %al
callq 0x1040
jmp 0x1655
movzwl -0x6(%rbp), %esi
leaq 0x1aa4(%rip), %rdi      # 0x30f2
movb $0x0, %al
callq 0x1040
leaq 0x1c60(%rip), %rdi      # 0x32bc
movb $0x0, %al
callq 0x1040
movzwl 0x23a46(%rip), %eax     # 0x250b0
andl $0x7, %eax
movzwl -0x2(%rbp), %ecx
sarl $0x9, %ecx
andl $0x7, %ecx
andl %ecx, %eax
movw %ax, -0x4(%rbp)
cmpw $0x0, -0x4(%rbp)
je 0x16b1
movzwl 0x23a27(%rip), %eax     # 0x250b2
movl %eax, -0x28(%rbp)
movzwl -0x2(%rbp), %eax
andl $0x1ff, %eax            # imm = 0x1FF
movzwl %ax, %edi
callq 0x13f0
movw %ax, %cx
movl -0x28(%rbp), %eax
movzwl %cx, %ecx
addl %ecx, %eax
movw %ax, 0x23a01(%rip)      # 0x250b2
jmp 0x20bd
movzwl -0x2(%rbp), %eax
sarl $0x9, %eax
andl $0x7, %eax
movw %ax, -0xa(%rbp)
movzwl -0x2(%rbp), %eax
sarl $0x6, %eax
andl $0x7, %eax
movw %ax, -0xe(%rbp)
movzwl -0x2(%rbp), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x1722
movzwl -0x2(%rbp), %edi
callq 0x1370
movw %ax, -0x6(%rbp)
movzwl -0xa(%rbp), %esi
movzwl -0xe(%rbp), %edx
movzwl -0x6(%rbp), %ecx
leaq 0x19fb(%rip), %rdi      # 0x30f9
movb $0x0, %al
callq 0x1040
movzwl -0xe(%rbp), %edi
callq 0x12c0
movw %ax, -0x10(%rbp)
movzwl -0x10(%rbp), %eax
movzwl -0x6(%rbp), %ecx
addl %ecx, %eax
movw %ax, -0xc(%rbp)
jmp 0x1772
movzwl -0x2(%rbp), %eax
sarl $0x0, %eax
andl $0x7, %eax
movw %ax, -0x12(%rbp)
movzwl -0xa(%rbp), %esi
movzwl -0xe(%rbp), %edx
movzwl -0x12(%rbp), %ecx
leaq 0x19cb(%rip), %rdi      # 0x310e
movb $0x0, %al
callq 0x1040
movzwl -0xe(%rbp), %edi
callq 0x12c0
movw %ax, -0x10(%rbp)
movzwl -0x12(%rbp), %edi
callq 0x12c0
movw %ax, -0x14(%rbp)
movzwl -0x10(%rbp), %eax
movzwl -0x14(%rbp), %ecx
addl %ecx, %eax
movw %ax, -0xc(%rbp)
movw -0xa(%rbp), %ax
movzwl %ax, %edi
movzwl -0xc(%rbp), %esi
callq 0x1310
movzwl -0xc(%rbp), %edi
callq 0x1470
jmp 0x20bd
movzwl -0x2(%rbp), %eax
sarl $0x9, %eax
andl $0x7, %eax
movw %ax, -0xa(%rbp)
movzwl -0x2(%rbp), %edi
callq 0x13f0
movw %ax, -0x6(%rbp)
movzwl 0x23900(%rip), %eax     # 0x250b2
movzwl -0x6(%rbp), %ecx
addl %ecx, %eax
andl $0xffff, %eax           # imm = 0xFFFF
movw %ax, -0x8(%rbp)
movzwl -0xa(%rbp), %esi
movzwl -0x8(%rbp), %edx
leaq 0x194e(%rip), %rdi      # 0x311e
movb $0x0, %al
callq 0x1040
movzwl -0x6(%rbp), %eax
andl $0x8000, %eax           # imm = 0x8000
cmpl $0x0, %eax
je 0x1802
movzwl -0x6(%rbp), %esi
xorl $0xffff, %esi           # imm = 0xFFFF
addl $0x1, %esi
leaq 0x18f2(%rip), %rdi      # 0x30eb
movb $0x0, %al
callq 0x1040
jmp 0x1814
movzwl -0x6(%rbp), %esi
leaq 0x18e5(%rip), %rdi      # 0x30f2
movb $0x0, %al
callq 0x1040
leaq 0x1aa1(%rip), %rdi      # 0x32bc
movb $0x0, %al
callq 0x1040
movzwl -0x8(%rbp), %edi
callq 0x1210
movw %ax, -0xc(%rbp)
movw -0xa(%rbp), %ax
movzwl %ax, %edi
movzwl -0xc(%rbp), %esi
callq 0x1310
movzwl -0xc(%rbp), %edi
callq 0x1470
jmp 0x20bd
movzwl -0x2(%rbp), %eax
sarl $0x9, %eax
andl $0x7, %eax
movw %ax, -0xa(%rbp)
movzwl -0x2(%rbp), %edi
callq 0x13f0
movw %ax, -0x6(%rbp)
movzwl 0x23843(%rip), %eax     # 0x250b2
movzwl -0x6(%rbp), %ecx
addl %ecx, %eax
andl $0xffff, %eax           # imm = 0xFFFF
movw %ax, -0x8(%rbp)
movzwl -0xa(%rbp), %esi
movzwl -0x8(%rbp), %edx
leaq 0x189f(%rip), %rdi      # 0x312c
movb $0x0, %al
callq 0x1040
movzwl -0x6(%rbp), %eax
andl $0x8000, %eax           # imm = 0x8000
cmpl $0x0, %eax
je 0x18bf
movzwl -0x6(%rbp), %esi
xorl $0xffff, %esi           # imm = 0xFFFF
addl $0x1, %esi
leaq 0x1835(%rip), %rdi      # 0x30eb
movb $0x0, %al
callq 0x1040
jmp 0x18d1
movzwl -0x6(%rbp), %esi
leaq 0x1828(%rip), %rdi      # 0x30f2
movb $0x0, %al
callq 0x1040
leaq 0x19e4(%rip), %rdi      # 0x32bc
movb $0x0, %al
callq 0x1040
movzwl -0xa(%rbp), %edi
callq 0x12c0
movw %ax, -0xc(%rbp)
movw -0x8(%rbp), %ax
movzwl %ax, %edi
movzwl -0xc(%rbp), %esi
callq 0x1270
jmp 0x20bd
movzwl -0x2(%rbp), %eax
andl $0x800, %eax            # imm = 0x800
cmpl $0x0, %eax
je 0x19b1
movzwl -0x2(%rbp), %edi
callq 0x1430
movw %ax, -0x6(%rbp)
movzwl 0x2378b(%rip), %eax     # 0x250b2
movzwl -0x6(%rbp), %ecx
addl %ecx, %eax
andl $0xffff, %eax           # imm = 0xFFFF
movw %ax, -0x8(%rbp)
movzwl -0x8(%rbp), %esi
leaq 0x17f9(%rip), %rdi      # 0x313a
movb $0x0, %al
callq 0x1040
movzwl -0x6(%rbp), %eax
andl $0x8000, %eax           # imm = 0x8000
cmpl $0x0, %eax
je 0x1973
movzwl -0x6(%rbp), %esi
xorl $0xffff, %esi           # imm = 0xFFFF
addl $0x1, %esi
leaq 0x1781(%rip), %rdi      # 0x30eb
movb $0x0, %al
callq 0x1040
jmp 0x1985
movzwl -0x6(%rbp), %esi
leaq 0x1774(%rip), %rdi      # 0x30f2
movb $0x0, %al
callq 0x1040
leaq 0x1930(%rip), %rdi      # 0x32bc
movb $0x0, %al
callq 0x1040
movl $0x7, %edi
movzwl 0x23713(%rip), %esi     # 0x250b2
callq 0x1310
movw -0x8(%rbp), %ax
movw %ax, 0x23703(%rip)      # 0x250b2
jmp 0x19f2
movzwl -0x2(%rbp), %eax
sarl $0x6, %eax
andl $0x7, %eax
movw %ax, -0xa(%rbp)
movzwl -0xa(%rbp), %esi
leaq 0x177b(%rip), %rdi      # 0x3145
movb $0x0, %al
callq 0x1040
movl $0x7, %edi
movzwl 0x236d5(%rip), %esi     # 0x250b2
callq 0x1310
movzwl -0xa(%rbp), %edi
callq 0x12c0
movw %ax, 0x236c0(%rip)      # 0x250b2
jmp 0x20bd
movzwl -0x2(%rbp), %eax
sarl $0x9, %eax
andl $0x7, %eax
movw %ax, -0xa(%rbp)
movzwl -0x2(%rbp), %eax
sarl $0x6, %eax
andl $0x7, %eax
movw %ax, -0xe(%rbp)
movzwl -0x2(%rbp), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x1a63
movzwl -0x2(%rbp), %edi
callq 0x1370
movw %ax, -0x6(%rbp)
movzwl -0xa(%rbp), %esi
movzwl -0xe(%rbp), %edx
movzwl -0x6(%rbp), %ecx
leaq 0x1710(%rip), %rdi      # 0x314f
movb $0x0, %al
callq 0x1040
movzwl -0xe(%rbp), %edi
callq 0x12c0
movw %ax, -0x10(%rbp)
movzwl -0x10(%rbp), %eax
movzwl -0x6(%rbp), %ecx
andl %ecx, %eax
movw %ax, -0xc(%rbp)
jmp 0x1ab3
movzwl -0x2(%rbp), %eax
sarl $0x0, %eax
andl $0x7, %eax
movw %ax, -0x12(%rbp)
movzwl -0xa(%rbp), %esi
movzwl -0xe(%rbp), %edx
movzwl -0x12(%rbp), %ecx
leaq 0x168a(%rip), %rdi      # 0x310e
movb $0x0, %al
callq 0x1040
movzwl -0xe(%rbp), %edi
callq 0x12c0
movw %ax, -0x10(%rbp)
movzwl -0x12(%rbp), %edi
callq 0x12c0
movw %ax, -0x14(%rbp)
movzwl -0x10(%rbp), %eax
movzwl -0x14(%rbp), %ecx
andl %ecx, %eax
movw %ax, -0xc(%rbp)
movw -0xa(%rbp), %ax
movzwl %ax, %edi
movzwl -0xc(%rbp), %esi
callq 0x1310
movzwl -0xc(%rbp), %edi
callq 0x1470
jmp 0x20bd
movzwl -0x2(%rbp), %eax
sarl $0x9, %eax
andl $0x7, %eax
movw %ax, -0xa(%rbp)
movzwl -0x2(%rbp), %eax
sarl $0x6, %eax
andl $0x7, %eax
movw %ax, -0xe(%rbp)
movzwl -0x2(%rbp), %edi
callq 0x13b0
movw %ax, -0x6(%rbp)
movzwl -0xa(%rbp), %esi
movzwl -0xe(%rbp), %edx
movzwl -0x6(%rbp), %ecx
leaq 0x1657(%rip), %rdi      # 0x3164
movb $0x0, %al
callq 0x1040
movzwl -0x6(%rbp), %eax
andl $0x8000, %eax           # imm = 0x8000
cmpl $0x0, %eax
je 0x1b3f
movzwl -0x6(%rbp), %esi
xorl $0xffff, %esi           # imm = 0xFFFF
addl $0x1, %esi
leaq 0x15b5(%rip), %rdi      # 0x30eb
movb $0x0, %al
callq 0x1040
jmp 0x1b51
movzwl -0x6(%rbp), %esi
leaq 0x15a8(%rip), %rdi      # 0x30f2
movb $0x0, %al
callq 0x1040
leaq 0x1764(%rip), %rdi      # 0x32bc
movb $0x0, %al
callq 0x1040
movzwl -0xe(%rbp), %edi
callq 0x12c0
movw %ax, -0x10(%rbp)
movzwl -0x10(%rbp), %eax
movzwl -0x6(%rbp), %ecx
addl %ecx, %eax
andl $0xffff, %eax           # imm = 0xFFFF
movw %ax, -0x8(%rbp)
movzwl -0x8(%rbp), %edi
callq 0x1210
movw %ax, -0xc(%rbp)
movw -0xa(%rbp), %ax
movzwl %ax, %edi
movzwl -0xc(%rbp), %esi
callq 0x1310
movzwl -0xc(%rbp), %edi
callq 0x1470
jmp 0x20bd
movzwl -0x2(%rbp), %eax
sarl $0x9, %eax
andl $0x7, %eax
movw %ax, -0xa(%rbp)
movzwl -0x2(%rbp), %eax
sarl $0x6, %eax
andl $0x7, %eax
movw %ax, -0xe(%rbp)
movzwl -0x2(%rbp), %edi
callq 0x13b0
movw %ax, -0x6(%rbp)
movzwl -0xa(%rbp), %esi
movzwl -0xe(%rbp), %edx
movzwl -0x6(%rbp), %ecx
leaq 0x1592(%rip), %rdi      # 0x3178
movb $0x0, %al
callq 0x1040
movzwl -0x6(%rbp), %eax
andl $0x8000, %eax           # imm = 0x8000
cmpl $0x0, %eax
je 0x1c18
movzwl -0x6(%rbp), %esi
xorl $0xffff, %esi           # imm = 0xFFFF
addl $0x1, %esi
leaq 0x14dc(%rip), %rdi      # 0x30eb
movb $0x0, %al
callq 0x1040
jmp 0x1c2a
movzwl -0x6(%rbp), %esi
leaq 0x14cf(%rip), %rdi      # 0x30f2
movb $0x0, %al
callq 0x1040
leaq 0x168b(%rip), %rdi      # 0x32bc
movb $0x0, %al
callq 0x1040
movzwl -0xe(%rbp), %edi
callq 0x12c0
movw %ax, -0x10(%rbp)
movzwl -0x10(%rbp), %eax
movzwl -0x6(%rbp), %ecx
addl %ecx, %eax
andl $0xffff, %eax           # imm = 0xFFFF
movw %ax, -0x8(%rbp)
movzwl -0xa(%rbp), %edi
callq 0x12c0
movw %ax, -0xc(%rbp)
movw -0x8(%rbp), %ax
movzwl %ax, %edi
movzwl -0xc(%rbp), %esi
callq 0x1270
jmp 0x20bd
leaq 0x150b(%rip), %rdi      # 0x318c
movb $0x0, %al
callq 0x1040
movzwl 0x23421(%rip), %eax     # 0x250b0
andl $0x8000, %eax           # imm = 0x8000
cmpl $0x0, %eax
je 0x1cb1
leaq 0x14f1(%rip), %rdi      # 0x3191
movb $0x0, %al
callq 0x1040
movl $0x1, %edi
callq 0x10a0
movl $0x6, %edi
callq 0x12c0
movw %ax, -0xc(%rbp)
movzwl -0xc(%rbp), %edi
callq 0x1210
movw %ax, 0x233e3(%rip)      # 0x250b2
movzwl -0xc(%rbp), %eax
addl $0x1, %eax
andl $0xffff, %eax           # imm = 0xFFFF
movl $0x6, %edi
movzwl %ax, %esi
callq 0x1310
movl $0x6, %edi
callq 0x12c0
movw %ax, -0xc(%rbp)
movzwl -0xc(%rbp), %edi
callq 0x1210
movw %ax, 0x233aa(%rip)      # 0x250b0
movzwl -0xc(%rbp), %eax
addl $0x1, %eax
andl $0xffff, %eax           # imm = 0xFFFF
movl $0x6, %edi
movzwl %ax, %esi
callq 0x1310
jmp 0x20bd
movzwl -0x2(%rbp), %eax
sarl $0x9, %eax
andl $0x7, %eax
movw %ax, -0xa(%rbp)
movzwl -0x2(%rbp), %eax
sarl $0x6, %eax
andl $0x7, %eax
movw %ax, -0xe(%rbp)
movzwl -0xa(%rbp), %esi
movzwl -0xe(%rbp), %edx
leaq 0x144d(%rip), %rdi      # 0x319c
movb $0x0, %al
callq 0x1040
movzwl -0xe(%rbp), %edi
callq 0x12c0
movw %ax, -0x10(%rbp)
movzwl -0x10(%rbp), %eax
xorl $-0x1, %eax
movw %ax, -0xc(%rbp)
movw -0xa(%rbp), %ax
movzwl %ax, %edi
movzwl -0xc(%rbp), %esi
callq 0x1310
movzwl -0xc(%rbp), %edi
callq 0x1470
jmp 0x20bd
movzwl -0x2(%rbp), %eax
sarl $0x9, %eax
andl $0x7, %eax
movw %ax, -0xa(%rbp)
movzwl -0x2(%rbp), %edi
callq 0x13f0
movw %ax, -0x6(%rbp)
movzwl 0x23304(%rip), %eax     # 0x250b2
movzwl -0x6(%rbp), %ecx
addl %ecx, %eax
andl $0xffff, %eax           # imm = 0xFFFF
movw %ax, -0x8(%rbp)
movzwl -0xa(%rbp), %esi
movzwl -0x8(%rbp), %edx
leaq 0x13dd(%rip), %rdi      # 0x31a9
movb $0x0, %al
callq 0x1040
movzwl -0x6(%rbp), %eax
andl $0x8000, %eax           # imm = 0x8000
cmpl $0x0, %eax
je 0x1dfe
movzwl -0x6(%rbp), %esi
xorl $0xffff, %esi           # imm = 0xFFFF
addl $0x1, %esi
leaq 0x12f6(%rip), %rdi      # 0x30eb
movb $0x0, %al
callq 0x1040
jmp 0x1e10
movzwl -0x6(%rbp), %esi
leaq 0x12e9(%rip), %rdi      # 0x30f2
movb $0x0, %al
callq 0x1040
leaq 0x14a5(%rip), %rdi      # 0x32bc
movb $0x0, %al
callq 0x1040
movzwl -0x8(%rbp), %edi
callq 0x1210
movzwl %ax, %edi
callq 0x1210
movw %ax, -0xc(%rbp)
movw -0xa(%rbp), %ax
movzwl %ax, %edi
movzwl -0xc(%rbp), %esi
callq 0x1310
movzwl -0xc(%rbp), %edi
callq 0x1470
jmp 0x20bd
movzwl -0x2(%rbp), %eax
sarl $0x9, %eax
andl $0x7, %eax
movw %ax, -0xa(%rbp)
movzwl -0x2(%rbp), %edi
callq 0x13f0
movw %ax, -0x6(%rbp)
movzwl 0x2323f(%rip), %eax     # 0x250b2
movzwl -0x6(%rbp), %ecx
addl %ecx, %eax
andl $0xffff, %eax           # imm = 0xFFFF
movw %ax, -0x8(%rbp)
movzwl -0xa(%rbp), %esi
movzwl -0x8(%rbp), %edx
leaq 0x1327(%rip), %rdi      # 0x31b8
movb $0x0, %al
callq 0x1040
movzwl -0x6(%rbp), %eax
andl $0x8000, %eax           # imm = 0x8000
cmpl $0x0, %eax
je 0x1ec3
movzwl -0x6(%rbp), %esi
xorl $0xffff, %esi           # imm = 0xFFFF
addl $0x1, %esi
leaq 0x1231(%rip), %rdi      # 0x30eb
movb $0x0, %al
callq 0x1040
jmp 0x1ed5
movzwl -0x6(%rbp), %esi
leaq 0x1224(%rip), %rdi      # 0x30f2
movb $0x0, %al
callq 0x1040
leaq 0x13e0(%rip), %rdi      # 0x32bc
movb $0x0, %al
callq 0x1040
movzwl -0xa(%rbp), %edi
callq 0x12c0
movw %ax, -0xc(%rbp)
movzwl -0x8(%rbp), %edi
callq 0x1210
movzwl %ax, %edi
movzwl -0xc(%rbp), %esi
callq 0x1270
jmp 0x20bd
movzwl -0x2(%rbp), %eax
sarl $0x6, %eax
andl $0x7, %eax
movw %ax, -0xe(%rbp)
movzwl -0xe(%rbp), %esi
leaq 0x12a4(%rip), %rdi      # 0x31c7
movb $0x0, %al
callq 0x1040
movzwl -0xe(%rbp), %eax
cmpl $0x7, %eax
jne 0x1f41
leaq 0x1295(%rip), %rdi      # 0x31cf
movb $0x0, %al
callq 0x1040
leaq 0x1374(%rip), %rdi      # 0x32bc
movb $0x0, %al
callq 0x1040
movzwl -0xe(%rbp), %edi
callq 0x12c0
movw %ax, 0x23153(%rip)      # 0x250b2
jmp 0x20bd
leaq 0x126b(%rip), %rdi      # 0x31d6
movb $0x0, %al
callq 0x1040
movl $0x1, %edi
callq 0x10a0
movzwl -0x2(%rbp), %eax
sarl $0x9, %eax
andl $0x7, %eax
movw %ax, -0xa(%rbp)
movzwl -0x2(%rbp), %edi
callq 0x13f0
movw %ax, -0x6(%rbp)
movzwl 0x23114(%rip), %eax     # 0x250b2
movzwl -0x6(%rbp), %ecx
addl %ecx, %eax
andl $0xffff, %eax           # imm = 0xFFFF
movw %ax, -0x8(%rbp)
movzwl -0xa(%rbp), %esi
movzwl -0x8(%rbp), %edx
leaq 0x1231(%rip), %rdi      # 0x31ed
movb $0x0, %al
callq 0x1040
movzwl -0x6(%rbp), %eax
andl $0x8000, %eax           # imm = 0x8000
cmpl $0x0, %eax
je 0x1fee
movzwl -0x6(%rbp), %esi
xorl $0xffff, %esi           # imm = 0xFFFF
addl $0x1, %esi
leaq 0x1106(%rip), %rdi      # 0x30eb
movb $0x0, %al
callq 0x1040
jmp 0x2000
movzwl -0x6(%rbp), %esi
leaq 0x10f9(%rip), %rdi      # 0x30f2
movb $0x0, %al
callq 0x1040
leaq 0x12b5(%rip), %rdi      # 0x32bc
movb $0x0, %al
callq 0x1040
movw -0xa(%rbp), %ax
movzwl %ax, %edi
movzwl -0x8(%rbp), %esi
callq 0x1310
movzwl -0x8(%rbp), %edi
callq 0x1470
jmp 0x20bd
movzwl -0x2(%rbp), %esi
andl $0xff, %esi
leaq 0x11bf(%rip), %rdi      # 0x31fc
movb $0x0, %al
callq 0x1040
movzwl -0x2(%rbp), %eax
andl $0xff, %eax
cmpl $0x67, %eax
jne 0x2069
movzwl 0x23047(%rip), %esi     # 0x250a0
leaq 0x11a9(%rip), %rdi      # 0x3209
movb $0x0, %al
callq 0x1040
jmp 0x20bb
movzwl -0x2(%rbp), %eax
andl $0xff, %eax
cmpl $0x25, %eax
jne 0x208d
leaq 0x1198(%rip), %rdi      # 0x3216
movb $0x0, %al
callq 0x1040
xorl %eax, %eax
addq $0x30, %rsp
popq %rbp
retq
movw 0x2301e(%rip), %ax      # 0x250b2
movw %ax, 0x23013(%rip)      # 0x250ae
movzwl -0x2(%rbp), %eax
andl $0xff, %eax
movslq %eax, %rcx
leaq 0x2fe2(%rip), %rax      # 0x5090
movw (%rax,%rcx,2), %ax
movw %ax, 0x22ff9(%rip)      # 0x250b2
jmp 0x20bb
jmp 0x20bd
jmp 0x1508
nopw %cs:(%rax,%rax)