// File: /workspace/github_c_makefile_star2_O1/BernardTatin[P]s7sh/s7.c
// Function: p_call_pp_ok
static bool p_call_pp_ok(s7_scheme *sc, opt_info *opc, s7_pointer s_func, s7_pointer car_x, int32_t pstart)
                {
                    if ((is_safe_procedure(s_func)) &&
                            (c_function_required_args(s_func) <= 2) &&
                            (c_function_all_args(s_func) >= 2))
                    {
                        /* if optimized, we want to use the current c_call (to take advantage of fixups like substring_temp),
                         *   but those same fixups are incorrect for this context if op_safe_c_c related.
                         */
                        opc->v[3].call = cf_call(sc, car_x, s_func, 2);
                        if (is_symbol(cadr(car_x)))
                        {
                            opc->v[1].p = symbol_to_slot(sc, cadr(car_x));
                            if ((is_slot(opc->v[1].p)) &&
                                    (!has_methods(slot_value(opc->v[1].p))))
                            {
                                if (is_symbol(caddr(car_x)))
                                {
                                    opc->v[2].p = opt_simple_symbol(sc, caddr(car_x));
                                    if (opc->v[2].p)
                                    {
                                        opc->v[0].fp = opt_p_call_ss;
                                        return(oo_set_type_2(opc, 4, 1, 2, OO_P, OO_P));
                                    }
                                    pc_fallback(sc, pstart);
                                    return(return_false(sc, car_x, __func__, __LINE__));
                                }
                                if (!is_pair(caddr(car_x)))
                                {
                                    opc->v[2].p = caddr(car_x);
                                    opc->v[0].fp = opt_p_call_sc;
                                    return(oo_set_type_1(opc, 4, 1, OO_P));
                                }
                                if (cell_optimize(sc, cddr(car_x)))
                                {
                                    opc->v[0].fp = opt_p_call_sf;
                                    return(oo_set_type_1(opc, 4, 1, OO_P));
                                }
                            }
                            else
                            {
                                pc_fallback(sc, pstart);
                                return(return_false(sc, car_x, __func__, __LINE__));
                            }
                        }
                        if (cell_optimize(sc, cdr(car_x)))
                        {
                            if (is_symbol(caddr(car_x)))
                            {
                                opc->v[1].p = opt_simple_symbol(sc, caddr(car_x));
                                if (opc->v[1].p)
                                {
                                    opc->v[0].fp = opt_p_call_fs;
                                    return(oo_set_type_1(opc, 4, 1, OO_P));
                                }
                                pc_fallback(sc, pstart);
                                return(return_false(sc, car_x, __func__, __LINE__));
                            }
                            if (cell_optimize(sc, cddr(car_x)))
                            {
                                opc->v[0].fp = opt_p_call_ff;
                                return(oo_set_type_0(opc, 4));
                            }
                        }
                    }
                    pc_fallback(sc, pstart);
                    return(return_false(sc, car_x, __func__, __LINE__));
                }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %r8d, %ebp
movq %rdi, %r14
testb $0x20, 0x2(%rdx)
je 0xaaec0
cmpq $0x2, 0x18(%rdx)
jg 0xaaec0
cmpq $0x2, 0x28(%rdx)
jl 0xaaec0
movq %rcx, %r15
movq %rsi, %rbx
cmpw $0x801, (%rcx)          # imm = 0x801
jne 0xaad3f
movzwl 0x4(%r15), %eax
leal -0x17f(%rax), %ecx
cmpl $0x7, %ecx
jb 0xaad3f
cmpl $0x4, %eax
jae 0xaaefb
movq 0x8(%rdx), %rax
movq %r14, %rdi
movq %rdx, %rsi
movl $0x2, %edx
movq %r15, %rcx
xorl %r8d, %r8d
callq *0x48(%rax)
addq $0x10, %rax
movq (%rax), %rax
movq %rax, 0x18(%rbx)
movq 0x10(%r15), %rax
movq 0x8(%rax), %rax
cmpb $0xa, (%rax)
jne 0xaae62
movq 0x8(%r14), %rdx
movq 0x18(%rdx), %rdi
movq 0x20(%rax), %rsi
movl $0x18, %ecx
cmpq %rsi, %rdi
je 0xaadd4
jle 0xaad98
movq 0x10(%rdx), %rdx
movq 0x18(%rdx), %rdi
cmpq %rdi, %rsi
jl 0xaad8b
cmpq %rsi, %rdi
je 0xaadd4
movl $0x10, %ecx
cmpb $0x1c, (%rdx)
jne 0xaadd4
movq 0x8(%rdx), %rsi
testq %rsi, %rsi
sete %r8b
je 0xaadc0
cmpq %rax, 0x8(%rsi)
je 0xaadc3
movq 0x18(%rsi), %rsi
jmp 0xaadab
movq %rdi, %rsi
testb %r8b, %r8b
je 0xaadd8
movq 0x10(%rdx), %rdx
cmpb $0x1c, (%rdx)
movq %rsi, %rdi
je 0xaada7
movq (%rax,%rcx), %rsi
movq %rsi, 0x8(%rbx)
cmpb $0x20, (%rsi)
jne 0xaaec0
movq 0x10(%rsi), %rax
testb $0x40, 0x3(%rax)
jne 0xaaec0
movq 0x10(%r15), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rsi
movzbl (%rsi), %ecx
cmpl $0x1, %ecx
je 0xaae4a
cmpl $0xa, %ecx
jne 0xaaed4
movq %r14, %rdi
callq 0xac2d6
movq %rax, 0x10(%rbx)
testq %rax, %rax
je 0xaaec0
leaq 0xb4da(%rip), %rax      # 0xb6306
movq %rax, (%rbx)
movabsq $0x200000004, %rax      # imm = 0x200000004
movq %rax, 0x60(%rbx)
movq $0x0, 0x70(%rbx)
jmp 0xaaef7
movq %r14, %rdi
movq %rax, %rsi
callq 0xa8bbb
testb %al, %al
je 0xaae62
leaq 0xb516(%rip), %rax      # 0xb6376
jmp 0xaaedf
movq 0x10(%r15), %rsi
movq %r14, %rdi
callq 0xa8bbb
testb %al, %al
je 0xaaec0
movq 0x10(%r15), %rax
movq 0x10(%rax), %rsi
movq 0x8(%rsi), %rax
cmpb $0xa, (%rax)
jne 0xaaea0
movq %r14, %rdi
movq %rax, %rsi
callq 0xac2d6
movq %rax, 0x8(%rbx)
testq %rax, %rax
je 0xaaec0
leaq 0xb534(%rip), %rax      # 0xb63d2
jmp 0xaaedf
movq %r14, %rdi
callq 0xa8bbb
testb %al, %al
je 0xaaec0
leaq 0xb572(%rip), %rax      # 0xb6425
movq %rax, (%rbx)
movq $0x4, 0x60(%rbx)
jmp 0xaaef7
movl %ebp, 0x2258(%r14)
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movq %rsi, 0x10(%rbx)
leaq 0xb461(%rip), %rax      # 0xb6340
movq %rax, (%rbx)
movabsq $0x100000004, %rax      # imm = 0x100000004
movq %rax, 0x60(%rbx)
movl $0x0, 0x70(%rbx)
movb $0x1, %al
jmp 0xaaec9
leaq 0x20(%r15), %rax
jmp 0xaad5b