// File: /workspace/github_c_makefile_star2_O1/heltilda[P]cicada/bytecd.c
// Function: if_eq
void _if_eq()
{
    view firstArgView;
    ccInt firstDataType, secondDataType, intRegisterBackup = 0, rtrn;
    ccFloat doubleRegisterBackup = 0.;
    member fauxMember;
    window fauxStringWindow1, fauxStringWindow2, *windowToDeref = NULL;
    variable fauxStringVariable1, fauxStringVariable2;
    ccBool boolRegisterBackup1, boolRegisterBackup2, firstArgIsScalar, secondArgIsScalar;
    void *toCompare1 = NULL, *toCompare2 = NULL;
    
    
        // get the first argument
    
    copyCompareReadArg(callBytecodeFunction, &firstDataType, &firstArgIsScalar);
    if (errCode != passed)  return;
    
    if (firstArgIsScalar)  {
        firstArgView.multipleIndices = ccFalse;
        if (firstDataType == int_type)  {  intRegisterBackup = intRegister;  toCompare1 = &intRegisterBackup;  }
        else if (firstDataType == char_type)  {  boolRegisterBackup1 = (ccBool) intRegister;  toCompare1 = &boolRegisterBackup1;  }
        else if (firstDataType == double_type)  {  doubleRegisterBackup = doubleRegister;  toCompare1 = &doubleRegisterBackup;  }
        else if (firstDataType == bool_type)  {  boolRegisterBackup1 = boolRegister;  toCompare1 = &boolRegisterBackup1;  }
        else if (firstDataType == string_type)  {
            fauxStringWindow1.variable_ptr = &fauxStringVariable1;
            fauxStringWindow1.offset = 0;
            fauxStringWindow1.width = stringRegister.elementNum;
            
            firstArgView = searchView;
            refWindow(firstArgView.windowPtr);
            windowToDeref = firstArgView.windowPtr;
            
            rtrn = newLinkedList(&(fauxStringVariable1.mem.data), stringRegister.elementNum, 1, 0., ccFalse);
            if (rtrn != passed)  {  setError(rtrn, pcCodePtr-1);  return;  }
            copyElements(&stringRegister, 1, &(fauxStringVariable1.mem.data), 1, stringRegister.elementNum);
            toCompare1 = &fauxStringWindow1;
    }   }
    
    else  {
        firstArgView = searchView;
        if (firstArgView.windowPtr == NULL)  firstDataType = no_type;
        else  {
            refWindow(firstArgView.windowPtr);
            windowToDeref = firstArgView.windowPtr;
    }   }
    
    copyCompareReadArg(callBytecodeFunction, &secondDataType, &secondArgIsScalar);
    if (errCode == passed)  {
        
        if (secondArgIsScalar)  {
            searchView.multipleIndices = ccFalse;
            if (secondDataType == int_type)  toCompare2 = &intRegister;
            else if (secondDataType == char_type)  {  boolRegisterBackup2 = (ccBool) intRegister;  toCompare2 = &boolRegisterBackup2;  }
            else if (secondDataType == double_type)  toCompare2 = &doubleRegister;
            else if (secondDataType == bool_type)  {  boolRegisterBackup2 = boolRegister;  toCompare2 = &boolRegisterBackup2;  }
            else if (secondDataType == string_type)  {
                fauxStringWindow2.variable_ptr = &fauxStringVariable2;
                fauxStringWindow2.offset = 0;
                fauxStringWindow2.width = stringRegister.elementNum;
                fauxStringVariable2.mem.data = stringRegister;
                toCompare2 = &fauxStringWindow2;
        }   }
        
        boolRegister = ccTrue;      // the comparison functions only set falses upon finding a mismatch
        if (firstArgIsScalar)  {
            if ((secondDataType == var_type) || (secondDataType == no_type)) setError(type_mismatch_err, pcCodePtr-1);
            else if (secondArgIsScalar)  {
                if (secondDataType == string_type)  {  fauxMember.memberWindow = &fauxStringWindow2;  toCompare2 = &fauxMember;  }
                compareJumpTable[5*firstDataType + secondDataType](toCompare1, toCompare2);     }
            else if ((firstDataType == string_type) && (secondDataType == char_type))
                copyCompareMultiView(compareWindowData, &searchView, &firstArgView);
            else  copyCompareListToVar(toCompare1, firstDataType, &searchView, compareJumpTable);   }
        else if (firstDataType == no_type)  {
            if (secondDataType == no_type)  boolRegister = ccTrue;
            else  setError(type_mismatch_err, pcCodePtr-1);   }
        else  {
            if ((firstDataType != var_type) && (secondArgIsScalar))  {
                if ((firstDataType == char_type) && (secondDataType == string_type))
                    copyCompareMultiView(compareWindowData, &searchView, &firstArgView);
                else  copyCompareListToVar(toCompare2, secondDataType, &firstArgView, compareJumpTable);  }
            else if ( ((firstDataType == var_type) || (firstArgView.multipleIndices))
                            == ((secondDataType == var_type) || (searchView.multipleIndices)) )
                copyCompareMultiView(compareWindowData, &searchView, &firstArgView);
            else  setError(type_mismatch_err, pcCodePtr-1);
    }   }
    
    if ((firstArgIsScalar) && (firstDataType == string_type))  deleteLinkedList(&(fauxStringVariable1.mem.data));
    derefWindow(&windowToDeref);
    
    GL_Object.type = bool_type;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x2b8, %rsp            # imm = 0x2B8
movl $0x0, 0x24(%rsp)
xorl %eax, %eax
movq %rax, 0x28(%rsp)
movq %rax, 0x18(%rsp)
movq 0x115c4(%rip), %rax     # 0x25818
movslq (%rax), %rcx
addq $0x4, %rax
movq %rax, 0x115b6(%rip)     # 0x25818
leaq 0x102f7(%rip), %r15     # 0x24560
callq *(%r15,%rcx,8)
cmpl $0x0, 0x11504(%rip)     # 0x25778
je 0x14278
jmp 0x14295
movl 0x115ba(%rip), %eax     # 0x25838
cmpl $-0x1, %eax
setne %cl
cmpl $0x7, %eax
setne %bpl
andb %cl, %bpl
cmpl $-0x1, %eax
je 0x142d2
movl %eax, %ebx
cmpl $0x0, 0x114dc(%rip)     # 0x25778
jne 0x1466d
testb %bpl, %bpl
je 0x14315
movb $0x0, 0x10(%rsp)
cmpl $0x4, %ebx
ja 0x14354
movl %ebx, %eax
leaq 0x7abe(%rip), %rcx      # 0x1bd7c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movb 0x114fb(%rip), %al      # 0x257c8
jmp 0x1440d
movq 0x115df(%rip), %rcx     # 0x258b8
testq %rcx, %rcx
je 0x14345
movq 0x10(%rcx), %rdi
movl 0xc0(%rdi), %ebx
cmpq $0x4, %rbx
ja 0x14293
cmpb $0x0, 0x115d3(%rip)     # 0x258c8
jne 0x14295
cmpl $0x1, 0x115c6(%rip)     # 0x258c4
jne 0x14295
movl 0x115ba(%rip), %esi     # 0x258c0
leaq 0x10993(%rip), %rax     # 0x24ca0
callq *(%rax,%rbx,8)
movb $0x1, %bpl
jmp 0x14295
movups 0x1159c(%rip), %xmm0    # 0x258b8
movaps %xmm0, (%rsp)
movq 0x115a1(%rip), %rax     # 0x258c8
movq %rax, 0x10(%rsp)
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x1434f
callq 0xd1c8
movq (%rsp), %rax
movq %rax, 0x18(%rsp)
jmp 0x14354
movl $0x7, %ebx
jmp 0x14295
movl $0x7, %ebx
xorl %r14d, %r14d
jmp 0x14415
leaq 0x1c0(%rsp), %rax
movq %rax, 0x40(%rsp)
movl $0x0, 0x48(%rsp)
movl 0x11461(%rip), %eax     # 0x257d8
movl %eax, 0x4c(%rsp)
movups 0x11536(%rip), %xmm0    # 0x258b8
movaps %xmm0, (%rsp)
movq 0x1153b(%rip), %rax     # 0x258c8
movq %rax, 0x10(%rsp)
movq (%rsp), %rdi
callq 0xd1c8
movq (%rsp), %rax
movq %rax, 0x18(%rsp)
leaq 0x1d0(%rsp), %r14
movl 0x11426(%rip), %esi     # 0x257d8
xorps %xmm0, %xmm0
movq %r14, %rdi
movl $0x1, %edx
xorl %ecx, %ecx
callq 0x83e1
testl %eax, %eax
je 0x144ea
movq 0x11445(%rip), %rsi     # 0x25818
addq $-0x4, %rsi
movl %eax, %edi
callq 0xd1a9
jmp 0x1466d
movl 0x113e3(%rip), %eax     # 0x257cc
leaq 0x24(%rsp), %r14
movl %eax, (%r14)
jmp 0x14415
movsd 0x113d5(%rip), %xmm0    # 0x257d0
leaq 0x28(%rsp), %r14
movsd %xmm0, (%r14)
jmp 0x14415
movb 0x113bf(%rip), %al      # 0x257cc
leaq 0x30(%rsp), %r14
movb %al, (%r14)
movq 0x113fc(%rip), %rax     # 0x25818
movslq (%rax), %rcx
addq $0x4, %rax
movq %rax, 0x113ee(%rip)     # 0x25818
callq *(%r15,%rcx,8)
cmpl $0x0, 0x11343(%rip)     # 0x25778
je 0x14439
jmp 0x14455
movl 0x113f9(%rip), %ecx     # 0x25838
cmpl $-0x1, %ecx
setne %dl
cmpl $0x7, %ecx
setne %al
andb %dl, %al
cmpl $-0x1, %ecx
je 0x14498
movl %ecx, %r15d
cmpl $0x0, 0x1131c(%rip)     # 0x25778
jne 0x14642
testb %al, %al
je 0x14491
movb $0x0, 0x1145b(%rip)     # 0x258c8
cmpl $0x4, %r15d
ja 0x14491
movl %r15d, %ecx
leaq 0x7913(%rip), %rdx      # 0x1bd90
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movb 0x1133c(%rip), %cl      # 0x257c8
jmp 0x14565
xorl %esi, %esi
jmp 0x1456f
movq 0x11419(%rip), %rdx     # 0x258b8
testq %rdx, %rdx
je 0x144df
movq 0x10(%rdx), %rdi
movl 0xc0(%rdi), %r15d
cmpq $0x4, %r15
ja 0x14452
cmpb $0x0, 0x1140c(%rip)     # 0x258c8
jne 0x14455
cmpl $0x1, 0x113ff(%rip)     # 0x258c4
jne 0x14455
movl 0x113f3(%rip), %esi     # 0x258c0
leaq 0x107cc(%rip), %rax     # 0x24ca0
callq *(%rax,%r15,8)
movb $0x1, %al
jmp 0x14455
movl $0x7, %r15d
jmp 0x14455
movl 0x112e7(%rip), %r8d     # 0x257d8
leaq 0x112e0(%rip), %rdi     # 0x257d8
movl $0x1, %esi
movq %r14, %rdx
movl $0x1, %ecx
callq 0x8821
leaq 0x30(%rsp), %r14
jmp 0x14415
leaq 0xc8(%rsp), %rcx
leaq 0x58(%rsp), %rsi
movq %rcx, 0x10(%rsi)
movl $0x0, 0x18(%rsi)
movl 0x112a6(%rip), %edx     # 0x257d8
movl %edx, 0x1c(%rsi)
movups 0x1129c(%rip), %xmm0    # 0x257d8
movups %xmm0, 0x10(%rcx)
movups 0x112a1(%rip), %xmm0    # 0x257e8
movups %xmm0, 0x20(%rcx)
jmp 0x1456f
leaq 0x11278(%rip), %rsi     # 0x257cc
jmp 0x1456f
leaq 0x11273(%rip), %rsi     # 0x257d0
jmp 0x1456f
movb 0x11267(%rip), %cl      # 0x257cc
leaq 0xc8(%rsp), %rsi
movb %cl, (%rsi)
movb $0x1, 0x11252(%rip)     # 0x257c8
testb %bpl, %bpl
je 0x145c5
cmpl $0x7, %r15d
je 0x1462d
cmpl $-0x1, %r15d
je 0x1462d
testb %al, %al
je 0x1467b
cmpl $0x4, %r15d
jne 0x145ad
leaq 0x58(%rsp), %rax
leaq 0x80(%rsp), %rsi
movq %rax, (%rsi)
leal (%rbx,%rbx,4), %eax
addl %eax, %r15d
movslq %r15d, %rax
leaq 0xf1a3(%rip), %rcx      # 0x23760
movq %r14, %rdi
callq *(%rcx,%rax,8)
jmp 0x14642
cmpl $0x7, %ebx
jne 0x145d9
cmpl $0x7, %r15d
jne 0x1462d
movb $0x1, 0x111f1(%rip)     # 0x257c8
jmp 0x14642
cmpl $-0x1, %ebx
je 0x14606
testb %al, %al
je 0x14606
cmpl $0x1, %ebx
jne 0x145f1
cmpl $0x4, %r15d
je 0x14686
leaq 0xf168(%rip), %rcx      # 0x23760
movq %rsp, %rdx
movq %rsi, %rdi
movl %r15d, %esi
jmp 0x146b1
cmpl $-0x1, %ebx
sete %al
cmpb $0x0, 0x10(%rsp)
setne %cl
orb %al, %cl
cmpl $-0x1, %r15d
setne %al
cmpb $0x0, 0x112a4(%rip)     # 0x258c8
sete %dl
andb %al, %dl
cmpb %dl, %cl
jne 0x14686
movq 0x111e4(%rip), %rsi     # 0x25818
addq $-0x4, %rsi
movl $0x11, %edi
callq 0xd1a9
testb %bpl, %bpl
je 0x14659
cmpl $0x4, %ebx
jne 0x14659
leaq 0x1d0(%rsp), %rdi
callq 0x847e
leaq 0x18(%rsp), %rdi
callq 0xd1e8
movl $0x0, 0x111cb(%rip)     # 0x25838
addq $0x2b8, %rsp            # imm = 0x2B8
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
cmpl $0x4, %ebx
jne 0x1469e
cmpl $0x1, %r15d
jne 0x1469e
leaq -0x731f(%rip), %rdi     # 0xd36e
leaq 0x11224(%rip), %rsi     # 0x258b8
movq %rsp, %rdx
callq 0x121cb
jmp 0x14642
leaq 0x11213(%rip), %rdx     # 0x258b8
leaq 0xf0b4(%rip), %rcx      # 0x23760
movq %r14, %rdi
movl %ebx, %esi
callq 0xd59f
jmp 0x14642