// File: /workspace/github_c_makefile_star2_O3/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 %r13
pushq %r12
pushq %rbx
subq $0x2b8, %rsp            # imm = 0x2B8
movl $0x0, 0x24(%rsp)
xorl %eax, %eax
movq %rax, 0x28(%rsp)
movq %rax, 0x18(%rsp)
movq 0x1167f(%rip), %rax     # 0x25818
movslq (%rax), %rcx
addq $0x4, %rax
movq %rax, 0x11671(%rip)     # 0x25818
leaq 0x103b2(%rip), %r15     # 0x24560
callq *(%r15,%rcx,8)
cmpl $0x0, 0x115bf(%rip)     # 0x25778
jne 0x143fe
movl 0x11673(%rip), %ebx     # 0x25838
cmpl $0x7, %ebx
je 0x14262
cmpl $-0x1, %ebx
jne 0x14227
movq 0x116de(%rip), %rax     # 0x258b8
testq %rax, %rax
je 0x14266
movq 0x10(%rax), %rdi
movl 0xc0(%rdi), %ebx
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
cmpq $0x4, %rbx
ja 0x1426b
cmpb $0x0, 0x116c9(%rip)     # 0x258c8
jne 0x14262
cmpl $0x1, 0x116bc(%rip)     # 0x258c4
jne 0x14262
movl 0x116b0(%rip), %esi     # 0x258c0
leaq 0x10a89(%rip), %rax     # 0x24ca0
callq *(%rax,%rbx,8)
cmpl $0x0, 0x11557(%rip)     # 0x25778
jne 0x143fe
movb $0x0, 0x10(%rsp)
movb $0x1, %r12b
cmpl $0x4, %ebx
ja 0x14377
movl %ebx, %eax
leaq 0x7b0b(%rip), %rcx      # 0x1bd4c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movb 0x11578(%rip), %al      # 0x257c8
leaq 0x30(%rsp), %r14
movb %al, (%r14)
xorl %r13d, %r13d
xorl %ebx, %ebx
jmp 0x143ac
movl %ebx, %ebp
jmp 0x1426b
movl $0x7, %ebp
movups 0x11646(%rip), %xmm0    # 0x258b8
movaps %xmm0, (%rsp)
movq 0x1164b(%rip), %rax     # 0x258c8
movq %rax, 0x10(%rsp)
movq (%rsp), %rbx
movb $0x1, %r13b
testq %rbx, %rbx
je 0x142a5
movq %rbx, %rdi
callq 0xcfc2
movq %rbx, 0x18(%rsp)
xorl %r12d, %r12d
movl %ebp, %ebx
jmp 0x1437a
movl $0x7, %ebx
xorl %r12d, %r12d
jmp 0x1437a
leaq 0x1c0(%rsp), %rax
movq %rax, 0x40(%rsp)
movl $0x0, 0x48(%rsp)
movl 0x1150b(%rip), %eax     # 0x257d8
movl %eax, 0x4c(%rsp)
movups 0x115e0(%rip), %xmm0    # 0x258b8
movaps %xmm0, (%rsp)
movq 0x115e5(%rip), %rax     # 0x258c8
movq %rax, 0x10(%rsp)
movq (%rsp), %rbx
movq %rbx, %rdi
callq 0xcfc2
movq %rbx, 0x18(%rsp)
leaq 0x1d0(%rsp), %rbx
movl 0x114d1(%rip), %esi     # 0x257d8
xorps %xmm0, %xmm0
movq %rbx, %rdi
movl $0x1, %edx
xorl %ecx, %ecx
callq 0x83e1
testl %eax, %eax
je 0x1437f
movq 0x114f4(%rip), %rsi     # 0x25818
addq $-0x4, %rsi
movl %eax, %edi
callq 0xcfa3
jmp 0x143fe
movl 0x11492(%rip), %eax     # 0x257cc
leaq 0x24(%rsp), %r14
movl %eax, (%r14)
movl $0x2, %ebx
jmp 0x143a9
movsd 0x1147f(%rip), %xmm0    # 0x257d0
leaq 0x28(%rsp), %r14
movsd %xmm0, (%r14)
movl $0x3, %ebx
jmp 0x143a9
movb 0x11464(%rip), %al      # 0x257cc
leaq 0x30(%rsp), %r14
movb %al, (%r14)
movl $0x1, %ebx
jmp 0x143a9
xorl %r13d, %r13d
xorl %r14d, %r14d
jmp 0x143ac
movl 0x11452(%rip), %r8d     # 0x257d8
leaq 0x1144b(%rip), %rdi     # 0x257d8
movl $0x1, %esi
movq %rbx, %rdx
movl $0x1, %ecx
callq 0x8856
leaq 0x30(%rsp), %r14
movl $0x4, %ebx
xorl %r13d, %r13d
movq 0x11465(%rip), %rax     # 0x25818
movslq (%rax), %rcx
addq $0x4, %rax
movq %rax, 0x11457(%rip)     # 0x25818
callq *(%r15,%rcx,8)
cmpl $0x0, 0x113ac(%rip)     # 0x25778
je 0x14410
cmpl $0x4, %ebx
setne %al
xorb $0x1, %r12b
orb %al, %r12b
jne 0x143ea
leaq 0x1d0(%rsp), %rdi
callq 0x847e
leaq 0x18(%rsp), %rdi
callq 0xcfe2
movl $0x0, 0x1143a(%rip)     # 0x25838
addq $0x2b8, %rsp            # imm = 0x2B8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movb $0x1, %cl
movl 0x1141f(%rip), %r15d    # 0x25838
cmpl $0x7, %r15d
je 0x144d0
cmpl $-0x1, %r15d
jne 0x1448d
movq 0x11488(%rip), %rax     # 0x258b8
testq %rax, %rax
je 0x144ca
movq 0x10(%rax), %rdi
movl 0xc0(%rdi), %r15d
cmpq $0x4, %r15
ja 0x144d6
xorl %esi, %esi
cmpb $0x0, 0x11471(%rip)     # 0x258c8
movl $0x0, %eax
jne 0x14549
cmpl $0x1, 0x1145b(%rip)     # 0x258c4
jne 0x14549
movl 0x1144b(%rip), %esi     # 0x258c0
leaq 0x10824(%rip), %rax     # 0x24ca0
callq *(%rax,%r15,8)
cmpl $0x0, 0x112f1(%rip)     # 0x25778
jne 0x143ce
movb $0x0, 0x11434(%rip)     # 0x258c8
movb $0x1, %al
cmpl $0x4, %r15d
ja 0x1469e
movl %r15d, %ecx
leaq 0x78b6(%rip), %rdx      # 0x1bd60
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movb 0x1130f(%rip), %cl      # 0x257c8
leaq 0xc8(%rsp), %rsi
movb %cl, (%rsi)
xorl %ecx, %ecx
xorl %r15d, %r15d
jmp 0x14549
movl $0x7, %r15d
xorl %eax, %eax
xorl %esi, %esi
jmp 0x14549
xorl %eax, %eax
movl $0xffffffff, %r15d      # imm = 0xFFFFFFFF
jmp 0x144d2
leaq 0xc8(%rsp), %rcx
leaq 0x58(%rsp), %rsi
movq %rcx, 0x10(%rsi)
movl $0x0, 0x18(%rsi)
movl 0x112da(%rip), %edx     # 0x257d8
movl %edx, 0x1c(%rsi)
movups 0x112d0(%rip), %xmm0    # 0x257d8
movups %xmm0, 0x10(%rcx)
movups 0x112d5(%rip), %xmm0    # 0x257e8
movups %xmm0, 0x20(%rcx)
movl $0x4, %r15d
jmp 0x14547
leaq 0x112a6(%rip), %rsi     # 0x257cc
jmp 0x14547
leaq 0x112a1(%rip), %rsi     # 0x257d0
jmp 0x14547
movb 0x11295(%rip), %cl      # 0x257cc
leaq 0xc8(%rsp), %rsi
movb %cl, (%rsi)
movl $0x1, %r15d
xorl %ecx, %ecx
movb $0x1, 0x11278(%rip)     # 0x257c8
testb %r13b, %r13b
je 0x1457e
cmpl $0x7, %ebx
jne 0x145bd
cmpl $0x7, %r15d
je 0x143ea
movq 0x112ad(%rip), %rsi     # 0x25818
addq $-0x4, %rsi
movl $0x11, %edi
callq 0xcfa3
jmp 0x143ea
cmpl $0x7, %r15d
je 0x14639
cmpl $-0x1, %r15d
je 0x14639
testb %cl, %cl
je 0x14653
cmpl $0x4, %ebx
jne 0x145a5
cmpl $0x1, %r15d
je 0x1461e
leaq 0x1130c(%rip), %rdx     # 0x258b8
leaq 0xf1ad(%rip), %rcx      # 0x23760
movq %r14, %rdi
movl %ebx, %esi
jmp 0x14694
cmpl $-0x1, %ebx
sete %cl
xorb $0x1, %al
orb %cl, %al
jne 0x145f7
cmpl $0x1, %ebx
jne 0x14684
cmpl $0x4, %r15d
jne 0x14684
leaq -0x747b(%rip), %rdi     # 0xd168
leaq 0x112ce(%rip), %rsi     # 0x258b8
movq %rsp, %rdx
callq 0x1203b
jmp 0x143ea
cmpl $-0x1, %ebx
sete %al
cmpb $0x0, 0x10(%rsp)
setne %cl
orb %al, %cl
cmpl $-0x1, %r15d
setne %al
cmpb $0x0, 0x112b3(%rip)     # 0x258c8
sete %dl
andb %al, %dl
cmpb %dl, %cl
je 0x14639
leaq -0x74bd(%rip), %rdi     # 0xd168
leaq 0x1128c(%rip), %rsi     # 0x258b8
movq %rsp, %rdx
callq 0x1203b
jmp 0x143ce
movq 0x111d8(%rip), %rsi     # 0x25818
addq $-0x4, %rsi
movl $0x11, %edi
callq 0xcfa3
jmp 0x143ce
cmpl $0x4, %r15d
jne 0x14669
leaq 0x58(%rsp), %rax
leaq 0x80(%rsp), %rsi
movq %rax, (%rsi)
leal (%rbx,%rbx,4), %eax
addl %eax, %r15d
movslq %r15d, %rax
leaq 0xf0e7(%rip), %rcx      # 0x23760
movq %r14, %rdi
callq *(%rcx,%rax,8)
jmp 0x143ce
leaq 0xf0d5(%rip), %rcx      # 0x23760
movq %rsp, %rdx
movq %rsi, %rdi
movl %r15d, %esi
callq 0xd399
jmp 0x143ce
xorl %ecx, %ecx
jmp 0x144d2