// File: /workspace/github_c_makefile_star2_O1/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
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movl %esi, %ebp
cmpl $0x1, %esi
jne 0x7491
movl 0x9974(%rip), %r13d     # 0x10de8
movl 0x9971(%rip), %r12d     # 0x10dec
movq 0x996e(%rip), %r14      # 0x10df0
movl 0x9927(%rip), %r15d     # 0x10db0
movl %edi, 0x9921(%rip)      # 0x10db0
jmp 0x749d
xorl %r14d, %r14d
xorl %r15d, %r15d
xorl %r12d, %r12d
xorl %r13d, %r13d
movl 0x990d(%rip), %edi      # 0x10db0
callq 0x7109
movl %eax, %ecx
andl $0x40000000, %ecx       # imm = 0x40000000
movl %eax, %edx
andl $0x3f, %edx
movl %edx, 0x992d(%rip)      # 0x10de8
movl %eax, %edx
shrl $0x6, %edx
andl $0x3f, %edx
movl %edx, 0x9923(%rip)      # 0x10dec
movl %eax, %esi
shrl $0xc, %esi
shrl $0x12, %eax
andl $0xfff, %eax            # imm = 0xFFF
orq %rcx, %rax
movq %rax, 0x9910(%rip)      # 0x10df0
andl $0x3f, %esi
je 0x76a2
cmpl $0x6, %esi
ja 0x7508
movl %esi, %ecx
leaq 0x9869(%rip), %rdx      # 0x10d60
movq (%rdx,%rcx,8), %rsi
movq %rax, %rdi
callq 0x3b00
jmp 0x769b
movl %r13d, 0x8(%rsp)
movl %r12d, 0xc(%rsp)
movl %r15d, 0x10(%rsp)
movq %r14, 0x20(%rsp)
movl %ebp, 0x14(%rsp)
testb $0x20, 0x9815(%rip)     # 0x10d3c
jne 0x7537
leaq 0x2e0f(%rip), %rdi      # 0xa33f
xorl %eax, %eax
callq 0x5bbc
movl 0x9873(%rip), %edi      # 0x10db0
callq 0x7109
movq %rax, %r15
andl $0x40000000, %eax       # imm = 0x40000000
movl %r15d, %r13d
shrl $0xc, %r13d
movl %r15d, %r14d
shrl $0x12, %r14d
andl $0xfff, %r14d           # imm = 0xFFF
orq %rax, %r14
shrl $0xf, %r15d
movl %r15d, %ebp
andl $0x7, %ebp
setne %al
movl %r13d, %ebx
andl $0x7, %ebx
sete %cl
testb %cl, %al
jne 0x7674
movq $0x0, 0x18(%rsp)
xorl %edi, %edi
testl %ebp, %ebp
je 0x75b2
cmpl $0x7, %ebp
je 0x75b2
movl %ebp, %eax
leaq 0x97c3(%rip), %rcx      # 0x10d60
movq (%rcx,%rax,8), %rsi
movq %rdi, %r12
movq %r14, %rdi
callq 0x3b00
movq %r12, %rdi
movq %rax, %r14
testl %ebx, %ebx
je 0x75d0
cmpl $0x7, %ebx
je 0x75d0
movl %ebx, %eax
leaq 0x979c(%rip), %rcx      # 0x10d60
movq (%rcx,%rax,8), %rsi
callq 0x3b00
movq %rax, %rdi
andl %r13d, %r15d
notl %r15d
xorl %eax, %eax
testb $0x7, %r15b
sete %al
movl $0x0, %r12d
cmovneq %rdi, %r12
movq 0x18(%rsp), %r15
addq %rax, %r15
cmpl $0x7, %ebp
je 0x7618
cmpl $0x7, %ebx
je 0x7618
movq %r14, %rdi
movq %r12, %rsi
callq 0x3b00
testq %r15, %r15
jle 0x7683
decq %r15
movq %r15, 0x18(%rsp)
xorl %r12d, %r12d
jmp 0x762c
movq %r15, 0x18(%rsp)
incq 0x970c(%rip)            # 0x10d30
movq %r14, %rdi
callq 0x405e
movl %eax, %edi
callq 0x7109
movq %rax, %r15
andl $0x40000000, %eax       # imm = 0x40000000
movl %r15d, %r13d
shrl $0xc, %r13d
movl %r15d, %r14d
shrl $0x12, %r14d
andl $0xfff, %r14d           # imm = 0xFFF
orq %rax, %r14
shrl $0xf, %r15d
movl %r15d, %ebp
andl $0x7, %ebp
setne %al
movl %r13d, %ebx
andl $0x7, %ebx
sete %cl
movq %r12, %rdi
testb %cl, %al
je 0x758b
movl %ebp, %edi
movl $0x3, %esi
movq %r14, %rdx
callq 0x387b
movl 0x14(%rsp), %ebp
movq 0x20(%rsp), %r14
movl 0x10(%rsp), %r15d
movl 0xc(%rsp), %r12d
movl 0x8(%rsp), %r13d
movq %rax, 0x974e(%rip)      # 0x10df0
xorl %eax, %eax
movb %al, 0x9726(%rip)       # 0x10dd0
movb %al, 0x9818(%rip)       # 0x10ec8
movl 0x96fa(%rip), %eax      # 0x10db0
movl %eax, %ecx
negl %ecx
cmovsl %eax, %ecx
testl %eax, %eax
leaq 0x980a(%rip), %rdx      # 0x10ed0
leaq 0x970b(%rip), %rsi      # 0x10dd8
cmovsq %rdx, %rsi
movq (%rsi), %rdx
incl (%rdx,%rcx,4)
incl %eax
movl %eax, 0x96d1(%rip)      # 0x10db0
movl 0x9703(%rip), %eax      # 0x10de8
leaq (%rax,%rax,2), %rax
leaq 0x70f0(%rip), %rbx      # 0xe7e0
callq *(%rbx,%rax,8)
testl %ebp, %ebp
je 0x770c
movl 0x96eb(%rip), %eax      # 0x10de8
leaq (%rax,%rax,2), %rax
movl 0x8(%rbx,%rax,8), %eax
addq %rax, 0x9624(%rip)      # 0x10d30
cmpb $0x1, 0x96bd(%rip)      # 0x10dd0
jne 0x771b
decl 0x9695(%rip)            # 0x10db0
testl %ebp, %ebp
je 0x773b
movl %r13d, 0x96c2(%rip)     # 0x10de8
movl %r12d, 0x96bf(%rip)     # 0x10dec
movq %r14, 0x96bc(%rip)      # 0x10df0
movl %r15d, 0x9675(%rip)     # 0x10db0
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq