// File: /workspace/github_c_makefile_star2_O0/BernardTatin[P]s7sh/s7.c
// Function: p_call_ppp_ok
static bool p_call_ppp_ok(s7_scheme *sc, opt_info *opc, s7_pointer s_func, s7_pointer car_x)
                {
                    int32_t start;
                    start = sc->pc;
                    /* css (tbig (<= 2 m j)) ccs scs cfc ssf sfc fsc -- ssf then maybe scs */
                    if ((is_safe_procedure(s_func)) &&
                            (c_function_required_args(s_func) <= 3) &&
                            (c_function_all_args(s_func) >= 3))
                    {
                        s7_pointer slot, arg;
                        arg = cadr(car_x);
                        if (is_symbol(arg))
                        {
                            slot = opt_simple_symbol(sc, arg);
                            if (slot)
                            {
                                opc->v[1].p = slot;
                                arg = caddr(car_x);
                                if (is_symbol(arg))
                                {
                                    slot = opt_simple_symbol(sc, arg);
                                    if (slot)
                                    {
                                        opc->v[2].p = slot;
                                        arg = cadddr(car_x);
                                        if (is_symbol(arg))
                                        {
                                            slot = opt_simple_symbol(sc, arg);
                                            if (slot)
                                            {
                                                opc->v[3].p = slot;
                                                opc->v[4].call = cf_call(sc, car_x, s_func, 3);
                                                opc->v[0].fp = opt_p_call_sss;
                                                return(oo_set_type_3(opc, 5, 1, 2, 3, OO_P, OO_P, OO_P));
                                            }
                                        }
                                        else
                                        {
                                            if (cell_optimize(sc, cdddr(car_x)))
                                            {
                                                opc->v[4].call = cf_call(sc, car_x, s_func, 3);
                                                opc->v[0].fp = opt_p_call_ssf;
                                                return(oo_set_type_2(opc, 5, 1, 2, OO_P, OO_P));
                                            }}}}}}
                        if ((cell_optimize(sc, cdr(car_x))) &&
                                (cell_optimize(sc, cddr(car_x))) &&
                                (cell_optimize(sc, cdddr(car_x))))
                        {
                            opc->v[2].call = cf_call(sc, car_x, s_func, 3);
                            opc->v[0].fp = opt_p_call_ppp;
                            return(oo_set_type_0(opc, 3));
                        }
                    }
                    pc_fallback(sc, start);
                    return(return_false(sc, car_x, __func__, __LINE__));
                }

// Assembly:
subq $0x78, %rsp
movq %rdi, 0x68(%rsp)
movq %rsi, 0x60(%rsp)
movq %rdx, 0x58(%rsp)
movq %rcx, 0x50(%rsp)
movq 0x68(%rsp), %rax
movl 0x2258(%rax), %eax
movl %eax, 0x4c(%rsp)
movq 0x58(%rsp), %rax
movq (%rax), %rax
andq $0x200000, %rax         # imm = 0x200000
cmpq $0x0, %rax
je 0xef6de
movq 0x58(%rsp), %rax
cmpq $0x3, 0x18(%rax)
jg 0xef6de
movq 0x58(%rsp), %rax
cmpq $0x3, 0x28(%rax)
jl 0xef6de
movq 0x50(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, 0x38(%rsp)
movq 0x38(%rsp), %rax
movzbl (%rax), %eax
cmpl $0xa, %eax
jne 0xef5c0
movq 0x68(%rsp), %rdi
movq 0x38(%rsp), %rsi
callq 0xefdf0
movq %rax, 0x40(%rsp)
cmpq $0x0, 0x40(%rsp)
je 0xef5be
movq 0x40(%rsp), %rcx
movq 0x60(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x50(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, 0x38(%rsp)
movq 0x38(%rsp), %rax
movzbl (%rax), %eax
cmpl $0xa, %eax
jne 0xef5bc
movq 0x68(%rsp), %rdi
movq 0x38(%rsp), %rsi
callq 0xefdf0
movq %rax, 0x40(%rsp)
cmpq $0x0, 0x40(%rsp)
je 0xef5ba
movq 0x40(%rsp), %rcx
movq 0x60(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0x50(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, 0x38(%rsp)
movq 0x38(%rsp), %rax
movzbl (%rax), %eax
cmpl $0xa, %eax
jne 0xef4bc
movq 0x68(%rsp), %rdi
movq 0x38(%rsp), %rsi
callq 0xefdf0
movq %rax, 0x40(%rsp)
cmpq $0x0, 0x40(%rsp)
je 0xef4b7
movq 0x40(%rsp), %rcx
movq 0x60(%rsp), %rax
movq %rcx, 0x18(%rax)
movq 0x50(%rsp), %rax
movzwl (%rax), %eax
cmpl $0x801, %eax            # imm = 0x801
jne 0xef41b
movq 0x50(%rsp), %rax
movzwl 0x4(%rax), %eax
cmpl $0x4, %eax
jl 0xef41b
movq 0x50(%rsp), %rax
movzwl 0x4(%rax), %eax
cmpl $0x17f, %eax            # imm = 0x17F
jl 0xef40b
movq 0x50(%rsp), %rax
movzwl 0x4(%rax), %eax
cmpl $0x185, %eax            # imm = 0x185
jle 0xef41b
movq 0x50(%rsp), %rax
movq 0x20(%rax), %rax
movq %rax, 0x30(%rsp)
jmp 0xef44a
movq 0x58(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x48(%rax), %rax
movq 0x68(%rsp), %rdi
movq 0x58(%rsp), %rsi
movq 0x50(%rsp), %rcx
movl $0x3, %edx
xorl %r8d, %r8d
callq *%rax
movq 0x10(%rax), %rax
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rcx
movq 0x60(%rsp), %rax
movq %rcx, 0x20(%rax)
movq 0x60(%rsp), %rax
leaq 0x13b4c(%rip), %rcx     # 0x102fb0
movq %rcx, (%rax)
movq 0x60(%rsp), %rdi
movl $0x5, %esi
movl $0x1, %edx
movl $0x2, %ecx
movl $0x3, %r8d
xorl %r9d, %r9d
leaq 0x10002d(%rip), %rax    # 0x1ef4b8
movl $0x0, (%rsp)
movl $0x0, 0x8(%rsp)
movq %rax, 0x10(%rsp)
movl $0xf207, 0x18(%rsp)     # imm = 0xF207
callq 0xe53d0
andb $0x1, %al
movb %al, 0x77(%rsp)
jmp 0xef6f1
jmp 0xef5b8
movq 0x68(%rsp), %rdi
movq 0x50(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rsi
callq 0xe9db0
testb $0x1, %al
jne 0xef4e0
jmp 0xef5b6
movq 0x50(%rsp), %rax
movzwl (%rax), %eax
cmpl $0x801, %eax            # imm = 0x801
jne 0xef52d
movq 0x50(%rsp), %rax
movzwl 0x4(%rax), %eax
cmpl $0x4, %eax
jl 0xef52d
movq 0x50(%rsp), %rax
movzwl 0x4(%rax), %eax
cmpl $0x17f, %eax            # imm = 0x17F
jl 0xef51d
movq 0x50(%rsp), %rax
movzwl 0x4(%rax), %eax
cmpl $0x185, %eax            # imm = 0x185
jle 0xef52d
movq 0x50(%rsp), %rax
movq 0x20(%rax), %rax
movq %rax, 0x28(%rsp)
jmp 0xef55c
movq 0x58(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x48(%rax), %rax
movq 0x68(%rsp), %rdi
movq 0x58(%rsp), %rsi
movq 0x50(%rsp), %rcx
movl $0x3, %edx
xorl %r8d, %r8d
callq *%rax
movq 0x10(%rax), %rax
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rcx
movq 0x60(%rsp), %rax
movq %rcx, 0x20(%rax)
movq 0x60(%rsp), %rax
leaq 0x13aaa(%rip), %rcx     # 0x103020
movq %rcx, (%rax)
movq 0x60(%rsp), %rdi
movl $0x5, %esi
movl $0x1, %edx
movl $0x2, %ecx
xorl %r9d, %r9d
leaq 0xfff21(%rip), %rax     # 0x1ef4b8
movl %r9d, %r8d
movq %rax, (%rsp)
movl $0xf210, 0x8(%rsp)      # imm = 0xF210
callq 0xe54b0
andb $0x1, %al
movb %al, 0x77(%rsp)
jmp 0xef6f1
jmp 0xef5b8
jmp 0xef5ba
jmp 0xef5bc
jmp 0xef5be
jmp 0xef5c0
movq 0x68(%rsp), %rdi
movq 0x50(%rsp), %rax
movq 0x10(%rax), %rsi
callq 0xe9db0
testb $0x1, %al
jne 0xef5dc
jmp 0xef6dc
movq 0x68(%rsp), %rdi
movq 0x50(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rsi
callq 0xe9db0
testb $0x1, %al
jne 0xef5fc
jmp 0xef6dc
movq 0x68(%rsp), %rdi
movq 0x50(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rsi
callq 0xe9db0
testb $0x1, %al
jne 0xef620
jmp 0xef6dc
movq 0x50(%rsp), %rax
movzwl (%rax), %eax
cmpl $0x801, %eax            # imm = 0x801
jne 0xef66d
movq 0x50(%rsp), %rax
movzwl 0x4(%rax), %eax
cmpl $0x4, %eax
jl 0xef66d
movq 0x50(%rsp), %rax
movzwl 0x4(%rax), %eax
cmpl $0x17f, %eax            # imm = 0x17F
jl 0xef65d
movq 0x50(%rsp), %rax
movzwl 0x4(%rax), %eax
cmpl $0x185, %eax            # imm = 0x185
jle 0xef66d
movq 0x50(%rsp), %rax
movq 0x20(%rax), %rax
movq %rax, 0x20(%rsp)
jmp 0xef69c
movq 0x58(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x48(%rax), %rax
movq 0x68(%rsp), %rdi
movq 0x58(%rsp), %rsi
movq 0x50(%rsp), %rcx
movl $0x3, %edx
xorl %r8d, %r8d
callq *%rax
movq 0x10(%rax), %rax
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rcx
movq 0x60(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0x60(%rsp), %rax
leaq 0x13a2a(%rip), %rcx     # 0x1030e0
movq %rcx, (%rax)
movq 0x60(%rsp), %rdi
movl $0x3, %esi
leaq 0xffdee(%rip), %rdx     # 0x1ef4b8
movl $0xf218, %ecx           # imm = 0xF218
callq 0xe4820
andb $0x1, %al
movb %al, 0x77(%rsp)
jmp 0xef6f1
jmp 0xef6de
movq 0x68(%rsp), %rdi
movl 0x4c(%rsp), %esi
callq 0xe59a0
movb $0x0, 0x77(%rsp)
movb 0x77(%rsp), %al
andb $0x1, %al
addq $0x78, %rsp
retq
nopl (%rax)