// File: /workspace/github_c_makefile_star2_O3/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:
cmpb $0x30, (%rdx)
jb 0xa09f8
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rcx, %r15
movq 0x8(%rdx), %rax
movq 0x20(%rax), %rcx
testq %rcx, %rcx
je 0xa0e07
movq %rsi, %rbx
movq %rdi, %r14
movq %rcx, %rsi
cmpl $0x13, (%rsi)
je 0xa09fb
movq 0x10(%rsi), %rsi
testq %rsi, %rsi
jne 0xa09e8
jmp 0xa0a13
xorl %eax, %eax
retq
movq 0x8(%rsi), %r12
testq %r12, %r12
je 0xa0a13
movb $0x1, %dl
xorl %ebp, %ebp
jmp 0xa0a33
cmpl $0x14, (%rcx)
je 0xa0a1d
movq 0x10(%rcx), %rcx
testq %rcx, %rcx
jne 0xa0a0a
jmp 0xa0e07
movq 0x8(%rcx), %rbp
testq %rbp, %rbp
je 0xa0e07
movq 0x8(%rdx), %rax
xorl %r12d, %r12d
xorl %edx, %edx
movq 0x38(%rax), %rax
cmpb $0x1, (%rax)
jne 0xa0e07
movl 0x2258(%r14), %edi
movslq %edi, %rcx
movq 0x10(%r15), %rax
movq 0x8(%rax), %rsi
movq 0x10(%rax), %rax
movq 0x8(%rax), %r13
testb %dl, %dl
cmovneq %r12, %rbp
movq %rbp, 0x18(%rbx)
movq $0x4, 0x60(%rbx)
cmpb $0xb, (%rsi)
jne 0xa0ab0
movq 0x8(%rsi), %rax
movq %rax, 0x8(%rbx)
cmpb $0xb, (%r13)
jne 0xa0b22
movq 0x8(%r13), %rax
leaq 0x19cf6(%rip), %rcx     # 0xba785
testb %dl, %dl
leaq 0x19cfe(%rip), %rdx     # 0xba796
cmovneq %rcx, %rdx
movq %rax, 0x10(%rbx)
movq %rdx, (%rbx)
movq $0x4, 0x60(%rbx)
jmp 0xa0ef1
movl %edi, 0x4(%rsp)
movq %rdx, 0x8(%rsp)
movq %rcx, 0x10(%rsp)
movq %r14, %rdi
callq 0x9f8a2
testq %rax, %rax
je 0xa0b79
movq %rax, 0x8(%rbx)
cmpb $0xb, (%r13)
jne 0xa0c61
movq 0x8(%r13), %rax
movq %rax, 0x10(%rbx)
cmpb $0x0, 0x8(%rsp)
je 0xa0db7
leaq -0x19517(%rip), %rcx    # 0x875e1
cmpq %rcx, %rbp
je 0xa0e18
leaq -0x1951a(%rip), %rcx    # 0x875ee
cmpq %rcx, %rbp
leaq 0x880a(%rip), %rdx      # 0xa931c
leaq 0x87ed(%rip), %rcx      # 0xa9306
cmoveq %rdx, %rcx
jmp 0xa0e1f
movl %edi, 0x4(%rsp)
movq %rdx, 0x8(%rsp)
movq %rcx, 0x10(%rsp)
movq %r14, %rdi
movq %r13, %rsi
callq 0x9f8a2
testq %rax, %rax
je 0xa0cc9
movq %rax, 0x10(%rbx)
leaq -0x19550(%rip), %rax    # 0x875ff
cmpq %rax, %rbp
leaq 0x19c52(%rip), %rax     # 0xba7ab
leaq 0x19c5d(%rip), %rcx     # 0xba7bd
cmoveq %rax, %rcx
leaq 0x19c6b(%rip), %rax     # 0xba7d6
cmpb $0x0, 0x8(%rsp)
cmovneq %rcx, %rax
jmp 0xa0ed9
cmpb $0xb, (%r13)
jne 0xa0d74
movq 0x8(%r13), %rax
movq %rax, 0x10(%rbx)
movq 0x10(%r15), %rsi
movq %r14, %rdi
callq 0x9fbc8
testb %al, %al
je 0xa0dfc
movq %r14, %rdi
movq %rbx, %rsi
movq %r12, %rdx
callq 0xba9e7
movl %eax, %ecx
movb $0x1, %al
testb %cl, %cl
jne 0xa0e09
cmpb $0x0, 0x8(%rsp)
je 0xa0f01
movq 0x18(%rbx), %rcx
leaq -0x195ef(%rip), %rdx    # 0x875e1
cmpq %rdx, %rcx
je 0xa0f38
leaq 0x19ec2(%rip), %rdx     # 0xbaaa2
movq %rdx, (%rbx)
leaq -0x195fc(%rip), %rdx    # 0x875ee
cmpq %rdx, %rcx
jne 0xa0f42
movslq 0x2258(%r14), %rcx
cmpq %rbx, 0x2250(%r14,%rcx,8)
jne 0xa0f42
movq 0x10(%rsp), %rcx
movq 0x2260(%r14,%rcx,8), %rcx
leaq 0x12ee(%rip), %rdx      # 0xa1f0a
cmpq %rdx, (%rcx)
jne 0xa0f42
leaq -0x1a8bb(%rip), %rdx    # 0x86371
cmpq %rdx, 0x10(%rcx)
jne 0xa0f42
leaq 0x19ea2(%rip), %rcx     # 0xbaadf
movq %rcx, (%rbx)
movq 0x10(%rsp), %rcx
movq 0x2260(%r14,%rcx,8), %rcx
movq 0x8(%rcx), %rcx
movq %rcx, 0x8(%rbx)
decl 0x2258(%r14)
jmp 0xa0f42
movq %r14, %rdi
movq %r13, %rsi
callq 0x9f8a2
testq %rax, %rax
je 0xa0dc0
movq %rax, 0x10(%rbx)
leaq -0x1969f(%rip), %rax    # 0x875e1
cmpq %rax, %rbp
leaq 0x2d0e(%rip), %rax      # 0xa3998
leaq 0x854c(%rip), %rcx      # 0xa91dd
cmoveq %rax, %rcx
leaq 0x19c6e(%rip), %rax     # 0xba90a
cmpb $0x0, 0x8(%rsp)
cmovneq %rcx, %rax
movq %rax, (%rbx)
movabsq $0x200000004, %rax      # imm = 0x200000004
movq %rax, 0x60(%rbx)
movabsq $0x100000001, %rax      # imm = 0x100000001
movq %rax, 0x70(%rbx)
jmp 0xa0ef1
movq 0x10(%r15), %rax
movq 0x10(%rax), %rsi
movq %r14, %rdi
callq 0x9fbc8
testb %al, %al
je 0xa0dfc
cmpb $0x0, 0x8(%rsp)
je 0xa0e9c
leaq 0x19b00(%rip), %rax     # 0xba7f3
movq %rax, (%rbx)
leaq -0x1971c(%rip), %rax    # 0x875e1
cmpq %rax, %r12
jne 0xa0aa3
movslq 0x2258(%r14), %rax
cmpq %rbx, 0x2250(%r14,%rax,8)
jne 0xa0aa3
movq 0x10(%rsp), %rax
movq 0x2260(%r14,%rax,8), %rax
leaq 0x11db(%rip), %rcx      # 0xa1f0a
cmpq %rcx, (%rax)
jne 0xa0aa3
leaq -0x1a9ce(%rip), %rcx    # 0x86371
cmpq %rcx, 0x10(%rax)
jne 0xa0aa3
leaq 0x19ae3(%rip), %rax     # 0xba833
movq %rax, (%rbx)
movq 0x10(%rsp), %rax
movq 0x2260(%r14,%rax,8), %rax
movq 0x8(%rax), %rax
movq %rax, 0x10(%rbx)
decl 0x2258(%r14)
jmp 0xa0aa3
movq 0x10(%r15), %rsi
movq %r14, %rdi
callq 0x9fbc8
testb %al, %al
je 0xa0dfc
movq 0x10(%r15), %rax
movq 0x10(%rax), %rsi
movq %r14, %rdi
callq 0x9fbc8
testb %al, %al
je 0xa0dfc
leaq 0x19dc6(%rip), %rax     # 0xbab65
leaq 0x19e1a(%rip), %rcx     # 0xbabc0
cmpb $0x0, 0x8(%rsp)
cmovneq %rax, %rcx
movq %rcx, (%rbx)
jmp 0xa0ef1
leaq 0x19afd(%rip), %rcx     # 0xba8bb
jmp 0xa0e1f
movq 0x10(%r15), %rax
movq 0x10(%rax), %rsi
movq %r14, %rdi
callq 0x9fbc8
testb %al, %al
je 0xa0dfc
cmpb $0x0, 0x8(%rsp)
je 0xa0ef8
leaq -0x19805(%rip), %rax    # 0x875e1
cmpq %rax, 0x18(%rbx)
je 0xa0f0a
leaq 0x19b5e(%rip), %rax     # 0xba955
jmp 0xa0ed9
movl 0x4(%rsp), %eax
movl %eax, 0x2258(%r14)
xorl %eax, %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xbef(%rip), %rcx       # 0xa1a0e
movq %rcx, (%rbx)
movq 0x8(%r15), %rcx
cmpq 0x1350(%r14), %rcx
jne 0xa0e46
cmpq $0x2, 0x8(%r13)
jl 0xa0e46
leaq 0xa7b7(%rip), %rax      # 0xab5f4
movq %rax, 0x18(%rbx)
jmp 0xa0edc
cmpq 0xbd8(%r14), %rcx
je 0xa0e7f
testq %rax, %rax
jle 0xa0edc
leaq -0x1aab1(%rip), %rcx    # 0x863ae
cmpq %rcx, %rbp
je 0xa0eab
cmpq $0x1, %rax
je 0xa0edc
leaq -0x1a9a0(%rip), %rax    # 0x864d1
cmpq %rax, %rbp
jne 0xa0edc
leaq 0x19a81(%rip), %rax     # 0xba8fe
jmp 0xa0eb2
testq %rax, %rax
js 0xa0eb8
cmpb $0x1, 0xa9dd5(%rip)     # 0x14ac60
jne 0xa0edc
cmpq $0x3e, %rax
ja 0xa0edc
leaq 0x19a51(%rip), %rax     # 0xba8eb
jmp 0xa0eb2
leaq 0x199d6(%rip), %rax     # 0xba879
movq %rax, (%rbx)
jmp 0xa0aa3
leaq 0x19a43(%rip), %rax     # 0xba8f5
movq %rax, 0x18(%rbx)
jmp 0xa0ed2
cmpq $-0x1, %rax
leaq 0x19a15(%rip), %rax     # 0xba8d8
leaq 0x19a15(%rip), %rcx     # 0xba8df
cmoveq %rax, %rcx
movq %rcx, 0x18(%rbx)
leaq 0x842d(%rip), %rax      # 0xa9306
movq %rax, (%rbx)
movabsq $0x100000004, %rax      # imm = 0x100000004
movq %rax, 0x60(%rbx)
movl $0x1, 0x70(%rbx)
movb $0x1, %al
jmp 0xa0e09
leaq 0x19a9e(%rip), %rax     # 0xba99d
jmp 0xa0ed9
leaq 0x19c1d(%rip), %rcx     # 0xbab25
jmp 0xa0f3f
leaq 0x19a1e(%rip), %rax     # 0xba92f
movq %rax, (%rbx)
movq 0x10(%rsp), %rax
movq 0x2260(%r14,%rax,8), %rax
movq %rax, 0x20(%rbx)
movq (%rax), %rax
movq %rax, 0x28(%rbx)
movabsq $0x100000006, %rax      # imm = 0x100000006
jmp 0xa0ee6
leaq 0x2aed(%rip), %rcx      # 0xa3a2c
movq %rcx, (%rbx)
movq 0x10(%rbx), %rcx
testq %rcx, %rcx
jle 0xa0e09
movq 0x18(%rbx), %rdx
leaq -0x1abac(%rip), %rsi    # 0x863ae
cmpq %rsi, %rdx
je 0xa0f84
cmpq $0x1, %rcx
sete %cl
leaq -0x1aa9c(%rip), %rsi    # 0x864d1
cmpq %rsi, %rdx
setne %dl
orb %cl, %dl
jne 0xa0e09
leaq 0x1997c(%rip), %rcx     # 0xba8fe
jmp 0xa0f8b
leaq 0x1996a(%rip), %rcx     # 0xba8f5
movq %rcx, 0x18(%rbx)
leaq 0x19b0c(%rip), %rcx     # 0xbaaa2
movq %rcx, (%rbx)
jmp 0xa0e09