// File: /workspace/github_c_makefile_star2_O1/BernardTatin[P]s7sh/s7.c
// Function: hash_string
static hash_entry_t *hash_string(s7_scheme *sc, s7_pointer table, s7_pointer key)
                {
                    if (is_string(key))
                    {
                        hash_entry_t *x;
                        s7_int key_len, hash_mask;
                        uint64_t hash;
                        const char *key_str;

                        key_len = string_length(key);
                        key_str = string_value(key);

                        if (string_hash(key) == 0)
                            string_hash(key) = raw_string_hash((const uint8_t *)string_value(key), string_length(key));
                        hash = string_hash(key);

                        hash_mask = hash_table_mask(table);
                        if (key_len <= 8)
                        {
                            for (x = hash_table_element(table, hash & hash_mask); x; x = hash_entry_next(x))
                                if ((hash == string_hash(hash_entry_key(x))) &&
                                        (key_len == string_length(hash_entry_key(x))))
                                    return(x);
                        }
                        else
                        {
                            for (x = hash_table_element(table, hash & hash_mask); x; x = hash_entry_next(x))
                                if ((hash == string_hash(hash_entry_key(x))) &&
                                        (key_len == string_length(hash_entry_key(x))) &&        /* these are scheme strings, so we can't assume 0=end of string */
                                        (strings_are_equal_with_length(key_str, string_value(hash_entry_key(x)), key_len)))
                                    return(x);
                        }
                    }
                    return(sc->unentry);
                }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdi, %rbx
cmpb $0x13, (%rdx)
jne 0x401cf
movq %rdx, %r13
movq %rsi, %r12
movq 0x8(%rdx), %r14
movq 0x10(%rdx), %r15
cmpq $0x0, 0x18(%rdx)
jne 0x4014f
movq $0x0, 0x8(%rsp)
cmpq $0x8, %r14
jg 0x4010b
leaq 0x8(%rsp), %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x93e0
jmp 0x40146
movq (%r15), %rbp
movq %rbp, 0x8(%rsp)
leaq 0x10(%rsp), %rdi
movq $0x0, (%rdi)
leaq 0x8(%r15), %rsi
cmpq $0x10, %r14
movl $0x10, %edx
cmovlq %r14, %rdx
addq $-0x8, %rdx
callq 0x93e0
leaq 0x10(%rsp), %rax
addq (%rax), %rbp
movq %rbp, 0x8(%rsp)
movq 0x8(%rsp), %rax
movq %rax, 0x18(%r13)
movq 0x18(%r13), %r13
movq 0x8(%r12), %rax
andq %r13, %rax
movq 0x10(%r12), %rcx
movq (%rcx,%rax,8), %rax
movb $0x1, %bpl
cmpq $0x8, %r14
jg 0x40190
testq %rax, %rax
je 0x401c6
movq %rax, %r12
movq (%rax), %rax
cmpq 0x18(%rax), %r13
jne 0x40184
cmpq 0x8(%rax), %r14
je 0x401c8
movq 0x18(%r12), %rax
testq %rax, %rax
jne 0x40172
jmp 0x401ca
testq %rax, %rax
je 0x401c6
movq %rax, %r12
movq (%rax), %rax
cmpq 0x18(%rax), %r13
jne 0x401ba
cmpq 0x8(%rax), %r14
jne 0x401ba
movq 0x10(%rax), %rsi
movq %r15, %rdi
movq %r14, %rdx
callq 0x9253a
testb %al, %al
jne 0x401c8
movq 0x18(%r12), %rax
testq %rax, %rax
jne 0x40195
jmp 0x401ca
jmp 0x401ca
xorl %ebp, %ebp
testb %bpl, %bpl
je 0x401d6
movq 0x490(%rbx), %r12
movq %r12, %rax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq