// File: /workspace/github_c_makefile_star2_O0/BernardTatin[P]s7sh/s7.c
// Function: op_define_macro
static bool op_define_macro(s7_scheme *sc)
                {
                    set_current_code(sc, sc->code);
                    sc->code = cdr(sc->code);
                    check_define_macro(sc, sc->cur_op);
                    if (symbol_has_setter(caar(sc->code)))
                    {
                        s7_pointer x;
                        x = symbol_to_slot(sc, caar(sc->code));
                        if ((is_slot(x)) &&
                                (slot_has_setter(x)))
                        {
                            sc->value = bind_symbol_with_setter(sc, OP_DEFINE_MACRO_WITH_SETTER, caar(sc->code), sc->code);
                            if (sc->value == sc->no_value)
                                return(false);
                            sc->code = sc->value;
                        }
                    }
                    if ((is_immutable(sc->envir)) &&
                            (is_let(sc->envir))) /* not () */
                        eval_error_no_return(sc, sc->syntax_error_symbol, "define-macro ~S: let is immutable", 33, caar(sc->code)); /* need eval_error_no_return_with_caller? */
                    sc->value = make_macro(sc, sc->cur_op);
                    return(true);
                }

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x28(%rsp)
movq 0x28(%rsp), %rax
movq (%rax), %rcx
movq 0x28(%rsp), %rax
movq %rcx, 0x28(%rax)
movq 0x28(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rcx
movq 0x28(%rsp), %rax
movq %rcx, (%rax)
movq 0x28(%rsp), %rdi
movq 0x28(%rsp), %rax
movq 0x18(%rax), %rsi
callq 0x1975b0
movq 0x28(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rax
movq (%rax), %rax
andq $0x40000, %rax          # imm = 0x40000
cmpq $0x0, %rax
je 0x154e1b
movq 0x28(%rsp), %rdi
movq 0x28(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rsi
callq 0xfc80
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x20, %eax
jne 0x154e19
movq 0x20(%rsp), %rax
movq (%rax), %rax
andq $0x40000, %rax          # imm = 0x40000
cmpq $0x0, %rax
je 0x154e19
movq 0x28(%rsp), %rdi
movq 0x28(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rdx
movq 0x28(%rsp), %rax
movq (%rax), %rcx
movl $0x23e, %esi            # imm = 0x23E
callq 0x18d380
movq %rax, %rcx
movq 0x28(%rsp), %rax
movq %rcx, 0x20(%rax)
movq 0x28(%rsp), %rax
movq 0x20(%rax), %rax
movq 0x28(%rsp), %rcx
cmpq 0x138(%rcx), %rax
jne 0x154e08
movb $0x0, 0x37(%rsp)
jmp 0x154ed2
movq 0x28(%rsp), %rax
movq 0x20(%rax), %rcx
movq 0x28(%rsp), %rax
movq %rcx, (%rax)
jmp 0x154e1b
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rax
andq $0x1000000, %rax        # imm = 0x1000000
cmpq $0x0, %rax
je 0x154eae
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rax
movzbl (%rax), %eax
cmpl $0x1c, %eax
jne 0x154eae
movq 0x28(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x28(%rsp), %rax
movq 0x1918(%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x28(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x28(%rsp), %rdi
leaq 0x9c29f(%rip), %rsi     # 0x1f1114
movl $0x21, %edx
callq 0xb880
movq 0x8(%rsp), %rdi
movq %rax, %rsi
movq 0x28(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rdx
callq 0xb830
movq 0x10(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq %rax, %rdx
callq 0x2f940
movq 0x28(%rsp), %rdi
movq 0x28(%rsp), %rax
movq 0x18(%rax), %rsi
callq 0x1971d0
movq %rax, %rcx
movq 0x28(%rsp), %rax
movq %rcx, 0x20(%rax)
movb $0x1, 0x37(%rsp)
movb 0x37(%rsp), %al
andb $0x1, %al
addq $0x38, %rsp
retq
nopl (%rax)