// File: /workspace/github_c_makefile_star2_O3/johsteffens[P]beth/xoico/src/xoico.xo.c
// Function: xoico_target_s_get_hash
tp_t xoico_target_s_get_hash( const xoico_target_s* o )
{
    // xoico_target.x:161:1
    BLM_INIT_LEVEL(0);
    tp_t hash = bcore_tp_init();
    hash = bcore_tp_fold_tp( hash, o->pre_hash );
    hash = bcore_tp_fold_tp( hash, o->compiler->target_pre_hash );
    hash = bcore_tp_fold_tp( hash, o->_ );
    hash = bcore_tp_fold_sc( hash, o->name.sc );
    hash = bcore_tp_fold_sc( hash, o->ext.sc );
    hash = bcore_tp_fold_bl( hash, o->define_signal_handler );
    
    if( o->cengine ) hash = bcore_tp_fold_tp( hash, xoico_a_get_hash(((const xoico*)(o->cengine))) );
    if( o->copyright_and_license_terms )  hash = bcore_tp_fold_sc( hash, o->copyright_and_license_terms->sc );
    
    {const xoico_target_s* __a=o ;if(__a)for(sz_t __i=0;__i<__a->size;__i++){xoico_source_s* e=__a->data[__i]; hash = bcore_tp_fold_tp( hash, xoico_source_s_get_hash(e) );}}
    
    if( o->dependencies.size > 0 )
    {
        bcore_arr_tp_s* arr_tp = ((bcore_arr_tp_s*)BLM_LEVEL_T_PUSH(0,bcore_arr_tp_s,bcore_arr_tp_s_create()));
    
        {const bcore_arr_sz_s* __a=&(o->dependencies );if(__a)for(sz_t __i=0;__i<__a->size;__i++){sz_t target_idx=__a->data[__i]; bcore_arr_tp_s_push(arr_tp,xoico_target_s_get_hash(o->compiler->data[ target_idx ]) );}}
    
        // we sort to make the accrued hash independent of the order of dependencies
        bcore_arr_tp_s_sort(arr_tp,1 );
    
        {const bcore_arr_tp_s* __a=arr_tp ;if(__a)for(sz_t __i=0;__i<__a->size;__i++){tp_t tp=__a->data[__i]; hash = bcore_tp_fold_tp( hash, tp );}}
    }
    
    BLM_RETURNV(tp_t, hash)
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %rdi, %rbx
movabsq $0x100000001b3, %r13    # imm = 0x100000001B3
leaq 0x16e57a(%rip), %rax    # 0x19bdd0
movq (%rax), %rsi
leaq 0x8(%rsp), %r14
movq %r14, %rdi
callq 0xd6675
movq $0x0, 0x10(%r14)
movq 0x128(%rbx), %rdx
movl $0xff, %eax
movq %rdx, %rcx
andq %rax, %rcx
movabsq $-0x340d631b7bdddcdb, %rsi # imm = 0xCBF29CE484222325
xorq %rcx, %rsi
imulq %r13, %rsi
movl %edx, %edi
shrl $0x8, %edi
movl $0xff, %ecx
andl %ecx, %edi
xorq %rsi, %rdi
imulq %r13, %rdi
movl %edx, %esi
shrl $0x10, %esi
andl %ecx, %esi
xorq %rdi, %rsi
imulq %r13, %rsi
movl %edx, %edi
shrl $0x18, %edi
xorq %rsi, %rdi
imulq %r13, %rdi
movq %rdx, %rsi
shrq $0x20, %rsi
andq %rax, %rsi
xorq %rdi, %rsi
imulq %r13, %rsi
movq %rdx, %rdi
shrq $0x28, %rdi
andq %rax, %rdi
xorq %rsi, %rdi
imulq %r13, %rdi
movq %rdx, %rsi
shrq $0x30, %rsi
andq %rax, %rsi
xorq %rdi, %rsi
imulq %r13, %rsi
shrq $0x38, %rdx
xorq %rsi, %rdx
imulq %r13, %rdx
movq 0x138(%rbx), %rsi
movq 0x178(%rsi), %rdi
movq %rdi, %rsi
andq %rax, %rsi
xorq %rdx, %rsi
imulq %r13, %rsi
movl %edi, %edx
shrl $0x8, %edx
andl %ecx, %edx
xorq %rsi, %rdx
imulq %r13, %rdx
movl %edi, %esi
shrl $0x10, %esi
andl %ecx, %esi
xorq %rdx, %rsi
imulq %r13, %rsi
movl %edi, %edx
shrl $0x18, %edx
xorq %rsi, %rdx
imulq %r13, %rdx
movq %rdi, %rsi
shrq $0x20, %rsi
andq %rax, %rsi
xorq %rdx, %rsi
imulq %r13, %rsi
movq %rdi, %rdx
shrq $0x28, %rdx
andq %rax, %rdx
xorq %rsi, %rdx
imulq %r13, %rdx
movq %rdi, %rsi
shrq $0x30, %rsi
andq %rax, %rsi
xorq %rdx, %rsi
imulq %r13, %rsi
shrq $0x38, %rdi
xorq %rsi, %rdi
imulq %r13, %rdi
movq (%rbx), %rsi
movq 0x10(%rbx), %rdx
movq %rsi, %r8
andq %rax, %r8
xorq %rdi, %r8
imulq %r13, %r8
movl %esi, %edi
shrl $0x8, %edi
andl %ecx, %edi
xorq %r8, %rdi
imulq %r13, %rdi
movl %esi, %r8d
shrl $0x10, %r8d
andl %ecx, %r8d
xorq %rdi, %r8
imulq %r13, %r8
movl %esi, %ecx
shrl $0x18, %ecx
xorq %r8, %rcx
imulq %r13, %rcx
movq %rsi, %rdi
shrq $0x20, %rdi
andq %rax, %rdi
xorq %rcx, %rdi
imulq %r13, %rdi
movq %rsi, %rcx
shrq $0x28, %rcx
andq %rax, %rcx
xorq %rdi, %rcx
imulq %r13, %rcx
movq %rsi, %rdi
shrq $0x30, %rdi
andq %rax, %rdi
xorq %rcx, %rdi
imulq %r13, %rdi
shrq $0x38, %rsi
xorq %rdi, %rsi
testq %rdx, %rdx
je 0x2da20
imulq %r13, %rsi
movb (%rdx), %cl
testb %cl, %cl
je 0x2da2e
incq %rdx
movzbl %cl, %eax
xorq %rsi, %rax
imulq %r13, %rax
movb (%rdx), %cl
incq %rdx
movq %rax, %rsi
testb %cl, %cl
jne 0x2da08
jmp 0x2da31
movabsq $0x366000002e329, %rax  # imm = 0x366000002E329
imulq %rax, %rsi
movq %rsi, %rax
movq 0x30(%rbx), %rcx
testq %rcx, %rcx
je 0x2da60
movb (%rcx), %sil
testb %sil, %sil
je 0x2da64
incq %rcx
movzbl %sil, %edx
xorq %rax, %rdx
imulq %r13, %rdx
movb (%rcx), %sil
incq %rcx
movq %rdx, %rax
testb %sil, %sil
jne 0x2da45
jmp 0x2da67
imulq %r13, %rax
movq %rax, %rdx
movzbl 0xd0(%rbx), %r14d
xorq %rdx, %r14
imulq %r13, %r14
movq 0x130(%rbx), %rbp
testq %rbp, %rbp
je 0x2dba3
movq (%rbp), %r15
leaq 0x1649f7(%rip), %rax    # 0x192488
movl 0x1649f1(%rip), %ecx    # 0x192488
movslq %ecx, %rcx
leaq (%rcx,%rcx,2), %rcx
movq 0x20(%rax,%rcx,8), %rdx
movq 0x18(%rax,%rcx,8), %rcx
andq %r15, %rcx
shlq $0x4, %rcx
leaq (%rdx,%rcx), %rax
movq (%rdx,%rcx), %rdx
movl $0x8, %ecx
cmpq %r15, %rdx
je 0x2daeb
movq 0x10(%rax), %rdx
movl $0x18, %ecx
cmpq %r15, %rdx
je 0x2daeb
movq 0x20(%rax), %rdx
movl $0x28, %ecx
cmpq %r15, %rdx
je 0x2daeb
movq 0x30(%rax), %rdx
movl $0x38, %ecx
cmpq %r15, %rdx
jne 0x2daf4
movq (%rax,%rcx), %r12
testq %r12, %r12
jne 0x2db1b
movabsq $0x5d91f496b6479859, %rdi # imm = 0x5D91F496B6479859
movq %r15, %rsi
callq 0xe9bc5
movq %rax, %r12
leaq 0x164978(%rip), %rdi    # 0x192488
movq %r15, %rsi
movq %rax, %rdx
callq 0x115fac
movq %rbp, %rdi
callq *0x18(%r12)
movl $0xff, %ecx
movq %rax, %rdx
andq %rcx, %rdx
xorq %r14, %rdx
imulq %r13, %rdx
movl %eax, %esi
shrl $0x8, %esi
movl $0xff, %edi
andl %edi, %esi
xorq %rdx, %rsi
imulq %r13, %rsi
movl %eax, %edx
shrl $0x10, %edx
andl %edi, %edx
xorq %rsi, %rdx
imulq %r13, %rdx
movl %eax, %esi
shrl $0x18, %esi
xorq %rdx, %rsi
imulq %r13, %rsi
movq %rax, %rdx
shrq $0x20, %rdx
andq %rcx, %rdx
xorq %rsi, %rdx
imulq %r13, %rdx
movq %rax, %rsi
shrq $0x28, %rsi
andq %rcx, %rsi
xorq %rdx, %rsi
imulq %r13, %rsi
movq %rax, %rdx
shrq $0x30, %rdx
andq %rcx, %rdx
xorq %rsi, %rdx
imulq %r13, %rdx
shrq $0x38, %rax
xorq %rdx, %rax
imulq %r13, %rax
movq %rax, %r14
movq 0x48(%rbx), %rax
testq %rax, %rax
je 0x2dbda
movq 0x8(%rax), %rax
testq %rax, %rax
je 0x2dbd6
movb (%rax), %cl
testb %cl, %cl
je 0x2dbda
incq %rax
movzbl %cl, %ebp
xorq %r14, %rbp
imulq %r13, %rbp
movb (%rax), %cl
incq %rax
movq %rbp, %r14
testb %cl, %cl
jne 0x2dbbe
jmp 0x2dbdd
imulq %r13, %r14
movq %r14, %rbp
movq %rbx, %rax
cmpq $0x0, 0xa0(%rbx)
je 0x2dc9a
xorl %r15d, %r15d
movl $0xff, %r12d
movq %rax, %rbx
movq 0x98(%rbx), %rax
movq (%rax,%r15,8), %rdi
callq 0x2be49
movq %rax, %r14
andq %r12, %rax
xorq %rbp, %rax
imulq %r13, %rax
movl %r14d, %ecx
shrl $0x8, %ecx
movl $0xff, %edx
andl %edx, %ecx
xorq %rax, %rcx
imulq %r13, %rcx
movl %r14d, %eax
shrl $0x10, %eax
andl %edx, %eax
xorq %rcx, %rax
imulq %r13, %rax
movl %r14d, %ecx
shrl $0x18, %ecx
xorq %rax, %rcx
imulq %r13, %rcx
movq %r14, %rax
shrq $0x20, %rax
andq %r12, %rax
xorq %rcx, %rax
imulq %r13, %rax
movq %r14, %rcx
shrq $0x28, %rcx
andq %r12, %rcx
xorq %rax, %rcx
imulq %r13, %rcx
movq %r14, %rax
shrq $0x30, %rax
andq %r12, %rax
xorq %rcx, %rax
imulq %r13, %rax
shrq $0x38, %r14
xorq %rax, %r14
imulq %r13, %r14
incq %r15
movq %r14, %rbp
cmpq 0xa0(%rbx), %r15
jb 0x2dbfa
jmp 0x2dca0
movq %rbp, %r14
movq %rax, %rbx
cmpq $0x0, 0xe8(%rbx)
je 0x2dddc
movq %rbx, %r12
xorl %eax, %eax
callq 0xb8f17
leaq 0x8(%rsp), %rdi
movabsq $-0x79c1eb0a2e5b4c6b, %rdx # imm = 0x863E14F5D1A4B395
xorl %esi, %esi
movq %rax, %rcx
callq 0xd68a8
movq %rax, %r15
cmpq $0x0, 0xe8(%rbx)
je 0x2dd19
xorl %ebx, %ebx
movq 0xe0(%r12), %rax
movq 0x138(%r12), %rcx
movq (%rax,%rbx,8), %rax
movq 0x8(%rcx), %rcx
movq (%rcx,%rax,8), %rdi
callq 0x2d834
movq %r15, %rdi
movq %rax, %rsi
callq 0xb90d3
incq %rbx
cmpq 0xe8(%r12), %rbx
jb 0x2dce0
movq %r15, %rdi
movl $0x1, %esi
callq 0xb92ad
testq %r15, %r15
je 0x2dddc
movq 0x10(%r15), %rax
testq %rax, %rax
je 0x2dddc
movq 0x8(%r15), %rcx
xorl %edx, %edx
movl $0xff, %esi
movl $0xff, %edi
movq (%rcx,%rdx,8), %rbx
movq %rbx, %r8
andq %rsi, %r8
xorq %r14, %r8
imulq %r13, %r8
movl %ebx, %r9d
shrl $0x8, %r9d
andl %edi, %r9d
xorq %r8, %r9
imulq %r13, %r9
movl %ebx, %r8d
shrl $0x10, %r8d
andl %edi, %r8d
xorq %r9, %r8
imulq %r13, %r8
movl %ebx, %r9d
shrl $0x18, %r9d
xorq %r8, %r9
imulq %r13, %r9
movq %rbx, %r8
shrq $0x20, %r8
andq %rsi, %r8
xorq %r9, %r8
imulq %r13, %r8
movq %rbx, %r9
shrq $0x28, %r9
andq %rsi, %r9
xorq %r8, %r9
imulq %r13, %r9
movq %rbx, %r8
shrq $0x30, %r8
andq %rsi, %r8
xorq %r9, %r8
imulq %r13, %r8
shrq $0x38, %rbx
xorq %r8, %rbx
imulq %r13, %rbx
incq %rdx
movq %rbx, %r14
cmpq %rdx, %rax
jne 0x2dd4c
jmp 0x2dddf
movq %r14, %rbx
leaq 0x8(%rsp), %rdi
callq 0xd6d2c
movq %rbx, %rax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq