// File: /workspace/github_c_makefile_star2_O0/BernardTatin[P]s7sh/s7.c
// Function: g_strings_are_equal
static s7_pointer g_strings_are_equal(s7_scheme *sc, s7_pointer args)
    {
#define H_strings_are_equal "(string=? str ...) returns #t if all the string arguments are equal"
#define Q_strings_are_equal sc->pcl_bs

        /* C-based check stops at null, but we can have embedded nulls.
         *   (let ((s1 "1234") (s2 "1245")) (string-set! s1 1 #\null) (string-set! s2 1 #\null) (string=? s1 s2))
         */
        s7_pointer x, y;
        bool happy = true;

        y = car(args);
        if (!is_string(y))
            return(method_or_bust(sc, y, sc->string_eq_symbol, args, T_STRING, 1));

        for (x = cdr(args); is_pair(x); x = cdr(x))
        {
            s7_pointer p;
            p = car(x);
            if (y != p)
            {
                if (!is_string(p))
                    return(method_or_bust(sc, p, sc->string_eq_symbol, cons(sc, y, x), T_STRING, position_of(x, args)));
                if (happy)
                    happy = scheme_strings_are_equal(p, y);
            }
        }
        if (!happy)
            return(sc->F);
        return(sc->T);
    }

// Assembly:
subq $0x78, %rsp
movq %rdi, 0x68(%rsp)
movq %rsi, 0x60(%rsp)
movb $0x1, 0x4f(%rsp)
movq 0x60(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x50(%rsp)
movq 0x50(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x13, %eax
je 0x8bc04
movq 0x68(%rsp), %rdi
movq 0x50(%rsp), %rsi
movq 0x68(%rsp), %rax
movq 0x1510(%rax), %rdx
movq 0x60(%rsp), %rcx
movl $0x13, %r8d
movl $0x1, %r9d
callq 0x13c50
movq %rax, 0x70(%rsp)
jmp 0x8bda2
movq 0x60(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x58(%rsp)
movq 0x58(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x1, %eax
jne 0x8bd77
movq 0x58(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x40(%rsp)
movq 0x50(%rsp), %rax
cmpq 0x40(%rsp), %rax
je 0x8bd62
movq 0x40(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x13, %eax
je 0x8bd44
movq 0x68(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x40(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x68(%rsp), %rax
movq 0x1510(%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x50(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x58(%rsp), %rax
movq %rax, 0x28(%rsp)
movq 0x68(%rsp), %rax
movq 0x90(%rax), %rax
movq 0x68(%rsp), %rcx
cmpq 0x98(%rcx), %rax
ja 0x8bcaf
movq 0x68(%rsp), %rdi
callq 0xc670
movq 0x68(%rsp), %rcx
movq 0x90(%rcx), %rax
movq %rax, %rdx
addq $-0x8, %rdx
movq %rdx, 0x90(%rcx)
movq -0x8(%rax), %rax
movq %rax, 0x38(%rsp)
movq 0x38(%rsp), %rax
movq $0x200001, (%rax)       # imm = 0x200001
movq 0x30(%rsp), %rcx
movq 0x38(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x28(%rsp), %rcx
movq 0x38(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0x38(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rax
movq %rax, (%rsp)
movq 0x58(%rsp), %rdi
movq 0x60(%rsp), %rsi
callq 0xc5450
movq 0x8(%rsp), %rdi
movq 0x10(%rsp), %rsi
movq 0x18(%rsp), %rdx
movq (%rsp), %rcx
movl %eax, %r9d
movl $0x13, %r8d
callq 0x13c50
movq %rax, 0x70(%rsp)
jmp 0x8bda2
testb $0x1, 0x4f(%rsp)
je 0x8bd60
movq 0x40(%rsp), %rdi
movq 0x50(%rsp), %rsi
callq 0x1b64f0
andb $0x1, %al
movb %al, 0x4f(%rsp)
jmp 0x8bd62
jmp 0x8bd64
movq 0x58(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x58(%rsp)
jmp 0x8bc12
testb $0x1, 0x4f(%rsp)
jne 0x8bd91
movq 0x68(%rsp), %rax
movq 0x120(%rax), %rax
movq %rax, 0x70(%rsp)
jmp 0x8bda2
movq 0x68(%rsp), %rax
movq 0x118(%rax), %rax
movq %rax, 0x70(%rsp)
movq 0x70(%rsp), %rax
addq $0x78, %rsp
retq
nopl (%rax)