// File: /workspace/github_c_makefile_star2_O3/BernardTatin[P]s7sh/s7.c
// Function: d_dd_ok
static bool d_dd_ok(s7_scheme *sc, opt_info *opc, s7_pointer s_func, s7_pointer car_x)
                {
                    s7_d_dd_t func;
                    s7_d_7dd_t func7 = NULL;
                    func = s7_d_dd_function(s_func);
                    if (!func) func7 = s7_d_7dd_function(s_func);
                    if ((func) || (func7))
                    {
                        s7_pointer arg1, arg2, slot;
                        int32_t start;
                        start = sc->pc;
                        arg1 = cadr(car_x);
                        arg2 = caddr(car_x);
                        if (func)
                            opc->v[3].d_dd_f = func;
                        else opc->v[3].d_7dd_f = func7;

                        /* arg1 = real constant */
                        if (is_real(arg1))
                        {
                            if (is_real(arg2))
                            {
                                if ((!is_float(arg1)) && (!is_float(arg2)))
                                    return(return_false(sc, car_x, __func__, __LINE__));
                                opc->v[1].x = s7_number_to_real(sc, arg1);
                                opc->v[2].x = s7_number_to_real(sc, arg2);
                                if (func)
                                    opc->v[0].fd = opt_d_dd_cc;
                                else opc->v[0].fd = opt_d_7dd_cc;
                                return(oo_set_type_0(opc, 4));
                            }
                            slot = opt_float_symbol(sc, arg2);
                            if (slot)
                            {
                                opc->v[1].p = slot;
                                opc->v[2].x = s7_number_to_real(sc, arg1); /* move arg1? */
                                if (func)
                                    opc->v[0].fd = opt_d_dd_cs;
                                else opc->v[0].fd = opt_d_7dd_cs;
                                return(oo_set_type_1(opc, 4, 1, OO_D));
                            }
                            if (float_optimize(sc, cddr(car_x)))
                            {
                                opc->v[1].x = s7_number_to_real(sc, arg1);
                                if (d_dd_call_combinable(sc, opc, func))
                                    return(true);
                                if (func)
                                {
                                    opc->v[0].fd = opt_d_dd_cf;
                                    opc->v[4].o1 = sc->opts[start];
                                    opc->v[5].fd = sc->opts[start]->v[0].fd;
                                    return(oo_set_type_0(opc, 6));
                                }
                                opc->v[0].fd = opt_d_7dd_cf;
                                return(oo_set_type_0(opc, 4));
                            }
                            pc_fallback(sc, start);
                            return(return_false(sc, car_x, __func__, __LINE__));
                        }

                        /* arg1 = float symbol */
                        slot = opt_float_symbol(sc, arg1);
                        if (slot)
                        {
                            opc->v[1].p = slot;
                            if (is_real(arg2))
                            {
                                opc->v[2].x = s7_number_to_real(sc, arg2);
                                if (func)
                                    opc->v[0].fd = opt_d_dd_sc;
                                else opc->v[0].fd = opt_d_7dd_sc;
                                return(oo_set_type_1(opc, 4, 1, OO_D));
                            }
                            slot = opt_float_symbol(sc, arg2);
                            if (slot)
                            {
                                opc->v[2].p = slot;
                                if (func)
                                {
                                    if (func == multiply_d_dd)
                                        opc->v[0].fd = opt_d_dd_ss_mul;
                                    else opc->v[0].fd = opt_d_dd_ss;
                                }
                                else opc->v[0].fd = opt_d_7dd_ss;
                                return(oo_set_type_2(opc, 4, 1, 2, OO_R, OO_D));
                            }
                            if (float_optimize(sc, cddr(car_x)))
                            {
                                if (d_dd_sf_combinable(sc, opc, func))
                                    return(true);
                                if (func)
                                {
                                    if (func == multiply_d_dd)
                                        opc->v[0].fd = opt_d_dd_sf_mul;
                                    else opc->v[0].fd = opt_d_dd_sf;
                                    opc->v[4].o1 = sc->opts[start];
                                    opc->v[5].fd = sc->opts[start]->v[0].fd;
                                    return(oo_set_type_1(opc, 6, 1, OO_D));
                                }
                                else opc->v[0].fd = opt_d_7dd_sf;
                                return(oo_set_type_1(opc, 4, 1, OO_D));
                            }
                            pc_fallback(sc, start);
                            return(return_false(sc, car_x, __func__, __LINE__));
                        }

                        /* arg1 = float expr or non-float */
                        if (float_optimize(sc, cdr(car_x)))
                        {
                            int32_t start2;
                            start2 = sc->pc;
                            if (is_real(arg2))
                            {
                                opc->v[2].x = s7_number_to_real(sc, arg2);
                                if (func)
                                {
                                    if (func == add_d_dd)
                                        opc->v[0].fd = opt_d_dd_fc_add; /* opt_i_7i_c o->v[2].i_7i_f = random_i_7i else as below except add_i_ii in opt_i_ii_cf = (+ i1 (random i2)) */
                                    else
                                    {
                                        if (func == subtract_d_dd)
                                        {
                                            opc->v[0].fd = opt_d_dd_fc_subtract; /* if o1->v[0].fd = opt_d_7d_c and its o->v[3].d_7d_f = random_d_7d it's (- (random f1) f2) */
#if (!WITH_GMP)
                                            if ((opc == sc->opts[sc->pc - 2]) &&
                                                    (sc->opts[start]->v[0].fd == opt_d_7d_c) &&
                                                    (sc->opts[start]->v[3].d_7d_f == random_d_7d))
                                            {
                                                opc->v[0].fd = opt_subtract_random_f_f;
                                                opc->v[1].x = sc->opts[start]->v[1].x; /* random arg */
                                                backup_pc(sc);
                                            }
#endif
                                        }
                                        else opc->v[0].fd = opt_d_dd_fc;
                                    }
                                }
                                else opc->v[0].fd = opt_d_7dd_fc;
                                return(oo_set_type_0(opc, 4));
                            }
                            slot = opt_float_symbol(sc, arg2);
                            if (slot)
                            {
                                opc->v[1].p = slot;
                                if (d_dd_fs_combinable(sc, opc, func))
                                    return(true);
                                if (func)
                                {
                                    if (func == multiply_d_dd)
                                        opc->v[0].fd = opt_d_dd_fs_mul;
                                    else opc->v[0].fd = opt_d_dd_fs;
                                    opc->v[4].o1 = sc->opts[start];
                                    opc->v[5].fd = sc->opts[start]->v[0].fd;
                                    return(oo_set_type_1(opc, 6, 1, OO_D));
                                }
                                else opc->v[0].fd = opt_d_7dd_fs;
                                return(oo_set_type_1(opc, 4, 1, OO_D));
                            }
                            if (float_optimize(sc, cddr(car_x)))
                            {
                                if (func)
                                {
                                    if (d_dd_ff_combinable(sc, start))
                                        return(true);
                                    opc->v[0].fd = opt_d_dd_ff;
                                    if (func == multiply_d_dd)
                                        opc->v[0].fd = opt_d_dd_ff_mul;
                                    else
                                    {
                                        if (func == add_d_dd)
                                        {
                                            opt_info *o2;
                                            o2 = sc->opts[start2];

                                            if (o2->v[0].fd == opt_d_dd_ff_mul)
                                            {
                                                opc->v[0].fd = opt_d_dd_ff_add_mul;
                                                opc->v[4].o1 = sc->opts[start];
                                                opc->v[5].fd = sc->opts[start]->v[0].fd;
                                                opc->v[10].o1 = sc->opts[start2 + 1];
                                                opc->v[11].fd = sc->opts[start2 + 1]->v[0].fd;
                                                return(oo_set_type_0(opc, 12));
                                            }
                                            if ((o2->v[0].fd == opt_d_7pi_sf) &&
                                                    (o2->v[3].d_7pi_f == float_vector_ref_d_7pi))
                                                opc->v[0].fd = opt_d_dd_ff_add_fv_ref;
                                            else
                                            {
                                                opc->v[0].fd = opt_d_dd_ff_add;
                                                opc->v[4].o1 = sc->opts[start];
                                                opc->v[5].fd = sc->opts[start]->v[0].fd;
                                                opc->v[10].o1 = o2;
                                                opc->v[11].fd = o2->v[0].fd;
                                                return(oo_set_type_0(opc, 12));
                                            }
                                        }
                                        else
                                        {
                                            if (func == subtract_d_dd)
                                                opc->v[0].fd = opt_d_dd_ff_sub;
                                        }
                                    }
                                }
                                else opc->v[0].fd = opt_d_7dd_ff;
                                return(oo_set_type_0(opc, 4));
                            }
                        }
                        pc_fallback(sc, start);
                    }
                    return(return_false(sc, car_x, __func__, __LINE__));
                }

// Assembly:
cmpb $0x30, (%rdx)
jb 0x9d652
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq 0x8(%rdx), %rax
movq 0x20(%rax), %rax
testq %rax, %rax
je 0x9d674
movq %rcx, %r12
movq %rsi, %rbx
movq %rdi, %r14
movq %rax, %rcx
cmpl $0xd, (%rcx)
je 0x9d655
movq 0x10(%rcx), %rcx
testq %rcx, %rcx
jne 0x9d642
jmp 0x9d66f
xorl %eax, %eax
retq
movq 0x8(%rcx), %rcx
movb $0x1, %sil
movq %rcx, %rdi
testq %rcx, %rcx
jne 0x9d692
jmp 0x9d66f
cmpl $0xe, (%rax)
je 0x9d685
movq 0x10(%rax), %rax
testq %rax, %rax
jne 0x9d666
xorl %eax, %eax
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x8(%rax), %rcx
xorl %esi, %esi
testq %rcx, %rcx
je 0x9d674
xorl %edi, %edi
movl 0x2258(%r14), %r8d
movslq %r8d, %rdx
movq 0x10(%r12), %rax
movq 0x8(%rax), %r15
movq 0x10(%rax), %rax
movq 0x8(%rax), %r13
movq %rcx, 0x18(%rbx)
movzbl (%r15), %eax
leaq 0xad2f4(%rip), %rbp     # 0x14a9b0
cmpb $0x1, (%rax,%rbp)
jne 0x9d727
movzbl (%r13), %ecx
cmpb $0x1, (%rcx,%rbp)
jne 0x9d78e
cmpb $0xd, %al
je 0x9d6da
cmpb $0xd, %cl
jne 0x9d674
leaq 0x6c970(%rip), %r12     # 0x10a051
movq %r14, %rdi
movq %rsi, %rbp
movq %r15, %rsi
movq %r12, %rdx
callq 0xd498
movsd %xmm0, 0x8(%rbx)
movq %r14, %rdi
movq %r13, %rsi
movq %r12, %rdx
callq 0xd498
leaq 0x1dc07(%rip), %rax     # 0xbb313
leaq 0x1dc10(%rip), %rcx     # 0xbb323
testb %bpl, %bpl
cmovneq %rax, %rcx
movsd %xmm0, 0x10(%rbx)
movq %rcx, (%rbx)
jmp 0x9dc42
movl %r8d, 0xc(%rsp)
movq %rdi, 0x10(%rsp)
movq %rsi, 0x20(%rsp)
movq %rdx, 0x18(%rsp)
movq %r14, %rdi
movq %r15, %rsi
callq 0x9f915
testq %rax, %rax
je 0x9d801
movq %rax, 0x8(%rbx)
movzbl (%r13), %eax
cmpb $0x1, (%rax,%rbp)
jne 0x9d878
leaq 0x6c8e8(%rip), %rdx     # 0x10a051
movq %r14, %rdi
movq %r13, %rsi
callq 0xd498
movsd %xmm0, 0x10(%rbx)
leaq 0x1dc77(%rip), %rax     # 0xbb3f7
leaq 0x1dc88(%rip), %rcx     # 0xbb40f
cmpb $0x0, 0x20(%rsp)
jmp 0x9d7e0
movl %r8d, 0xc(%rsp)
movq %rdi, 0x10(%rsp)
movq %rsi, %rbp
movq %rdx, 0x18(%rsp)
movq %r14, %rdi
movq %r13, %rsi
callq 0x9f915
testq %rax, %rax
je 0x9d8e2
movq %rax, 0x8(%rbx)
leaq 0x6c892(%rip), %rdx     # 0x10a051
movq %r14, %rdi
movq %r15, %rsi
callq 0xd498
movsd %xmm0, 0x10(%rbx)
leaq 0x1db64(%rip), %rax     # 0xbb33a
leaq 0x1db75(%rip), %rcx     # 0xbb352
testb %bpl, %bpl
cmovneq %rax, %rcx
movq %rcx, (%rbx)
movabsq $0x100000004, %rax      # imm = 0x100000004
movq %rax, 0x60(%rbx)
movl $0x2, 0x70(%rbx)
jmp 0x9dc4a
movq 0x10(%r12), %rsi
movq %r14, %rdi
callq 0x44f61
testb %al, %al
je 0x9daec
movzbl (%r13), %eax
cmpb $0x1, (%rax,%rbp)
jne 0x9d9c3
leaq 0x6c825(%rip), %rdx     # 0x10a051
movq %r14, %rdi
movq %r13, %rsi
callq 0xd498
movsd %xmm0, 0x10(%rbx)
cmpb $0x0, 0x20(%rsp)
je 0x9da51
leaq -0x16f3b(%rip), %rax    # 0x86913
movq 0x10(%rsp), %rcx
cmpq %rax, %rcx
je 0x9dafc
leaq -0x16f4b(%rip), %rax    # 0x86918
cmpq %rax, %rcx
je 0x9dbcd
leaq 0x1de01(%rip), %rax     # 0xbb674
jmp 0x9dc3f
movq %r14, %rdi
movq %r13, %rsi
callq 0x9f915
testq %rax, %rax
je 0x9d967
movq %rax, 0x10(%rbx)
leaq -0x16f7a(%rip), %rax    # 0x8691d
cmpq %rax, 0x10(%rsp)
leaq 0x1db8b(%rip), %rax     # 0xbb42e
leaq 0x1db9f(%rip), %rcx     # 0xbb449
cmoveq %rax, %rcx
leaq 0x1dbb4(%rip), %rax     # 0xbb469
cmpb $0x0, 0x20(%rsp)
cmovneq %rcx, %rax
movq %rax, (%rbx)
movabsq $0x200000004, %rax      # imm = 0x200000004
movq %rax, 0x60(%rbx)
movabsq $0x200000007, %rax      # imm = 0x200000007
movq %rax, 0x70(%rbx)
jmp 0x9dc4a
movq 0x10(%r12), %rax
movq 0x10(%rax), %rsi
movq %r14, %rdi
callq 0x44f61
testb %al, %al
je 0x9daec
leaq 0x6c74f(%rip), %rdx     # 0x10a051
movq %r14, %rdi
movq %r15, %rsi
callq 0xd498
movsd %xmm0, 0x8(%rbx)
movl 0x2258(%r14), %eax
cmpl $0x2, %eax
jl 0x9d92f
leal -0x2(%rax), %ecx
cmpq %rbx, 0x2260(%r14,%rcx,8)
je 0x9db08
testb %bpl, %bpl
je 0x9da5d
leaq 0x1da32(%rip), %rax     # 0xbb371
movq %rax, (%rbx)
movq 0x18(%rsp), %rax
movq 0x2260(%r14,%rax,8), %rax
movq %rax, 0x20(%rbx)
movq (%rax), %rax
movq %rax, 0x28(%rbx)
movq $0x6, 0x60(%rbx)
jmp 0x9dc4a
movq 0x10(%r12), %rax
movq 0x10(%rax), %rsi
movq %r14, %rdi
callq 0x44f61
testb %al, %al
je 0x9daec
movq %r14, %rdi
movq %rbx, %rsi
movq 0x10(%rsp), %rdx
callq 0xbb490
movl %eax, %ecx
movb $0x1, %al
testb %cl, %cl
jne 0x9d676
cmpb $0x0, 0x20(%rsp)
je 0x9dba0
leaq -0x17091(%rip), %rcx    # 0x8691d
cmpq %rcx, 0x10(%rsp)
leaq 0x1db65(%rip), %rcx     # 0xbb51f
leaq 0x1db8c(%rip), %rdx     # 0xbb54d
jmp 0x9da23
movslq 0x2258(%r14), %r15
movq %r14, %rdi
movq %r13, %rsi
callq 0x9f915
testq %rax, %rax
je 0x9da69
movq %rax, 0x8(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
movq 0x10(%rsp), %rdx
callq 0xbb6ed
movl %eax, %ecx
movb $0x1, %al
testb %cl, %cl
jne 0x9d676
cmpb $0x0, 0x20(%rsp)
je 0x9dba9
leaq -0x170f3(%rip), %rcx    # 0x8691d
cmpq %rcx, 0x10(%rsp)
leaq 0x1dd60(%rip), %rcx     # 0xbb77c
leaq 0x1dd7d(%rip), %rdx     # 0xbb7a0
cmoveq %rcx, %rdx
movq %rdx, (%rbx)
movq 0x18(%rsp), %rcx
movq 0x2260(%r14,%rcx,8), %rcx
movq %rcx, 0x20(%rbx)
movq (%rcx), %rcx
movq %rcx, 0x28(%rbx)
movabsq $0x100000006, %rcx      # imm = 0x100000006
jmp 0x9dbbd
leaq 0x1dc57(%rip), %rax     # 0xbb6af
jmp 0x9dc3f
leaq 0x1d948(%rip), %rax     # 0xbb3ac
jmp 0x9dc3f
movq 0x10(%r12), %rax
movq 0x10(%rax), %rsi
movq %r14, %rdi
callq 0x44f61
testb %al, %al
je 0x9daec
cmpb $0x0, 0x20(%rsp)
movl 0xc(%rsp), %esi
je 0x9dc38
movq %r14, %rdi
callq 0xbb81b
movl %eax, %ecx
movb $0x1, %al
testb %cl, %cl
jne 0x9d676
leaq 0x1e07d(%rip), %rcx     # 0xbbb25
movq %rcx, (%rbx)
leaq -0x17195(%rip), %rcx    # 0x8691d
movq 0x10(%rsp), %rdx
cmpq %rcx, %rdx
je 0x9dcad
leaq -0x171b4(%rip), %rcx    # 0x86913
cmpq %rcx, %rdx
je 0x9dcb6
leaq -0x171bf(%rip), %rax    # 0x86918
cmpq %rax, %rdx
jne 0x9dc42
leaq 0x1e1ff(%rip), %rax     # 0xbbce6
jmp 0x9dc3f
movl 0xc(%rsp), %eax
movl %eax, 0x2258(%r14)
jmp 0x9d674
leaq 0x1dae0(%rip), %rax     # 0xbb5e3
jmp 0x9dc3f
decl %eax
movq 0x2260(%r14,%rax,8), %rax
movq (%rax), %rcx
leaq 0x2a0c(%rip), %rdx      # 0xa0528
cmpq %rdx, %rcx
je 0x9dc51
leaq 0x1e2de(%rip), %rdx     # 0xbbe0a
cmpq %rdx, %rcx
jne 0x9d92f
movsd %xmm0, 0x20(%rbx)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rbx)
movq 0x28(%rax), %rcx
movq %rcx, 0x30(%rbx)
movq 0x10(%rax), %rcx
movq %rcx, 0x10(%rbx)
movq 0x18(%rax), %rax
movq %rax, 0x28(%rbx)
cmpq $0x0, 0x10(%rsp)
leaq 0x1e2f8(%rip), %rax     # 0xbbe5f
leaq 0x1e2b3(%rip), %rcx     # 0xbbe21
cmoveq %rax, %rcx
movq %rcx, (%rbx)
decl 0x2258(%r14)
movabsq $0x200000007, %rax      # imm = 0x200000007
movq %rax, 0x60(%rbx)
movl $0x3, 0x70(%rbx)
movl $0x2, %eax
movl $0x74, %ecx
jmp 0x9dca8
leaq 0x1d9e9(%rip), %rcx     # 0xbb590
jmp 0x9dbb0
leaq 0x1dc25(%rip), %rcx     # 0xbb7d5
movq %rcx, (%rbx)
movabsq $0x100000004, %rcx      # imm = 0x100000004
movq %rcx, 0x60(%rbx)
movl $0x2, 0x70(%rbx)
jmp 0x9d676
leaq 0x1da39(%rip), %rax     # 0xbb60d
movq %rax, (%rbx)
movslq 0x2258(%r14), %rax
cmpq %rbx, 0x2250(%r14,%rax,8)
jne 0x9dc42
movq 0x18(%rsp), %rax
movq 0x2260(%r14,%rax,8), %rax
leaq 0x1d63a(%rip), %rcx     # 0xbb236
cmpq %rcx, (%rax)
jne 0x9dc42
leaq -0x18827(%rip), %rcx    # 0x853e1
cmpq %rcx, 0x18(%rax)
jne 0x9dc42
leaq 0x1da22(%rip), %rax     # 0xbb637
movq %rax, (%rbx)
movq 0x18(%rsp), %rax
movq 0x2260(%r14,%rax,8), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, 0x8(%rbx)
decl 0x2258(%r14)
jmp 0x9dc42
leaq 0x1e100(%rip), %rax     # 0xbbd3f
movq %rax, (%rbx)
movq $0x4, 0x60(%rbx)
movb $0x1, %al
jmp 0x9d676
movsd %xmm0, 0x10(%rbx)
movq 0x8(%rax), %rcx
movq %rcx, 0x30(%rbx)
movq 0x28(%rax), %rcx
movq %rcx, 0x8(%rbx)
movq 0x18(%rax), %rax
movq %rax, 0x20(%rbx)
cmpq $0x0, 0x10(%rsp)
leaq 0x1e158(%rip), %rax     # 0xbbdd3
leaq 0x1e120(%rip), %rcx     # 0xbbda2
cmoveq %rax, %rcx
movq %rcx, (%rbx)
decl 0x2258(%r14)
movabsq $0x100000007, %rax      # imm = 0x100000007
movq %rax, 0x60(%rbx)
movl $0x3, %eax
movl $0x70, %ecx
movl %eax, (%rbx,%rcx)
jmp 0x9dc4a
leaq 0x1ded1(%rip), %rax     # 0xbbb85
jmp 0x9dc3f
movq 0x2260(%r14,%r15,8), %rcx
movq (%rcx), %rdx
leaq 0x1debd(%rip), %rsi     # 0xbbb85
cmpq %rsi, %rdx
je 0x9dd0a
leaq 0x1d471(%rip), %rsi     # 0xbb145
cmpq %rsi, %rdx
jne 0x9dce6
leaq -0x1d14f(%rip), %rdx    # 0x80b91
cmpq %rdx, 0x18(%rcx)
je 0x9dd4c
leaq 0x1dfbd(%rip), %rdx     # 0xbbcaa
movq %rdx, (%rbx)
movq 0x18(%rsp), %rdx
movq 0x2260(%r14,%rdx,8), %rdx
movq %rdx, 0x20(%rbx)
movq (%rdx), %rdx
movq %rdx, 0x28(%rbx)
jmp 0x9dd34
leaq 0x1dec5(%rip), %rcx     # 0xbbbd6
movq %rcx, (%rbx)
movq 0x18(%rsp), %rcx
movq 0x2260(%r14,%rcx,8), %rcx
movq %rcx, 0x20(%rbx)
movq (%rcx), %rcx
movq %rcx, 0x28(%rbx)
movq 0x2268(%r14,%r15,8), %rcx
movq %rcx, 0x50(%rbx)
movq (%rcx), %rcx
movq %rcx, 0x58(%rbx)
movq $0xc, 0x60(%rbx)
jmp 0x9d676
leaq 0x1dee9(%rip), %rax     # 0xbbc3c
jmp 0x9dc3f