// File: /workspace/github_c_makefile_star2_O2/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 %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %rdi, %rbx
leaq 0xfd722(%rip), %rax     # 0x117dd0
movq (%rax), %rsi
leaq 0x8(%rsp), %r14
movq %r14, %rdi
callq 0x717f5
andq $0x0, 0x10(%r14)
movq 0x128(%rbx), %rsi
movabsq $-0x340d631b7bdddcdb, %rdi # imm = 0xCBF29CE484222325
callq 0xe705
movq 0x138(%rbx), %rcx
movq 0x178(%rcx), %rsi
movq %rax, %rdi
callq 0xe705
movq (%rbx), %rsi
movq %rax, %rdi
callq 0xe705
movq 0x10(%rbx), %rsi
movq %rax, %rdi
callq 0x10500
movq 0x30(%rbx), %rsi
movq %rax, %rdi
callq 0x10500
movzbl 0xd0(%rbx), %ecx
xorq %rax, %rcx
movabsq $0x100000001b3, %r14    # imm = 0x100000001B3
imulq %rcx, %r14
movq 0x130(%rbx), %rdi
testq %rdi, %rdi
je 0x1a749
callq 0x13ba6
movq %r14, %rdi
movq %rax, %rsi
callq 0xe705
movq %rax, %r14
movq 0x48(%rbx), %rax
testq %rax, %rax
je 0x1a761
movq 0x8(%rax), %rsi
movq %r14, %rdi
callq 0x10500
movq %rax, %r14
xorl %r15d, %r15d
cmpq 0xa0(%rbx), %r15
jae 0x1a790
movq 0x98(%rbx), %rax
movq (%rax,%r15,8), %rdi
callq 0x19740
movq %r14, %rdi
movq %rax, %rsi
callq 0xe705
movq %rax, %r14
incq %r15
jmp 0x1a764
cmpq $0x0, 0xe8(%rbx)
je 0x1a830
xorl %r12d, %r12d
xorl %eax, %eax
callq 0x5b931
leaq 0x8(%rsp), %rdi
movabsq $-0x79c1eb0a2e5b4c6b, %rdx # imm = 0x863E14F5D1A4B395
xorl %esi, %esi
movq %rax, %rcx
callq 0x71967
movq %rax, %r15
cmpq 0xe8(%rbx), %r12
jae 0x1a7fc
movq 0xe0(%rbx), %rax
movq 0x138(%rbx), %rcx
movq (%rax,%r12,8), %rax
movq 0x8(%rcx), %rcx
movq (%rcx,%rax,8), %rdi
callq 0x1a699
movq %r15, %rdi
movq %rax, %rsi
callq 0x5baa8
incq %r12
jmp 0x1a7c4
pushq $0x1
popq %rsi
movq %r15, %rdi
callq 0x5bc6a
testq %r15, %r15
je 0x1a830
movq 0x10(%r15), %rbx
xorl %r12d, %r12d
cmpq %r12, %rbx
je 0x1a830
movq 0x8(%r15), %rax
movq (%rax,%r12,8), %rsi
movq %r14, %rdi
callq 0xe705
movq %rax, %r14
incq %r12
jmp 0x1a813
leaq 0x8(%rsp), %rdi
callq 0x71b64
movq %r14, %rax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq