// File: chuckwolber[P]Cube/order/cli.cpp
// Function: doAlgReduce(unsigned long long, bool (Algorithm::*)())
void doAlgReduce(unsigned long long int algs, bool (Algorithm::*algEval)()) {
    auto start = std::chrono::steady_clock::now();
    Algorithms a(numThreads, algs, algEval);
    AlgorithmList* al = a.getReduction();
    auto end = std::chrono::steady_clock::now();
    auto elapsed = std::chrono::duration<double, std::milli>(end - start).count();
    std::cout << std::setw(COLUMN_WIDTH) << std::left << std::setprecision(5) << std::fixed << elapsed
         << std::setw(COLUMN_WIDTH) << std::left << algs
         << std::setw(COLUMN_WIDTH) << std::left << al->size()
         << std::setw(COLUMN_WIDTH) << std::left << (algs - al->size())
         << std::setw(COLUMN_WIDTH) << std::left << std::setprecision(10) << std::fixed << ((double)elapsed / (long double)algs)
         << std::endl;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1e0, %rsp            # imm = 0x1E0
movq %rsi, -0x10(%rbp)
movq %rdx, -0x8(%rbp)
movq -0x10(%rbp), %rax
movq -0x8(%rbp), %rcx
movq %rdi, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %rax, -0x28(%rbp)
callq 0x44c0
movq %rax, -0x30(%rbp)
movl 0x1d282(%rip), %eax     # 0x2b718
movl %eax, %esi
movq -0x18(%rbp), %rdx
movq -0x28(%rbp), %rax
movq -0x20(%rbp), %rcx
movq %rcx, -0x70(%rbp)
movq %rax, -0x78(%rbp)
movq -0x78(%rbp), %rcx
movq -0x70(%rbp), %r8
leaq -0x68(%rbp), %rdi
movq %rdi, -0xe8(%rbp)
callq 0xfa60
movq -0xe8(%rbp), %rdi
callq 0xfad0
movq %rax, -0xe0(%rbp)
jmp 0xe4d9
movq -0xe0(%rbp), %rax
movq %rax, -0x80(%rbp)
callq 0x44c0
movq %rax, -0x98(%rbp)
leaq -0x98(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0xf990
movq %rax, -0xf0(%rbp)
jmp 0xe509
movq -0xf0(%rbp), %rax
movq %rax, -0xb0(%rbp)
leaq -0xa8(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0xf9e0
jmp 0xe52c
leaq -0xa8(%rbp), %rdi
callq 0xfa20
movsd %xmm0, -0xf8(%rbp)
jmp 0xe542
movsd -0xf8(%rbp), %xmm0
movsd %xmm0, -0xa0(%rbp)
movl $0x14, %edi
callq 0xf8f0
movl %eax, -0xfc(%rbp)
jmp 0xe564
movl -0xfc(%rbp), %eax
movl %eax, -0xb4(%rbp)
movl -0xb4(%rbp), %esi
movq 0x1ca33(%rip), %rdi     # 0x2afb0
callq 0x4410
movq %rax, -0x108(%rbp)
jmp 0xe58b
movq -0x108(%rbp), %rdi
leaq 0x1377(%rip), %rsi      # 0xf910
callq 0x40f0
movq %rax, -0x110(%rbp)
jmp 0xe5a7
movl $0x5, %edi
callq 0xfb30
movl %eax, -0x114(%rbp)
jmp 0xe5b9
movq -0x110(%rbp), %rdi
movl -0x114(%rbp), %eax
movl %eax, -0xb8(%rbp)
movl -0xb8(%rbp), %esi
callq 0x4570
movq %rax, -0x120(%rbp)
jmp 0xe5e0
movq -0x120(%rbp), %rdi
leaq 0x1562(%rip), %rsi      # 0xfb50
callq 0x40f0
movq %rax, -0x128(%rbp)
jmp 0xe5fc
movq -0x128(%rbp), %rdi
movsd -0xa0(%rbp), %xmm0
callq 0x4610
movq %rax, -0x130(%rbp)
jmp 0xe619
movl $0x14, %edi
callq 0xf8f0
movl %eax, -0x134(%rbp)
jmp 0xe62b
movq -0x130(%rbp), %rdi
movl -0x134(%rbp), %eax
movl %eax, -0xbc(%rbp)
movl -0xbc(%rbp), %esi
callq 0x4410
movq %rax, -0x140(%rbp)
jmp 0xe652
movq -0x140(%rbp), %rdi
leaq 0x12b0(%rip), %rsi      # 0xf910
callq 0x40f0
movq %rax, -0x148(%rbp)
jmp 0xe66e
movq -0x148(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x4340
movq %rax, -0x150(%rbp)
jmp 0xe687
movl $0x14, %edi
callq 0xf8f0
movl %eax, -0x154(%rbp)
jmp 0xe699
movq -0x150(%rbp), %rdi
movl -0x154(%rbp), %eax
movl %eax, -0xc0(%rbp)
movl -0xc0(%rbp), %esi
callq 0x4410
movq %rax, -0x160(%rbp)
jmp 0xe6c0
movq -0x160(%rbp), %rdi
leaq 0x1242(%rip), %rsi      # 0xf910
callq 0x40f0
movq %rax, -0x168(%rbp)
jmp 0xe6dc
movq -0x80(%rbp), %rdi
callq 0x70e0
movq -0x168(%rbp), %rdi
movq %rax, %rsi
callq 0x40b0
movq %rax, -0x170(%rbp)
jmp 0xe6fd
movl $0x14, %edi
callq 0xf8f0
movl %eax, -0x174(%rbp)
jmp 0xe70f
movq -0x170(%rbp), %rdi
movl -0x174(%rbp), %eax
movl %eax, -0xc4(%rbp)
movl -0xc4(%rbp), %esi
callq 0x4410
movq %rax, -0x180(%rbp)
jmp 0xe736
movq -0x180(%rbp), %rdi
leaq 0x11cc(%rip), %rsi      # 0xf910
callq 0x40f0
movq %rax, -0x188(%rbp)
jmp 0xe752
movq -0x18(%rbp), %rax
movq %rax, -0x198(%rbp)
movq -0x80(%rbp), %rdi
callq 0x70e0
movq -0x198(%rbp), %rsi
movq -0x188(%rbp), %rdi
subq %rax, %rsi
callq 0x4340
movq %rax, -0x190(%rbp)
jmp 0xe785
movl $0x14, %edi
callq 0xf8f0
movl %eax, -0x19c(%rbp)
jmp 0xe797
movq -0x190(%rbp), %rdi
movl -0x19c(%rbp), %eax
movl %eax, -0xc8(%rbp)
movl -0xc8(%rbp), %esi
callq 0x4410
movq %rax, -0x1a8(%rbp)
jmp 0xe7be
movq -0x1a8(%rbp), %rdi
leaq 0x1144(%rip), %rsi      # 0xf910
callq 0x40f0
movq %rax, -0x1b0(%rbp)
jmp 0xe7da
movl $0xa, %edi
callq 0xfb30
movl %eax, -0x1b4(%rbp)
jmp 0xe7ec
movq -0x1b0(%rbp), %rdi
movl -0x1b4(%rbp), %eax
movl %eax, -0xcc(%rbp)
movl -0xcc(%rbp), %esi
callq 0x4570
movq %rax, -0x1c0(%rbp)
jmp 0xe813
movq -0x1c0(%rbp), %rdi
leaq 0x132f(%rip), %rsi      # 0xfb50
callq 0x40f0
movq %rax, -0x1c8(%rbp)
jmp 0xe82f
movq -0x1c8(%rbp), %rdi
fldl -0xa0(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0xd8(%rbp)
testq %rax, %rax
sets %al
movzbl %al, %eax
movl %eax, %ecx
fildll -0xd8(%rbp)
leaq 0xdac9(%rip), %rax      # 0x1c328
flds (%rax,%rcx,4)
faddp %st, %st(1)
fdivrp %st, %st(1)
movq %rsp, %rax
fstpt (%rax)
callq 0x4430
movq %rax, -0x1d0(%rbp)
jmp 0xe879
movq -0x1d0(%rbp), %rdi
movq 0x1c6d9(%rip), %rsi     # 0x2af60
callq 0x43b0
jmp 0xe88e
leaq -0x68(%rbp), %rdi
callq 0xfb80
addq $0x1e0, %rsp            # imm = 0x1E0
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x68(%rbp), %rdi
callq 0xfb80
movq -0x88(%rbp), %rdi
callq 0x45e0
nopw (%rax,%rax)