// File: /workspace/github_c_makefile_star2_O0/BernardTatin[P]s7sh/s7.c
// Function: define_funchecked
static inline void define_funchecked(s7_scheme *sc)
                {
                    s7_pointer new_func, code, slot;
                    /* fprintf(stderr, "%s[%d]: %s\n", __func__, __LINE__, DISPLAY(sc->code)); */
                    code = cdr(sc->code);
                    sc->value = caar(code); /* func name */

                    new_cell(sc, new_func, T_CLOSURE | T_COPY_ARGS);
                    closure_set_args(new_func, cdar(code));
                    closure_set_body(new_func, cdr(code));
                    if (is_pair(cddr(code))) set_closure_has_multiform(new_func); else set_closure_has_one_form(new_func);
                    closure_set_setter(new_func, sc->F);
                    closure_set_arity(new_func, CLOSURE_ARITY_NOT_SET);
                    sc->capture_let_counter++;

                    if (is_safe_closure_body(cdr(code)))
                    {
                        set_safe_closure(new_func);
                        if (is_very_safe_closure_body(cdr(code)))
                            set_very_safe_closure(new_func);
                        make_funclet(sc, new_func, sc->value, sc->envir);
                    }
                    else closure_set_let(new_func, sc->envir);  /* unsafe closures created by other functions do not support __func__ */

                    if (let_id(sc->envir) < symbol_id(sc->value))
                        sc->let_number++; /* dummy let, force symbol lookup */

                    /* add_slot(sc->envir, sc->value, new_func); but with local id */
                    new_cell_no_check(sc, slot, T_SLOT);
                    slot_set_symbol(slot, sc->value);
                    slot_set_value(slot, new_func);
                    symbol_set_local(sc->value, sc->let_number, slot);
                    slot_set_next(slot, let_slots(sc->envir));
                    let_set_slots(sc->envir, slot);

                    set_local(sc->value);
                    sc->value = new_func;
                }

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq 0x20(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rcx
movq 0x20(%rsp), %rax
movq %rcx, 0x20(%rax)
movq 0x20(%rsp), %rax
movq 0x90(%rax), %rax
movq 0x20(%rsp), %rcx
cmpq 0x98(%rcx), %rax
ja 0x13ea74
movq 0x20(%rsp), %rdi
callq 0xc670
movq 0x20(%rsp), %rcx
movq 0x90(%rcx), %rax
movq %rax, %rdx
addq $-0x8, %rdx
movq %rdx, 0x90(%rcx)
movq -0x8(%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
movq $0x10000028, (%rax)     # imm = 0x10000028
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rcx
movq 0x18(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x10(%rsp), %rax
movq 0x10(%rax), %rcx
movq 0x18(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0x10(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %eax
cmpl $0x1, %eax
jne 0x13eaf4
movq 0x18(%rsp), %rax
movq (%rax), %rcx
orq $0x100, %rcx            # imm = 0x100
movq %rcx, (%rax)
jmp 0x13eb06
movq 0x18(%rsp), %rax
movq (%rax), %rcx
orq $0x400, %rcx            # imm = 0x400
movq %rcx, (%rax)
movq 0x20(%rsp), %rax
movq 0x120(%rax), %rcx
movq 0x18(%rsp), %rax
movq %rcx, 0x20(%rax)
movq 0x18(%rsp), %rax
movl $0x40000000, 0x28(%rax) # imm = 0x40000000
movq 0x20(%rsp), %rax
movq 0x240(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x240(%rax)
movq 0x10(%rsp), %rax
movq 0x10(%rax), %rax
movzwl (%rax), %eax
andl $0x1000, %eax           # imm = 0x1000
cmpl $0x0, %eax
je 0x13ebad
movq 0x18(%rsp), %rax
movzwl (%rax), %ecx
orl $0x1000, %ecx           # imm = 0x1000
movw %cx, (%rax)
movq 0x10(%rsp), %rax
movq 0x10(%rax), %rax
movzwl 0x6(%rax), %eax
andl $0x10, %eax
cmpl $0x0, %eax
je 0x13eb8a
movq 0x18(%rsp), %rax
movzwl 0x6(%rax), %ecx
orl $0x10, %ecx
movw %cx, 0x6(%rax)
movq 0x20(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x20(%rsp), %rax
movq 0x20(%rax), %rdx
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rcx
callq 0x18bcc0
jmp 0x13ebbf
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rcx
movq 0x18(%rsp), %rax
movq %rcx, 0x18(%rax)
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rax), %rax
movq 0x20(%rsp), %rcx
movq 0x20(%rcx), %rcx
cmpq 0x20(%rcx), %rax
jge 0x13ebf2
movq 0x20(%rsp), %rax
movq 0x250(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x250(%rax)
jmp 0x13ebf4
movq 0x20(%rsp), %rcx
movq 0x90(%rcx), %rax
movq %rax, %rdx
addq $-0x8, %rdx
movq %rdx, 0x90(%rcx)
movq -0x8(%rax), %rax
movq %rax, 0x8(%rsp)
movq 0x8(%rsp), %rax
movq $0x20, (%rax)
movq 0x20(%rsp), %rax
movq 0x20(%rax), %rcx
movq 0x8(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x18(%rsp), %rcx
movq 0x8(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0x8(%rsp), %rcx
movq 0x20(%rsp), %rax
movq 0x20(%rax), %rax
movq %rcx, 0x18(%rax)
movq 0x20(%rsp), %rax
movq 0x250(%rax), %rcx
movq 0x20(%rsp), %rax
movq 0x20(%rax), %rax
movq %rcx, 0x20(%rax)
movq 0x20(%rsp), %rax
movq 0x20(%rax), %rax
movl 0x28(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x28(%rax)
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rcx
movq 0x8(%rsp), %rax
movq %rcx, 0x18(%rax)
movq 0x8(%rsp), %rcx
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movq %rcx, 0x8(%rax)
movq 0x20(%rsp), %rax
movq 0x20(%rax), %rax
movq (%rax), %rcx
orq $0x100000, %rcx         # imm = 0x100000
andq $-0x12201, %rcx         # imm = 0xFFFEDDFF
movq 0x20(%rsp), %rax
movq 0x20(%rax), %rax
movq %rcx, (%rax)
movq 0x18(%rsp), %rcx
movq 0x20(%rsp), %rax
movq %rcx, 0x20(%rax)
addq $0x28, %rsp
retq
nopw %cs:(%rax,%rax)