// File: /workspace/github_c_makefile_star2_O3/BernardTatin[P]s7sh/s7.c
// Function: syntax
static s7_pointer syntax(s7_scheme *sc, const char *name, opcode_t op, s7_pointer min_args, s7_pointer max_args, const char *doc)
                {
                    s7_pointer x, syn;
                    uint64_t hash;
                    uint32_t loc;

                    hash = raw_string_hash((const uint8_t *)name, safe_strlen(name));
                    loc = hash % SYMBOL_TABLE_SIZE;
                    x = new_symbol(sc, name, safe_strlen(name), hash, loc);

                    syn = alloc_pointer(sc);
                    set_type(syn, T_SYNTAX | T_SYNTACTIC | T_DONT_EVAL_ARGS | T_GLOBAL | T_UNHEAP);
                    syntax_opcode(syn) = op;
                    syntax_set_symbol(syn, x);
                    syntax_min_args(syn) = integer(min_args);
                    syntax_max_args(syn) = ((max_args == max_arity) ? -1 : integer(max_args));
                    syntax_documentation(syn) = doc;

                    set_global_slot(x, make_permanent_slot(sc, x, syn));
                    set_initial_slot(x, make_permanent_slot(sc, x, syn));
                    /* set_local_slot(x, global_slot(x)); */
                    set_type_bit(x, T_SYMBOL | T_SYNTACTIC | T_GLOBAL | T_UNHEAP);
                    symbol_set_local_unchecked(x, 0LL, sc->nil);
                    symbol_set_ctr(x, 0;)
                        return(x);
                }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %r8, %r15
movq %rdx, %r13
movq %rsi, %rbp
movq %rdi, %rbx
testq %rsi, %rsi
movq %r9, 0x8(%rsp)
movq %rcx, 0x18(%rsp)
je 0x5c587
cmpb $0x0, (%rbp)
je 0x5c587
xorl %edx, %edx
cmpb $0x0, 0x1(%rbp,%rdx)
leaq 0x1(%rdx), %rdx
jne 0x5c515
movq $0x0, 0x10(%rsp)
cmpq $0x9, %rdx
jl 0x5c592
movq (%rbp), %r12
leaq 0x20(%rsp), %r14
movq $0x0, (%r14)
leaq 0x8(%rbp), %rsi
cmpq $0x10, %rdx
movl $0x10, %eax
cmovbq %rdx, %rax
addq $-0x8, %rax
movq %r14, %rdi
movq %rax, %rdx
callq 0x83e0
movq (%r14), %rcx
addq %r12, %rcx
movabsq $-0x7fecfd2d94c4151b, %rdx # imm = 0x801302D26B3BEAE5
movq %rcx, %rax
mulq %rdx
shrq $0xe, %rdx
imull $0x7fed, %edx, %eax     # imm = 0x7FED
movl %ecx, %r8d
subl %eax, %r8d
jmp 0x5c5ce
movq $0x0, 0x10(%rsp)
xorl %edx, %edx
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbp, %rsi
callq 0x83e0
movq (%r14), %rcx
movabsq $-0x7fecfd2d94c4151b, %rdx # imm = 0x801302D26B3BEAE5
movq %rcx, %rax
mulq %rdx
shrq $0xe, %rdx
imull $0x7fed, %edx, %eax     # imm = 0x7FED
movl %ecx, %r8d
subl %eax, %r8d
testq %rbp, %rbp
je 0x5c5e2
movb (%rbp), %r12b
testb %r12b, %r12b
je 0x5c5e2
xorl %edx, %edx
cmpb $0x0, 0x1(%rbp,%rdx)
leaq 0x1(%rdx), %rdx
jne 0x5c5d5
jmp 0x5c5e4
xorl %edx, %edx
movabsq $0x4000000000000020, %r12 # imm = 0x4000000000000020
movq %rbx, %rdi
movq %rbp, %rsi
callq 0x9632
movq %rax, %rbp
movq %rbx, %rdi
callq 0xec9f
movq %rax, %r14
leaq 0x121e9(%r12), %rax
movq %rax, (%r14)
movq %r13, 0x10(%r14)
movq %rbp, 0x8(%r14)
movq 0x18(%rsp), %rax
movl 0x8(%rax), %eax
movl %eax, 0x18(%r14)
cmpq %r15, 0xefd7b(%rip)     # 0x14c3a8
je 0x5c635
movl 0x8(%r15), %eax
jmp 0x5c63a
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movq 0x8(%rsp), %r13
movl %eax, 0x1c(%r14)
movq %r13, 0x20(%r14)
movq %rbx, %rdi
callq 0xec9f
movq %r12, (%rax)
movq %rbp, 0x8(%rax)
movq %r14, 0x10(%rax)
movq %rax, 0x10(%rbp)
movq %rbx, %rdi
callq 0xec9f
movq %r12, (%rax)
movq %rbp, 0x8(%rax)
movq %r14, 0x10(%rax)
movq 0x8(%rbp), %rcx
movq 0x20(%rcx), %rcx
movq %rax, 0x20(%rcx)
addq $0x101ea, %r12          # imm = 0x101EA
orq %r12, (%rbp)
movq 0x110(%rbx), %rax
movq %rax, 0x18(%rbp)
movq $0x0, 0x20(%rbp)
movl $0x0, 0x28(%rbp)
movq %rbp, %rax
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq