// File: /workspace/github_c_makefile_star2_O0/BernardTatin[P]s7sh/s7.c
// Function: p_syntax
static bool p_syntax(s7_scheme *sc, s7_pointer car_x, int32_t len)
                {
                    opcode_t op;
                    s7_pointer func;
                    func = slot_value(global_slot(car(car_x)));
                    op = (opcode_t)syntax_opcode(func);
                    switch (op)
                    {
                        case OP_QUOTE:
                            if ((is_pair(cdr(car_x))) && (is_null(cddr(car_x))))
                                return(opt_cell_quote(sc, car_x));
                            break;

                        case OP_SET:
                            if (len == 3)
                                return(opt_cell_set(sc, car_x));
                            break;

                        case OP_BEGIN:
                            if (len > 1)
                                return(opt_cell_begin(sc, car_x, len));
                            break;

                        case OP_WHEN:
                        case OP_UNLESS:
                            if (len > 2)
                                return(opt_cell_when(sc, car_x, len));
                            break;

                        case OP_COND:
                            if (len > 1)
                                return(opt_cell_cond(sc, car_x));
                            break;

                        case OP_AND:
                        case OP_OR:
                            return(opt_cell_and(sc, car_x, len));

                        case OP_IF:
                            return(opt_cell_if(sc, car_x, len));

                        case OP_CASE:
                            if (len > 2)
                                return(opt_cell_case(sc, car_x));
                            break;

                        case OP_LET_TEMPORARILY:
                            return(opt_cell_let_temporarily(sc, car_x, len));

                        case OP_DO:
                            return(opt_cell_do(sc, car_x, len));

                        default:
                            break;
                    }
                    /* longjmp(sc->opt_exit, 1); */ /* what good could it do to back up?  But we need to make sure sc->envir isn't clobbered (in op_do??) */
                    return(return_false(sc, car_x, __func__, __LINE__));
                }

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x28(%rsp)
movq %rsi, 0x20(%rsp)
movl %edx, 0x1c(%rsp)
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, 0x8(%rsp)
movq 0x8(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rax
addq $-0x19b, %rax           # imm = 0xFE65
movq %rax, (%rsp)
subq $0x49, %rax
ja 0xeaa8a
movq (%rsp), %rax
leaq 0xf5206(%rip), %rcx     # 0x1dfb10
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %eax
cmpl $0x1, %eax
jne 0xea959
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rax
movq 0x28(%rsp), %rcx
cmpq 0x110(%rcx), %rax
jne 0xea959
movq 0x28(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0xefe80
andb $0x1, %al
movb %al, 0x37(%rsp)
jmp 0xeaa91
jmp 0xeaa8c
cmpl $0x3, 0x1c(%rsp)
jne 0xea97f
movq 0x28(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0xeff10
andb $0x1, %al
movb %al, 0x37(%rsp)
jmp 0xeaa91
jmp 0xeaa8c
cmpl $0x1, 0x1c(%rsp)
jle 0xea9a9
movq 0x28(%rsp), %rdi
movq 0x20(%rsp), %rsi
movl 0x1c(%rsp), %edx
callq 0xf1d70
andb $0x1, %al
movb %al, 0x37(%rsp)
jmp 0xeaa91
jmp 0xeaa8c
cmpl $0x2, 0x1c(%rsp)
jle 0xea9d3
movq 0x28(%rsp), %rdi
movq 0x20(%rsp), %rsi
movl 0x1c(%rsp), %edx
callq 0xf1e80
andb $0x1, %al
movb %al, 0x37(%rsp)
jmp 0xeaa91
jmp 0xeaa8c
cmpl $0x1, 0x1c(%rsp)
jle 0xea9f9
movq 0x28(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0xf1fe0
andb $0x1, %al
movb %al, 0x37(%rsp)
jmp 0xeaa91
jmp 0xeaa8c
movq 0x28(%rsp), %rdi
movq 0x20(%rsp), %rsi
movl 0x1c(%rsp), %edx
callq 0xf2330
andb $0x1, %al
movb %al, 0x37(%rsp)
jmp 0xeaa91
movq 0x28(%rsp), %rdi
movq 0x20(%rsp), %rsi
movl 0x1c(%rsp), %edx
callq 0xf2690
andb $0x1, %al
movb %al, 0x37(%rsp)
jmp 0xeaa91
cmpl $0x2, 0x1c(%rsp)
jle 0xeaa52
movq 0x28(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0xf2e50
andb $0x1, %al
movb %al, 0x37(%rsp)
jmp 0xeaa91
jmp 0xeaa8c
movq 0x28(%rsp), %rdi
movq 0x20(%rsp), %rsi
movl 0x1c(%rsp), %edx
callq 0xf3120
andb $0x1, %al
movb %al, 0x37(%rsp)
jmp 0xeaa91
movq 0x28(%rsp), %rdi
movq 0x20(%rsp), %rsi
movl 0x1c(%rsp), %edx
callq 0xf3310
andb $0x1, %al
movb %al, 0x37(%rsp)
jmp 0xeaa91
jmp 0xeaa8c
movb $0x0, 0x37(%rsp)
movb 0x37(%rsp), %al
andb $0x1, %al
addq $0x38, %rsp
retq
nopl (%rax)