// File: /workspace/github_cpp_makefile_star2_O3/lemire[P]runningmaxmin/runningmaxmin.cpp
// Function: sinetimings(unsigned int, unsigned int, double, unsigned int, bool)
void sinetimings(uint width = 50, uint size = 10000, floattype period = 500.0,
                 uint times = 500, bool doslow = true) {
    std::vector<double> timings;
    for (uint i = 0; i < times; ++i) {
        std::vector<floattype> data(size);
        for (uint j = 0; j < size; ++j)
            data[j] = sin(2 * M_PI * j / period);
        compareallalgos(data, timings, width, doslow);
    }
    std::cout << std::setw(15) << "slow";
    std::cout << std::setw(15) << "vanHerk";
    std::cout << std::setw(15) << "lemire";
    std::cout << std::setw(15) << "gilkimmel";
    std::cout << std::setw(15) << "bitmap";
    std::cout << std::setw(15) << "simplelemire";
    std::cout << std::setw(15) << "lemirew";
    std::cout << std::setw(15) << "monowedge";
    std::cout << std::endl;
    for (int i = 0; i <= 7; ++i) {
        std::cout << std::setw(15) << timings[i];
    }
    std::cout << std::endl;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
vmovsd %xmm0, 0x18(%rsp)
movl %esi, 0x10(%rsp)
movl %edi, 0x14(%rsp)
vxorpd %xmm0, %xmm0, %xmm0
vmovapd %xmm0, 0x20(%rsp)
movq $0x0, 0x30(%rsp)
testl %edx, %edx
je 0x30e3
movl %edx, %ebp
movl 0x10(%rsp), %r15d
xorl %r14d, %r14d
leaq 0x40(%rsp), %r12
movzbl %cl, %r13d
movq %r12, %rdi
movq %r15, %rsi
leaq 0xf(%rsp), %rdx
callq 0x3f2a
cmpl $0x0, 0x10(%rsp)
vmovsd 0x18(%rsp), %xmm1
vmovsd 0x5fa4(%rip), %xmm2     # 0x9020
je 0x30b4
xorl %ebx, %ebx
movl %ebx, %eax
vcvtsi2sd %rax, %xmm3, %xmm0
vmulsd %xmm2, %xmm0, %xmm0
vdivsd %xmm1, %xmm0, %xmm0
callq 0x2040
vmovsd 0x5f84(%rip), %xmm2     # 0x9020
vmovsd 0x18(%rsp), %xmm1
movq 0x40(%rsp), %rax
vmovsd %xmm0, (%rax,%rbx,8)
incq %rbx
cmpq %rbx, %r15
jne 0x3080
movq %r12, %rdi
leaq 0x20(%rsp), %rsi
movl 0x14(%rsp), %edx
movl %r13d, %ecx
callq 0x2584
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x30d7
callq 0x2120
incl %r14d
cmpl %ebp, %r14d
jne 0x3059
movq 0x9ede(%rip), %rbx      # 0xcfc8
movq (%rbx), %rax
movq -0x18(%rax), %rax
movq $0xf, 0x10(%rbx,%rax)
leaq 0x6029(%rip), %rsi      # 0x912a
movl $0x4, %edx
movq %rbx, %rdi
callq 0x2150
movq (%rbx), %rax
movq -0x18(%rax), %rax
movq $0xf, 0x10(%rbx,%rax)
leaq 0x5fa5(%rip), %rsi      # 0x90ca
movl $0x7, %edx
movq %rbx, %rdi
callq 0x2150
movq (%rbx), %rax
movq -0x18(%rax), %rax
movq $0xf, 0x10(%rbx,%rax)
leaq 0x5f96(%rip), %rsi      # 0x90df
movl $0x6, %edx
movq %rbx, %rdi
callq 0x2150
movq (%rbx), %rax
movq -0x18(%rax), %rax
movq $0xf, 0x10(%rbx,%rax)
leaq 0x5f50(%rip), %rsi      # 0x90bd
movl $0x9, %edx
movq %rbx, %rdi
callq 0x2150
movq (%rbx), %rax
movq -0x18(%rax), %rax
movq $0xf, 0x10(%rbx,%rax)
leaq 0x5f41(%rip), %rsi      # 0x90d2
movl $0x6, %edx
movq %rbx, %rdi
callq 0x2150
movq (%rbx), %rax
movq -0x18(%rax), %rax
movq $0xf, 0x10(%rbx,%rax)
leaq 0x5f24(%rip), %rsi      # 0x90d9
movl $0xc, %edx
movq %rbx, %rdi
callq 0x2150
movq (%rbx), %rax
movq -0x18(%rax), %rax
movq $0xf, 0x10(%rbx,%rax)
leaq 0x5f0d(%rip), %rsi      # 0x90e6
movl $0x7, %edx
movq %rbx, %rdi
callq 0x2150
movq (%rbx), %rax
movq -0x18(%rax), %rax
movq $0xf, 0x10(%rbx,%rax)
leaq 0x5ef1(%rip), %rsi      # 0x90ee
movl $0x9, %edx
movq %rbx, %rdi
callq 0x2150
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2130
movsbl %al, %esi
movq 0x9da0(%rip), %r14      # 0xcfc8
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movq 0x20(%rsp), %rbx
xorl %r15d, %r15d
movq (%r14), %rax
movq -0x18(%rax), %rax
movq $0xf, 0x10(%r14,%rax)
vmovsd (%rbx,%r15,8), %xmm0
movq %r14, %rdi
callq 0x21d0
incq %r15
cmpq $0x8, %r15
jne 0x3240
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x2130
movsbl %al, %esi
movq 0x9d43(%rip), %rdi      # 0xcfc8
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movq %rbx, %rdi
callq 0x2120
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x32ab
movq %rax, %r14
jmp 0x32c2
movq %rax, %r14
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x32c2
callq 0x2120
movq 0x20(%rsp), %rbx
testq %rbx, %rbx
jne 0x32d1
jmp 0x32d9
movq %rax, %r14
movq %rbx, %rdi
callq 0x2120
movq %r14, %rdi
callq 0x2220