// File: /workspace/github_c_makefile_star2_O3/BernardTatin[P]s7sh/s7.c
// Function: fx_less_length_i
static s7_pointer fx_less_length_i(s7_scheme *sc, s7_pointer arg)
                {
                    s7_int ilen;
                    s7_pointer val;

                    val = lookup(sc, opt3_sym(cdr(arg)));  /* cadadr(arg) */
                    ilen = integer(opt2_con(cdr(arg)));    /* caddr(arg) */

                    switch (type(val))
                    {
                        case T_PAIR:         return(make_boolean(sc, s7_list_length(sc, val) < ilen));
                        case T_NIL:          return(make_boolean(sc, ilen > 0));
                        case T_STRING:       return(make_boolean(sc, string_length(val) < ilen));
                        case T_HASH_TABLE:   return(make_boolean(sc, (hash_table_mask(val) + 1) < ilen)); /* was <=? -- changed 15-Dec-15, then again 6-Jan-17: mask is len-1 */
                        case T_C_OBJECT:     return(make_boolean(sc, c_object_length_to_int(sc, val) < ilen));
                        case T_LET:          return(make_boolean(sc, let_length(sc, val) < ilen));  /* this works because let_length handles the length method itself! */

                        case T_BYTE_VECTOR:
                        case T_INT_VECTOR:
                        case T_FLOAT_VECTOR:
                        case T_VECTOR:
                                             return(make_boolean(sc, vector_length(val) < ilen));

                        case T_ITERATOR:
                                             {
                                                 s7_pointer len;
                                                 len = s7_length(sc, iterator_sequence(val));
                                                 return(make_boolean(sc, (is_t_integer(len)) && (integer(len) < ilen)));
                                             }

                        case T_CLOSURE:
                        case T_CLOSURE_STAR:
                                             if (has_active_methods(sc, val))
                                                 return(make_boolean(sc, closure_length(sc, val) < ilen));
                                             /* fall through */

                        default:
                                             return(simple_wrong_type_argument_with_type(sc, sc->length_symbol, val, a_sequence_string)); /* no check method here because we checked above */
                    }
                    return(sc->F);
                }

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
movq 0x10(%rsi), %rax
movq 0x28(%rax), %rcx
movq 0x8(%rdi), %rdx
movq 0x18(%rdx), %rdi
movq 0x20(%rcx), %rsi
cmpq %rsi, %rdi
je 0xb6ef9
jle 0xb6ef4
movq 0x10(%rdx), %rdx
movq 0x18(%rdx), %rdi
cmpq %rdi, %rsi
jl 0xb6ee7
cmpq %rsi, %rdi
jne 0xb6f3a
movq 0x18(%rcx), %rsi
movq 0x10(%rsi), %rdx
movq 0x20(%rax), %rax
movq 0x8(%rax), %r14
movzbl (%rdx), %eax
leal -0x13(%rax), %ecx
cmpl $0x16, %ecx
ja 0xb6f5e
leaq 0x51631(%rip), %rax     # 0x10854c
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
xorl %eax, %eax
cmpq %r14, 0x8(%rdx)
setge %al
movq 0x118(%rbx,%rax,8), %rax
jmp 0xb707b
cmpb $0x1c, (%rdx)
jne 0xb6fcb
movq 0x8(%rdx), %rsi
testq %rsi, %rsi
je 0xb6f58
cmpq %rcx, 0x8(%rsi)
je 0xb6efd
movq 0x18(%rsi), %rsi
jmp 0xb6f47
movq 0x10(%rdx), %rdx
jmp 0xb6f3a
cmpl $0x2, %eax
je 0xb7081
cmpl $0x1, %eax
jne 0xb6fa5
movq %rbx, %rdi
movq %rdx, %rsi
callq 0x39d0d
jmp 0xb706b
testb $0x40, 0x3(%rdx)
je 0xb6fa5
cmpb $0x1, 0x24c(%rbx)
jne 0xb6fa5
movq %rbx, %rdi
movq %rdx, %rsi
callq 0x37754
cltq
xorl %ecx, %ecx
cmpq %rax, %r14
setle %cl
jmp 0xb7073
movq 0x1218(%rbx), %rax
movq 0x8(%rax), %rsi
movq 0x140(%rbx), %rcx
movq 0x93c52(%rip), %r8      # 0x14ac10
movq %rbx, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0xed2a
movq 0x10(%rcx), %rsi
cmpb $0x20, (%rsi)
je 0xb6efd
xorl %edx, %edx
jmp 0xb6f01
movq 0x8d8(%rbx), %rax
movq 0x8(%rdx), %rcx
movq (%rax,%rcx,8), %rax
movq 0x58(%rax), %rax
movq $-0x1, %r15
testq %rax, %rax
je 0xb701e
movq 0x730(%rbx), %rcx
movq %rdx, 0x8(%rcx)
movq 0x730(%rbx), %rsi
movq %rbx, %rdi
callq *%rax
cmpb $0xb, (%rax)
jne 0xb701e
movq 0x8(%rax), %r15
xorl %eax, %eax
cmpq %r14, %r15
jmp 0xb6f2a
movq 0x8(%rdx), %rax
incq %rax
jmp 0xb706b
movq 0x8(%rdx), %rsi
movzbl (%rsi), %eax
leaq 0x9db61(%rip), %rcx     # 0x154ba0
movq %rbx, %rdi
callq *(%rcx,%rax,8)
cmpb $0xb, (%rax)
jne 0xb7055
movl $0x118, %ecx            # imm = 0x118
cmpq %r14, 0x8(%rax)
jl 0xb705a
movl $0x120, %ecx            # imm = 0x120
movq (%rbx,%rcx), %rax
jmp 0xb707b
movq %rbx, %rdi
movq %rdx, %rsi
callq 0x9a46b
xorl %ecx, %ecx
cmpq %r14, %rax
setge %cl
movq 0x118(%rbx,%rcx,8), %rax
popq %rbx
popq %r14
popq %r15
retq
xorl %eax, %eax
testq %r14, %r14
setle %al
jmp 0xb6f2d