// File: /workspace/github_c_makefile_star2_O0/BernardTatin[P]s7sh/s7.c
// Function: s7_set_setter
s7_pointer s7_set_setter(s7_scheme *sc, s7_pointer p, s7_pointer setter)
                {
                    if (is_symbol(p))
                    {
                        if (slot_has_setter(global_slot(p)))
                        {
                            s7_int index;
                            for (index = 0; index < sc->protected_setters_loc; index++)
                                if (vector_element(sc->protected_setter_symbols, index) == p)
                                {
                                    s7_pointer old_func;
                                    old_func = vector_element(sc->protected_setters, index);
                                    if ((is_procedure_or_macro(old_func)) && /* i.e. not #f! */
                                            (is_immutable(old_func)))
                                        return(setter);
                                    vector_element(sc->protected_setters, index) = setter;
                                    slot_set_setter(global_slot(p), setter);
                                    if ((setter != sc->F) && (s7_is_aritable(sc, setter, 3)))
                                        set_has_let_arg(setter);
                                    return(setter);
                                }
                        }
                        if (setter != sc->F)
                        {
                            slot_set_has_setter(global_slot(p));
                            symbol_set_has_setter(p);
                            slot_set_has_setter(global_slot(p));
                            protect_setter(sc, p, setter);
                            slot_set_setter(global_slot(p), setter);
                            if (s7_is_aritable(sc, setter, 3))
                                set_has_let_arg(setter);
                            return(setter);
                        }
                        slot_set_setter(global_slot(p), setter);
                        return(setter);
                    }
                    return(g_set_setter(sc, set_plist_2(sc, p, setter)));
                }

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x28(%rsp)
movq %rsi, 0x20(%rsp)
movq %rdx, 0x18(%rsp)
movq 0x20(%rsp), %rax
movzbl (%rax), %eax
cmpl $0xa, %eax
jne 0x3dde8
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rax
andq $0x40000, %rax          # imm = 0x40000
cmpq $0x0, %rax
je 0x3dd17
movq $0x0, 0x10(%rsp)
movq 0x10(%rsp), %rax
movq 0x28(%rsp), %rcx
cmpq 0x100(%rcx), %rax
jge 0x3dd15
movq 0x28(%rsp), %rax
movq 0xe0(%rax), %rax
movq 0x10(%rax), %rax
movq 0x10(%rsp), %rcx
movq (%rax,%rcx,8), %rax
cmpq 0x20(%rsp), %rax
jne 0x3dd00
movq 0x28(%rsp), %rax
movq 0xd8(%rax), %rax
movq 0x10(%rax), %rax
movq 0x10(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0x8(%rsp)
movq 0x8(%rsp), %rax
movzbl (%rax), %eax
movl %eax, %ecx
leaq 0x1de21d(%rip), %rax    # 0x21be60
testb $0x1, (%rax,%rcx)
jne 0x3dc60
movq 0x8(%rsp), %rax
movzbl (%rax), %eax
movl %eax, %ecx
leaq 0x1de246(%rip), %rax    # 0x21bea0
testb $0x1, (%rax,%rcx)
je 0x3dc83
movq 0x8(%rsp), %rax
movq (%rax), %rax
andq $0x1000000, %rax        # imm = 0x1000000
cmpq $0x0, %rax
je 0x3dc83
movq 0x18(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x3de16
movq 0x18(%rsp), %rdx
movq 0x28(%rsp), %rax
movq 0xd8(%rax), %rax
movq 0x10(%rax), %rax
movq 0x10(%rsp), %rcx
movq %rdx, (%rax,%rcx,8)
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rdi
movq 0x18(%rsp), %rsi
callq 0x3de20
movq 0x18(%rsp), %rax
movq 0x28(%rsp), %rcx
cmpq 0x120(%rcx), %rax
je 0x3dcf1
movq 0x28(%rsp), %rdi
movq 0x18(%rsp), %rsi
movl $0x3, %edx
callq 0x3cbf0
testb $0x1, %al
jne 0x3dce1
jmp 0x3dcf1
movq 0x18(%rsp), %rax
movzwl 0x6(%rax), %ecx
orl $0x1, %ecx
movw %cx, 0x6(%rax)
movq 0x18(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x3de16
jmp 0x3dd02
movq 0x10(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x10(%rsp)
jmp 0x3dbd9
jmp 0x3dd17
movq 0x18(%rsp), %rax
movq 0x28(%rsp), %rcx
cmpq 0x120(%rcx), %rax
je 0x3ddc9
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rcx
orq $0x40000, %rcx          # imm = 0x40000
movq %rcx, (%rax)
movq 0x20(%rsp), %rax
movq (%rax), %rcx
orq $0x40000, %rcx          # imm = 0x40000
movq %rcx, (%rax)
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rcx
orq $0x40000, %rcx          # imm = 0x40000
movq %rcx, (%rax)
movq 0x28(%rsp), %rdi
movq 0x20(%rsp), %rsi
movq 0x18(%rsp), %rdx
callq 0x3de70
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rdi
movq 0x18(%rsp), %rsi
callq 0x3de20
movq 0x28(%rsp), %rdi
movq 0x18(%rsp), %rsi
movl $0x3, %edx
callq 0x3cbf0
testb $0x1, %al
jne 0x3ddad
jmp 0x3ddbd
movq 0x18(%rsp), %rax
movzwl 0x6(%rax), %ecx
orl $0x1, %ecx
movw %cx, 0x6(%rax)
movq 0x18(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x3de16
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rdi
movq 0x18(%rsp), %rsi
callq 0x3de20
movq 0x18(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x3de16
movq 0x28(%rsp), %rax
movq %rax, (%rsp)
movq 0x28(%rsp), %rdi
movq 0x20(%rsp), %rsi
movq 0x18(%rsp), %rdx
callq 0x36f70
movq (%rsp), %rdi
movq %rax, %rsi
callq 0x3e090
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rax
addq $0x38, %rsp
retq