// File: /workspace/github_c_makefile_star2_O1/BernardTatin[P]s7sh/s7.c
// Function: new_symbol
static inline s7_pointer new_symbol(s7_scheme *sc, const char *name, s7_int len, uint64_t hash, uint32_t location)
    {
        /* name might not be null-terminated, these are permanent symbols even in s7_gensym; g_gensym handles everything separately */
        s7_pointer x, str, p;
        uint8_t *base, *val;

        base = alloc_symbol(sc);
        x = (s7_pointer)base;
        str = (s7_pointer)(base + sizeof(s7_cell));
        p = (s7_pointer)(base + 2 * sizeof(s7_cell));
        val = (uint8_t *)alloc_permanent_string(sc, len + 1);
        memcpy((void *)val, (void *)name, len);
        val[len] = '\0';

        typeflag(str) = T_STRING | T_IMMUTABLE | T_UNHEAP;       /* avoid debugging confusion involving set_type (also below) */
        string_length(str) = len;
        string_value(str) = (char *)val;
        string_hash(str) = hash;

        typeflag(x) = T_SYMBOL | T_UNHEAP;
        symbol_set_name_cell(x, str);
        set_global_slot(x, sc->undefined);                       /* was sc->nil */
        symbol_info(x) = (block_t *)(base + 3 * sizeof(s7_cell));
        set_initial_slot(x, sc->undefined);
        symbol_set_local_unchecked(x, 0LL, sc->nil);
        symbol_set_tag(x, 0);
        symbol_set_tag2(x, 0);
        symbol_set_ctr(x, 0);
        symbol_clear_type(x);

        if (len > 1)                                             /* not 0, otherwise : is a keyword */
        {
            if ((name[0] == ':') || (name[len - 1] == ':'))      /* see s7test under keyword? for troubles if both colons are present */
            {
                s7_pointer slot, ksym;
                set_type_bit(x, T_IMMUTABLE | T_KEYWORD | T_GLOBAL);
                ksym = make_symbol_with_length(sc, (name[0] == ':') ? (char *)(name + 1) : name, len - 1);
                keyword_set_symbol(x, ksym);
                set_has_keyword(ksym);
                /* the keyword symbol needs to be permanent (not a gensym) else we have to laboriously gc-protect it */
                if ((is_gensym(ksym)) &&
                        (in_heap(ksym)))
                    s7_remove_from_heap(sc, ksym);
                slot = make_permanent_slot(sc, x, x);
                set_global_slot(x, slot);
                set_local_slot(x, slot);
            }
        }

        typeflag(p) = T_PAIR | T_IMMUTABLE | T_UNHEAP;  /* add x to the symbol table */
        set_car(p, x);
        set_cdr(p, vector_element(sc->symbol_table, location));
        vector_element(sc->symbol_table, location) = p;
        pair_set_raw_hash(p, hash);
        pair_set_raw_len(p, (uint32_t)len); /* symbol name length, so it ought to fit! */
        pair_set_raw_name(p, string_value(str));

        return(x);
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movl %r8d, 0x1c(%rsp)
movq %rcx, 0x20(%rsp)
movq %rdx, %rbx
movq %rsi, (%rsp)
movq %rdi, %r15
cmpl $0x2e00, 0x7f8(%rdi)    # imm = 0x2E00
jne 0xa639
movl $0x2e00, %edi           # imm = 0x2E00
callq 0x9480
movq %rax, 0x828(%r15)
movl $0x0, 0x7f8(%r15)
movq 0x828(%r15), %rax
movl 0x7f8(%r15), %ecx
leaq (%rax,%rcx), %r12
leal 0xb8(%rcx), %edx
movl %edx, 0x7f8(%r15)
leaq 0x30(%rax,%rcx), %rax
movq %rax, 0x28(%rsp)
leaq 0x8(%rbx), %rcx
movq %rcx, %r14
andq $-0x8, %r14
movq 0x8c8(%r15), %rax
addq %r14, %rax
cmpq $0x10001, %rax          # imm = 0x10001
movq %rbx, 0x10(%rsp)
jb 0xa6b9
cmpq $0x200, %rcx            # imm = 0x200
jb 0xa69a
movq %r14, %rdi
callq 0x9480
movq %rax, %r14
jmp 0xa6ce
movl $0x10000, %edi          # imm = 0x10000
callq 0x9480
movq %rax, 0x8d0(%r15)
movq $0x0, 0x8c8(%r15)
movq %r14, %rax
movq 0x8d0(%r15), %r14
addq 0x8c8(%r15), %r14
movq %rax, 0x8c8(%r15)
movabsq $0x400000000000000a, %r13 # imm = 0x400000000000000A
movq %r14, %rdi
movq (%rsp), %rbx
movq %rbx, %rsi
movq 0x10(%rsp), %rbp
movq %rbp, %rdx
callq 0x93e0
movq %r13, %rdx
movq %rbp, %r13
movb $0x0, (%r14,%rbp)
leaq 0x1000009(%rdx), %rax
movq %rax, 0x30(%r12)
movq %rbp, 0x38(%r12)
movq %r14, 0x40(%r12)
movq 0x20(%rsp), %r14
movq %r14, 0x48(%r12)
movq %rdx, (%r12)
movq 0x28(%rsp), %rcx
movq %rcx, 0x8(%r12)
movq 0x128(%r15), %rax
movq %rax, 0x10(%r12)
leaq 0x90(%r12), %rax
movq %rax, 0x50(%r12)
movq 0x128(%r15), %rax
movq %rax, 0xb0(%r12)
movq 0x110(%r15), %rax
movq %rax, 0x18(%r12)
xorl %eax, %eax
movq %rax, 0x20(%r12)
incl 0x28(%r12)
movl %eax, 0x2c(%r12)
movq 0x20(%rcx), %rcx
movl %eax, 0xc(%rcx)
movl %eax, 0x28(%r12)
movq 0x8(%r12), %rcx
movq 0x20(%rcx), %rcx
movq %rax, 0x10(%rcx)
cmpq $0x2, %rbp
jl 0xa931
cmpb $0x3a, (%rbx)
je 0xa7a1
cmpb $0x3a, -0x1(%rbx,%r13)
jne 0xa931
movabsq $0x80000001010000, %rax # imm = 0x80000001010000
orq %rax, (%r12)
xorl %esi, %esi
cmpb $0x3a, (%rbx)
sete %sil
addq %rbx, %rsi
leaq -0x1(%r13), %rbp
movq $0x0, 0x8(%rsp)
cmpq $0x9, %r13
movq %rsi, (%rsp)
jg 0xa7e1
leaq 0x8(%rsp), %rdi
movq %rbp, %rdx
callq 0x93e0
jmp 0xa81a
movq (%rsi), %r13
movq %r13, 0x8(%rsp)
leaq 0x30(%rsp), %r14
movq $0x0, (%r14)
addq $0x8, %rsi
cmpq $0x10, %rbp
movl $0x10, %edx
cmovlq %rbp, %rdx
addq $-0x8, %rdx
movq %r14, %rdi
callq 0x93e0
addq (%r14), %r13
movq %r13, 0x8(%rsp)
movq 0x8(%rsp), %r14
movabsq $-0x7fecfd2d94c4151b, %rcx # imm = 0x801302D26B3BEAE5
movq %r14, %rax
mulq %rcx
shrq $0xe, %rdx
imull $0x7fed, %edx, %eax     # imm = 0x7FED
movl %r14d, %ebx
subl %eax, %ebx
movq 0x148(%r15), %rax
movq 0x10(%rax), %rax
movq (%rax,%rbx,8), %r13
movb (%r13), %al
cmpq $0x9, 0x10(%rsp)
jg 0xa87d
cmpb $0x1, %al
jne 0xa8b3
cmpq 0x18(%r13), %r14
jne 0xa870
movl 0x2c(%r13), %eax
cmpq %rax, %rbp
je 0xa99a
movq 0x10(%r13), %r13
cmpb $0x1, (%r13)
je 0xa85d
jmp 0xa8b3
cmpb $0x1, %al
jne 0xa8b3
cmpq 0x18(%r13), %r14
jne 0xa8a8
movl 0x2c(%r13), %eax
cmpq %rax, %rbp
jne 0xa8a8
movq 0x20(%r13), %rsi
movq (%rsp), %rdi
movq %rbp, %rdx
callq 0x9253a
testb %al, %al
jne 0xa99a
movq 0x10(%r13), %r13
cmpb $0x1, (%r13)
je 0xa881
movq %r15, %rdi
movq (%rsp), %rsi
movq %rbp, %rdx
movq %r14, %rcx
movl %ebx, %r8d
callq 0xa5ef
movq 0x8(%r12), %rcx
movq 0x20(%rcx), %rcx
movq %rax, 0x18(%rcx)
movq (%rax), %rcx
movq %rcx, %rdx
orq $0x4000000, %rdx        # imm = 0x4000000
movq %rdx, (%rax)
btl $0x1d, %ecx
movq 0x20(%rsp), %r14
movq 0x10(%rsp), %r13
jae 0xa906
testb $0x40, 0x7(%rax)
jne 0xa906
movq %r15, %rdi
movq %rax, %rsi
callq 0xae85
movq %r15, %rdi
callq 0xfa3b
movabsq $0x400000000000000a, %rdx # imm = 0x400000000000000A
leaq 0x16(%rdx), %rcx
movq %rcx, (%rax)
movq %r12, 0x8(%rax)
movq %r12, 0x10(%rax)
movq %rax, 0x10(%r12)
movq %rax, 0x18(%r12)
leaq 0x60(%r12), %rax
addq $0xfffff7, %rdx         # imm = 0xFFFFF7
movq %rdx, 0x60(%r12)
movq %r12, 0x68(%r12)
movq 0x148(%r15), %rcx
movq 0x10(%rcx), %rcx
movl 0x1c(%rsp), %edx
movq (%rcx,%rdx,8), %rcx
movq %rcx, 0x70(%r12)
movq 0x148(%r15), %rcx
movq 0x10(%rcx), %rcx
movq %rax, (%rcx,%rdx,8)
movq %r14, 0x78(%r12)
movl %r13d, 0x8c(%r12)
movq 0x40(%r12), %rax
movq %rax, 0x80(%r12)
movq %r12, %rax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x8(%r13), %rax
jmp 0xa8c8