// File: lemire[P]runningmaxmin/runningmaxmin.cpp
// Function: timingsline(std::vector<double, std::allocator<double>>, unsigned int, bool)
void timingsline(std::vector<floattype> data, uint width = 30,
                 bool doslow = false) {
    std::cout << " width = " << width << std::endl;
    clock_t start, finish;
    start = clock();
    if (doslow)
        for (uint i = 0; i < 30; ++i)
            slowmaxmin A(data, width);
    finish = clock();
    std::cout << "slow = "
              << static_cast<double>(finish - start) / CLOCKS_PER_SEC
              << std::endl;
    start = clock();
    for (uint i = 0; i < 30; ++i)
        vanHerkGilWermanmaxmin B(data, width);
    finish = clock();
    std::cout << "vanHerk = "
              << static_cast<double>(finish - start) / CLOCKS_PER_SEC
              << std::endl;
    start = clock();
    for (uint i = 0; i < 30; ++i)
        lemiremaxmin C(data, width);
    finish = clock();
    std::cout << "lemire = "
              << static_cast<double>(finish - start) / CLOCKS_PER_SEC
              << std::endl;
    std::cout << "------------" << std::endl;
}

// Assembly:
subq $0xe8, %rsp
movq %rdi, (%rsp)
movb %dl, %al
movq %rdi, 0xe0(%rsp)
movl %esi, 0xdc(%rsp)
andb $0x1, %al
movb %al, 0xdb(%rsp)
movq 0x122bc(%rip), %rdi     # 0x15fc8
leaq 0xd39d(%rip), %rsi      # 0x110b0
callq 0x2110
movq %rax, %rdi
movl 0xdc(%rsp), %esi
callq 0x2190
movq %rax, %rdi
movq 0x12287(%rip), %rsi     # 0x15fb8
callq 0x2130
callq 0x20d0
movq %rax, 0xd0(%rsp)
testb $0x1, 0xdb(%rsp)
je 0x3d9c
movl $0x0, 0xc4(%rsp)
cmpl $0x1e, 0xc4(%rsp)
jae 0x3d9a
movq (%rsp), %rsi
movl 0xdc(%rsp), %edx
leaq 0x88(%rsp), %rdi
callq 0x5000
leaq 0x88(%rsp), %rdi
callq 0x5320
movl 0xc4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xc4(%rsp)
jmp 0x3d58
jmp 0x3d9c
callq 0x20d0
movq %rax, 0xc8(%rsp)
movq 0x12218(%rip), %rdi     # 0x15fc8
leaq 0xd4eb(%rip), %rsi      # 0x112a2
callq 0x2110
movq %rax, %rdi
movq 0xc8(%rsp), %rax
subq 0xd0(%rsp), %rax
vcvtsi2sd %rax, %xmm0, %xmm0
vmovsd 0xd244(%rip), %xmm1     # 0x11020
vdivsd %xmm1, %xmm0, %xmm0
callq 0x2230
movq %rax, %rdi
movq 0x121c9(%rip), %rsi     # 0x15fb8
callq 0x2130
callq 0x20d0
movq %rax, 0xd0(%rsp)
movl $0x0, 0x84(%rsp)
cmpl $0x1e, 0x84(%rsp)
jae 0x3e48
movq (%rsp), %rsi
movl 0xdc(%rsp), %edx
leaq 0x48(%rsp), %rdi
callq 0x5370
leaq 0x48(%rsp), %rdi
callq 0x8fe0
movl 0x84(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x84(%rsp)
jmp 0x3e0c
callq 0x20d0
movq %rax, 0xc8(%rsp)
movq 0x1216c(%rip), %rdi     # 0x15fc8
leaq 0xd257(%rip), %rsi      # 0x110ba
callq 0x2110
movq %rax, %rdi
movq 0xc8(%rsp), %rax
subq 0xd0(%rsp), %rax
vcvtsi2sd %rax, %xmm0, %xmm0
vmovsd 0xd198(%rip), %xmm1     # 0x11020
vdivsd %xmm1, %xmm0, %xmm0
callq 0x2230
movq %rax, %rdi
movq 0x1211d(%rip), %rsi     # 0x15fb8
callq 0x2130
callq 0x20d0
movq %rax, 0xd0(%rsp)
movl $0x0, 0x44(%rsp)
cmpl $0x1e, 0x44(%rsp)
jae 0x3ee8
movq (%rsp), %rsi
movl 0xdc(%rsp), %edx
leaq 0x8(%rsp), %rdi
callq 0x5f50
leaq 0x8(%rsp), %rdi
callq 0x8f90
movl 0x44(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x44(%rsp)
jmp 0x3eb5
callq 0x20d0
movq %rax, 0xc8(%rsp)
movq 0x120cc(%rip), %rdi     # 0x15fc8
leaq 0xd1c2(%rip), %rsi      # 0x110c5
callq 0x2110
movq %rax, %rdi
movq 0xc8(%rsp), %rax
subq 0xd0(%rsp), %rax
vcvtsi2sd %rax, %xmm0, %xmm0
vmovsd 0xd0f8(%rip), %xmm1     # 0x11020
vdivsd %xmm1, %xmm0, %xmm0
callq 0x2230
movq %rax, %rdi
movq 0x1207d(%rip), %rsi     # 0x15fb8
callq 0x2130
movq 0x12081(%rip), %rdi     # 0x15fc8
leaq 0xd181(%rip), %rsi      # 0x110cf
callq 0x2110
movq %rax, %rdi
movq 0x1205b(%rip), %rsi     # 0x15fb8
callq 0x2130
addq $0xe8, %rsp
retq
nopw (%rax,%rax)