// File: /workspace/github_c_makefile_star2_O3/heltilda[P]cicada/bytecd.c
// Function: forced_equate
void _forced_equate()
{
    view sourceView, holdThatView, destView;
    step_params destPath;
    void *objectCopy = NULL, *stringPtr;
    ccInt sourceDataSize = 0, destDataSize = 0, sourceStringSize = no_string, destStringSize = no_string;
    ccInt sourceType, holdCodeNumber;
    char byteBackup;
    ccBool canResizeDestination = ccFalse, resizedFromZero = ccFalse;
    
    
        // Get the left-hand argument (the destination variable).
    
    if (*pcCodePtr == step_to_all)  canResizeDestination = ccTrue;
    holdThatView = thatView;
    
    callBytecodeFunction();
    if ((errCode == passed) && (GL_Object.type != var_type))  setError(not_a_variable_err, pcCodePtr-1);
    if ((errCode == passed) && (searchView.windowPtr == NULL))  setError(void_member_err, pcCodePtr-1);
    if (errCode != passed)  return;
    
    if (GL_Path.stemView.width == 0)  canResizeDestination = ccFalse;        // no point in trying
    if (GL_Path.stemView.width != GL_Path.stemView.windowPtr->variable_ptr->instances)  canResizeDestination = ccFalse;

    destView = searchView;
    refWindow(destView.windowPtr);
    
    destPath = GL_Path;
    holdCodeNumber = codeNumber;
    
    
        // Load the right-hand argument.  We do this in different ways depending on the type of the left-hand variable.
    
    thatView = destView;
    callBytecodeFunction();
    
    sourceView = searchView;
    searchView = destView;
    thatView = holdThatView;            // 'that' might have been overwritten
    
    derefWindow(&(destView.windowPtr));
    
    if (errCode != passed)  return;
    
    if (searchView.windowPtr != NULL)  {
    if (*(searchView.windowPtr->references) == 0)  {
        return;
    }}
    
    sourceType = GL_Object.type;
    
    
        // if the data to copy comes from a variable, size it using sizeView()
    
    if (sourceType == var_type)  {
        if (sourceView.windowPtr == NULL)  {  setError(not_a_variable_err, pcCodePtr-1);  return;  }
        
        sourceDataSize = 0;
        sizeView(&sourceView, &sourceDataSize, &sourceStringSize);
        if (sourceStringSize != no_string)  sourceDataSize += sourceStringSize;    // we don't care what form the source data is in
        
        objectCopy = (void *) malloc((size_t) sourceDataSize + sizeof(char));      // avoid size-0 malloc
        if (objectCopy == NULL)  {  setError(out_of_memory_err, pcCodePtr-1);  return;  }
        
        stringPtr = objectCopy;     // do this twice since readView() modifies stringPtr
        readView(&sourceView, &stringPtr, &sourceStringSize);
        stringPtr = objectCopy;       }
    
    
        // if the data to copy is a constant (i.e. is stored in one of the registers), make a pointer to that register
        // (we make a copy of the byte stored in intRegister if it's of type 'char')
    
    else  {
        sourceDataSize = typeSizes[sourceType];
        if (sourceType <= char_type)  {
            if (sourceType == bool_type)  stringPtr = (void *) &boolRegister;
            else  {  byteBackup = (char) intRegister;  stringPtr = (void *) &byteBackup;  }    }
        else if (sourceType == int_type)  stringPtr = (void *) &intRegister;
        else if (sourceType == double_type)  stringPtr = (void *) &doubleRegister;
        else if (sourceType == string_type)  {
            stringPtr = objectCopy = malloc(stringRegister.elementNum);
            if (objectCopy == NULL)  {  setError(out_of_memory_err, pcCodePtr-1);  return;  }
            getElements(&stringRegister, 1, stringRegister.elementNum, objectCopy);
            sourceDataSize = stringRegister.elementNum;
    }   }
    
    
        // Get the byte size of the destination variable.
    
    sizeView(&searchView, &destDataSize, &destStringSize);
    
    
        // If the source and destination variable sizes don't match, we can try resizing the latter if the destination path ended in [*].
    
    if (((sourceDataSize > destDataSize) && (destStringSize == no_string)) || (sourceDataSize < destDataSize))  {
        
                      // zero indices in source -- hard to deal with, so just throw an error
        
        if (destPath.stemView.width == 0)  setError(unequal_data_size_err, pcCodePtr-1);
        else if (destPath.stemMember == NULL)  setError(undefined_member_err, pcCodePtr-1);
        
        
            // if [*] was present and current top of that list is zero, then size it to 1 so we can measure its byte-size per index
        
        if ((canResizeDestination) && (destPath.stemMember->indices == 0) && (GL_Path.stemView.width > 0) && (errCode == passed))     {        
            resizeMember(destPath.stemMember, destPath.stemView.width, 1);
            if (errCode == passed)  {
                searchView.width = destPath.stemView.width;
                sizeView(&searchView, &destDataSize, &destStringSize);
                resizedFromZero = ccTrue;
        }   }
        
        
            // If sizes don't match and the dest. path ended in a [*], try to resize the destination variable.
        
        if (errCode == passed)  {
        if (((sourceDataSize > destDataSize) && (destStringSize == no_string)) || (sourceDataSize < destDataSize))  {
            if ((destDataSize > 0) && (canResizeDestination) && 
                    ( (destStringSize != no_string) || (sourceDataSize % (destDataSize/destPath.stemMember->indices) == 0) ))  {
                resizeMember(destPath.stemMember, destPath.stemView.width,     // this also rescales seachView.width
                                                        sourceDataSize/(destDataSize/destPath.stemMember->indices));
                destDataSize = sourceDataSize;         }
            
            
                // either we can't resize, or we tried and the dest. variable is still size-0 so there's no hope
            
            else if (resizedFromZero)  resizeMember(destPath.stemMember, destPath.stemView.width, 0);
    }   }}
    
    if (destStringSize != no_string)  {
        destStringSize = sourceDataSize-destDataSize;
        if ((errCode == passed) && (destStringSize < 0))  setError(unequal_data_size_err, pcCodePtr-1);     }
    else if ((errCode == passed) && (sourceDataSize != destDataSize))  setError(unequal_data_size_err, pcCodePtr-1);
    
    
        // write the data from the buffer to the destination variable
    
    if (errCode == passed)  writeView(&searchView, &stringPtr, &destStringSize);
    
    
        // free the memory & clean up
    
    if (objectCopy != NULL)  free(objectCopy);
    
    GL_Path = destPath;
    
    GL_Object.type = var_type;
    GL_Object.codeList = &(searchView.windowPtr->variable_ptr->codeList);
    codeNumber = holdCodeNumber;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xb8, %rsp
xorl %eax, %eax
movl %eax, 0x8(%rsp)
movl %eax, 0x14(%rsp)
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movl %eax, 0x34(%rsp)
movl %eax, 0x10(%rsp)
movq 0x13564(%rip), %rax     # 0x25818
movslq (%rax), %rbx
movups 0x13662(%rip), %xmm0    # 0x25920
movaps %xmm0, 0x60(%rsp)
movq 0x13666(%rip), %rcx     # 0x25930
movq %rcx, 0x70(%rsp)
addq $0x4, %rax
movq %rax, 0x1353e(%rip)     # 0x25818
leaq 0x1227f(%rip), %r15     # 0x24560
callq *(%r15,%rbx,8)
movl 0x1348d(%rip), %eax     # 0x25778
testl %eax, %eax
jne 0x12313
cmpl $-0x1, 0x13542(%rip)    # 0x25838
je 0x12313
movq 0x13519(%rip), %rsi     # 0x25818
addq $-0x4, %rsi
movl $0x22, %edi
callq 0xcfa3
movl 0x13465(%rip), %eax     # 0x25778
testl %eax, %eax
jne 0x1233c
cmpq $0x0, 0x13599(%rip)     # 0x258b8
jne 0x1233c
movq 0x134f0(%rip), %rsi     # 0x25818
addq $-0x4, %rsi
movl $0x1a, %edi
callq 0xcfa3
movl 0x1343c(%rip), %eax     # 0x25778
testl %eax, %eax
jne 0x12833
xorl $0xe, %ebx
movl 0x1353f(%rip), %eax     # 0x2588c
testl %eax, %eax
setne 0xf(%rsp)
movq 0x13525(%rip), %rcx     # 0x25880
movq 0x10(%rcx), %rcx
xorl 0xf0(%rcx), %eax
orl %ebx, %eax
sete %bpl
movups 0x13546(%rip), %xmm0    # 0x258b8
leaq 0xa0(%rsp), %r14
movaps %xmm0, (%r14)
movq 0x13543(%rip), %rax     # 0x258c8
movq %rax, 0x10(%r14)
movq (%r14), %rdi
callq 0xcfc2
movq 0x134d0(%rip), %r13     # 0x25868
movups 0x134dd(%rip), %xmm0    # 0x2587c
movups %xmm0, 0x8c(%rsp)
movups 0x134c2(%rip), %xmm0    # 0x25870
movaps %xmm0, 0x80(%rsp)
movl 0x134d0(%rip), %ebx     # 0x2588c
movq 0x134cd(%rip), %rax     # 0x25890
movq %rax, 0x38(%rsp)
movl 0x13585(%rip), %r12d    # 0x25954
movaps (%r14), %xmm0
movups %xmm0, 0x13546(%rip)    # 0x25920
movq 0x10(%r14), %rax
movq %rax, 0x1354b(%rip)     # 0x25930
movq 0x1342c(%rip), %rax     # 0x25818
movslq (%rax), %rcx
addq $0x4, %rax
movq %rax, 0x1341e(%rip)     # 0x25818
callq *(%r15,%rcx,8)
movq 0x134c3(%rip), %rax     # 0x258c8
movq %rax, 0x50(%rsp)
movups 0x134a7(%rip), %xmm0    # 0x258b8
movaps %xmm0, 0x40(%rsp)
movaps (%r14), %xmm0
movups %xmm0, 0x13497(%rip)    # 0x258b8
movq 0x10(%r14), %rax
movq %rax, 0x1349c(%rip)     # 0x258c8
movaps 0x60(%rsp), %xmm0
movups %xmm0, 0x134e8(%rip)    # 0x25920
movq 0x70(%rsp), %rax
movq %rax, 0x134ec(%rip)     # 0x25930
movq %r14, %rdi
callq 0xcfe2
cmpl $0x0, 0x13325(%rip)     # 0x25778
jne 0x12833
movq 0x13458(%rip), %rax     # 0x258b8
testq %rax, %rax
je 0x12472
movq 0x8(%rax), %rax
cmpl $0x0, (%rax)
je 0x12833
movslq 0x133bf(%rip), %rax     # 0x25838
cmpq $-0x1, %rax
je 0x124b8
leaq 0x987a(%rip), %rcx      # 0x1bd00
movl (%rcx,%rax,4), %ecx
movl %ecx, 0x8(%rsp)
cmpl $0x1, %eax
jg 0x12534
movl %r12d, %r14d
testl %eax, %eax
je 0x12568
movb 0x13325(%rip), %al      # 0x257cc
leaq 0x27(%rsp), %rcx
movb %al, (%rcx)
movq %rcx, 0x28(%rsp)
jmp 0x1257d
cmpq $0x0, 0x40(%rsp)
je 0x12553
leaq 0x8(%rsp), %r14
movl $0x0, (%r14)
leaq 0x40(%rsp), %rdi
leaq 0x34(%rsp), %r15
movq %r14, %rsi
movq %r15, %rdx
callq 0xd45b
movl (%r15), %ecx
movl (%r14), %eax
cmpl $-0x1, %ecx
je 0x124f6
addl %ecx, %eax
movl %eax, 0x8(%rsp)
movslq %eax, %rdi
incq %rdi
callq 0x81d0
testq %rax, %rax
je 0x1281e
movl %r12d, %r14d
leaq 0x28(%rsp), %r15
movq %rax, (%r15)
leaq 0x40(%rsp), %rdi
leaq 0x34(%rsp), %rdx
movq %r15, %rsi
movq %rax, %r12
callq 0xda7b
movq %r12, 0x18(%rsp)
movq %r12, (%r15)
jmp 0x12586
cmpl $0x4, %eax
je 0x127d7
movl %r12d, %r14d
cmpl $0x3, %eax
je 0x12571
cmpl $0x2, %eax
jne 0x1257d
leaq 0x1327b(%rip), %rax     # 0x257cc
jmp 0x12578
movq 0x132be(%rip), %rsi     # 0x25818
addq $-0x4, %rsi
movl $0x22, %edi
jmp 0x1282e
leaq 0x13259(%rip), %rax     # 0x257c8
jmp 0x12578
leaq 0x13258(%rip), %rax     # 0x257d0
movq %rax, 0x28(%rsp)
movq $0x0, 0x18(%rsp)
leaq 0x1332b(%rip), %rdi     # 0x258b8
leaq 0x14(%rsp), %r15
leaq 0x10(%rsp), %r12
movq %r15, %rsi
movq %r12, %rdx
callq 0xd45b
movl 0x8(%rsp), %edx
movl (%r15), %esi
cmpl %esi, %edx
setg %al
movl (%r12), %r9d
cmpl $-0x1, %r9d
sete %cl
cmpl %esi, %edx
movl %r14d, %r15d
movl %ebx, %r14d
jl 0x125cb
andb %cl, %al
je 0x1266d
andb 0xf(%rsp), %bpl
testl %r14d, %r14d
je 0x125e1
testq %r13, %r13
jne 0x125f6
movl $0x19, %edi
jmp 0x125e6
movl $0x28, %edi
movq 0x1322b(%rip), %rsi     # 0x25818
addq $-0x4, %rsi
callq 0xcfa3
testb %bpl, %bpl
je 0x12655
cmpl $0x0, 0x1328a(%rip)     # 0x2588c
setg %cl
movl 0x1316d(%rip), %eax     # 0x25778
movl 0xc(%r13), %edx
orl %eax, %edx
sete %dl
andb %cl, %dl
movb $0x1, %cl
cmpb $0x1, %dl
jne 0x12660
movq %r13, %rdi
movl %r14d, %esi
xorl %edx, %edx
movl $0x1, %ecx
callq 0x13f35
cmpl $0x0, 0x13142(%rip)     # 0x25778
jne 0x12668
movl %r14d, 0x13285(%rip)    # 0x258c4
leaq 0x13272(%rip), %rdi     # 0x258b8
leaq 0x14(%rsp), %rsi
leaq 0x10(%rsp), %rdx
callq 0xd45b
movl %ebp, %ecx
xorb $0x1, %cl
movl 0x13118(%rip), %eax     # 0x25778
testl %eax, %eax
je 0x1274b
movl 0x10(%rsp), %r9d
cmpl $-0x1, %r9d
je 0x126ca
movl 0x8(%rsp), %ecx
subl 0x14(%rsp), %ecx
movl %ecx, 0x10(%rsp)
movl 0x130f3(%rip), %eax     # 0x25778
testl %eax, %eax
sete %dl
testl %ecx, %ecx
sets %cl
testb %cl, %dl
je 0x126ae
movq 0x1317e(%rip), %rsi     # 0x25818
addq $-0x4, %rsi
movl $0x28, %edi
callq 0xcfa3
movl 0x130ca(%rip), %eax     # 0x25778
testl %eax, %eax
jne 0x126d7
leaq 0x131ff(%rip), %rdi     # 0x258b8
leaq 0x28(%rsp), %rsi
leaq 0x10(%rsp), %rdx
callq 0xd970
jmp 0x126d7
cmpl $0x0, 0x130a7(%rip)     # 0x25778
je 0x127c4
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x126e6
callq 0x81c0
movq %r13, 0x1317b(%rip)     # 0x25868
movaps 0x80(%rsp), %xmm0
movups %xmm0, 0x13174(%rip)    # 0x25870
movups 0x8c(%rsp), %xmm0
movups %xmm0, 0x13171(%rip)    # 0x2587c
movl %r14d, 0x1317a(%rip)    # 0x2588c
movq 0x38(%rsp), %rax
movq %rax, 0x13172(%rip)     # 0x25890
movl $0xffffffff, 0x13110(%rip) # imm = 0xFFFFFFFF
movq 0x13189(%rip), %rax     # 0x258b8
movl $0xd0, %ecx
addq 0x10(%rax), %rcx
movq %rcx, 0x13121(%rip)     # 0x25860
movl %r15d, 0x1320e(%rip)    # 0x25954
jmp 0x12833
movl 0x8(%rsp), %edi
movl 0x14(%rsp), %eax
cmpl %eax, %edi
setg %dl
movl 0x10(%rsp), %r9d
cmpl $-0x1, %r9d
sete %sil
cmpl %eax, %edi
jl 0x12772
andb %sil, %dl
je 0x1266d
testl %eax, %eax
setle %dl
xorb $0x1, %bpl
orb %dl, %bpl
jne 0x12852
movl 0xc(%r13), %r8d
cltd
idivl %r8d
movl %eax, %esi
cmpl $-0x1, %r9d
je 0x12845
movl %edi, %eax
cltd
idivl %esi
movl %eax, %ecx
subl %r8d, %ecx
jg 0x127a9
movl %eax, %r8d
jge 0x127bb
movq %r13, %rdi
movl %r14d, %esi
movl %r8d, %edx
callq 0x13f35
movl 0x8(%rsp), %edi
movl %edi, 0x14(%rsp)
jmp 0x12668
movl 0x8(%rsp), %eax
cmpl 0x14(%rsp), %eax
jne 0x12693
jmp 0x126a8
movl 0x12ffa(%rip), %r15d    # 0x257d8
movslq %r15d, %rdi
callq 0x81d0
movq %rax, 0x28(%rsp)
testq %rax, %rax
je 0x1281e
movl %r12d, %r14d
leaq 0x12fde(%rip), %rdi     # 0x257d8
movl $0x1, %esi
movl %r15d, %edx
movq %rax, %rcx
movq %rax, 0x18(%rsp)
callq 0x90a5
movl 0x12fc3(%rip), %eax     # 0x257d8
movl %eax, 0x8(%rsp)
jmp 0x12586
movq 0x12ff3(%rip), %rsi     # 0x25818
addq $-0x4, %rsi
movl $0x1, %edi
callq 0xcfa3
addq $0xb8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl %edi, %eax
cltd
idivl %esi
testl %edx, %edx
je 0x12798
testb %cl, %cl
jne 0x12668
movl 0xc(%r13), %ecx
movl %ecx, %edx
testl %ecx, %ecx
js 0x1286e
xorl %edx, %edx
testl %ecx, %ecx
je 0x12668
negl %ecx
movq %r13, %rdi
movl %r14d, %esi
callq 0x13f35
jmp 0x12668