// File: /workspace/github_c_makefile_star2_O3/BernardTatin[P]s7sh/s7.c
// Function: g_vector_dimensions
static s7_pointer g_vector_dimensions(s7_scheme *sc, s7_pointer args)
                {
#define H_vector_dimensions "(vector-dimensions vect) returns a list of vect's dimensions.  In srfi-63 terms:\n\
                    (define array-dimensions vector-dimensions)\n\
                    (define (array-rank v) (length (vector-dimensions v)))"
#define Q_vector_dimensions s7_make_signature(sc, 2, sc->is_pair_symbol, sc->is_vector_symbol)

                    s7_pointer x;
                    x = car(args);
                    if (!is_any_vector(x))
                        return(method_or_bust_one_arg(sc, x, sc->vector_dimensions_symbol, args, T_VECTOR));

                    if (vector_rank(x) > 1)
                    {
                        s7_int i;
                        sc->w = sc->nil;
                        for (i = vector_ndims(x) - 1; i >= 0; i--)
                            sc->w = cons(sc, make_integer(sc, vector_dimension(x, i)), sc->w);
                        x = sc->w;
                        sc->w = sc->nil;
                        return(x);
                    }
                    return(list_1(sc, make_integer(sc, vector_length(x))));
                }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x8(%rsi), %r14
movzbl (%r14), %eax
leaq 0x10e6ec(%rip), %rdx    # 0x14ac20
cmpb $0x0, (%rax,%rdx)
je 0x3c647
movq 0x18(%r14), %rax
movq 0x20(%rax), %rax
testq %rax, %rax
je 0x3c670
cmpq $0x2, 0x10(%rax)
jl 0x3c670
movq 0x110(%rbx), %rax
movq %rax, 0x4d8(%rbx)
movq 0x18(%r14), %rcx
movq 0x20(%rcx), %rcx
movq 0x10(%rcx), %r15
testq %r15, %r15
jle 0x3c709
incq %r15
leaq 0x10a3c9(%rip), %r12    # 0x146950
movq 0x18(%r14), %rcx
movq 0x20(%rcx), %rcx
movq (%rcx), %rcx
movq -0x10(%rcx,%r15,8), %rbp
cmpq $0x7ff, %rbp            # imm = 0x7FF
ja 0x3c5a9
movq (%r12,%rbp,8), %r13
movq %rax, %rbp
jmp 0x3c5ea
movq 0x90(%rbx), %rax
cmpq 0x98(%rbx), %rax
ja 0x3c5c8
movq %rbx, %rdi
callq 0xa550
movq 0x90(%rbx), %rax
leaq -0x8(%rax), %rcx
movq %rcx, 0x90(%rbx)
movq -0x8(%rax), %r13
movq $0xb, (%r13)
movq %rbp, 0x8(%r13)
movq 0x4d8(%rbx), %rbp
movq 0x90(%rbx), %rax
cmpq 0x98(%rbx), %rax
ja 0x3c609
movq %rbx, %rdi
callq 0xa550
movq 0x90(%rbx), %rax
leaq -0x8(%rax), %rcx
movq %rcx, 0x90(%rbx)
movq -0x8(%rax), %rax
movq $0x200001, (%rax)       # imm = 0x200001
movq %r13, 0x8(%rax)
movq %rbp, 0x10(%rax)
movq %rax, 0x4d8(%rbx)
decq %r15
cmpq $0x1, %r15
ja 0x3c587
movq 0x110(%rbx), %rcx
jmp 0x3c70c
movq %rsi, %rcx
movq 0x1650(%rbx), %rdx
movq %rbx, %rdi
movq %r14, %rsi
movl $0x15, %r8d
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x95069
movq 0x8(%r14), %r15
cmpq $0x7ff, %r15            # imm = 0x7FF
ja 0x3c68a
leaq 0x10a2cc(%rip), %rax    # 0x146950
movq (%rax,%r15,8), %r14
jmp 0x3c6c3
movq 0x90(%rbx), %rax
cmpq 0x98(%rbx), %rax
ja 0x3c6a9
movq %rbx, %rdi
callq 0xa550
movq 0x90(%rbx), %rax
leaq -0x8(%rax), %rcx
movq %rcx, 0x90(%rbx)
movq -0x8(%rax), %r14
movq $0xb, (%r14)
movq %r15, 0x8(%r14)
movq 0x90(%rbx), %rax
movq 0x110(%rbx), %r15
cmpq 0x98(%rbx), %rax
ja 0x3c6e9
movq %rbx, %rdi
callq 0xa550
movq 0x90(%rbx), %rax
leaq -0x8(%rax), %rcx
movq %rcx, 0x90(%rbx)
movq -0x8(%rax), %rax
movq $0x200001, (%rax)       # imm = 0x200001
movq %r14, 0x8(%rax)
movq %r15, 0x10(%rax)
jmp 0x3c713
movq %rax, %rcx
movq %rcx, 0x4d8(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq