// File: /workspace/github_c_makefile_star2_O3/BernardTatin[P]s7sh/s7.c
// Function: let_equal_1
static bool let_equal_1(s7_scheme *sc, s7_pointer x, s7_pointer y, shared_info *ci, bool equivalent)
                {
                    s7_pointer ex, ey, px, py;
                    shared_info *nci = ci;
                    int32_t x_len, y_len;

                    if (!is_let(y))
                        return(false);

                    if ((x == sc->rootlet) || (y == sc->rootlet))
                        return(false);

                    if (ci)
                        equal_ref(sc, x, y, ci);

                    clear_symbol_list(sc);
                    for (x_len = 0, ex = x; is_let(T_Lid(ex)); ex = outlet(ex))
                        for (px = let_slots(ex); tis_slot(px); px = next_slot(px))
                            if (!symbol_is_in_list(sc, slot_symbol(px)))
                            {
                                add_symbol_to_list(sc, slot_symbol(px));
                                x_len++;
                            }

                    for (ey = y; is_let(T_Lid(ey)); ey = outlet(ey))
                        for (py = let_slots(ey); tis_slot(py); py = next_slot(py))
                            if (!symbol_is_in_list(sc, slot_symbol(py)))          /* symbol in y, not in x */
                                return(false);

                    for (y_len = 0, ey = y; is_let(T_Lid(ey)); ey = outlet(ey))
                        for (py = let_slots(ey); tis_slot(py); py = next_slot(py))
                            if (symbol_tag(slot_symbol(py)) != 0)
                            {
                                y_len++;
                                symbol_set_tag(slot_symbol(py), 0);
                            }

                    if (x_len != y_len)                                        /* symbol in x, not in y */
                        return(false);

                    if (!nci) nci = new_shared_info(sc);

                    for (ex = x; is_let(T_Lid(ex)); ex = outlet(ex))
                        for (px = let_slots(ex); tis_slot(px); px = next_slot(px))
                            if (symbol_tag(slot_symbol(px)) == 0)                  /* unshadowed */
                            {
                                symbol_set_tag(slot_symbol(px), sc->syms_tag);     /* values don't match */
                                if (((!equivalent) && (!slots_match(sc, px, y, nci))) ||
                                        ((equivalent) && (!slots_equivalent_match(sc, px, y, nci))))
                                    return(false);
                            }
                    return(true);
                }

// Assembly:
cmpb $0x1c, (%rdx)
jne 0xf8889
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %r15
movq %rdx, %r14
movq %rsi, %r12
movq %rdi, %r13
movq 0x150(%rdi), %rax
cmpq %rsi, %rax
sete %cl
cmpq %rdx, %rax
sete %al
orb %cl, %al
je 0xf888c
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
xorl %eax, %eax
retq
movl %r8d, %ebx
testq %r15, %r15
je 0xf898e
xorl %edx, %edx
testb $0x2, 0x2(%r14)
je 0xf88c8
movslq 0xc(%r15), %rax
testq %rax, %rax
jle 0xf88c8
movq (%r15), %rdx
xorl %ecx, %ecx
cmpq %r14, (%rdx,%rcx,8)
je 0xf88c1
incq %rcx
cmpq %rcx, %rax
jne 0xf88af
xorl %edx, %edx
jmp 0xf88c8
movq 0x20(%r15), %rax
movl (%rax,%rcx,4), %edx
movq (%r12), %rax
btl $0x11, %eax
jb 0xf88e1
testl %edx, %edx
je 0xf8901
movq %r15, %rdi
movq %r12, %rsi
jmp 0xf8989
movslq 0xc(%r15), %rax
testq %rax, %rax
jle 0xf88fd
movq (%r15), %rsi
xorl %ecx, %ecx
cmpq %r12, (%rsi,%rcx,8)
je 0xf8968
incq %rcx
cmpq %rcx, %rax
jne 0xf88ef
xorl %eax, %eax
jmp 0xf896f
movl 0xc(%r15), %ecx
cmpl 0x14(%r15), %ecx
jl 0xf8917
movq %r15, %rdi
callq 0x967fa
movq (%r12), %rax
orq $0x20000, %rax          # imm = 0x20000
movq %rax, (%r12)
orb $0x2, 0x2(%r14)
movq (%r15), %rax
movslq 0xc(%r15), %rcx
movq %r12, (%rax,%rcx,8)
movl 0x10(%r15), %eax
incl %eax
movl %eax, 0x10(%r15)
movq 0x20(%r15), %rdx
leal 0x1(%rcx), %esi
movl %esi, 0xc(%r15)
movl %eax, (%rdx,%rcx,4)
movq (%r15), %rax
movslq 0xc(%r15), %rcx
movq %r14, (%rax,%rcx,8)
movl 0x10(%r15), %eax
movq 0x20(%r15), %rdx
leal 0x1(%rcx), %esi
movl %esi, 0xc(%r15)
movl %eax, (%rdx,%rcx,4)
jmp 0xf898e
movq 0x20(%r15), %rax
movl (%rax,%rcx,4), %eax
testl %edx, %edx
je 0xf897d
cmpl %edx, %eax
sete %al
jmp 0xf887a
testl %eax, %eax
je 0xf898e
movq %r15, %rdi
movq %r14, %rsi
movl %eax, %edx
callq 0xf80b5
incl 0xa88(%r13)
jne 0xf89a9
movl $0x1, 0xa88(%r13)
incl 0xa8c(%r13)
xorl %eax, %eax
cmpb $0x1c, (%r12)
movl $0x0, %ecx
jne 0xf8a0f
xorl %ecx, %ecx
movq %r12, %rdx
movq 0x8(%rdx), %rsi
testq %rsi, %rsi
je 0xf8a06
movq 0x8(%rsi), %rdi
movl 0xa88(%r13), %r8d
movq 0x8(%rdi), %r9
cmpl %r8d, 0x2c(%rdi)
jne 0xf89eb
movq 0x20(%r9), %r10
movl 0xc(%r10), %r10d
cmpl 0xa8c(%r13), %r10d
je 0xf8a00
movl %r8d, 0x2c(%rdi)
movl 0xa8c(%r13), %edi
movq 0x20(%r9), %r8
movl %edi, 0xc(%r8)
incl %ecx
movq 0x18(%rsi), %rsi
jmp 0xf89c0
movq 0x10(%rdx), %rdx
cmpb $0x1c, (%rdx)
je 0xf89bc
movb (%r14), %dl
cmpb $0x1c, %dl
jne 0xf8a9c
movq %r14, %rsi
movq 0x8(%rsi), %rdi
testq %rdi, %rdi
je 0xf8a5e
movl 0xa88(%r13), %r8d
movq 0x8(%rdi), %r9
cmpl %r8d, 0x2c(%r9)
jne 0xf8878
movq 0x8(%r9), %r9
movq 0x20(%r9), %r9
movl 0xc(%r9), %r9d
cmpl 0xa8c(%r13), %r9d
jne 0xf8878
movq 0x18(%rdi), %rdi
testq %rdi, %rdi
jne 0xf8a2e
movq 0x10(%rsi), %rsi
cmpb $0x1c, (%rsi)
je 0xf8a1e
cmpb $0x1c, %dl
jne 0xf8a9c
xorl %eax, %eax
movq %r14, %rdx
movq 0x8(%rdx), %rsi
testq %rsi, %rsi
je 0xf8a93
movq 0x8(%rsi), %rdi
cmpl $0x0, 0x2c(%rdi)
je 0xf8a8d
incl %eax
movl $0x0, 0x2c(%rdi)
movq 0x18(%rsi), %rsi
jmp 0xf8a75
movq 0x10(%rdx), %rdx
cmpb $0x1c, (%rdx)
je 0xf8a71
cmpl %eax, %ecx
jne 0xf8878
testq %r15, %r15
jne 0xf8ab8
movq 0x6c0(%r13), %r15
movq %r15, %rdi
callq 0x95f8c
cmpb $0x1c, (%r12)
jne 0xf8baf
movq 0x8(%r12), %rbp
testq %rbp, %rbp
je 0xf8ba5
movq 0x8(%rbp), %rax
cmpl $0x0, 0x2c(%rax)
jne 0xf8b9c
movl 0xa88(%r13), %ecx
movl %ecx, 0x2c(%rax)
movb (%r14), %al
testb %bl, %bl
je 0xf8b27
cmpb $0x1c, %al
jne 0xf8878
movq %r14, %rcx
movq 0x8(%rcx), %rax
testq %rax, %rax
je 0xf8b17
movq 0x8(%rbp), %rdx
cmpq 0x8(%rax), %rdx
je 0xf8b5e
movq 0x18(%rax), %rax
testq %rax, %rax
jne 0xf8b08
movq 0x10(%rcx), %rcx
xorl %eax, %eax
cmpb $0x1c, (%rcx)
je 0xf8afb
jmp 0xf887a
cmpb $0x1c, %al
jne 0xf8878
movq %r14, %rcx
movq 0x8(%rcx), %rax
testq %rax, %rax
je 0xf8b4e
movq 0x8(%rbp), %rdx
cmpq 0x8(%rax), %rdx
je 0xf8b78
movq 0x18(%rax), %rax
testq %rax, %rax
jne 0xf8b3f
movq 0x10(%rcx), %rcx
xorl %eax, %eax
cmpb $0x1c, (%rcx)
je 0xf8b32
jmp 0xf887a
movq 0x10(%rbp), %rsi
movq 0x10(%rax), %rdx
movzbl (%rsi), %eax
movq %r13, %rdi
movq %r15, %rcx
leaq 0x5a34a(%rip), %r8      # 0x152ec0
jmp 0xf8b90
movq 0x10(%rbp), %rsi
movq 0x10(%rax), %rdx
movzbl (%rsi), %eax
movq %r13, %rdi
movq %r15, %rcx
leaq 0x5a190(%rip), %r8      # 0x152d20
callq *(%r8,%rax,8)
testb %al, %al
je 0xf8878
movq 0x18(%rbp), %rbp
jmp 0xf8ac8
movq 0x10(%r12), %r12
jmp 0xf8ab8
movb $0x1, %al
jmp 0xf887a