// File: /workspace/github_c_makefile_star2_O0/BernardTatin[P]s7sh/s7.c
// Function: int_optimize
static bool int_optimize(s7_scheme *sc, s7_pointer expr)
                {
                    s7_pointer car_x, head;
                    /* fprintf(stderr, "%s: %s\n", __func__, DISPLAY(expr)); */
#if (WITH_GMP)
                    return(return_false(sc, car_x, __func__, __LINE__));
#endif
                    car_x = car(expr);

                    if (!is_pair(car_x)) /* wrap constants/symbols */
                        return(opt_int_not_pair(sc, car_x));

                    head = car(car_x);
                    if (is_symbol(head))
                    {
                        s7_pointer s_func;
                        s7_int len;
                        len = s7_list_length(sc, car_x);

                        if ((is_syntactic_symbol(head)) ||
                                (is_syntactic_pair(car_x)))
                            return(i_syntax_ok(sc, car_x, len));

                        if ((is_global(head)) ||
                                ((is_slot(global_slot(head))) &&
                                 (symbol_to_slot(sc, head) == global_slot(head))))
                            s_func = slot_value(global_slot(head));
                        else return(i_implicit_ok(sc, car_x, len));

                        if (is_c_function(s_func))
                        {
                            opt_info *opc;
                            opc = alloc_opo(sc, car_x);
                            switch (len)
                            {
                                case 2:
                                    if (i_idp_ok(sc, opc, s_func, car_x))
                                        return(true);
                                    break;

                                case 3:
                                    if ((i_ii_ok(sc, opc, s_func, car_x)) ||
                                            (i_7pi_ok(sc, opc, s_func, car_x)))
                                        return(true);
                                    break;

                                case 4:
                                    if ((i_iii_ok(sc, opc, s_func, car_x)) ||
                                            (i_7pii_ok(sc, opc, s_func, car_x)))
                                        return(true);
                                    break;

                                case 5:
                                    {
                                        int32_t pstart;
                                        pstart = sc->pc;
                                        if (i_7piii_ok(sc, opc, s_func, car_x))
                                            return(true);
                                        pc_fallback(sc, pstart);
                                    }
                                    /* break; */

                                default:
                                    if (((head == sc->add_symbol) ||
                                                (head == sc->multiply_symbol)) &&
                                            (i_add_any_ok(sc, opc, car_x)))
                                        return(true);
                                    break;
                            }
                        }
                        else
                        {
                            if (is_macro(s_func))
                            {
                                if (!no_cell_opt(expr))
                                    return(int_optimize(sc, set_plist_1(sc, s7_macroexpand(sc, s_func, cdar(expr)))));
                            }}}
                    return(return_false(sc, car_x, __func__, __LINE__));
                }

// Assembly:
subq $0x68, %rsp
movq %rdi, 0x58(%rsp)
movq %rsi, 0x50(%rsp)
movq 0x50(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x48(%rsp)
movq 0x48(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x1, %eax
je 0xe5a03
movq 0x58(%rsp), %rdi
movq 0x48(%rsp), %rsi
callq 0xe6540
andb $0x1, %al
movb %al, 0x67(%rsp)
jmp 0xe5d0c
movq 0x48(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x40(%rsp)
movq 0x40(%rsp), %rax
movzbl (%rax), %eax
cmpl $0xa, %eax
jne 0xe5d07
movq 0x58(%rsp), %rdi
movq 0x48(%rsp), %rsi
callq 0x31900
movq %rax, 0x30(%rsp)
movq 0x40(%rsp), %rax
movzwl (%rax), %eax
cmpl $0x20a, %eax            # imm = 0x20A
je 0xe5a54
movq 0x48(%rsp), %rax
movzwl (%rax), %eax
cmpl $0x201, %eax            # imm = 0x201
jne 0xe5a75
movq 0x58(%rsp), %rdi
movq 0x48(%rsp), %rsi
movq 0x30(%rsp), %rax
movl %eax, %edx
callq 0xe6630
andb $0x1, %al
movb %al, 0x67(%rsp)
jmp 0xe5d0c
movq 0x40(%rsp), %rax
movq (%rax), %rax
andq $0x10000, %rax          # imm = 0x10000
cmpq $0x0, %rax
jne 0xe5ab4
movq 0x40(%rsp), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %eax
cmpl $0x20, %eax
jne 0xe5ac8
movq 0x58(%rsp), %rdi
movq 0x40(%rsp), %rsi
callq 0xfc80
movq 0x40(%rsp), %rcx
cmpq 0x10(%rcx), %rax
jne 0xe5ac8
movq 0x40(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, 0x38(%rsp)
jmp 0xe5ae9
movq 0x58(%rsp), %rdi
movq 0x48(%rsp), %rsi
movq 0x30(%rsp), %rax
movl %eax, %edx
callq 0xe6960
andb $0x1, %al
movb %al, 0x67(%rsp)
jmp 0xe5d0c
movq 0x38(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x30, %eax
jl 0xe5c8e
movq 0x58(%rsp), %rdi
callq 0xe15e0
movq %rax, 0x28(%rsp)
movq 0x30(%rsp), %rax
addq $-0x2, %rax
movq %rax, 0x18(%rsp)
subq $0x3, %rax
ja 0xe5c40
movq 0x18(%rsp), %rax
leaq 0xf9fbf(%rip), %rcx     # 0x1dfaec
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x58(%rsp), %rdi
movq 0x28(%rsp), %rsi
movq 0x38(%rsp), %rdx
movq 0x48(%rsp), %rcx
callq 0xe6e60
testb $0x1, %al
jne 0xe5b55
jmp 0xe5b5f
movb $0x1, 0x67(%rsp)
jmp 0xe5d0c
jmp 0xe5c8c
movq 0x58(%rsp), %rdi
movq 0x28(%rsp), %rsi
movq 0x38(%rsp), %rdx
movq 0x48(%rsp), %rcx
callq 0xe7310
testb $0x1, %al
jne 0xe5ba0
movq 0x58(%rsp), %rdi
movq 0x28(%rsp), %rsi
movq 0x38(%rsp), %rdx
movq 0x48(%rsp), %rcx
callq 0xe7d30
testb $0x1, %al
jne 0xe5ba0
jmp 0xe5baa
movb $0x1, 0x67(%rsp)
jmp 0xe5d0c
jmp 0xe5c8c
movq 0x58(%rsp), %rdi
movq 0x28(%rsp), %rsi
movq 0x38(%rsp), %rdx
movq 0x48(%rsp), %rcx
callq 0xe8010
testb $0x1, %al
jne 0xe5beb
movq 0x58(%rsp), %rdi
movq 0x28(%rsp), %rsi
movq 0x38(%rsp), %rdx
movq 0x48(%rsp), %rcx
callq 0xe8110
testb $0x1, %al
jne 0xe5beb
jmp 0xe5bf5
movb $0x1, 0x67(%rsp)
jmp 0xe5d0c
jmp 0xe5c8c
movq 0x58(%rsp), %rax
movl 0x2258(%rax), %eax
movl %eax, 0x24(%rsp)
movq 0x58(%rsp), %rdi
movq 0x28(%rsp), %rsi
movq 0x38(%rsp), %rdx
movq 0x48(%rsp), %rcx
callq 0xe8560
testb $0x1, %al
jne 0xe5c28
jmp 0xe5c32
movb $0x1, 0x67(%rsp)
jmp 0xe5d0c
movq 0x58(%rsp), %rdi
movl 0x24(%rsp), %esi
callq 0xe59a0
movq 0x40(%rsp), %rax
movq 0x58(%rsp), %rcx
cmpq 0xba8(%rcx), %rax
je 0xe5c66
movq 0x40(%rsp), %rax
movq 0x58(%rsp), %rcx
cmpq 0x1358(%rcx), %rax
jne 0xe5c8a
movq 0x58(%rsp), %rdi
movq 0x28(%rsp), %rsi
movq 0x48(%rsp), %rdx
callq 0xe8770
testb $0x1, %al
jne 0xe5c80
jmp 0xe5c8a
movb $0x1, 0x67(%rsp)
jmp 0xe5d0c
jmp 0xe5c8c
jmp 0xe5d05
movq 0x38(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x2a, %eax
jne 0xe5d03
movq 0x50(%rsp), %rax
movq (%rax), %rax
andq $0x4000000, %rax        # imm = 0x4000000
cmpq $0x0, %rax
jne 0xe5d01
movq 0x58(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x58(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x58(%rsp), %rdi
movq 0x38(%rsp), %rsi
movq 0x50(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rdx
callq 0xe46b0
movq 0x8(%rsp), %rdi
movq %rax, %rsi
callq 0x35ea0
movq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0xe59c0
andb $0x1, %al
movb %al, 0x67(%rsp)
jmp 0xe5d0c
jmp 0xe5d03
jmp 0xe5d05
jmp 0xe5d07
movb $0x0, 0x67(%rsp)
movb 0x67(%rsp), %al
andb $0x1, %al
addq $0x68, %rsp
retq
nopw (%rax,%rax)