// File: /workspace/github_c_makefile_star2_O3/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 $0x48, %rsp
movl %r8d, 0x14(%rsp)
movq %rcx, 0x28(%rsp)
movq %rdx, %r14
movq %rsi, %rbp
movq %rdi, %r15
movl 0x7f8(%rdi), %ecx
cmpl $0x2e00, %ecx           # imm = 0x2E00
jne 0x9676
movl $0x2e00, %edi           # imm = 0x2E00
callq 0x8480
movq %rax, 0x828(%r15)
xorl %ecx, %ecx
jmp 0x967d
movq 0x828(%r15), %rax
movl %ecx, %edx
leaq (%rax,%rdx), %r12
addl $0xb8, %ecx
movl %ecx, 0x7f8(%r15)
addq %rdx, %rax
addq $0x30, %rax
movq %rax, 0x8(%rsp)
movq %r14, 0x30(%rsp)
leaq 0x8(%r14), %rax
movq %rax, %r13
andq $-0x8, %r13
movq 0x8c8(%r15), %r14
leaq (%r14,%r13), %rcx
cmpq $0x10000, %rcx          # imm = 0x10000
jbe 0x96d5
cmpq $0x200, %rax            # imm = 0x200
jb 0x96de
movq %r13, %rdi
callq 0x8480
movq %rax, %r14
jmp 0x96ff
movq 0x8d0(%r15), %rax
jmp 0x96f5
movl $0x10000, %edi          # imm = 0x10000
callq 0x8480
movq %rax, 0x8d0(%r15)
xorl %r14d, %r14d
movq %r13, %rcx
addq %rax, %r14
movq %rcx, 0x8c8(%r15)
movabsq $0x400000000000000a, %r13 # imm = 0x400000000000000A
movq %r14, %rdi
movq %rbp, %rsi
movq 0x30(%rsp), %rbx
movq %rbx, %rdx
callq 0x83e0
movb $0x0, (%r14,%rbx)
leaq 0x1000009(%r13), %rax
movq %rax, 0x30(%r12)
movq %rbx, 0x38(%r12)
movq %r14, 0x40(%r12)
movq 0x28(%rsp), %rsi
movq %rsi, 0x48(%r12)
movq %r13, (%r12)
movq 0x8(%rsp), %rax
movq %rax, 0x8(%r12)
movq 0x128(%r15), %rax
movq %rax, 0x10(%r12)
leaq 0x90(%r12), %rcx
movq %rcx, 0x50(%r12)
movq 0x128(%r15), %rax
movq %rax, 0xb0(%r12)
movq 0x110(%r15), %rax
movq %rax, 0x18(%r12)
xorps %xmm0, %xmm0
movups %xmm0, 0x20(%r12)
movl $0x0, 0x9c(%r12)
movq $0x0, 0xa0(%r12)
cmpq $0x2, %rbx
jl 0x9995
cmpb $0x3a, (%rbp)
je 0x97bf
cmpb $0x3a, -0x1(%rbp,%rbx)
jne 0x9995
movq %rcx, 0x20(%rsp)
movabsq $0x408000000101000a, %rax # imm = 0x408000000101000A
movq %rax, (%r12)
xorl %esi, %esi
cmpb $0x3a, (%rbp)
sete %sil
addq %rbp, %rsi
leaq -0x1(%rbx), %rbp
movq $0x0, 0x38(%rsp)
cmpq $0x9, %rbx
movq %rsi, 0x8(%rsp)
ja 0x986b
leaq 0x38(%rsp), %r14
movq %r14, %rdi
movq %rbp, %rdx
callq 0x83e0
movq (%r14), %r14
movabsq $-0x7fecfd2d94c4151b, %rcx # imm = 0x801302D26B3BEAE5
movq %r14, %rax
mulq %rcx
shrq $0xe, %rdx
imulq $0x7fed, %rdx, %rax     # imm = 0x7FED
movq %r14, %r8
subq %rax, %r8
movq 0x148(%r15), %rax
movq 0x10(%rax), %rax
movl %r8d, %ecx
movq (%rax,%rcx,8), %rax
cmpb $0x1, (%rax)
jne 0x9910
movq 0x8(%rsp), %rdx
cmpq 0x18(%rax), %r14
jne 0x985d
movl 0x2c(%rax), %ecx
cmpq %rcx, %rbp
je 0x99fe
movq 0x10(%rax), %rax
cmpb $0x1, (%rax)
je 0x984b
jmp 0x9921
movq (%rsi), %r14
leaq 0x40(%rsp), %rbx
movq $0x0, (%rbx)
addq $0x8, %rsi
cmpq $0x10, %rbp
movl $0x10, %edx
cmovbq %rbp, %rdx
addq $-0x8, %rdx
movq %rbx, %rdi
callq 0x83e0
addq (%rbx), %r14
movabsq $-0x7fecfd2d94c4151b, %rcx # imm = 0x801302D26B3BEAE5
movq %r14, %rax
mulq %rcx
shrq $0xe, %rdx
imulq $0x7fed, %rdx, %rax     # imm = 0x7FED
movq %r14, %rcx
subq %rax, %rcx
movq 0x148(%r15), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x18(%rsp)
movl %ecx, %ecx
movq (%rax,%rcx,8), %rbx
cmpb $0x1, (%rbx)
jne 0x9917
movq 0x8(%rsp), %rdx
cmpq 0x18(%rbx), %r14
jne 0x9905
movl 0x2c(%rbx), %eax
cmpq %rax, %rbp
jne 0x9905
movq 0x20(%rbx), %rsi
movq %rdx, %rdi
movq %rbp, %rdx
callq 0x8c146
movq 0x8(%rsp), %rdx
testb %al, %al
jne 0x9a04
movq 0x10(%rbx), %rbx
cmpb $0x1, (%rbx)
je 0x98db
jmp 0x991c
movq 0x8(%rsp), %rdx
jmp 0x9921
movq 0x8(%rsp), %rdx
movq 0x18(%rsp), %r8
movq %r15, %rdi
movq %rdx, %rsi
movq %rbp, %rdx
movq %r14, %rcx
callq 0x9632
movq 0x8(%r12), %rcx
movq 0x20(%rcx), %rcx
movq %rax, 0x18(%rcx)
movq (%rax), %rcx
leaq 0x1ffffff6(%r13), %rdx
andq %rcx, %rdx
orq $0x4000000, %rcx        # imm = 0x4000000
movq %rcx, (%rax)
cmpq $0x20000000, %rdx       # imm = 0x20000000
movq 0x30(%rsp), %rbx
jne 0x996f
movq %r15, %rdi
movq %rax, %rsi
callq 0xa04c
movq %r15, %rdi
callq 0xec9f
leaq 0x16(%r13), %rcx
movq %rcx, (%rax)
movq %r12, 0x8(%rax)
movq %r12, 0x10(%rax)
movq %rax, 0x10(%r12)
movq %rax, 0x18(%r12)
movq 0x28(%rsp), %rsi
leaq 0x60(%r12), %rax
addq $0xfffff7, %r13         # imm = 0xFFFFF7
movq %r13, 0x60(%r12)
movq %r12, 0x68(%r12)
movq 0x148(%r15), %rcx
movq 0x10(%rcx), %rcx
movl 0x14(%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 %rsi, 0x78(%r12)
movl %ebx, 0x8c(%r12)
movq 0x40(%r12), %rax
movq %rax, 0x80(%r12)
movq %r12, %rax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x8(%rax), %rax
jmp 0x9a08
movq 0x8(%rbx), %rax
movq 0x20(%rsp), %rcx
jmp 0x993b