// File: /workspace/github_c_makefile_star2_O3/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 0x450b1
movq 0x8(%r14), %r15
cmpb $0xa, (%r15)
jne 0x45134
movq %rsi, %rbp
movq %rbx, %rdi
movq %r14, %rsi
callq 0x39d0d
movq %rax, %r8
cmpw $0x20a, (%r15)          # imm = 0x20A
je 0x44fb4
cmpw $0x201, (%r14)          # imm = 0x201
jne 0x451ae
cmpl $0x3, %r8d
jne 0x45134
cmpq 0x18d8(%rbx), %r15
jne 0x45134
movslq 0x2258(%rbx), %rax
cmpq $0x100, %rax            # imm = 0x100
jge 0x45862
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
cmpl $0x1, %ecx
je 0x453a9
cmpl $0xa, %ecx
jne 0x45134
movzwl 0x2(%rsi), %eax
testl $0x104, %eax            # imm = 0x104
jne 0x45134
movq 0x8(%rbx), %rdi
callq 0xbe33
cmpb $0x20, (%rax)
jne 0x45134
testb $0x1, 0x3(%rax)
jne 0x45134
movq %rax, 0x8(%r15)
movq 0x10(%r14), %rcx
movq 0x10(%rcx), %rsi
movq 0x8(%rsi), %rcx
cmpb $0xb, (%rcx)
je 0x45134
movq 0x10(%rax), %rax
cmpb $0xd, (%rax)
jne 0x45134
movq %rbx, %rdi
callq 0x44f61
testb %al, %al
je 0x45134
movq 0x8(%r15), %rax
movq 0x10(%rax), %rax
btl $0x1a, (%rax)
leaq 0x5a3a7(%rip), %rax     # 0x9f42f
leaq 0x5a36e(%rip), %rcx     # 0x9f3fd
cmovaeq %rax, %rcx
movq %rcx, (%r15)
movabsq $0x100000002, %rax      # imm = 0x100000002
movq %rax, 0x60(%r15)
movl $0x7, 0x70(%r15)
jmp 0x4519a
leaq 0x1058f8(%rip), %rcx    # 0x14a9b0
cmpb $0x1, (%rax,%rcx)
jne 0x4511b
cmpl $0xc, %eax
je 0x45134
movslq 0x2258(%rbx), %rax
cmpq $0x100, %rax            # imm = 0x100
jge 0x45862
leal 0x1(%rax), %ecx
movl %ecx, 0x2258(%rbx)
movq 0x2260(%rbx,%rax,8), %r15
movq $0x0, 0x38(%r15)
leaq 0xc4f5b(%rip), %rdx     # 0x10a051
movq %rbx, %rdi
movq %r14, %rsi
callq 0xd498
movsd %xmm0, 0x8(%r15)
leaq 0x5a243(%rip), %rax     # 0x9f351
movq %rax, (%r15)
movq $0x2, 0x60(%r15)
jmp 0x4519a
movq %rbx, %rdi
movq %r14, %rsi
callq 0x9f357
testq %rax, %rax
je 0x45134
movq 0x10(%rax), %rcx
cmpb $0xc, (%rcx)
jne 0x45138
xorl %ebp, %ebp
jmp 0x4519d
movslq 0x2258(%rbx), %rcx
cmpq $0x100, %rcx            # imm = 0x100
jge 0x45862
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 0x5a254(%rip), %rax     # 0x9f3cb
leaq 0x5a25b(%rip), %rdx     # 0x9f3d9
cmoveq %rax, %rdx
movq %rdx, (%rcx)
movabsq $0x100000002, %rax      # imm = 0x100000002
movq %rax, 0x60(%rcx)
movl $0x7, 0x70(%rcx)
movb $0x1, %bpl
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x10(%r15), %r13
testb $0x1, 0x2(%r15)
jne 0x45301
cmpb $0x20, (%r13)
movq 0x8(%rbx), %r12
jne 0x451e4
movq %r12, %rdi
movq %r15, %rsi
movq %r8, (%rsp)
callq 0xbe33
movq (%rsp), %r8
cmpq %r13, %rax
je 0x45301
movq 0x18(%r12), %rdx
movq 0x20(%r15), %rcx
movl $0x18, %eax
cmpq %rcx, %rdx
je 0x45211
jle 0x45208
movq 0x10(%r12), %r12
movq 0x18(%r12), %rdx
cmpq %rdx, %rcx
jl 0x451f9
cmpq %rcx, %rdx
jne 0x453f0
movq (%r15,%rax), %r13
cmpb $0x20, (%r13)
jne 0x45134
movq 0x10(%r13), %rax
movb (%rax), %cl
cmpb $0x17, %cl
jne 0x45421
cmpl $0x3, %r8d
je 0x45627
cmpl $0x2, %r8d
jne 0x45134
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
testq %rax, %rax
je 0x4525b
cmpq $0x1, 0x10(%rax)
jne 0x45134
movslq 0x2258(%rbx), %rax
cmpq $0x100, %rax            # imm = 0x100
jge 0x45862
leal 0x1(%rax), %ecx
movl %ecx, 0x2258(%rbx)
movq 0x2260(%rbx,%rax,8), %r15
movq $0x0, 0x38(%r15)
movq %r13, 0x8(%r15)
leaq 0x3b8ff(%rip), %rax     # 0x80b91
movq %rax, 0x18(%r15)
movq 0x10(%r14), %r14
movq 0x8(%r14), %rsi
movq %rbx, %rdi
callq 0x9f8a2
testq %rax, %rax
je 0x45711
leaq 0x5b2c3(%rip), %rcx     # 0xa0579
movq %rcx, (%r15)
movq %rax, 0x10(%r15)
testb $0x4, 0x3(%rax)
je 0x452e0
movq 0x10(%rax), %rax
movq 0x10(%rax), %rax
movq 0x10(%r13), %rcx
cmpq 0x8(%rcx), %rax
jg 0x452e0
leaq 0x5b3c6(%rip), %rax     # 0xa06a2
movq %rax, 0x18(%r15)
movabsq $0x200000004, %rax      # imm = 0x200000004
movq %rax, 0x60(%r15)
movabsq $0x100000005, %rax      # imm = 0x100000005
movq %rax, 0x70(%r15)
jmp 0x4519a
movq 0x10(%r13), %r15
movb (%r15), %al
cmpb $0x2f, %al
jbe 0x45369
movslq 0x2258(%rbx), %rax
cmpq $0x100, %rax            # imm = 0x100
jge 0x45862
leal 0x1(%rax), %ecx
movl %ecx, 0x2258(%rbx)
movq 0x2260(%rbx,%rax,8), %r12
movq $0x0, 0x38(%r12)
movq %r8, %rax
decq %rax
cmpq $0x4, %rax
ja 0x45606
leaq 0xc24d8(%rip), %rcx     # 0x107828
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r12, %rdi
movq %r15, %rsi
callq 0x9d302
jmp 0x45617
cmpb $0x2a, %al
jne 0x45134
testb $0x4, 0x3(%rbp)
jne 0x45134
movq 0x10(%r14), %rdx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x9f297
movq 0x700(%rbx), %rcx
movq %rax, 0x8(%rcx)
movq 0x700(%rbx), %rsi
movq %rbx, %rdi
callq 0x44f61
jmp 0x4570a
movq 0x8(%rsi), %rdx
cmpb $0xa, (%rdx)
jne 0x45134
movq 0x10(%rsi), %rcx
cmpb $0x1, (%rcx)
jne 0x45134
movq 0x10(%rcx), %r8
movq 0x110(%rbx), %rsi
cmpq %rsi, %r8
je 0x456f8
cmpq %rsi, 0x10(%r8)
jne 0x45134
movq 0x10(%rax), %r9
movq %rbx, %rdi
movq %r15, %rsi
jmp 0x45705
movl $0x10, %eax
cmpb $0x1c, (%r12)
jne 0x45211
movq 0x8(%r12), %r13
testq %r13, %r13
je 0x4541a
cmpq %r15, 0x8(%r13)
je 0x45215
movq 0x18(%r13), %r13
jmp 0x45405
movq 0x10(%r12), %r12
jmp 0x453f5
xorl %ebp, %ebp
cmpl $0x2, %r8d
jne 0x4519d
cmpb $0x14, %cl
jne 0x4519d
movq 0x8d8(%rbx), %rcx
movq 0x8(%rax), %rax
movq (%rcx,%rax,8), %rax
movq 0x18(%rax), %rax
cmpb $0x30, (%rax)
jb 0x45134
movq 0x8(%rax), %rax
movq 0x20(%rax), %rax
testq %rax, %rax
je 0x45134
xorl %ebp, %ebp
cmpl $0x5, (%rax)
je 0x45749
movq 0x10(%rax), %rax
testq %rax, %rax
jne 0x45465
jmp 0x4519d
movq %rbx, %rdi
movq %r12, %rsi
movq %r15, %rdx
movq %r14, %rcx
callq 0x9f08b
movb $0x1, %bpl
testb %al, %al
jne 0x4519d
movq %rbx, %rdi
movq %r12, %rsi
movq %r15, %rdx
movq %r14, %rcx
callq 0x9f14e
jmp 0x4561a
movq %rbx, %rdi
movq %r12, %rsi
movq %r15, %rdx
movq %r14, %rcx
callq 0x9d616
movb $0x1, %bpl
testb %al, %al
jne 0x4519d
movq %rbx, %rdi
movq %r12, %rsi
movq %r15, %rdx
movq %r14, %rcx
callq 0x9dd58
testb %al, %al
jne 0x4519d
movq %rbx, %rdi
movq %r12, %rsi
movq %r15, %rdx
movq %r14, %rcx
callq 0x9dfa1
testb %al, %al
jne 0x4519d
movq %rbx, %rdi
movq %r12, %rsi
movq %r15, %rdx
movq %r14, %rcx
callq 0x9e196
testb %al, %al
jne 0x4519d
movq %rbx, %rdi
movq %r12, %rsi
movq %r15, %rdx
movq %r14, %rcx
callq 0x9e2f0
testb %al, %al
jne 0x4519d
movq %rbx, %rdi
movq %r12, %rsi
movq %r15, %rdx
movq %r14, %rcx
callq 0x9e402
jmp 0x4561a
movq %rbx, %rdi
movq %r12, %rsi
movq %r15, %rdx
movq %r14, %rcx
callq 0x9e6b7
movb $0x1, %bpl
testb %al, %al
jne 0x4519d
movq %rbx, %rdi
movq %r12, %rsi
movq %r15, %rdx
movq %r14, %rcx
callq 0x9e98d
testb %al, %al
jne 0x4519d
movq %rbx, %rdi
movq %r12, %rsi
movq %r15, %rdx
movq %r14, %rcx
callq 0x9ebca
testb %al, %al
jne 0x4519d
movq %rbx, %rdi
movq %r12, %rsi
movq %r15, %rdx
movq %r14, %rcx
callq 0x9ed68
testb %al, %al
jne 0x4519d
movq %rbx, %rdi
movq %r12, %rsi
movq %r15, %rdx
movq %r14, %rcx
callq 0x9ee60
jmp 0x4561a
movq %rbx, %rdi
movq %r12, %rsi
movq %r15, %rdx
movq %r14, %rcx
callq 0x9d33c
movb $0x1, %bpl
testb %al, %al
jne 0x4519d
movq %rbx, %rdi
movq %r12, %rsi
movq %r15, %rdx
movq %r14, %rcx
callq 0x9d4b6
testb %al, %al
jne 0x4519d
movq %rbx, %rdi
movq %r12, %rsi
movq %r15, %rdx
movq %r14, %rcx
callq 0x9d55d
jmp 0x4561a
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
movl %r8d, %ecx
callq 0x9f1ae
movb $0x1, %bpl
testb %al, %al
je 0x45134
jmp 0x4519d
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
testq %rax, %rax
je 0x45134
cmpq $0x2, 0x10(%rax)
jne 0x45134
movslq 0x2258(%rbx), %rax
cmpq $0x100, %rax            # imm = 0x100
jge 0x45862
leal 0x1(%rax), %ecx
movl %ecx, 0x2258(%rbx)
movq 0x2260(%rbx,%rax,8), %r12
movq $0x0, 0x38(%r12)
movq %r13, 0x8(%r12)
leaq 0x3b5af(%rip), %rax     # 0x80c2b
movq %rax, 0x20(%r12)
movq 0x10(%r14), %r15
movq 0x8(%r15), %rsi
movq %rbx, %rdi
callq 0x9f8a2
testq %rax, %rax
je 0x457d7
movq %rax, 0x10(%r12)
movq 0x10(%r14), %r15
movq 0x10(%r15), %rax
movq 0x8(%rax), %rsi
movq %rbx, %rdi
callq 0x9f8a2
testq %rax, %rax
je 0x457d7
movq %rax, 0x18(%r12)
leaq 0x75ac3(%rip), %rax     # 0xbb18b
movq %rax, (%r12)
movabsq $0x100000005, %rax      # imm = 0x100000005
movq %rax, 0x70(%r12)
movabsq $0x300000005, %rax      # imm = 0x300000005
movq %rax, 0x60(%r12)
movl $0x1, 0x78(%r12)
jmp 0x4519a
movq 0x10(%rax), %r9
movq %rbx, %rdi
movq %r15, %rsi
xorl %r8d, %r8d
callq 0x9f4af
movl %eax, %ebp
jmp 0x4519d
movq %rbx, %rdi
movq %r14, %rsi
callq 0x9fbc8
testb %al, %al
je 0x45134
leaq 0x75a1a(%rip), %rax     # 0xbb145
movq %rax, (%r15)
movabsq $0x100000004, %rax      # imm = 0x100000004
movq %rax, 0x60(%r15)
movl $0x5, 0x70(%r15)
jmp 0x4519a
movq 0x8(%rax), %rax
testq %rax, %rax
je 0x45134
movslq 0x2258(%rbx), %rcx
cmpq $0x100, %rcx            # imm = 0x100
jge 0x45862
leal 0x1(%rcx), %edx
movl %edx, 0x2258(%rbx)
movq 0x2260(%rbx,%rcx,8), %r15
movq $0x0, 0x38(%r15)
movq %r13, 0x8(%r15)
movq 0x10(%r13), %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 0x9f8a2
testq %rax, %rax
je 0x4582a
leaq 0x5adc6(%rip), %rcx     # 0xa0579
movq %rcx, (%r15)
movq %rax, 0x10(%r15)
movabsq $0x200000005, %rax      # imm = 0x200000005
movq %rax, 0x60(%r15)
movabsq $0x100000003, %rax      # imm = 0x100000003
jmp 0x452f8
movq %rbx, %rdi
movq %r15, %rsi
callq 0x9fbc8
testb %al, %al
je 0x45134
movq 0x10(%r14), %rax
movq 0x10(%rax), %rsi
movq %rbx, %rdi
callq 0x9fbc8
testb %al, %al
je 0x45134
leaq 0x759b0(%rip), %rax     # 0xbb1b9
movq %rax, (%r12)
movabsq $0x100000005, %rax      # imm = 0x100000005
movq %rax, 0x60(%r12)
movl $0x5, 0x70(%r12)
jmp 0x4519a
movq %rbx, %rdi
movq %r14, %rsi
callq 0x9fbc8
testb %al, %al
je 0x45134
leaq 0x75901(%rip), %rax     # 0xbb145
movq %rax, (%r15)
movabsq $0x100000005, %rax      # imm = 0x100000005
movq %rax, 0x60(%r15)
movl $0x3, 0x70(%r15)
jmp 0x4519a
addq $0x2190, %rbx           # imm = 0x2190
movq %rbx, %rdi
movl $0x1, %esi
callq 0x8530