// File: /workspace/github_c_makefile_star2_O0/BernardTatin[P]s7sh/s7.c
// Function: g_list_set_1
static s7_pointer g_list_set_1(s7_scheme *sc, s7_pointer lst, s7_pointer args, int32_t arg_num)
                {
#define H_list_set "(list-set! lst i ... val) sets the i-th element (0-based) of the list to val"
#define Q_list_set s7_make_circular_signature(sc, 3, 4, sc->T, sc->is_pair_symbol, sc->is_integer_symbol, sc->is_integer_or_any_at_end_symbol)

                    int32_t i;
                    s7_int index;
                    s7_pointer p, ind;
                    /* (let ((L '((1 2 3) (4 5 6)))) (list-set! L 1 2 32) L) */

                    if (!is_mutable_pair(lst))
                        return(mutable_method_or_bust(sc, lst, sc->list_set_symbol, cons(sc, lst, args), T_PAIR, 1));

                    ind = car(args);
                    if ((arg_num > 2) && (is_null(cdr(args))))
                    {
                        set_car(lst, ind);
                        return(ind);
                    }
                    if (!s7_is_integer(ind))
                        return(method_or_bust(sc, ind, sc->list_set_symbol, cons(sc, lst, args), T_INTEGER, 2));
                    index = s7_integer(ind);
                    if ((index < 0) || (index > sc->max_list_length))
                        return(out_of_range(sc, sc->list_set_symbol, small_int(arg_num), ind, (index < 0) ? its_negative_string : its_too_large_string));

                    for (i = 0, p = lst; (i < index) && is_pair(p); i++, p = cdr(p)) {}

                    if (!is_pair(p))
                    {
                        if (is_null(p))
                            return(out_of_range(sc, sc->list_set_symbol, small_int(arg_num), ind, its_too_large_string));
                        return(wrong_type_argument_with_type(sc, sc->list_set_symbol, 1, lst, a_proper_list_string));
                    }
                    if (is_null(cddr(args)))
                        set_car(p, cadr(args));
                    else
                    {
                        if (!s7_is_pair(car(p)))
                            return(s7_wrong_number_of_args_error(sc, "too many args for list-set!: ~S", args));
                        return(g_list_set_1(sc, car(p), cdr(args), arg_num + 1));
                    }
                    return(cadr(args));
                }

// Assembly:
subq $0x118, %rsp            # imm = 0x118
movq %rdi, 0x108(%rsp)
movq %rsi, 0x100(%rsp)
movq %rdx, 0xf8(%rsp)
movl %ecx, 0xf4(%rsp)
movq 0x100(%rsp), %rax
movq (%rax), %rax
andq $0x10000ff, %rax        # imm = 0x10000FF
cmpq $0x1, %rax
je 0x19291e
movq 0x108(%rsp), %rax
movq %rax, 0x60(%rsp)
movq 0x100(%rsp), %rax
movq %rax, 0x68(%rsp)
movq 0x108(%rsp), %rax
movq 0x1260(%rax), %rax
movq %rax, 0x70(%rsp)
movq 0x100(%rsp), %rax
movq %rax, 0xc8(%rsp)
movq 0xf8(%rsp), %rax
movq %rax, 0xc0(%rsp)
movq 0x108(%rsp), %rax
movq 0x90(%rax), %rax
movq 0x108(%rsp), %rcx
cmpq 0x98(%rcx), %rax
ja 0x19287c
movq 0x108(%rsp), %rdi
callq 0xc670
movq 0x108(%rsp), %rcx
movq 0x90(%rcx), %rax
movq %rax, %rdx
addq $-0x8, %rdx
movq %rdx, 0x90(%rcx)
movq -0x8(%rax), %rax
movq %rax, 0xd0(%rsp)
movq 0xd0(%rsp), %rax
movq $0x200001, (%rax)       # imm = 0x200001
movq 0x70(%rsp), %rdx
movq 0x68(%rsp), %rsi
movq 0x60(%rsp), %rdi
movq 0xc8(%rsp), %rcx
movq 0xd0(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0xc0(%rsp), %rcx
movq 0xd0(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0xd0(%rsp), %rax
movq %rax, 0xb8(%rsp)
movq 0xb8(%rsp), %rcx
movl $0x1, %r9d
movl %r9d, %r8d
callq 0x192ea0
movq %rax, 0x110(%rsp)
jmp 0x192e90
movq 0xf8(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0xd8(%rsp)
cmpl $0x2, 0xf4(%rsp)
jle 0x192982
movq 0xf8(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x108(%rsp), %rcx
cmpq 0x110(%rcx), %rax
jne 0x192982
movq 0xd8(%rsp), %rcx
movq 0x100(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0xd8(%rsp), %rax
movq %rax, 0x110(%rsp)
jmp 0x192e90
movq 0xd8(%rsp), %rdi
callq 0x11340
testb $0x1, %al
jne 0x192ab7
movq 0x108(%rsp), %rax
movq %rax, 0x48(%rsp)
movq 0xd8(%rsp), %rax
movq %rax, 0x50(%rsp)
movq 0x108(%rsp), %rax
movq 0x1260(%rax), %rax
movq %rax, 0x58(%rsp)
movq 0x100(%rsp), %rax
movq %rax, 0xa8(%rsp)
movq 0xf8(%rsp), %rax
movq %rax, 0xa0(%rsp)
movq 0x108(%rsp), %rax
movq 0x90(%rax), %rax
movq 0x108(%rsp), %rcx
cmpq 0x98(%rcx), %rax
ja 0x192a12
movq 0x108(%rsp), %rdi
callq 0xc670
movq 0x108(%rsp), %rcx
movq 0x90(%rcx), %rax
movq %rax, %rdx
addq $-0x8, %rdx
movq %rdx, 0x90(%rcx)
movq -0x8(%rax), %rax
movq %rax, 0xb0(%rsp)
movq 0xb0(%rsp), %rax
movq $0x200001, (%rax)       # imm = 0x200001
movq 0x58(%rsp), %rdx
movq 0x50(%rsp), %rsi
movq 0x48(%rsp), %rdi
movq 0xa8(%rsp), %rcx
movq 0xb0(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0xa0(%rsp), %rcx
movq 0xb0(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0xb0(%rsp), %rax
movq %rax, 0x98(%rsp)
movq 0x98(%rsp), %rcx
movl $0xb, %r8d
movl $0x2, %r9d
callq 0x13c50
movq %rax, 0x110(%rsp)
jmp 0x192e90
movq 0xd8(%rsp), %rdi
callq 0x10790
movq %rax, 0xe8(%rsp)
cmpq $0x0, 0xe8(%rsp)
jl 0x192af4
movq 0xe8(%rsp), %rax
movq 0x108(%rsp), %rcx
cmpq 0x2b0(%rcx), %rax
jle 0x192b8e
movq 0x108(%rsp), %rax
movq %rax, 0x28(%rsp)
movq 0x108(%rsp), %rax
movq 0x1260(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, 0x30(%rsp)
movslq 0xf4(%rsp), %rcx
leaq 0x83958(%rip), %rax     # 0x216480
movq (%rax,%rcx,8), %rax
movq %rax, 0x38(%rsp)
movq 0xd8(%rsp), %rax
movq %rax, 0x40(%rsp)
cmpq $0x0, 0xe8(%rsp)
jge 0x192b57
movq 0x87a28(%rip), %rax     # 0x21a578
movq %rax, 0x20(%rsp)
jmp 0x192b63
movq 0x87a12(%rip), %rax     # 0x21a570
movq %rax, 0x20(%rsp)
movq 0x40(%rsp), %rcx
movq 0x38(%rsp), %rdx
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdi
movq 0x20(%rsp), %r8
callq 0x13880
movq %rax, 0x110(%rsp)
jmp 0x192e90
movl $0x0, 0xf0(%rsp)
movq 0x100(%rsp), %rax
movq %rax, 0xe0(%rsp)
movslq 0xf0(%rsp), %rcx
xorl %eax, %eax
cmpq 0xe8(%rsp), %rcx
movb %al, 0x1f(%rsp)
jge 0x192bd6
movq 0xe0(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x1, %eax
sete %al
movb %al, 0x1f(%rsp)
movb 0x1f(%rsp), %al
testb $0x1, %al
jne 0x192be0
jmp 0x192c09
jmp 0x192be2
movl 0xf0(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xf0(%rsp)
movq 0xe0(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0xe0(%rsp)
jmp 0x192ba9
movq 0xe0(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x1, %eax
je 0x192dc5
movq 0xe0(%rsp), %rax
movq 0x108(%rsp), %rcx
cmpq 0x110(%rcx), %rax
jne 0x192c85
movq 0x108(%rsp), %rdi
movq 0x108(%rsp), %rax
movq 0x1260(%rax), %rax
movq 0x8(%rax), %rsi
movslq 0xf4(%rsp), %rcx
leaq 0x83820(%rip), %rax     # 0x216480
movq (%rax,%rcx,8), %rdx
movq 0xd8(%rsp), %rcx
movq 0x878fd(%rip), %r8      # 0x21a570
callq 0x13880
movq %rax, 0x110(%rsp)
jmp 0x192e90
movq 0x108(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x108(%rsp), %rax
movq 0x1260(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, 0x10(%rsp)
movq $0x1, 0x90(%rsp)
movq 0x90(%rsp), %rax
andq $-0x800, %rax           # imm = 0xF800
cmpq $0x0, %rax
jne 0x192ce6
movq 0x90(%rsp), %rcx
leaq 0x837a7(%rip), %rax     # 0x216480
movq (%rax,%rcx,8), %rax
movq %rax, (%rsp)
jmp 0x192d77
jmp 0x192ce8
movq 0x108(%rsp), %rax
movq 0x90(%rax), %rax
movq 0x108(%rsp), %rcx
cmpq 0x98(%rcx), %rax
ja 0x192d15
movq 0x108(%rsp), %rdi
callq 0xc670
movq 0x108(%rsp), %rcx
movq 0x90(%rcx), %rax
movq %rax, %rdx
addq $-0x8, %rdx
movq %rdx, 0x90(%rcx)
movq -0x8(%rax), %rax
movq %rax, 0x80(%rsp)
movq 0x80(%rsp), %rax
movq $0xb, (%rax)
movq 0x90(%rsp), %rcx
movq 0x80(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x80(%rsp), %rax
movq %rax, 0x78(%rsp)
movq 0x78(%rsp), %rax
movq %rax, (%rsp)
movq 0x10(%rsp), %rsi
movq 0x8(%rsp), %rdi
movq (%rsp), %rax
movq %rax, 0x88(%rsp)
movq 0x88(%rsp), %rdx
movq 0x100(%rsp), %rcx
movq 0x108(%rsp), %rax
movq 0x140(%rax), %r8
movq 0x8f9b5(%rip), %r9      # 0x222768
callq 0xc560
movq %rax, 0x110(%rsp)
jmp 0x192e90
movq 0xf8(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rax
movq 0x108(%rsp), %rcx
cmpq 0x110(%rcx), %rax
jne 0x192e04
movq 0xf8(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rcx
movq 0xe0(%rsp), %rax
movq %rcx, 0x8(%rax)
jmp 0x192e78
movq 0xe0(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x2dd10
testb $0x1, %al
jne 0x192e3f
movq 0x108(%rsp), %rdi
movq 0xf8(%rsp), %rdx
leaq 0x5d994(%rip), %rsi     # 0x1f07c4
callq 0x33290
movq %rax, 0x110(%rsp)
jmp 0x192e90
movq 0x108(%rsp), %rdi
movq 0xe0(%rsp), %rax
movq 0x8(%rax), %rsi
movq 0xf8(%rsp), %rax
movq 0x10(%rax), %rdx
movl 0xf4(%rsp), %ecx
addl $0x1, %ecx
callq 0x1927c0
movq %rax, 0x110(%rsp)
jmp 0x192e90
movq 0xf8(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, 0x110(%rsp)
movq 0x110(%rsp), %rax
addq $0x118, %rsp            # imm = 0x118
retq