// File: /workspace/github_c_makefile_star2_O1/BernardTatin[P]s7sh/s7.c
// Function: i_ii_ok
static bool i_ii_ok(s7_scheme *sc, opt_info *opc, s7_pointer s_func, s7_pointer car_x)
                {
                    s7_i_ii_t ifunc;
                    s7_i_7ii_t ifunc7 = NULL;
                    s7_pointer p;
                    ifunc = s7_i_ii_function(s_func);
                    if (!ifunc) ifunc7 = s7_i_7ii_function(s_func);
                    if ((ifunc) || (ifunc7))
                    {
                        s7_pointer sig;
                        sig = c_function_signature(s_func);
                        if (is_pair(sig))
                        {
                            s7_pointer arg1, arg2;
                            int32_t start;
                            start = sc->pc;
                            arg1 = cadr(car_x);
                            arg2 = caddr(car_x);

                            if (ifunc)
                                opc->v[3].i_ii_f = ifunc;
                            else opc->v[3].i_7ii_f = ifunc7;
                            oo_set_type_0(opc, 4);

                            if (is_opt_int(arg1))
                            {
                                opc->v[1].i = integer(arg1);
                                if (is_opt_int(arg2))
                                {
                                    opc->v[2].i = integer(arg2);
                                    if (ifunc)
                                        opc->v[0].fi = opt_i_ii_cc;
                                    else opc->v[0].fi = opt_i_7ii_cc;
                                    return(oo_set_type_0(opc, 4));
                                }
                                p = opt_integer_symbol(sc, arg2);
                                if (p)
                                {
                                    opc->v[2].p = p;
                                    if (ifunc)
                                    {
                                        if (opc->v[3].i_ii_f == multiply_i_ii)
                                            opc->v[0].fi = opt_i_ii_cs_mul;
                                        else opc->v[0].fi = opt_i_ii_cs;
                                    }
                                    else opc->v[0].fi = opt_i_7ii_cs;
                                    return(oo_set_type_1(opc, 4, 2, OO_I));
                                }
                                if (int_optimize(sc, cddr(car_x)))
                                {
                                    if (ifunc)
                                    {
                                        opc->v[0].fi = opt_i_ii_cf;       /* sc->opts[start]->v[0].fi -> opt_i_7i_c -> same_opt->v[2].i_7i_f = random_i_7i tmap */
#if (!WITH_GMP)
                                        if ((ifunc == add_i_ii) && (opc == sc->opts[sc->pc - 2]) &&
                                                (sc->opts[start]->v[0].fi == opt_i_7i_c) &&
                                                (sc->opts[start]->v[2].i_7i_f == random_i_7i))
                                        {
                                            opc->v[0].fi = opt_add_i_random_i;
                                            opc->v[2].i = sc->opts[start]->v[1].i;
                                            backup_pc(sc);
                                        }
#endif
                                    }
                                    else opc->v[0].fi = opt_i_7ii_cf;
                                    return(oo_set_type_0(opc, 4));
                                }
                                pc_fallback(sc, start);
                            }
                            else
                            {
                                p = opt_integer_symbol(sc, arg1);
                                if (p)
                                {
                                    opc->v[1].p = p;
                                    if (is_opt_int(arg2))
                                    {
                                        opc->v[2].i = integer(arg2);
                                        if (ifunc)
                                        {
                                            if (opc->v[3].i_ii_f == add_i_ii)
                                                opc->v[0].fi = opt_i_ii_sc_add;
                                            else
                                            {
                                                if (opc->v[3].i_ii_f == subtract_i_ii)
                                                    opc->v[0].fi = opt_i_ii_sc_sub; /* sub1 is not faster */
                                                else opc->v[0].fi = opt_i_ii_sc;
                                            }
                                        }
                                        else opc->v[0].fi = opt_i_7ii_sc;
#if (!WITH_GMP)
                                        if ((car(car_x) == sc->modulo_symbol) &&
                                                (integer(arg2) > 1))
                                            opc->v[3].i_ii_f = modulo_i_ii_direct;
                                        else
                                        {
                                            if (car(car_x) == sc->ash_symbol)
                                            {
                                                if (opc->v[2].i < 0)
                                                {
                                                    if (opc->v[2].i == -1)
                                                        opc->v[3].i_ii_f = rsh_i_i2_direct;
                                                    else opc->v[3].i_ii_f = rsh_i_ii_direct;
                                                    opc->v[0].fi = opt_i_ii_sc;
                                                }
                                                else
                                                {
                                                    if (opc->v[2].i < s7_int_bits)
                                                    {
                                                        opc->v[3].i_ii_f = lsh_i_ii_direct;
                                                        opc->v[0].fi = opt_i_ii_sc;
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                if (opc->v[2].i > 0)
                                                {
                                                    /* these assume vunion is a union, not a struct; i_7ii_f otherwise might be leftover from a previous use */
#if OPT_INFO_DEBUGGING
                                                    if ((!ifunc) && (opc->v[3].i_7ii_f == quotient_i_7ii))
#else
                                                        if (opc->v[3].i_7ii_f == quotient_i_7ii)
#endif
                                                        {
                                                            opc->v[3].i_ii_f = quotient_i_ii_direct;
                                                            opc->v[0].fi = opt_i_ii_sc;
                                                        }
                                                        else
                                                        {
                                                            if (opc->v[2].i > 1)
                                                            {
#if OPT_INFO_DEBUGGING
                                                                if ((!ifunc) && (opc->v[3].i_7ii_f == remainder_i_7ii))
#else
                                                                    if (opc->v[3].i_7ii_f == remainder_i_7ii)
#endif
                                                                    {
                                                                        opc->v[3].i_ii_f = remainder_i_ii_direct;
                                                                        opc->v[0].fi = opt_i_ii_sc;
                                                                    }}}}}}
#endif
                                        return(oo_set_type_1(opc, 4, 1, OO_I));
                                    } /* opt_int arg2 */
                                    p = opt_integer_symbol(sc, arg2);
                                    if (p)
                                    {
                                        opc->v[2].p = p;
                                        if (ifunc)
                                        {
                                            if (opc->v[3].i_ii_f == add_i_ii)
                                                opc->v[0].fi = opt_i_ii_ss_add;
                                            else opc->v[0].fi = opt_i_ii_ss;
                                        }
                                        else opc->v[0].fi = opt_i_7ii_ss;
                                        return(oo_set_type_2(opc, 4, 1, 2, OO_I, OO_I));
                                    }
                                    if (int_optimize(sc, cddr(car_x)))
                                    {
                                        if (ifunc)
                                        {
                                            if (opc->v[3].i_ii_f == add_i_ii)
                                            {
                                                opc->v[0].fi = opt_i_ii_sf_add;
                                                opc->v[4].o1 = sc->opts[start];
                                                opc->v[5].fi = sc->opts[start]->v[0].fi;
                                                return(oo_set_type_1(opc, 6, 1, OO_I));
                                            }
                                            else opc->v[0].fi = opt_i_ii_sf;
                                        }
                                        else opc->v[0].fi = opt_i_7ii_sf;
                                        return(oo_set_type_1(opc, 4, 1, OO_I));
                                    }
                                    pc_fallback(sc, start);
                                }
                                else
                                {
                                    if (is_opt_int(arg2))
                                    {
                                        opc->v[2].i = integer(arg2);
                                        if (int_optimize(sc, cdr(car_x)))
                                        {
                                            if (!i_ii_fc_combinable(sc, opc, ifunc))
                                            {
                                                if (ifunc)
                                                {
                                                    if (opc->v[3].i_ii_f == add_i_ii)
                                                        opc->v[0].fi = opt_i_ii_fc_add;
                                                    else
                                                    {
                                                        opc->v[0].fi = opt_i_ii_fc;
#if (!WITH_GMP)
                                                        if ((opc->v[3].i_ii_f == subtract_i_ii) && (opc == sc->opts[sc->pc - 2]) &&
                                                                (sc->opts[start]->v[0].fi == opt_i_7i_c) &&
                                                                (sc->opts[start]->v[2].i_7i_f == random_i_7i))
                                                        {
                                                            opc->v[0].fi = opt_subtract_random_i_i;
                                                            opc->v[1].i = sc->opts[start]->v[1].i;
                                                            backup_pc(sc);
                                                        }
#endif
                                                    }
                                                }
                                                else opc->v[0].fi = opt_i_7ii_fc;
#if (!WITH_GMP)
                                                if (opc->v[2].i > 0)
                                                {
                                                    if (opc->v[3].i_7ii_f == quotient_i_7ii)
                                                    {
                                                        opc->v[3].i_ii_f = quotient_i_ii_direct;
                                                        opc->v[0].fi = opt_i_ii_fc;
                                                    }
                                                    else
                                                    {
                                                        if (opc->v[2].i > 1)
                                                        {
                                                            if (opc->v[3].i_7ii_f == remainder_i_7ii)
                                                            {
                                                                opc->v[3].i_ii_f = remainder_i_ii_direct;
                                                                opc->v[0].fi = opt_i_ii_fc;
                                                            }
                                                        }
                                                    }
                                                }
#endif
                                            }
                                            oo_check(sc, opc);
                                            return(true);
                                        }
                                        pc_fallback(sc, start);
                                    }
                                    else
                                    {
                                        if ((int_optimize(sc, cdr(car_x))) &&
                                                (int_optimize(sc, cddr(car_x))))
                                        {
                                            if (ifunc)
                                                opc->v[0].fi = opt_i_ii_ff;
                                            else opc->v[0].fi = opt_i_7ii_ff;
                                            oo_check(sc, opc);
                                            return(true);
                                        }
                                        pc_fallback(sc, start);
                                    }}}}
                    }
                    return(return_false(sc, car_x, __func__, __LINE__));
                }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %r12
movq %rdx, %r13
movq %rsi, %rbx
movq %rdi, %r14
movq %rdx, %rdi
callq 0x47a25
movq %rax, %r15
testq %rax, %rax
je 0xa74e8
xorl %ecx, %ecx
movq %r15, %rax
jmp 0xa7528
cmpb $0x30, (%r13)
jb 0xa7524
movq 0x8(%r13), %rax
movq 0x20(%rax), %rcx
testq %rcx, %rcx
sete %dl
je 0xa751d
cmpl $0x14, (%rcx)
je 0xa7515
movq 0x10(%rcx), %rcx
testq %rcx, %rcx
sete %dl
je 0xa751d
cmpl $0x14, (%rcx)
jne 0xa7504
movq 0x8(%rcx), %rax
xorl %edx, %edx
jmp 0xa751d
movq %rax, %rcx
testb %dl, %dl
je 0xa7528
xorl %eax, %eax
xorl %ecx, %ecx
orq %r15, %rcx
je 0xa78cd
movq 0x8(%r13), %rcx
movq 0x38(%rcx), %rcx
cmpb $0x1, (%rcx)
jne 0xa78cd
movl 0x2258(%r14), %ebp
movslq %ebp, %rdx
movq 0x10(%r12), %rcx
movq 0x8(%rcx), %rsi
movq 0x10(%rcx), %rcx
movq 0x8(%rcx), %r13
movq %rax, 0x18(%rbx)
movq $0x4, 0x60(%rbx)
cmpb $0xb, (%rsi)
jne 0xa75ae
movq 0x8(%rsi), %rax
movq %rax, 0x8(%rbx)
cmpb $0xb, (%r13)
jne 0xa7618
testq %r15, %r15
leaq 0x1af74(%rip), %rax     # 0xc24ff
leaq 0x1af7e(%rip), %rcx     # 0xc2510
cmovneq %rax, %rcx
movq 0x8(%r13), %rax
movq %rax, 0x10(%rbx)
movq %rcx, (%rbx)
movq $0x4, 0x60(%rbx)
jmp 0xa79e7
movq %rdx, (%rsp)
movq %r14, %rdi
callq 0xa639f
testq %rax, %rax
je 0xa765f
movq %rax, 0x8(%rbx)
cmpb $0xb, (%r13)
jne 0xa7744
movq 0x8(%r13), %rax
movq %rax, 0x10(%rbx)
testq %r15, %r15
je 0xa7876
movq 0x18(%rbx), %rcx
leaq -0x19932(%rip), %rdx    # 0x8dcbc
cmpq %rdx, %rcx
je 0xa78de
leaq -0x19935(%rip), %rdx    # 0x8dcc9
cmpq %rdx, %rcx
leaq 0x8c3f(%rip), %rdx      # 0xb0247
leaq 0x8c22(%rip), %rcx      # 0xb0231
cmoveq %rdx, %rcx
jmp 0xa78e5
movq %rdx, (%rsp)
movq %r14, %rdi
movq %r13, %rsi
callq 0xa639f
testq %rax, %rax
je 0xa7787
movq %rax, 0x10(%rbx)
testq %r15, %r15
je 0xa787f
leaq -0x1996a(%rip), %rax    # 0x8dcda
cmpq %rax, 0x18(%rbx)
leaq 0x1aed6(%rip), %rcx     # 0xc2525
leaq 0x1aee1(%rip), %rax     # 0xc2537
cmoveq %rcx, %rax
jmp 0xa79cf
cmpb $0xb, (%r13)
jne 0xa782f
movq 0x8(%r13), %rax
movq %rax, 0x10(%rbx)
movq 0x10(%r12), %rsi
movq %r14, %rdi
callq 0xa66f0
testb %al, %al
je 0xa78c6
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0xc2761
movl %eax, %ecx
movb $0x1, %al
testb %cl, %cl
jne 0xa78cf
testq %r15, %r15
je 0xa7a06
movq 0x18(%rbx), %rcx
leaq -0x199f9(%rip), %rdx    # 0x8dcbc
cmpq %rdx, %rcx
je 0xa7a44
leaq 0x1b162(%rip), %rdx     # 0xc2827
movq %rdx, (%rbx)
leaq -0x19a06(%rip), %rdx    # 0x8dcc9
cmpq %rdx, %rcx
jne 0xa7a4e
movslq 0x2258(%r14), %rcx
cmpq %rbx, 0x2250(%r14,%rcx,8)
jne 0xa7a4e
movq (%rsp), %rcx
movq 0x2260(%r14,%rcx,8), %rcx
leaq 0x13c5(%rip), %rdx      # 0xa8ac5
cmpq %rdx, (%rcx)
jne 0xa7a4e
leaq -0x1aced(%rip), %rdx    # 0x8ca23
cmpq %rdx, 0x10(%rcx)
jne 0xa7a4e
leaq 0x1b143(%rip), %rcx     # 0xc2864
movq %rcx, (%rbx)
movq (%rsp), %rcx
movq 0x2260(%r14,%rcx,8), %rcx
movq 0x8(%rcx), %rcx
movq %rcx, 0x8(%rbx)
decl 0x2258(%r14)
jmp 0xa7a4e
movq %r14, %rdi
movq %r13, %rsi
callq 0xa639f
testq %rax, %rax
je 0xa788b
movq %rax, 0x10(%rbx)
testq %r15, %r15
je 0xa7979
leaq -0x19ab0(%rip), %rax    # 0x8dcbc
cmpq %rax, 0x18(%rbx)
leaq 0x2d6f(%rip), %rcx      # 0xaa4e6
leaq 0x898a(%rip), %rax      # 0xb0108
cmoveq %rcx, %rax
jmp 0xa7980
movq 0x10(%r12), %rax
movq 0x10(%rax), %rsi
movq %r14, %rdi
callq 0xa66f0
testb %al, %al
je 0xa78c6
testq %r15, %r15
je 0xa79ee
leaq 0x1adbd(%rip), %rax     # 0xc256d
movq %rax, (%rbx)
leaq -0x19afe(%rip), %rax    # 0x8dcbc
cmpq %rax, %r15
jne 0xa75a1
movslq 0x2258(%r14), %rax
cmpq %rbx, 0x2250(%r14,%rax,8)
jne 0xa75a1
movq (%rsp), %rax
movq 0x2260(%r14,%rax,8), %rax
leaq 0x12da(%rip), %rcx      # 0xa8ac5
cmpq %rcx, (%rax)
jne 0xa75a1
leaq -0x1add8(%rip), %rcx    # 0x8ca23
cmpq %rcx, 0x10(%rax)
jne 0xa75a1
leaq 0x1ada1(%rip), %rax     # 0xc25ad
movq %rax, (%rbx)
movq (%rsp), %rax
movq 0x2260(%r14,%rax,8), %rax
movq 0x8(%rax), %rax
movq %rax, 0x10(%rbx)
decl 0x2258(%r14)
jmp 0xa75a1
movq 0x10(%r12), %rsi
movq %r14, %rdi
callq 0xa66f0
testb %al, %al
je 0xa78c6
movq 0x10(%r12), %rax
movq 0x10(%rax), %rsi
movq %r14, %rdi
callq 0xa66f0
testb %al, %al
je 0xa78c6
testq %r15, %r15
leaq 0x1b087(%rip), %rax     # 0xc28ea
leaq 0x1b0db(%rip), %rcx     # 0xc2945
cmovneq %rax, %rcx
movq %rcx, (%rbx)
jmp 0xa79e7
leaq 0x1adb8(%rip), %rcx     # 0xc2635
jmp 0xa78e5
leaq 0x1acca(%rip), %rax     # 0xc2550
jmp 0xa79cf
movq 0x10(%r12), %rax
movq 0x10(%rax), %rsi
movq %r14, %rdi
callq 0xa66f0
testb %al, %al
je 0xa78c6
testq %r15, %r15
je 0xa79fd
leaq -0x19bf4(%rip), %rax    # 0x8dcbc
cmpq %rax, 0x18(%rbx)
je 0xa7a0f
leaq 0x1ae0e(%rip), %rax     # 0xc26cf
jmp 0xa79cf
movl %ebp, 0x2258(%r14)
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xca9(%rip), %rcx       # 0xa858e
movq %rcx, (%rbx)
movq 0x8(%r12), %rcx
cmpq 0x1350(%r14), %rcx
jne 0xa790d
cmpq $0x2, 0x8(%r13)
jl 0xa790d
leaq 0xac61(%rip), %rax      # 0xb2565
movq %rax, 0x18(%rbx)
jmp 0xa79d2
cmpq 0xbd8(%r14), %rcx
je 0xa7954
testq %rax, %rax
jle 0xa79d2
movq 0x18(%rbx), %rcx
leaq -0x1aeca(%rip), %rdx    # 0x8ca60
cmpq %rdx, %rcx
je 0xa79a1
cmpq $0x1, %rax
sete %al
leaq -0x1adba(%rip), %rdx    # 0x8cb83
cmpq %rdx, %rcx
setne %cl
orb %al, %cl
jne 0xa79d2
leaq 0x1ad26(%rip), %rax     # 0xc2678
jmp 0xa79a8
testq %rax, %rax
js 0xa79ae
xorl %ecx, %ecx
cmpb $0x0, 0xab2fe(%rip)     # 0x152c60
movl $0x3f, %edx
cmoveq %rcx, %rdx
cmpq %rdx, %rax
jge 0xa79d2
leaq 0x1acee(%rip), %rax     # 0xc2665
jmp 0xa79a8
leaq 0x1ad04(%rip), %rax     # 0xc2684
movq %rax, (%rbx)
movabsq $0x200000004, %rax      # imm = 0x200000004
movq %rax, 0x60(%rbx)
movabsq $0x100000001, %rax      # imm = 0x100000001
movq %rax, 0x70(%rbx)
jmp 0xa79e7
leaq 0x1acc7(%rip), %rax     # 0xc266f
movq %rax, 0x18(%rbx)
jmp 0xa79c8
cmpq $-0x1, %rax
leaq 0x1ac99(%rip), %rax     # 0xc2652
leaq 0x1ac99(%rip), %rcx     # 0xc2659
cmoveq %rax, %rcx
movq %rcx, 0x18(%rbx)
leaq 0x8862(%rip), %rax      # 0xb0231
movq %rax, (%rbx)
movabsq $0x100000004, %rax      # imm = 0x100000004
movq %rax, 0x60(%rbx)
movl $0x1, 0x70(%rbx)
movb $0x1, %al
jmp 0xa78cf
leaq 0x1abfe(%rip), %rax     # 0xc25f3
movq %rax, (%rbx)
jmp 0xa75a1
leaq 0x1ad13(%rip), %rax     # 0xc2717
jmp 0xa79cf
leaq 0x1ae9d(%rip), %rcx     # 0xc28aa
jmp 0xa7a4b
leaq 0x1ac93(%rip), %rax     # 0xc26a9
movq %rax, (%rbx)
movq (%rsp), %rcx
movq 0x2260(%r14,%rcx,8), %rax
movq %rax, 0x20(%rbx)
movq 0x2260(%r14,%rcx,8), %rax
movq (%rax), %rax
movq %rax, 0x28(%rbx)
movabsq $0x100000006, %rax      # imm = 0x100000006
jmp 0xa79dc
leaq 0x2b2f(%rip), %rcx      # 0xaa57a
movq %rcx, (%rbx)
movq 0x10(%rbx), %rcx
testq %rcx, %rcx
jle 0xa78cf
movq 0x18(%rbx), %rdx
leaq -0x1b006(%rip), %rsi    # 0x8ca60
cmpq %rsi, %rdx
je 0xa7a90
cmpq $0x1, %rcx
sete %cl
leaq -0x1aef6(%rip), %rsi    # 0x8cb83
cmpq %rsi, %rdx
setne %dl
orb %cl, %dl
jne 0xa78cf
leaq 0x1abea(%rip), %rcx     # 0xc2678
jmp 0xa7a97
leaq 0x1abd8(%rip), %rcx     # 0xc266f
movq %rcx, 0x18(%rbx)
leaq 0x1ad85(%rip), %rcx     # 0xc2827
movq %rcx, (%rbx)
jmp 0xa78cf