// File: /workspace/github_c_makefile_star2_O1/BernardTatin[P]s7sh/s7.c
// Function: float_optimize
static bool float_optimize(s7_scheme *sc, s7_pointer expr)
                {
                    s7_pointer car_x, head;
#if (WITH_GMP)
                    return(return_false(sc, car_x, __func__, __LINE__));
#endif
                    car_x = car(expr);
                    if (!is_pair(car_x)) /* wrap constants/symbols */
                        return(opt_float_not_pair(sc, car_x));

                    head = car(car_x);
                    if (is_symbol(head))
                    {
                        /* get func, check sig, check all args */
                        s7_pointer s_func;
                        s7_int len;

                        len = s7_list_length(sc, car_x);
                        /* need to check int_opt here */

                        if ((is_syntactic_symbol(head)) ||
                                (is_syntactic_pair(car_x)))
                            return(d_syntax_ok(sc, car_x, len));

                        if ((is_global(head)) ||
                                ((is_slot(global_slot(head))) &&
                                 (symbol_to_slot(sc, head) == global_slot(head))))
                            s_func = slot_value(global_slot(head));
                        else return(d_implicit_ok(sc, car_x, len));

                        if (is_c_function(s_func))
                        {
                            opt_info *opc;
                            opc = alloc_opo(sc, car_x);
                            switch (len)
                            {
                                case 1:
                                    if (d_ok(sc, opc, s_func))
                                        return(true);
                                    break;

                                case 2:                            /* (f v) or (f d): (env e) or (abs x) */
                                    if ((d_d_ok(sc, opc, s_func, car_x)) ||
                                            (d_v_ok(sc, opc, s_func, car_x)) ||
                                            (d_p_ok(sc, opc, s_func, car_x)))
                                        return(true);
                                    break;

                                case 3:
                                    if ((d_dd_ok(sc, opc, s_func, car_x)) ||
                                            (d_vd_ok(sc, opc, s_func, car_x)) ||
                                            (d_id_ok(sc, opc, s_func, car_x)) ||
                                            (d_pd_ok(sc, opc, s_func, car_x)) ||
                                            (d_ip_ok(sc, opc, s_func, car_x)) ||
                                            (d_7pi_ok(sc, opc, s_func, car_x)))
                                        return(true);
                                    break;

                                case 4:
                                    if ((d_ddd_ok(sc, opc, s_func, car_x)) ||
                                            (d_7pid_ok(sc, opc, s_func, car_x)) ||
                                            (d_vid_ok(sc, opc, s_func, car_x)) ||
                                            (d_vdd_ok(sc, opc, s_func, car_x)) ||
                                            (d_7pii_ok(sc, opc, s_func, car_x)))
                                        return(true);

                                    break;

                                case 5:
                                    if ((d_dddd_ok(sc, opc, s_func, car_x)) ||
                                            (d_7piid_ok(sc, opc, s_func, car_x)))
                                        return(true);
                                    break;

                                default:
                                    if (d_add_any_ok(sc, opc, car_x, len))
                                        return(true);
                                    break;
                            }
                        }
                        else
                        {
                            if (is_macro(s_func))
                            {
                                if (!no_cell_opt(expr))
                                    return(float_optimize(sc, set_plist_1(sc, s7_macroexpand(sc, s_func, cdar(expr))))); /* is this use of plist safe? */
                            }}}
                    return(return_false(sc, car_x, __func__, __LINE__));
                }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x8(%rsi), %r14
movzbl (%r14), %eax
cmpq $0x1, %rax
jne 0x47c67
movq 0x8(%r14), %r12
cmpb $0xa, (%r12)
jne 0x48088
movq %rsi, %r13
movq %rbx, %rdi
movq %r14, %rsi
callq 0x3c299
movq %rax, %r15
cmpw $0x20a, (%r12)          # imm = 0x20A
je 0x47beb
cmpw $0x201, (%r14)          # imm = 0x201
jne 0x47d63
cmpl $0x3, %r15d
jne 0x48080
cmpq 0x18d8(%rbx), %r12
jne 0x48080
movslq 0x2258(%rbx), %rax
cmpq $0x100, %rax            # imm = 0x100
jge 0x484dd
leal 0x1(%rax), %ecx
movl %ecx, 0x2258(%rbx)
movq 0x2260(%rbx,%rax,8), %r15
movq $0x0, 0x38(%r15)
movq 0x10(%r14), %rax
movq 0x8(%rax), %rsi
movzbl (%rsi), %ecx
movb $0x1, %r12b
cmpl $0x1, %ecx
je 0x47f6e
cmpl $0xa, %ecx
jne 0x48077
movzwl 0x2(%rsi), %eax
testl $0x104, %eax            # imm = 0x104
je 0x47ffb
xorl %ebp, %ebp
xorl %r12d, %r12d
jmp 0x48077
leaq 0x10ad42(%rip), %rcx    # 0x1529b0
cmpb $0x1, (%rax,%rcx)
jne 0x47cd8
cmpl $0xc, %eax
je 0x48088
movslq 0x2258(%rbx), %rax
cmpq $0x100, %rax            # imm = 0x100
jge 0x484dd
leal 0x1(%rax), %ecx
movl %ecx, 0x2258(%rbx)
movq 0x2260(%rbx,%rax,8), %r15
movq $0x0, 0x38(%r15)
leaq 0xcb291(%rip), %rdx     # 0x112f41
movq %rbx, %rdi
movq %r14, %rsi
callq 0xe212
movsd %xmm0, 0x8(%r15)
leaq 0x5e128(%rip), %rax     # 0xa5df0
movq %rax, (%r15)
movq $0x2, 0x60(%r15)
jmp 0x47d5b
movq %rbx, %rdi
movq %r14, %rsi
callq 0xa5df6
testq %rax, %rax
je 0x48088
movq 0x10(%rax), %rcx
cmpb $0xc, (%rcx)
je 0x48088
movslq 0x2258(%rbx), %rcx
cmpq $0x100, %rcx            # imm = 0x100
jge 0x484dd
leal 0x1(%rcx), %edx
movl %edx, 0x2258(%rbx)
movq 0x2260(%rbx,%rcx,8), %rcx
movq $0x0, 0x38(%rcx)
movq %rax, 0x8(%rcx)
movq 0x10(%rax), %rax
cmpb $0xd, (%rax)
leaq 0x5e144(%rip), %rax     # 0xa5e7c
leaq 0x5e14b(%rip), %rdx     # 0xa5e8a
cmoveq %rax, %rdx
movq %rdx, (%rcx)
movabsq $0x100000002, %rax      # imm = 0x100000002
movq %rax, 0x60(%rcx)
movl $0x7, 0x70(%rcx)
movb $0x1, %bpl
jmp 0x4808a
testb $0x1, 0x2(%r12)
jne 0x47ea2
movq 0x10(%r12), %rbp
cmpb $0x20, (%rbp)
jne 0x47d8e
movq %rbx, %rdi
movq %r12, %rsi
callq 0xccb2
cmpq %rbp, %rax
je 0x47ea2
movq 0x8(%rbx), %rax
movq 0x18(%rax), %rdx
movq 0x20(%r12), %rcx
cmpq %rcx, %rdx
je 0x47db8
jle 0x47daf
movq 0x10(%rax), %rax
movq 0x18(%rax), %rdx
cmpq %rdx, %rcx
jl 0x47da2
cmpq %rcx, %rdx
jne 0x47fbc
movq 0x18(%r12), %rbp
cmpb $0x20, (%rbp)
jne 0x48080
movq 0x10(%rbp), %rax
cmpb $0x17, (%rax)
jne 0x483d2
cmpl $0x3, %r15d
je 0x48281
cmpl $0x2, %r15d
jne 0x483d2
movq 0x18(%rax), %rcx
movq 0x20(%rcx), %rcx
testq %rcx, %rcx
je 0x47e00
cmpq $0x1, 0x10(%rcx)
jne 0x48277
movslq 0x2258(%rbx), %rax
cmpq $0x100, %rax            # imm = 0x100
jge 0x484dd
leal 0x1(%rax), %ecx
movl %ecx, 0x2258(%rbx)
movq 0x2260(%rbx,%rax,8), %r15
movq $0x0, 0x38(%r15)
movq %rbp, 0x8(%r15)
leaq 0x3f21d(%rip), %rax     # 0x87054
movq %rax, 0x18(%r15)
movq 0x10(%r14), %r14
movq 0x8(%r14), %rsi
movq %rbx, %rdi
callq 0xa639f
testq %rax, %rax
je 0x4834e
leaq 0x5f2a0(%rip), %rcx     # 0xa70fb
movq %rcx, (%r15)
movq %rax, 0x10(%r15)
testb $0x4, 0x3(%rax)
je 0x47e85
movq 0x10(%rax), %rax
movq 0x10(%rax), %rax
movq 0x10(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jg 0x47e85
leaq 0x5f3a3(%rip), %rax     # 0xa7224
movq %rax, 0x18(%r15)
movabsq $0x200000004, %rax      # imm = 0x200000004
movq %rax, 0x60(%r15)
movabsq $0x100000005, %rax      # imm = 0x100000005
jmp 0x4849a
movq 0x10(%r12), %rax
movq 0x10(%rax), %r12
movb (%r12), %cl
cmpb $0x2f, %cl
jbe 0x47f25
movslq 0x2258(%rbx), %rax
cmpq $0x100, %rax            # imm = 0x100
jge 0x484dd
leal 0x1(%rax), %ecx
movl %ecx, 0x2258(%rbx)
movq 0x2260(%rbx,%rax,8), %r13
movq $0x0, 0x38(%r13)
movq %r15, %rax
decq %rax
cmpq $0x4, %rax
ja 0x48230
leaq 0xc8981(%rip), %rcx     # 0x110878
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r12, %rdi
callq 0x472d5
testq %rax, %rax
je 0x48249
leaq 0x7b0aa(%rip), %rcx     # 0xc2fc2
movq %rcx, (%r13)
movq %rax, 0x8(%r13)
jmp 0x4849e
movb $0x1, %al
cmpb $0x2a, %cl
jne 0x4824b
testb $0x4, 0x3(%r13)
movb $0x1, %bpl
jne 0x48084
movq 0x10(%r14), %rdx
movq %rbx, %rdi
movq %r12, %rsi
callq 0xa5d36
movq 0x700(%rbx), %rcx
movq %rax, 0x8(%rcx)
movq 0x700(%rbx), %rsi
movq %rbx, %rdi
callq 0x47b96
movl %eax, %ebp
jmp 0x484a1
movq 0x8(%rsi), %rdx
cmpb $0xa, (%rdx)
jne 0x48077
movq 0x10(%rsi), %rcx
cmpb $0x1, (%rcx)
jne 0x48077
movq 0x10(%rcx), %r8
movq 0x110(%rbx), %rsi
cmpq %rsi, %r8
je 0x4825b
cmpq %rsi, 0x10(%r8)
jne 0x48077
movq 0x10(%rax), %r9
movq %rbx, %rdi
movq %r15, %rsi
callq 0xa5f60
movl %eax, %ebp
jmp 0x47c5f
cmpb $0x1c, (%rax)
jne 0x47dbd
movq 0x8(%rax), %rcx
testq %rcx, %rcx
sete %sil
je 0x47fde
cmpq %r12, 0x8(%rcx)
je 0x47fe1
movq 0x18(%rcx), %rcx
jmp 0x47fc9
movq %rdx, %rcx
testb %sil, %sil
je 0x48253
movq 0x10(%rax), %rax
cmpb $0x1c, (%rax)
movq %rcx, %rdx
je 0x47fc5
jmp 0x47dbd
movq %rbx, %rdi
callq 0xccb2
cmpb $0x20, (%rax)
jne 0x48077
testb $0x1, 0x3(%rax)
jne 0x48077
movq %rax, 0x8(%r15)
movq 0x10(%r14), %rcx
movq 0x10(%rcx), %rsi
movq 0x8(%rsi), %rcx
cmpb $0xb, (%rcx)
je 0x48077
movq 0x10(%rax), %rax
cmpb $0xd, (%rax)
jne 0x48077
movq %rbx, %rdi
callq 0x47b96
testb %al, %al
je 0x48077
movq 0x8(%r15), %rax
movq 0x10(%rax), %rax
btl $0x1a, (%rax)
leaq 0x5de95(%rip), %rax     # 0xa5ee0
leaq 0x5de5c(%rip), %rcx     # 0xa5eae
cmovaeq %rax, %rcx
movq %rcx, (%r15)
movabsq $0x100000002, %rax      # imm = 0x100000002
movq %rax, 0x60(%r15)
movl $0x7, 0x70(%r15)
movb $0x1, %bpl
jmp 0x47c5f
testb %r12b, %r12b
je 0x484a1
xorl %eax, %eax
xorl %ebp, %ebp
testb %al, %al
je 0x4808a
xorl %ebp, %ebp
andb $0x1, %bpl
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0xa5b2c
movb $0x1, %bpl
testb %al, %al
jne 0x484a1
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0xa5bd1
jmp 0x48227
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0xa4034
movb $0x1, %bpl
testb %al, %al
jne 0x484a1
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0xa485f
testb %al, %al
jne 0x484a1
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0xa4ad1
testb %al, %al
jne 0x484a1
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0xa4ca3
testb %al, %al
jne 0x484a1
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0xa4dfa
testb %al, %al
jne 0x484a1
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0xa4efd
jmp 0x48227
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0xa51b9
movb $0x1, %bpl
testb %al, %al
jne 0x484a1
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0xa547c
testb %al, %al
jne 0x484a1
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0xa56a0
testb %al, %al
jne 0x484a1
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0xa5819
testb %al, %al
jne 0x484a1
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0xa58ed
jmp 0x48227
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0xa3d95
movb $0x1, %bpl
testb %al, %al
jne 0x484a1
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0xa3ef2
testb %al, %al
jne 0x484a1
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0xa3f8f
testb %al, %al
je 0x48249
jmp 0x484a1
movq %rbx, %rdi
movq %r13, %rsi
movq %r14, %rdx
movl %r15d, %ecx
callq 0xa5c4d
testb %al, %al
jne 0x4849e
movb $0x1, %al
movb $0x1, %bpl
jmp 0x48084
movq %rcx, %rbp
jmp 0x47dbd
movq 0x10(%rax), %r9
xorl %r12d, %r12d
movq %rbx, %rdi
movq %r15, %rsi
xorl %r8d, %r8d
callq 0xa5f60
movl %eax, %ebp
jmp 0x48077
cmpl $0x3, %r15d
jne 0x483d2
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
testq %rax, %rax
je 0x483d2
cmpq $0x2, 0x10(%rax)
jne 0x483d2
movslq 0x2258(%rbx), %rax
cmpq $0x100, %rax            # imm = 0x100
jge 0x484dd
leal 0x1(%rax), %ecx
movl %ecx, 0x2258(%rbx)
movq 0x2260(%rbx,%rax,8), %r12
movq $0x0, 0x38(%r12)
movq %rbp, 0x8(%r12)
leaq 0x3ee18(%rip), %rax     # 0x870ee
movq %rax, 0x20(%r12)
movq 0x10(%r14), %rax
movq 0x8(%rax), %rsi
movq %rbx, %rdi
callq 0xa639f
testq %rax, %rax
je 0x48386
movq %rax, 0x10(%r12)
movq 0x10(%r14), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rsi
movq %rbx, %rdi
callq 0xa639f
testq %rax, %rax
je 0x48386
movq %rax, 0x18(%r12)
leaq 0x7ac04(%rip), %rax     # 0xc2f22
movq %rax, (%r12)
movabsq $0x300000005, %rax      # imm = 0x300000005
movq %rax, 0x60(%r12)
movabsq $0x100000005, %rax      # imm = 0x100000005
movq %rax, 0x70(%r12)
movl $0x1, 0x78(%r12)
jmp 0x4849e
movq %rbx, %rdi
movq %r14, %rsi
callq 0xa66f0
testb %al, %al
je 0x48080
leaq 0x7ab74(%rip), %rax     # 0xc2edc
movq %rax, (%r15)
movabsq $0x100000004, %rax      # imm = 0x100000004
movq %rax, 0x60(%r15)
movl $0x5, 0x70(%r15)
jmp 0x4849e
movq 0x10(%r14), %rsi
movq %rbx, %rdi
callq 0xa66f0
testb %al, %al
je 0x483d2
movq 0x10(%r14), %rax
movq 0x10(%rax), %rsi
movq %rbx, %rdi
callq 0xa66f0
testb %al, %al
je 0x483d2
leaq 0x7ab9f(%rip), %rax     # 0xc2f50
movq %rax, (%r12)
movabsq $0x100000005, %rax      # imm = 0x100000005
movq %rax, 0x60(%r12)
movl $0x5, 0x70(%r12)
jmp 0x4849e
xorl %eax, %eax
cmpl $0x2, %r15d
jne 0x48082
movq %rbp, %r12
movq 0x10(%rbp), %rcx
cmpb $0x14, (%rcx)
movl $0x0, %ebp
jne 0x48084
movq 0x8d8(%rbx), %rax
movq 0x8(%rcx), %rcx
movq (%rax,%rcx,8), %rax
movq 0x18(%rax), %rdi
cmpb $0x30, (%rdi)
jb 0x48080
callq 0x4781d
testq %rax, %rax
je 0x48080
movslq 0x2258(%rbx), %rcx
cmpq $0x100, %rcx            # imm = 0x100
jge 0x484dd
leal 0x1(%rcx), %edx
movl %edx, 0x2258(%rbx)
movq 0x2260(%rbx,%rcx,8), %r15
movq $0x0, 0x38(%r15)
movq %r12, 0x8(%r15)
movq 0x10(%r12), %rcx
movq 0x10(%rcx), %rcx
movq %rcx, 0x20(%r15)
movq %rax, 0x18(%r15)
movq 0x10(%r14), %r14
movq 0x8(%r14), %rsi
movq %rbx, %rdi
callq 0xa639f
testq %rax, %rax
je 0x484a8
leaq 0x5ec80(%rip), %rcx     # 0xa70fb
movq %rcx, (%r15)
movq %rax, 0x10(%r15)
movabsq $0x200000005, %rax      # imm = 0x200000005
movq %rax, 0x60(%r15)
movabsq $0x100000003, %rax      # imm = 0x100000003
movq %rax, 0x70(%r15)
movb $0x1, %bpl
xorl %eax, %eax
jmp 0x48084
movq %rbx, %rdi
movq %r14, %rsi
callq 0xa66f0
testb %al, %al
je 0x48080
leaq 0x7aa1a(%rip), %rax     # 0xc2edc
movq %rax, (%r15)
movabsq $0x100000005, %rax      # imm = 0x100000005
movq %rax, 0x60(%r15)
movl $0x3, 0x70(%r15)
jmp 0x4849e
addq $0x2190, %rbx           # imm = 0x2190
movq %rbx, %rdi
movl $0x1, %esi
callq 0x9530