// File: /workspace/github_c_makefile_star2_O0/BernardTatin[P]s7sh/s7.c
// Function: make_macro
static s7_pointer make_macro(s7_scheme *sc, opcode_t op)
    {
        s7_pointer cx, mac, body;
        uint64_t typ;

        if (op == OP_DEFINE_MACRO)
            typ = T_MACRO | T_DONT_EVAL_ARGS | T_COPY_ARGS;
        else
        {
            if (op == OP_DEFINE_MACRO_STAR)
                typ = T_MACRO_STAR | T_DONT_EVAL_ARGS | T_COPY_ARGS;
            else
            {
                if (op == OP_DEFINE_BACRO)
                    typ = T_BACRO | T_DONT_EVAL_ARGS | T_COPY_ARGS;
                else
                {
                    if (op == OP_DEFINE_BACRO_STAR)
                        typ = T_BACRO_STAR | T_DONT_EVAL_ARGS | T_COPY_ARGS;
                    else
                    {
                        if ((op == OP_DEFINE_EXPANSION) && (!is_let(sc->envir)))  /* local expansions are just normal macros */
                            typ = T_MACRO | T_EXPANSION | T_DONT_EVAL_ARGS | T_COPY_ARGS;
                        else
                        {
                            if ((op == OP_DEFINE_EXPANSION_STAR) && (!is_let(sc->envir)))
                                typ = T_MACRO_STAR | T_EXPANSION | T_DONT_EVAL_ARGS | T_COPY_ARGS;
                            else typ = T_MACRO | T_DONT_EVAL_ARGS | T_COPY_ARGS;
                        }
                    }
                }
            }
        }

        new_cell_no_check(sc, mac, typ);
        sc->temp6 = mac;
        closure_set_args(mac, cdar(sc->code));
        body = cdr(sc->code);
        closure_set_body(mac, body);
        closure_set_setter(mac, sc->F);
        closure_set_let(mac, sc->envir);
        closure_set_arity(mac, CLOSURE_ARITY_NOT_SET);
        sc->capture_let_counter++;

        sc->code = caar(sc->code);
        if (((op == OP_DEFINE_EXPANSION) || (op == OP_DEFINE_EXPANSION_STAR)) &&
                (!is_let(sc->envir)))
            set_type(sc->code, T_EXPANSION | T_SYMBOL | (typeflag(sc->code) & T_UNHEAP)); /* see comment under READ_TOK */
        /* symbol? macro name has already been checked, find name in environment, and define it */
        cx = symbol_to_local_slot(sc, sc->code, sc->envir);
        if (is_slot(cx))
            slot_set_value_with_hook(cx, mac);
        else s7_make_slot(sc, sc->envir, sc->code, mac); /* was current but we've checked immutable already */

        clear_symbol_list(sc); /* tracks names local to this macro */
        if (optimize(sc, body, 1, collect_parameters(sc, closure_args(mac), sc->nil)) == OPT_OOPS)
            clear_all_optimizations(sc, body);

        if ((is_pair(car(body))) &&        /* a desperate kludge -- need something better here! */
                (is_pair(cdar(body))) &&
                (is_pair(cadar(body))) &&
                (caadar(body) == sc->quote_symbol) &&
                (is_symbol(cadr(cadar(body)))) &&
                (is_definer(cadr(cadar(body)))))
            set_is_definer(sc->code);

        sc->temp6 = sc->nil;
        return(mac);
    }

// Assembly:
subq $0x48, %rsp
movq %rdi, 0x40(%rsp)
movq %rsi, 0x38(%rsp)
cmpq $0x1cc, 0x38(%rsp)      # imm = 0x1CC
jne 0x1971f7
movq $0x1000202a, 0x18(%rsp) # imm = 0x1000202A
jmp 0x19729d
cmpq $0x1cd, 0x38(%rsp)      # imm = 0x1CD
jne 0x197210
movq $0x1000202b, 0x18(%rsp) # imm = 0x1000202B
jmp 0x19729b
cmpq $0x205, 0x38(%rsp)      # imm = 0x205
jne 0x197226
movq $0x1000202c, 0x18(%rsp) # imm = 0x1000202C
jmp 0x197299
cmpq $0x206, 0x38(%rsp)      # imm = 0x206
jne 0x19723c
movq $0x1000202d, 0x18(%rsp) # imm = 0x1000202D
jmp 0x197297
cmpq $0x1ce, 0x38(%rsp)      # imm = 0x1CE
jne 0x197263
movq 0x40(%rsp), %rax
movq 0x8(%rax), %rax
movzbl (%rax), %eax
cmpl $0x1c, %eax
je 0x197263
movq $0x1000602a, 0x18(%rsp) # imm = 0x1000602A
jmp 0x197295
cmpq $0x1cf, 0x38(%rsp)      # imm = 0x1CF
jne 0x19728a
movq 0x40(%rsp), %rax
movq 0x8(%rax), %rax
movzbl (%rax), %eax
cmpl $0x1c, %eax
je 0x19728a
movq $0x1000602b, 0x18(%rsp) # imm = 0x1000602B
jmp 0x197293
movq $0x1000202a, 0x18(%rsp) # imm = 0x1000202A
jmp 0x197295
jmp 0x197297
jmp 0x197299
jmp 0x19729b
jmp 0x19729d
jmp 0x19729f
movq 0x40(%rsp), %rcx
movq 0x90(%rcx), %rax
movq %rax, %rdx
addq $-0x8, %rdx
movq %rdx, 0x90(%rcx)
movq -0x8(%rax), %rax
movq %rax, 0x28(%rsp)
movq 0x18(%rsp), %rcx
movq 0x28(%rsp), %rax
movq %rcx, (%rax)
movq 0x28(%rsp), %rcx
movq 0x40(%rsp), %rax
movq %rcx, 0x520(%rax)
movq 0x40(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rcx
movq 0x28(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x40(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rax
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rcx
movq 0x28(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0x40(%rsp), %rax
movq 0x120(%rax), %rcx
movq 0x28(%rsp), %rax
movq %rcx, 0x20(%rax)
movq 0x40(%rsp), %rax
movq 0x8(%rax), %rcx
movq 0x28(%rsp), %rax
movq %rcx, 0x18(%rax)
movq 0x28(%rsp), %rax
movl $0x40000000, 0x28(%rax) # imm = 0x40000000
movq 0x40(%rsp), %rax
movq 0x240(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x240(%rax)
movq 0x40(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rcx
movq 0x40(%rsp), %rax
movq %rcx, (%rax)
cmpq $0x1ce, 0x38(%rsp)      # imm = 0x1CE
je 0x197390
cmpq $0x1cf, 0x38(%rsp)      # imm = 0x1CF
jne 0x1973c8
movq 0x40(%rsp), %rax
movq 0x8(%rax), %rax
movzbl (%rax), %eax
cmpl $0x1c, %eax
je 0x1973c8
movq 0x40(%rsp), %rax
movq (%rax), %rax
movabsq $0x4000000000000000, %rcx # imm = 0x4000000000000000
andq (%rax), %rcx
orq $0x400a, %rcx           # imm = 0x400A
movq 0x40(%rsp), %rax
movq (%rax), %rax
movq %rcx, (%rax)
movq 0x40(%rsp), %rdi
movq 0x40(%rsp), %rax
movq (%rax), %rsi
movq 0x40(%rsp), %rax
movq 0x8(%rax), %rdx
callq 0x101d0
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x20, %eax
jne 0x19743d
jmp 0x1973f7
movq 0x40(%rsp), %rdi
movq 0x40(%rsp), %rax
movq 0x200(%rax), %rsi
callq 0xba20
movzbl (%rax), %eax
cmpl $0x1, %eax
jne 0x19742b
movq 0x40(%rsp), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
callq 0xba60
jmp 0x197439
movq 0x28(%rsp), %rcx
movq 0x30(%rsp), %rax
movq %rcx, 0x10(%rax)
jmp 0x19743b
jmp 0x19745d
movq 0x40(%rsp), %rdi
movq 0x40(%rsp), %rax
movq 0x8(%rax), %rsi
movq 0x40(%rsp), %rax
movq (%rax), %rdx
movq 0x28(%rsp), %rcx
callq 0xb450
movq 0x40(%rsp), %rdi
callq 0xdd1b0
movq 0x40(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x20(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x40(%rsp), %rdi
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rsi
movq 0x40(%rsp), %rax
movq 0x110(%rax), %rdx
callq 0x17fc80
movq 0x8(%rsp), %rdi
movq 0x10(%rsp), %rsi
movq %rax, %rcx
movl $0x1, %edx
callq 0x1835e0
cmpl $0x2, %eax
jne 0x1974c5
movq 0x40(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x15a840
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movzbl (%rax), %eax
cmpl $0x1, %eax
jne 0x197588
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %eax
cmpl $0x1, %eax
jne 0x197588
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movzbl (%rax), %eax
cmpl $0x1, %eax
jne 0x197588
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rax
movq 0x40(%rsp), %rcx
cmpq 0x17b0(%rcx), %rax
jne 0x197588
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movzbl (%rax), %eax
cmpl $0xa, %eax
jne 0x197588
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movzwl 0x6(%rax), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0x197588
movq 0x40(%rsp), %rax
movq (%rax), %rax
movzwl 0x6(%rax), %ecx
orl $0x4, %ecx
movw %cx, 0x6(%rax)
movq 0x40(%rsp), %rax
movq 0x110(%rax), %rcx
movq 0x40(%rsp), %rax
movq %rcx, 0x520(%rax)
movq 0x28(%rsp), %rax
addq $0x48, %rsp
retq
nopw (%rax,%rax)