// File: /workspace/github_c_makefile_star2_O0/BernardTatin[P]s7sh/s7.c
// Function: hash_map_let
static s7_int hash_map_let(s7_scheme *sc, s7_pointer table, s7_pointer key)
                {
                    /* lets are equal if same symbol/value pairs, independent of order, taking into account shadowing
                     *   (length (inlet 'a 1 'a 2)) = 2
                     * but this counts as just one entry from equal?'s point of view, so if more than one entry, we have a problem.
                     *   (equal? (inlet 'a 1) (inlet 'a 3 'a 2 'a 1)) = #t
                     * also currently equal? follows outlet, but that is ridiculous here, so in this case hash equal?
                     *   is not the same as equal?  Surely anyone using lets as keys wants eq?
                     */
                    s7_pointer slot;
                    s7_int slots;

                    if ((key == sc->rootlet) ||
                            (!tis_slot(let_slots(key))))
                        return(0);
                    slot = let_slots(key);
                    if (!tis_slot(next_slot(slot)))
                    {
                        if (is_sequence(slot_value(slot))) /* avoid loop if cycles */
                            return(symbol_hmap(slot_symbol(slot)));
                        return(symbol_hmap(slot_symbol(slot)) + hash_loc(sc, table, slot_value(slot)));
                    }
                    slots = 0;
                    for (; tis_slot(slot); slot = next_slot(slot))
                        if (!is_matched_symbol(slot_symbol(slot)))
                        {
                            set_match_symbol(slot_symbol(slot));
                            slots++;
                        }
                    for (slot = let_slots(key); tis_slot(slot); slot = next_slot(slot))
                        clear_match_symbol(slot_symbol(slot));

                    if (slots == 1)
                    {
                        slot = let_slots(key);
                        if (is_sequence(slot_value(slot))) /* avoid loop if cycles */
                            return(symbol_hmap(slot_symbol(slot)));
                        return(symbol_hmap(slot_symbol(slot)) + hash_loc(sc, table, slot_value(slot)));
                    }

                    return(slots);
                }

// Assembly:
subq $0x48, %rsp
movq %rdi, 0x38(%rsp)
movq %rsi, 0x30(%rsp)
movq %rdx, 0x28(%rsp)
movq 0x28(%rsp), %rax
movq 0x38(%rsp), %rcx
cmpq 0x150(%rcx), %rax
je 0x38252
movq 0x28(%rsp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x38260
movq $0x0, 0x40(%rsp)
jmp 0x38471
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rax
cmpq $0x0, 0x18(%rax)
jne 0x3831d
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %eax
movl %eax, %ecx
leaq 0x1ea43d(%rip), %rax    # 0x2226d0
testb $0x1, (%rax,%rcx)
jne 0x382b1
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rax
andq $0x40000000, %rax       # imm = 0x40000000
cmpq $0x0, %rax
je 0x382c8
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
sarq $0x8, %rax
movq %rax, 0x40(%rsp)
jmp 0x38471
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
sarq $0x8, %rax
movq %rax, 0x10(%rsp)
movq 0x30(%rsp), %rax
movq 0x20(%rax), %rax
movq 0x20(%rsp), %rcx
movq 0x10(%rcx), %rcx
movzbl (%rcx), %ecx
movq (%rax,%rcx,8), %rax
movq 0x38(%rsp), %rdi
movq 0x30(%rsp), %rsi
movq 0x20(%rsp), %rcx
movq 0x10(%rcx), %rdx
callq *%rax
movq %rax, %rcx
movq 0x10(%rsp), %rax
addq %rcx, %rax
movq %rax, 0x40(%rsp)
jmp 0x38471
movq $0x0, 0x18(%rsp)
cmpq $0x0, 0x20(%rsp)
je 0x38379
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movzwl (%rax), %eax
andl $0x8000, %eax           # imm = 0x8000
cmpl $0x0, %eax
jne 0x38367
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movzwl (%rax), %ecx
orl $0x8000, %ecx           # imm = 0x8000
movw %cx, (%rax)
movq 0x18(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x18(%rsp)
jmp 0x38369
movq 0x20(%rsp), %rax
movq 0x18(%rax), %rax
movq %rax, 0x20(%rsp)
jmp 0x38326
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x20(%rsp)
cmpq $0x0, 0x20(%rsp)
je 0x383b4
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movzwl (%rax), %ecx
andl $0xffff7fff, %ecx       # imm = 0xFFFF7FFF
movw %cx, (%rax)
movq 0x20(%rsp), %rax
movq 0x18(%rax), %rax
movq %rax, 0x20(%rsp)
jmp 0x38387
cmpq $0x1, 0x18(%rsp)
jne 0x38467
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %eax
movl %eax, %ecx
leaq 0x1ea2ed(%rip), %rax    # 0x2226d0
testb $0x1, (%rax,%rcx)
jne 0x38401
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rax
andq $0x40000000, %rax       # imm = 0x40000000
cmpq $0x0, %rax
je 0x38415
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
sarq $0x8, %rax
movq %rax, 0x40(%rsp)
jmp 0x38471
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
sarq $0x8, %rax
movq %rax, 0x8(%rsp)
movq 0x30(%rsp), %rax
movq 0x20(%rax), %rax
movq 0x20(%rsp), %rcx
movq 0x10(%rcx), %rcx
movzbl (%rcx), %ecx
movq (%rax,%rcx,8), %rax
movq 0x38(%rsp), %rdi
movq 0x30(%rsp), %rsi
movq 0x20(%rsp), %rcx
movq 0x10(%rcx), %rdx
callq *%rax
movq %rax, %rcx
movq 0x8(%rsp), %rax
addq %rcx, %rax
movq %rax, 0x40(%rsp)
jmp 0x38471
movq 0x18(%rsp), %rax
movq %rax, 0x40(%rsp)
movq 0x40(%rsp), %rax
addq $0x48, %rsp
retq
nopl (%rax,%rax)