// File: /workspace/github_cpp_makefile_star2_O3/lemire[P]runningmaxmin/runningmaxmin.cpp
// Function: compareallalgos(std::vector<double, std::allocator<double>>&, std::vector<double, std::allocator<double>>&, unsigned int, bool)
void compareallalgos(std::vector<floattype> & data,
                     std::vector<double> & timings, uint width, bool doslow) {
    if (timings.size() < 8)
        timings = std::vector<double>(8, 0.0);
    clock_t start, finish;
    start = clock();
    if (doslow)
        slowmaxmin A(data, width);
    finish = clock();
    timings[0] += static_cast<double>(finish - start) / CLOCKS_PER_SEC;
    start = clock();
    vanHerkGilWermanmaxmin B(data, width);
    finish = clock();
    timings[1] += static_cast<double>(finish - start) / CLOCKS_PER_SEC;
    start = clock();
    lemiremaxmin C(data, width);
    finish = clock();
    timings[2] += static_cast<double>(finish - start) / CLOCKS_PER_SEC;
    start = clock();
    GilKimmel D(data, width);
    finish = clock();
    timings[3] += static_cast<double>(finish - start) / CLOCKS_PER_SEC;
    start = clock();
    if (width < sizeof(unsigned long) * 8)
        lemirebitmapmaxmin BL(data, width);
    finish = clock();
    timings[4] += static_cast<double>(finish - start) / CLOCKS_PER_SEC;
    start = clock();
    simplelemiremaxmin F(data, width);
    finish = clock();
    timings[5] += static_cast<double>(finish - start) / CLOCKS_PER_SEC;
    start = clock();
    lemiremaxminwrap Cw(data, width);
    finish = clock();
    timings[6] += static_cast<double>(finish - start) / CLOCKS_PER_SEC;
    start = clock();
    monowedgewrap Mw(data, width);
    finish = clock();
    timings[7] += static_cast<double>(finish - start) / CLOCKS_PER_SEC;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x150, %rsp            # imm = 0x150
movl %ecx, %r12d
movl %edx, %ebp
movq %rsi, %rbx
movq %rdi, %r14
movq 0x8(%rsi), %rax
subq (%rsi), %rax
cmpq $0x3f, %rax
ja 0x25e1
movl $0x40, %edi
callq 0x2140
vxorpd %xmm0, %xmm0, %xmm0
vmovupd %ymm0, (%rax)
vmovupd %ymm0, 0x20(%rax)
movq (%rbx), %rdi
movq %rax, (%rbx)
addq $0x40, %rax
movq %rax, 0x8(%rbx)
movq %rax, 0x10(%rbx)
testq %rdi, %rdi
je 0x25e1
vzeroupper
callq 0x2120
vzeroupper
callq 0x20d0
movq %rax, %r15
testb %r12b, %r12b
je 0x2630
leaq 0x38(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
movl %ebp, %edx
callq 0x3fba
leaq 0xa54e(%rip), %rax      # 0xcb58
addq $0x10, %rax
movq %rax, (%r12)
movq 0x20(%r12), %rdi
testq %rdi, %rdi
je 0x2621
callq 0x2120
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x2630
callq 0x2120
callq 0x20d0
subq %r15, %rax
vcvtsi2sd %rax, %xmm1, %xmm0
vdivsd 0x69d3(%rip), %xmm0, %xmm0 # 0x9018
movq (%rbx), %rax
vaddsd (%rax), %xmm0, %xmm0
vmovsd %xmm0, (%rax)
callq 0x20d0
movq %rax, %r15
leaq 0x38(%rsp), %rdi
movq %r14, %rsi
movl %ebp, %edx
callq 0x4100
callq 0x20d0
subq %r15, %rax
vcvtsi2sd %rax, %xmm1, %xmm0
vdivsd 0x699c(%rip), %xmm0, %xmm0 # 0x9018
movq (%rbx), %rax
vaddsd 0x8(%rax), %xmm0, %xmm0
vmovsd %xmm0, 0x8(%rax)
callq 0x20d0
movq %rax, %r15
leaq 0xe0(%rsp), %rdi
movq %r14, %rsi
movl %ebp, %edx
callq 0x4504
callq 0x20d0
subq %r15, %rax
vcvtsi2sd %rax, %xmm1, %xmm0
vdivsd 0x6960(%rip), %xmm0, %xmm0 # 0x9018
movq (%rbx), %rax
vaddsd 0x10(%rax), %xmm0, %xmm0
vmovsd %xmm0, 0x10(%rax)
callq 0x20d0
movq %rax, %r15
leaq 0xa8(%rsp), %rdi
movq %r14, %rsi
movl %ebp, %edx
callq 0x4d16
callq 0x20d0
subq %r15, %rax
vcvtsi2sd %rax, %xmm1, %xmm0
vdivsd 0x6924(%rip), %xmm0, %xmm0 # 0x9018
movq (%rbx), %rax
vaddsd 0x18(%rax), %xmm0, %xmm0
vmovsd %xmm0, 0x18(%rax)
callq 0x20d0
movq %rax, %r15
cmpl $0x3f, %ebp
ja 0x2748
movq %rsp, %rdi
movq %r14, %rsi
movl %ebp, %edx
callq 0x50a2
leaq 0xa566(%rip), %rax      # 0xcc88
addq $0x10, %rax
movq %rax, (%rsp)
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x2739
callq 0x2120
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x2748
callq 0x2120
callq 0x20d0
subq %r15, %rax
vcvtsi2sd %rax, %xmm1, %xmm0
vdivsd 0x68bb(%rip), %xmm0, %xmm0 # 0x9018
movq (%rbx), %rax
vaddsd 0x20(%rax), %xmm0, %xmm0
vmovsd %xmm0, 0x20(%rax)
callq 0x20d0
movq %rax, %r15
movq %rsp, %rdi
movq %r14, %rsi
movl %ebp, %edx
callq 0x53f2
callq 0x20d0
subq %r15, %rax
vcvtsi2sd %rax, %xmm1, %xmm0
vdivsd 0x6884(%rip), %xmm0, %xmm0 # 0x9018
movq (%rbx), %rax
vaddsd 0x28(%rax), %xmm0, %xmm0
vmovsd %xmm0, 0x28(%rax)
callq 0x20d0
movq %rax, %r15
leaq 0x70(%rsp), %rdi
movq %r14, %rsi
movl %ebp, %edx
callq 0x5bc8
callq 0x20d0
subq %r15, %rax
vcvtsi2sd %rax, %xmm1, %xmm0
vdivsd 0x684b(%rip), %xmm0, %xmm0 # 0x9018
movq (%rbx), %rax
vaddsd 0x30(%rax), %xmm0, %xmm0
vmovsd %xmm0, 0x30(%rax)
callq 0x20d0
movq %rax, %r15
leaq 0x118(%rsp), %rdi
movq %r14, %rsi
movl %ebp, %edx
callq 0x5d62
callq 0x20d0
subq %r15, %rax
vcvtsi2sd %rax, %xmm1, %xmm0
vdivsd 0x680f(%rip), %xmm0, %xmm0 # 0x9018
movq (%rbx), %rax
vaddsd 0x38(%rax), %xmm0, %xmm0
vmovsd %xmm0, 0x38(%rax)
leaq 0xa543(%rip), %rax      # 0xcd60
addq $0x10, %rax
movq %rax, 0x118(%rsp)
movq 0x138(%rsp), %rdi
testq %rdi, %rdi
je 0x283b
callq 0x2120
movq 0x120(%rsp), %rdi
testq %rdi, %rdi
je 0x284d
callq 0x2120
leaq 0xa4c4(%rip), %rax      # 0xcd18
addq $0x10, %rax
movq %rax, 0x70(%rsp)
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0x286f
callq 0x2120
movq 0x78(%rsp), %rdi
testq %rdi, %rdi
je 0x287e
callq 0x2120
leaq 0xa44b(%rip), %rax      # 0xccd0
addq $0x10, %rax
movq %rax, (%rsp)
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x289c
callq 0x2120
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x28ab
callq 0x2120
leaq 0xa38e(%rip), %rax      # 0xcc40
addq $0x10, %rax
movq %rax, 0xa8(%rsp)
movq 0xc8(%rsp), %rdi
testq %rdi, %rdi
je 0x28d0
callq 0x2120
movq 0xb0(%rsp), %rdi
testq %rdi, %rdi
je 0x28e2
callq 0x2120
leaq 0xa30f(%rip), %rax      # 0xcbf8
addq $0x10, %rax
movq %rax, 0xe0(%rsp)
movq 0x100(%rsp), %rdi
testq %rdi, %rdi
je 0x2907
callq 0x2120
movq 0xe8(%rsp), %rdi
testq %rdi, %rdi
je 0x2919
callq 0x2120
leaq 0xa290(%rip), %rax      # 0xcbb0
addq $0x10, %rax
movq %rax, 0x38(%rsp)
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x2938
callq 0x2120
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x2947
callq 0x2120
addq $0x150, %rsp            # imm = 0x150
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
jmp 0x2975
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x607e
jmp 0x296b
movq %rax, %rbx
movq %rsp, %rdi
callq 0x60b0
jmp 0x2978
movq %rax, %rbx
leaq 0xa8(%rsp), %rdi
callq 0x60e2
jmp 0x298a
movq %rax, %rbx
leaq 0xe0(%rsp), %rdi
callq 0x6114
leaq 0x38(%rsp), %rdi
callq 0x6146
movq %rbx, %rdi
callq 0x2220
movq %rax, %rbx
jmp 0x2997