// File: /workspace/github_c_makefile_star2_O0/BernardTatin[P]s7sh/s7.c
// Function: vector_equal
static bool vector_equal(s7_scheme *sc, s7_pointer x, s7_pointer y, shared_info *ci)
                {
                    s7_int i, len;
                    shared_info *nci = ci;

                    if (x == y) return(true);
                    if (!is_any_vector(y)) return(false);

                    len = vector_length(x);
                    if (len != vector_length(y)) return(false);
                    if (!vector_rank_match(sc, x, y)) return(false);  /* ?? should #2d() equal #3d()? */
                    if (len == 0) return(true);

                    if (type(x) != type(y))
                    {
                        if ((is_int_vector(x)) && (is_byte_vector(y)))
                            return(biv_meq(sc, y, x, NULL));
                        if ((is_byte_vector(x)) && (is_int_vector(y)))
                            return(biv_meq(sc, x, y, NULL));
                        for (i = 0; i < len; i++)
                            if (!s7_is_equal_1(sc, vector_getter(x)(sc, x, i), vector_getter(y)(sc, y, i), NULL)) /* this could be greatly optimized */
                                return(false);
                        return(true);
                    }

                    /* types are the same, take care of the special cases first */
                    if (is_float_vector(x))
                    {
                        for (i = 0; i < len; i++)
                        {
                            s7_double z;
                            z = float_vector(x, i);
                            if ((is_NaN(z)) ||
                                    (z != float_vector(y, i)))
                                return(false);
                        }
                        return(true);
                    }
                    if (is_int_vector(x))
                        return(iv_meq(int_vector_ints(x), int_vector_ints(y), len));
                    if (is_byte_vector(x))
                        return(byte_vector_equal(sc, x, y, NULL));

                    if (!has_simple_elements(x))
                    {
                        if (ci)
                            equal_ref(sc, x, y, ci);
                        else nci = new_shared_info(sc);
                    }
                    for (i = 0; i < len; i++)
                        if (!(s7_is_equal_1(sc, vector_element(x, i), vector_element(y, i), nci)))
                            return(false);
                    return(true);
                }

// Assembly:
subq $0x68, %rsp
movq %rdi, 0x58(%rsp)
movq %rsi, 0x50(%rsp)
movq %rdx, 0x48(%rsp)
movq %rcx, 0x40(%rsp)
movq 0x40(%rsp), %rax
movq %rax, 0x28(%rsp)
movq 0x50(%rsp), %rax
cmpq 0x48(%rsp), %rax
jne 0x1b3bf8
movb $0x1, 0x67(%rsp)
jmp 0x1b40c2
movq 0x48(%rsp), %rax
movzbl (%rax), %eax
movl %eax, %ecx
leaq 0x66b47(%rip), %rax     # 0x21a750
testb $0x1, (%rax,%rcx)
jne 0x1b3c19
movb $0x0, 0x67(%rsp)
jmp 0x1b40c2
movq 0x50(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rax
movq 0x48(%rsp), %rcx
cmpq 0x8(%rcx), %rax
je 0x1b3c41
movb $0x0, 0x67(%rsp)
jmp 0x1b40c2
movq 0x58(%rsp), %rdi
movq 0x50(%rsp), %rsi
movq 0x48(%rsp), %rdx
callq 0x1b7b00
testb $0x1, %al
jne 0x1b3c63
movb $0x0, 0x67(%rsp)
jmp 0x1b40c2
cmpq $0x0, 0x30(%rsp)
jne 0x1b3c75
movb $0x1, 0x67(%rsp)
jmp 0x1b40c2
movq 0x50(%rsp), %rax
movzbl (%rax), %eax
movq 0x48(%rsp), %rcx
movzbl (%rcx), %ecx
cmpl %ecx, %eax
je 0x1b3da2
movq 0x50(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x16, %eax
jne 0x1b3cca
movq 0x48(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x18, %eax
jne 0x1b3cca
movq 0x58(%rsp), %rdi
movq 0x48(%rsp), %rsi
movq 0x50(%rsp), %rdx
xorl %eax, %eax
movl %eax, %ecx
callq 0x1b7c60
andb $0x1, %al
movb %al, 0x67(%rsp)
jmp 0x1b40c2
movq 0x50(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x18, %eax
jne 0x1b3d07
movq 0x48(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x16, %eax
jne 0x1b3d07
movq 0x58(%rsp), %rdi
movq 0x50(%rsp), %rsi
movq 0x48(%rsp), %rdx
xorl %eax, %eax
movl %eax, %ecx
callq 0x1b7c60
andb $0x1, %al
movb %al, 0x67(%rsp)
jmp 0x1b40c2
movq $0x0, 0x38(%rsp)
movq 0x38(%rsp), %rax
cmpq 0x30(%rsp), %rax
jge 0x1b3d98
movq 0x58(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x50(%rsp), %rax
movq 0x20(%rax), %rax
movq 0x58(%rsp), %rdi
movq 0x50(%rsp), %rsi
movq 0x38(%rsp), %rdx
callq *%rax
movq %rax, 0x10(%rsp)
movq 0x48(%rsp), %rax
movq 0x20(%rax), %rax
movq 0x58(%rsp), %rdi
movq 0x48(%rsp), %rsi
movq 0x38(%rsp), %rdx
callq *%rax
movq 0x8(%rsp), %rdi
movq 0x10(%rsp), %rsi
movq %rax, %rdx
xorl %eax, %eax
movl %eax, %ecx
callq 0x3e8e0
testb $0x1, %al
jne 0x1b3d83
movb $0x0, 0x67(%rsp)
jmp 0x1b40c2
jmp 0x1b3d85
movq 0x38(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x38(%rsp)
jmp 0x1b3d10
movb $0x1, 0x67(%rsp)
jmp 0x1b40c2
movq 0x50(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x17, %eax
jne 0x1b3e35
movq $0x0, 0x38(%rsp)
movq 0x38(%rsp), %rax
cmpq 0x30(%rsp), %rax
jge 0x1b3e2b
movq 0x50(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x38(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, 0x20(%rsp)
movsd 0x20(%rsp), %xmm0
callq 0x13860
testb $0x1, %al
jne 0x1b3e0f
movsd 0x20(%rsp), %xmm0
movq 0x48(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x38(%rsp), %rcx
ucomisd (%rax,%rcx,8), %xmm0
jne 0x1b3e0f
jp 0x1b3e0f
jmp 0x1b3e19
movb $0x0, 0x67(%rsp)
jmp 0x1b40c2
jmp 0x1b3e1b
movq 0x38(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x38(%rsp)
jmp 0x1b3dbc
movb $0x1, 0x67(%rsp)
jmp 0x1b40c2
movq 0x50(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x16, %eax
jne 0x1b3e69
movq 0x50(%rsp), %rax
movq 0x10(%rax), %rdi
movq 0x48(%rsp), %rax
movq 0x10(%rax), %rsi
movq 0x30(%rsp), %rdx
callq 0x1b7d10
andb $0x1, %al
movb %al, 0x67(%rsp)
jmp 0x1b40c2
movq 0x50(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x18, %eax
jne 0x1b3e99
movq 0x58(%rsp), %rdi
movq 0x50(%rsp), %rsi
movq 0x48(%rsp), %rdx
xorl %eax, %eax
movl %eax, %ecx
callq 0x1b7f50
andb $0x1, %al
movb %al, 0x67(%rsp)
jmp 0x1b40c2
movq 0x50(%rsp), %rax
movzwl 0x6(%rax), %eax
andl $0x100, %eax            # imm = 0x100
cmpl $0x0, %eax
jne 0x1b4058
cmpq $0x0, 0x40(%rsp)
je 0x1b4047
jmp 0x1b3ebe
movq 0x48(%rsp), %rax
movq (%rax), %rax
andq $0x20000, %rax          # imm = 0x20000
cmpq $0x0, %rax
je 0x1b3ee7
movq 0x40(%rsp), %rdi
movq 0x48(%rsp), %rsi
callq 0xd28c0
movl %eax, 0x4(%rsp)
jmp 0x1b3eef
xorl %eax, %eax
movl %eax, 0x4(%rsp)
jmp 0x1b3eef
movl 0x4(%rsp), %eax
movl %eax, 0x1c(%rsp)
movq 0x50(%rsp), %rax
movq (%rax), %rax
andq $0x20000, %rax          # imm = 0x20000
cmpq $0x0, %rax
je 0x1b3f5a
movq 0x40(%rsp), %rdi
movq 0x50(%rsp), %rsi
callq 0xd28c0
movl %eax, 0x18(%rsp)
cmpl $0x0, 0x1c(%rsp)
je 0x1b3f3b
movl 0x18(%rsp), %eax
cmpl 0x1c(%rsp), %eax
sete %al
andb $0x1, %al
movb %al, 0x67(%rsp)
jmp 0x1b40c2
cmpl $0x0, 0x18(%rsp)
je 0x1b3f55
movq 0x40(%rsp), %rdi
movq 0x48(%rsp), %rsi
movl 0x18(%rsp), %edx
callq 0x1b6550
jmp 0x1b4043
cmpl $0x0, 0x1c(%rsp)
je 0x1b3f79
movq 0x40(%rsp), %rdi
movq 0x50(%rsp), %rsi
movl 0x1c(%rsp), %edx
callq 0x1b6550
jmp 0x1b4041
movq 0x40(%rsp), %rax
movl 0xc(%rax), %eax
movq 0x40(%rsp), %rcx
cmpl 0x14(%rcx), %eax
jl 0x1b3f95
movq 0x40(%rsp), %rdi
callq 0xd24c0
movq 0x50(%rsp), %rax
movq (%rax), %rcx
orq $0x20000, %rcx          # imm = 0x20000
movq %rcx, (%rax)
movq 0x48(%rsp), %rax
movq (%rax), %rcx
orq $0x20000, %rcx          # imm = 0x20000
movq %rcx, (%rax)
movq 0x50(%rsp), %rdx
movq 0x40(%rsp), %rax
movq (%rax), %rax
movq 0x40(%rsp), %rcx
movslq 0xc(%rcx), %rcx
movq %rdx, (%rax,%rcx,8)
movq 0x40(%rsp), %rax
movl 0x10(%rax), %edx
addl $0x1, %edx
movl %edx, 0x10(%rax)
movq 0x40(%rsp), %rax
movq 0x20(%rax), %rax
movq 0x40(%rsp), %rsi
movl 0xc(%rsi), %ecx
movl %ecx, %edi
addl $0x1, %edi
movl %edi, 0xc(%rsi)
movslq %ecx, %rcx
movl %edx, (%rax,%rcx,4)
movq 0x48(%rsp), %rdx
movq 0x40(%rsp), %rax
movq (%rax), %rax
movq 0x40(%rsp), %rcx
movslq 0xc(%rcx), %rcx
movq %rdx, (%rax,%rcx,8)
movq 0x40(%rsp), %rax
movl 0x10(%rax), %edx
movq 0x40(%rsp), %rax
movq 0x20(%rax), %rax
movq 0x40(%rsp), %rsi
movl 0xc(%rsi), %ecx
movl %ecx, %edi
addl $0x1, %edi
movl %edi, 0xc(%rsi)
movslq %ecx, %rcx
movl %edx, (%rax,%rcx,4)
jmp 0x1b4043
jmp 0x1b4045
jmp 0x1b4056
movq 0x58(%rsp), %rdi
callq 0xd14f0
movq %rax, 0x28(%rsp)
jmp 0x1b4058
movq $0x0, 0x38(%rsp)
movq 0x38(%rsp), %rax
cmpq 0x30(%rsp), %rax
jge 0x1b40bd
movq 0x58(%rsp), %rdi
movq 0x50(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x38(%rsp), %rcx
movq (%rax,%rcx,8), %rsi
movq 0x48(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x38(%rsp), %rcx
movq (%rax,%rcx,8), %rdx
movq 0x28(%rsp), %rcx
callq 0x3e8e0
testb $0x1, %al
jne 0x1b40ab
movb $0x0, 0x67(%rsp)
jmp 0x1b40c2
jmp 0x1b40ad
movq 0x38(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x38(%rsp)
jmp 0x1b4061
movb $0x1, 0x67(%rsp)
movb 0x67(%rsp), %al
andb $0x1, %al
addq $0x68, %rsp
retq
nopl (%rax)