// File: /workspace/github_c_makefile_star2_O0/pahihu[P]mixal/run.c
// Function: xecute
static void xecute(Address address, Flag save_context)
{
    Byte I;
    Byte saved_C = 0;
    Byte saved_F = 0;
    Cell saved_M = zero;
    Address saved_pc = 0;

    if (true == save_context) {
        saved_C = C;
        saved_F = F;
        saved_M = M;
        saved_pc = pc;
        pc = address;
    }

    destructure_cell(safe_fetch(pc), M, I, F, C);

    /* --- Indirect addressing --- */
    if (I != 0) {
       if (I < 7)
           /* (the add can't overflow because the numbers are too small) */
           M = add(M, r[I]);
       else {
           if (0 == (mix_config & MIXCONFIG_INDEX))
               error("Not a Mixmaster. Invalid I-field: %02o", I);
           M = effective_address(pc);
       }
    }

    wait_state = false;
    rti_done = false;
    increment_frequency(pc); pc++;
    op_table[C].action();
    if (save_context)
        elapsed_time += op_table[C].clocks;

    if (true == wait_state)
        pc--;

    if (save_context) {
        C  = saved_C;
        F  = saved_F;
        M  = saved_M;
        pc = saved_pc;
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movl %edi, -0x4(%rbp)
movl %esi, -0x8(%rbp)
movl $0x0, -0x10(%rbp)
movl $0x0, -0x14(%rbp)
movq $0x0, -0x20(%rbp)
movl $0x0, -0x24(%rbp)
movl $0x1, %eax
cmpl -0x8(%rbp), %eax
jne 0x9974
movl 0xa4bd(%rip), %eax      # 0x13e08
movl %eax, -0x10(%rbp)
movl 0xa4b8(%rip), %eax      # 0x13e0c
movl %eax, -0x14(%rbp)
movq 0xa4b2(%rip), %rax      # 0x13e10
movq %rax, -0x20(%rbp)
movl 0xa468(%rip), %eax      # 0x13dd0
movl %eax, -0x24(%rbp)
movl -0x4(%rbp), %eax
movl %eax, 0xa45c(%rip)      # 0x13dd0
jmp 0x9976
movl 0xa454(%rip), %edi      # 0x13dd0
callq 0x94b0
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
andq $0x40000000, %rax       # imm = 0x40000000
movq %rax, -0x38(%rbp)
movq -0x30(%rbp), %rax
andq $0x3f, %rax
movl %eax, 0xa467(%rip)      # 0x13e08
movq -0x30(%rbp), %rax
sarq $0x6, %rax
movq %rax, -0x30(%rbp)
andq $0x3f, %rax
movl %eax, 0xa455(%rip)      # 0x13e0c
movq -0x30(%rbp), %rax
sarq $0x6, %rax
movq %rax, -0x30(%rbp)
andq $0x3f, %rax
movl %eax, -0xc(%rbp)
movq -0x38(%rbp), %rax
movq -0x30(%rbp), %rcx
sarq $0x6, %rcx
andq $0xfff, %rcx            # imm = 0xFFF
orq %rcx, %rax
movq %rax, 0xa429(%rip)      # 0x13e10
cmpl $0x0, -0xc(%rbp)
je 0x9a4c
cmpl $0x7, -0xc(%rbp)
jae 0x9a18
movq 0xa416(%rip), %rdi      # 0x13e10
movl -0xc(%rbp), %eax
movl %eax, %ecx
leaq 0xa37a(%rip), %rax      # 0x13d80
movq (%rax,%rcx,8), %rsi
callq 0x3b50
movq %rax, 0xa3fa(%rip)      # 0x13e10
jmp 0x9a4a
movl 0xa33e(%rip), %ecx      # 0x13d5c
andl $0x20, %ecx
xorl %eax, %eax
cmpl %ecx, %eax
jne 0x9a38
movl -0xc(%rbp), %esi
leaq 0x3b3b(%rip), %rdi      # 0xd56c
movb $0x0, %al
callq 0x74b0
movl 0xa392(%rip), %edi      # 0x13dd0
callq 0xb0a0
movq %rax, 0xa3c6(%rip)      # 0x13e10
jmp 0x9a4c
movl $0x0, 0xa39a(%rip)      # 0x13df0
movl $0x0, 0xa488(%rip)      # 0x13ee8
movl 0xa36a(%rip), %edi      # 0x13dd0
callq 0xb270
movl 0xa35f(%rip), %eax      # 0x13dd0
addl $0x1, %eax
movl %eax, 0xa356(%rip)      # 0x13dd0
movl 0xa388(%rip), %eax      # 0x13e08
movl %eax, %ecx
leaq 0x7d57(%rip), %rax      # 0x117e0
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
callq *(%rax)
cmpl $0x0, -0x8(%rbp)
je 0x9abf
movl 0xa36a(%rip), %eax      # 0x13e08
movl %eax, %ecx
leaq 0x7d39(%rip), %rax      # 0x117e0
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movl 0x8(%rax), %eax
addq 0xa298(%rip), %rax      # 0x13d50
movq %rax, 0xa291(%rip)      # 0x13d50
movl $0x1, %eax
cmpl 0xa326(%rip), %eax      # 0x13df0
jne 0x9adb
movl 0xa2fe(%rip), %eax      # 0x13dd0
addl $-0x1, %eax
movl %eax, 0xa2f5(%rip)      # 0x13dd0
cmpl $0x0, -0x8(%rbp)
je 0x9b07
movl -0x10(%rbp), %eax
movl %eax, 0xa31e(%rip)      # 0x13e08
movl -0x14(%rbp), %eax
movl %eax, 0xa319(%rip)      # 0x13e0c
movq -0x20(%rbp), %rax
movq %rax, 0xa312(%rip)      # 0x13e10
movl -0x24(%rbp), %eax
movl %eax, 0xa2c9(%rip)      # 0x13dd0
addq $0x40, %rsp
popq %rbp
retq
nopl (%rax)