// File: /workspace/github_c_makefile_star2_O0/BernardTatin[P]s7sh/s7.c
// Function: opt_do_copy
static bool opt_do_copy(s7_scheme *sc, opt_info *o, s7_int start, s7_int stop)
                {
                    s7_pointer (*fp)(opt_info *o);

                    if (start >= stop) return(true);
                    fp = o->v[0].fp;                            /* o->v[6].p_pi_f is getter, o->v[5].p_pip_f is setter */
                    if ((fp == opt_p_pip_sso) &&
                            (type(slot_value(o->v[1].p)) == type(slot_value(o->v[3].p))) &&
                            (o->v[2].p == o->v[4].p))
                    {
                        s7_pointer dest, source;
                        dest = slot_value(o->v[1].p);
                        source = slot_value(o->v[3].p);
                        if ((is_normal_vector(dest)) &&
                                ((o->v[5].p_pip_f == vector_set_p_pip_direct) && (o->v[6].p_pi_f == vector_ref_p_pi_direct)))
                        {
                            if (start < 0)
                                return(out_of_range(sc, sc->vector_set_symbol, wrap_integer1(sc, 2), wrap_integer2(sc, start), its_negative_string));
                            if (stop > vector_length(source))
                                return(out_of_range(sc, sc->vector_ref_symbol, wrap_integer1(sc, 2), wrap_integer2(sc, stop), its_too_large_string));
                            if (stop > vector_length(dest))
                                return(out_of_range(sc, sc->vector_set_symbol, wrap_integer1(sc, 2), wrap_integer2(sc, stop), its_too_large_string));
                        }
                        else
                        {
                            if ((is_string(dest)) &&
                                    ((o->v[5].p_pip_f == string_set_p_pip_direct) && (o->v[6].p_pi_f == string_ref_p_pi_direct)))
                            {
                                if (start < 0)
                                    return(out_of_range(sc, sc->string_set_symbol, wrap_integer1(sc, 2), wrap_integer2(sc, start), its_negative_string));
                                if (stop > string_length(source))
                                    return(out_of_range(sc, sc->string_ref_symbol, wrap_integer1(sc, 2), wrap_integer2(sc, stop), its_too_large_string));
                                if (stop > string_length(dest))
                                    return(out_of_range(sc, sc->string_set_symbol, wrap_integer1(sc, 2), wrap_integer2(sc, stop), its_too_large_string));
                            }
                            else return(false); /* pair copy needs length here and is kinda stupid in this context */
                        }
                        /* float|int|byte-vectors are in opt_dotimes below (opt_float|int_any_nr loops, but I don't think they matter -- s7 users know about copy! */
                        if (copy_direct(sc, dest, source, start, stop, start))
                            return(true);
                    }
                    return(false);
                }

// Assembly:
subq $0xd8, %rsp
movq %rdi, 0xc8(%rsp)
movq %rsi, 0xc0(%rsp)
movq %rdx, 0xb8(%rsp)
movq %rcx, 0xb0(%rsp)
movq 0xb8(%rsp), %rax
cmpq 0xb0(%rsp), %rax
jl 0x171c66
movb $0x1, 0xd7(%rsp)
jmp 0x1721a5
movq 0xc0(%rsp), %rax
movq (%rax), %rax
movq %rax, 0xa8(%rsp)
leaq -0x79fe0(%rip), %rax    # 0xf7ca0
cmpq %rax, 0xa8(%rsp)
jne 0x17219d
movq 0xc0(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %eax
movq 0xc0(%rsp), %rcx
movq 0x18(%rcx), %rcx
movq 0x10(%rcx), %rcx
movzbl (%rcx), %ecx
cmpl %ecx, %eax
jne 0x17219d
movq 0xc0(%rsp), %rax
movq 0x10(%rax), %rax
movq 0xc0(%rsp), %rcx
cmpq 0x20(%rcx), %rax
jne 0x17219d
movq 0xc0(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, 0xa0(%rsp)
movq 0xc0(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, 0x98(%rsp)
movq 0xa0(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x15, %eax
jne 0x171f36
movq 0xc0(%rsp), %rax
leaq -0xc83fd(%rip), %rcx    # 0xa9930
cmpq %rcx, 0x28(%rax)
jne 0x171f36
movq 0xc0(%rsp), %rax
leaq -0xc8526(%rip), %rcx    # 0xa9820
cmpq %rcx, 0x30(%rax)
jne 0x171f36
cmpq $0x0, 0xb8(%rsp)
jge 0x171df5
movq 0xc8(%rsp), %rax
movq %rax, 0x80(%rsp)
movq 0xc8(%rsp), %rax
movq 0x1668(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, 0x88(%rsp)
movq 0xc8(%rsp), %rdi
movl $0x2, %esi
callq 0x12430
movq %rax, 0x90(%rsp)
movq 0xc8(%rsp), %rdi
movq 0xb8(%rsp), %rsi
callq 0x1721c0
movq 0x80(%rsp), %rdi
movq 0x88(%rsp), %rsi
movq 0x90(%rsp), %rdx
movq %rax, %rcx
movq 0xa879d(%rip), %r8      # 0x21a578
callq 0x13880
cmpq $0x0, %rax
setne %al
andb $0x1, %al
movb %al, 0xd7(%rsp)
jmp 0x1721a5
movq 0xb0(%rsp), %rax
movq 0x98(%rsp), %rcx
cmpq 0x8(%rcx), %rax
jle 0x171e93
movq 0xc8(%rsp), %rax
movq %rax, 0x68(%rsp)
movq 0xc8(%rsp), %rax
movq 0x1660(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, 0x70(%rsp)
movq 0xc8(%rsp), %rdi
movl $0x2, %esi
callq 0x12430
movq %rax, 0x78(%rsp)
movq 0xc8(%rsp), %rdi
movq 0xb0(%rsp), %rsi
callq 0x1721c0
movq 0x68(%rsp), %rdi
movq 0x70(%rsp), %rsi
movq 0x78(%rsp), %rdx
movq %rax, %rcx
movq 0xa86f7(%rip), %r8      # 0x21a570
callq 0x13880
cmpq $0x0, %rax
setne %al
andb $0x1, %al
movb %al, 0xd7(%rsp)
jmp 0x1721a5
movq 0xb0(%rsp), %rax
movq 0xa0(%rsp), %rcx
cmpq 0x8(%rcx), %rax
jle 0x171f31
movq 0xc8(%rsp), %rax
movq %rax, 0x50(%rsp)
movq 0xc8(%rsp), %rax
movq 0x1668(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, 0x58(%rsp)
movq 0xc8(%rsp), %rdi
movl $0x2, %esi
callq 0x12430
movq %rax, 0x60(%rsp)
movq 0xc8(%rsp), %rdi
movq 0xb0(%rsp), %rsi
callq 0x1721c0
movq 0x50(%rsp), %rdi
movq 0x58(%rsp), %rsi
movq 0x60(%rsp), %rdx
movq %rax, %rcx
movq 0xa8659(%rip), %r8      # 0x21a570
callq 0x13880
cmpq $0x0, %rax
setne %al
andb $0x1, %al
movb %al, 0xd7(%rsp)
jmp 0x1721a5
jmp 0x172156
movq 0xa0(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x13, %eax
jne 0x17214a
movq 0xc0(%rsp), %rax
leaq -0xc79f9(%rip), %rcx    # 0xaa560
cmpq %rcx, 0x28(%rax)
jne 0x17214a
movq 0xc0(%rsp), %rax
leaq -0xc7b02(%rip), %rcx    # 0xaa470
cmpq %rcx, 0x30(%rax)
jne 0x17214a
cmpq $0x0, 0xb8(%rsp)
jge 0x17200f
movq 0xc8(%rsp), %rax
movq %rax, 0x38(%rsp)
movq 0xc8(%rsp), %rax
movq 0x1550(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, 0x40(%rsp)
movq 0xc8(%rsp), %rdi
movl $0x2, %esi
callq 0x12430
movq %rax, 0x48(%rsp)
movq 0xc8(%rsp), %rdi
movq 0xb8(%rsp), %rsi
callq 0x1721c0
movq 0x38(%rsp), %rdi
movq 0x40(%rsp), %rsi
movq 0x48(%rsp), %rdx
movq %rax, %rcx
movq 0xa8583(%rip), %r8      # 0x21a578
callq 0x13880
cmpq $0x0, %rax
setne %al
andb $0x1, %al
movb %al, 0xd7(%rsp)
jmp 0x1721a5
movq 0xb0(%rsp), %rax
movq 0x98(%rsp), %rcx
cmpq 0x8(%rcx), %rax
jle 0x1720ad
movq 0xc8(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0xc8(%rsp), %rax
movq 0x1548(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, 0x28(%rsp)
movq 0xc8(%rsp), %rdi
movl $0x2, %esi
callq 0x12430
movq %rax, 0x30(%rsp)
movq 0xc8(%rsp), %rdi
movq 0xb0(%rsp), %rsi
callq 0x1721c0
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %rdx
movq %rax, %rcx
movq 0xa84dd(%rip), %r8      # 0x21a570
callq 0x13880
cmpq $0x0, %rax
setne %al
andb $0x1, %al
movb %al, 0xd7(%rsp)
jmp 0x1721a5
movq 0xb0(%rsp), %rax
movq 0xa0(%rsp), %rcx
cmpq 0x8(%rcx), %rax
jle 0x172148
movq 0xc8(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0xc8(%rsp), %rax
movq 0x1550(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, 0x10(%rsp)
movq 0xc8(%rsp), %rdi
movl $0x2, %esi
callq 0x12430
movq %rax, 0x18(%rsp)
movq 0xc8(%rsp), %rdi
movq 0xb0(%rsp), %rsi
callq 0x1721c0
movq 0x8(%rsp), %rdi
movq 0x10(%rsp), %rsi
movq 0x18(%rsp), %rdx
movq %rax, %rcx
movq 0xa843f(%rip), %r8      # 0x21a570
callq 0x13880
cmpq $0x0, %rax
setne %al
andb $0x1, %al
movb %al, 0xd7(%rsp)
jmp 0x1721a5
jmp 0x172154
movb $0x0, 0xd7(%rsp)
jmp 0x1721a5
jmp 0x172156
movq 0xc8(%rsp), %rdi
movq 0xa0(%rsp), %rsi
movq 0x98(%rsp), %rdx
movq 0xb8(%rsp), %rcx
movq 0xb0(%rsp), %r8
movq 0xb8(%rsp), %r9
callq 0xdae60
cmpq $0x0, %rax
je 0x17219b
movb $0x1, 0xd7(%rsp)
jmp 0x1721a5
jmp 0x17219d
movb $0x0, 0xd7(%rsp)
movb 0xd7(%rsp), %al
andb $0x1, %al
addq $0xd8, %rsp
retq
nopw %cs:(%rax,%rax)