// File: /workspace/github_c_makefile_star2_O0/BernardTatin[P]s7sh/s7.c
// Function: check_type_uncertainty
static bool check_type_uncertainty(s7_scheme *sc, s7_pointer target, s7_pointer car_x, opt_info *opc, int32_t start_pc)
                {
                    /* fprintf(stderr, "%s[%d]: %s\n", __func__, __LINE__, DISPLAY(sc->code)); */

                    /* maybe the type uncertainty is not a problem */
                    if ((is_pair(sc->code)) &&      /* t101-aux-14: (vector-set! !v! 0 (do ((x (list 1 2 3) (cdr x)) (j -1)) ((null? x) j) (set! j (car x)))) */
                            (is_pair(car(sc->code))) &&
                            (is_pair(cadr(sc->code))))
                    {
                        s7_int counts;
                        if (!has_high_c(sc->code))
                        {
                            if (is_pair(caar(sc->code)))
                            {
                                s7_pointer p;
                                counts = tree_count(sc, target, car(sc->code), 0) +
                                    tree_count(sc, target, caadr(sc->code), 0) +
                                    tree_count(sc, target, cddr(sc->code), 0);
                                for (p = car(sc->code); is_pair(p); p = cdr(p))
                                {
                                    s7_pointer var;
                                    var = car(p);
                                    if ((is_proper_list_2(sc, var)) &&
                                            (car(var) == target))
                                        counts--;
                                }
                            }
                            else counts = tree_count(sc, target, sc->code, 0);
                        }
                        else counts = 2;
                        /* can be from lambda: (lambda (n)...): ((n) (set! sum (+ sum n))) etc */
                        if (counts <= 2)
                        {
                            set_has_high_c(sc->code);
                            pc_fallback(sc, start_pc);
                            if (cell_optimize(sc, cddr(car_x)))
                            {
                                opc->v[0].fp = opt_set_p_p_f;
                                opc->v[3].o1 = sc->opts[start_pc];
                                opc->v[4].fp = sc->opts[start_pc]->v[0].fp;
                                return(oo_set_type_1(opc, 5, 1, OO_P));
                            }
                        }
                    }
                    /* fprintf(stderr, "unhappy %s\n", DISPLAY_80(sc->code)); */
                    return(return_false(sc, car_x, __func__, __LINE__));
                }

// Assembly:
subq $0x58, %rsp
movq %rdi, 0x48(%rsp)
movq %rsi, 0x40(%rsp)
movq %rdx, 0x38(%rsp)
movq %rcx, 0x30(%rsp)
movl %r8d, 0x2c(%rsp)
movq 0x48(%rsp), %rax
movq (%rax), %rax
movzbl (%rax), %eax
cmpl $0x1, %eax
jne 0xf5699
movq 0x48(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rax
movzbl (%rax), %eax
cmpl $0x1, %eax
jne 0xf5699
movq 0x48(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movzbl (%rax), %eax
cmpl $0x1, %eax
jne 0xf5699
movq 0x48(%rsp), %rax
movq (%rax), %rax
movq (%rax), %rax
andq $0x100000, %rax         # imm = 0x100000
cmpq $0x0, %rax
jne 0xf55cd
movq 0x48(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rax
movzbl (%rax), %eax
cmpl $0x1, %eax
jne 0xf55ab
movq 0x48(%rsp), %rdi
movq 0x40(%rsp), %rsi
movq 0x48(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rdx
xorl %eax, %eax
movl %eax, %ecx
callq 0xf76c0
movq %rax, (%rsp)
movq 0x48(%rsp), %rdi
movq 0x40(%rsp), %rsi
movq 0x48(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rdx
xorl %eax, %eax
movl %eax, %ecx
callq 0xf76c0
movq %rax, %rcx
movq (%rsp), %rax
addq %rcx, %rax
movq %rax, 0x8(%rsp)
movq 0x48(%rsp), %rdi
movq 0x40(%rsp), %rsi
movq 0x48(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rdx
xorl %eax, %eax
movl %eax, %ecx
callq 0xf76c0
movq %rax, %rcx
movq 0x8(%rsp), %rax
addq %rcx, %rax
movq %rax, 0x20(%rsp)
movq 0x48(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x1, %eax
jne 0xf55a9
movq 0x18(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x48(%rsp), %rdi
movq 0x10(%rsp), %rsi
callq 0xf7790
testb $0x1, %al
jne 0xf5579
jmp 0xf5597
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rax
cmpq 0x40(%rsp), %rax
jne 0xf5597
movq 0x20(%rsp), %rax
addq $-0x1, %rax
movq %rax, 0x20(%rsp)
jmp 0xf5599
movq 0x18(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x18(%rsp)
jmp 0xf5549
jmp 0xf55cb
movq 0x48(%rsp), %rdi
movq 0x40(%rsp), %rsi
movq 0x48(%rsp), %rax
movq (%rax), %rdx
xorl %eax, %eax
movl %eax, %ecx
callq 0xf76c0
movq %rax, 0x20(%rsp)
jmp 0xf55d6
movq $0x2, 0x20(%rsp)
cmpq $0x2, 0x20(%rsp)
jg 0xf5697
movq 0x48(%rsp), %rax
movq (%rax), %rax
movq (%rax), %rcx
orq $0x100000, %rcx         # imm = 0x100000
movq %rcx, (%rax)
movq 0x48(%rsp), %rdi
movl 0x2c(%rsp), %esi
callq 0xe59a0
movq 0x48(%rsp), %rdi
movq 0x38(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rsi
callq 0xe9db0
testb $0x1, %al
jne 0xf5622
jmp 0xf5695
movq 0x30(%rsp), %rax
leaq 0x7a2(%rip), %rcx       # 0xf5dd0
movq %rcx, (%rax)
movq 0x48(%rsp), %rax
movslq 0x2c(%rsp), %rcx
movq 0x2260(%rax,%rcx,8), %rcx
movq 0x30(%rsp), %rax
movq %rcx, 0x18(%rax)
movq 0x48(%rsp), %rax
movslq 0x2c(%rsp), %rcx
movq 0x2260(%rax,%rcx,8), %rax
movq (%rax), %rcx
movq 0x30(%rsp), %rax
movq %rcx, 0x20(%rax)
movq 0x30(%rsp), %rdi
movl $0x5, %esi
movl $0x1, %edx
xorl %ecx, %ecx
leaq 0xf9c68(%rip), %r8      # 0x1ef2ea
movl $0xf41b, %r9d           # imm = 0xF41B
callq 0xe4950
andb $0x1, %al
movb %al, 0x57(%rsp)
jmp 0xf569e
jmp 0xf5697
jmp 0xf5699
movb $0x0, 0x57(%rsp)
movb 0x57(%rsp), %al
andb $0x1, %al
addq $0x58, %rsp
retq
nopl (%rax)