// File: /workspace/github_c_makefile_star2_O0/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:
subq $0x58, %rsp
movq %rdi, 0x48(%rsp)
movq %rsi, 0x40(%rsp)
movq 0x40(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x38(%rsp)
movq 0x38(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x1, %eax
je 0x47433
movq 0x48(%rsp), %rdi
movq 0x38(%rsp), %rsi
callq 0xe0bd0
andb $0x1, %al
movb %al, 0x57(%rsp)
jmp 0x4784b
movq 0x38(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rax
movzbl (%rax), %eax
cmpl $0xa, %eax
jne 0x47846
movq 0x48(%rsp), %rdi
movq 0x38(%rsp), %rsi
callq 0x31900
movq %rax, 0x20(%rsp)
movq 0x30(%rsp), %rax
movzwl (%rax), %eax
cmpl $0x20a, %eax            # imm = 0x20A
je 0x47484
movq 0x38(%rsp), %rax
movzwl (%rax), %eax
cmpl $0x201, %eax            # imm = 0x201
jne 0x474a5
movq 0x48(%rsp), %rdi
movq 0x38(%rsp), %rsi
movq 0x20(%rsp), %rax
movl %eax, %edx
callq 0xe0d40
andb $0x1, %al
movb %al, 0x57(%rsp)
jmp 0x4784b
movq 0x30(%rsp), %rax
movq (%rax), %rax
andq $0x10000, %rax          # imm = 0x10000
cmpq $0x0, %rax
jne 0x474e4
movq 0x30(%rsp), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %eax
cmpl $0x20, %eax
jne 0x474f8
movq 0x48(%rsp), %rdi
movq 0x30(%rsp), %rsi
callq 0xfc80
movq 0x30(%rsp), %rcx
cmpq 0x10(%rcx), %rax
jne 0x474f8
movq 0x30(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, 0x28(%rsp)
jmp 0x47519
movq 0x48(%rsp), %rdi
movq 0x38(%rsp), %rsi
movq 0x20(%rsp), %rax
movl %eax, %edx
callq 0xe1060
andb $0x1, %al
movb %al, 0x57(%rsp)
jmp 0x4784b
movq 0x28(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x30, %eax
jl 0x477cf
movq 0x48(%rsp), %rdi
callq 0xe15e0
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rax
decq %rax
movq %rax, 0x10(%rsp)
subq $0x4, %rax
ja 0x477a0
movq 0x10(%rsp), %rax
leaq 0x197380(%rip), %rcx    # 0x1de8dc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x48(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rdx
callq 0xe1660
testb $0x1, %al
jne 0x4757f
jmp 0x47589
movb $0x1, 0x57(%rsp)
jmp 0x4784b
jmp 0x477cd
movq 0x48(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0xe16c0
testb $0x1, %al
jne 0x475e7
movq 0x48(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0xe1970
testb $0x1, %al
jne 0x475e7
movq 0x48(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0xe1ab0
testb $0x1, %al
jne 0x475e7
jmp 0x475f1
movb $0x1, 0x57(%rsp)
jmp 0x4784b
jmp 0x477cd
movq 0x48(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0xe1c00
testb $0x1, %al
jne 0x476aa
movq 0x48(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0xe2780
testb $0x1, %al
jne 0x476aa
movq 0x48(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0xe2b80
testb $0x1, %al
jne 0x476aa
movq 0x48(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0xe2d50
testb $0x1, %al
jne 0x476aa
movq 0x48(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0xe2f00
testb $0x1, %al
jne 0x476aa
movq 0x48(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0xe3030
testb $0x1, %al
jne 0x476aa
jmp 0x476b4
movb $0x1, 0x57(%rsp)
jmp 0x4784b
jmp 0x477cd
movq 0x48(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0xe3510
testb $0x1, %al
jne 0x4774c
movq 0x48(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0xe3860
testb $0x1, %al
jne 0x4774c
movq 0x48(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0xe3b80
testb $0x1, %al
jne 0x4774c
movq 0x48(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0xe3e10
testb $0x1, %al
jne 0x4774c
movq 0x48(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0xe3f80
testb $0x1, %al
jne 0x4774c
jmp 0x47756
movb $0x1, 0x57(%rsp)
jmp 0x4784b
jmp 0x477cd
movq 0x48(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0xe42c0
testb $0x1, %al
jne 0x47794
movq 0x48(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0xe43d0
testb $0x1, %al
jne 0x47794
jmp 0x4779e
movb $0x1, 0x57(%rsp)
jmp 0x4784b
jmp 0x477cd
movq 0x48(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x38(%rsp), %rdx
movq 0x20(%rsp), %rax
movl %eax, %ecx
callq 0xe44b0
testb $0x1, %al
jne 0x477c1
jmp 0x477cb
movb $0x1, 0x57(%rsp)
jmp 0x4784b
jmp 0x477cd
jmp 0x47844
movq 0x28(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x2a, %eax
jne 0x47842
movq 0x40(%rsp), %rax
movq (%rax), %rax
andq $0x4000000, %rax        # imm = 0x4000000
cmpq $0x0, %rax
jne 0x47840
movq 0x48(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x48(%rsp), %rax
movq %rax, (%rsp)
movq 0x48(%rsp), %rdi
movq 0x28(%rsp), %rsi
movq 0x40(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rdx
callq 0xe46b0
movq (%rsp), %rdi
movq %rax, %rsi
callq 0x35ea0
movq 0x8(%rsp), %rdi
movq %rax, %rsi
callq 0x473f0
andb $0x1, %al
movb %al, 0x57(%rsp)
jmp 0x4784b
jmp 0x47842
jmp 0x47844
jmp 0x47846
movb $0x0, 0x57(%rsp)
movb 0x57(%rsp), %al
andb $0x1, %al
addq $0x58, %rsp
retq
nopw %cs:(%rax,%rax)