// File: /workspace/github_c_makefile_star2_O0/skeeto[P]hash-prospector/genetic.c
// Function: exact_bias32
static double
exact_bias32(const struct gene *g)
{
    long long bins[32][32] = {{0}};
    static const uint64_t range = (UINT64_C(1) << 32) / EXACT_SPLIT;
    #pragma omp parallel for
    for (int i = 0; i < EXACT_SPLIT; i++) {
        long long b[32][32] = {{0}};
        for (uint64_t x = i * range; x < (i + 1) * range; x++) {
            uint32_t h0 = hash(g, x);
            for (int j = 0; j < 32; j++) {
                uint32_t bit = UINT32_C(1) << j;
                uint32_t h1 = hash(g, x ^ bit);
                uint32_t set = h0 ^ h1;
                for (int k = 0; k < 32; k++)
                    b[j][k] += (set >> k) & 1;
            }
        }
        #pragma omp critical
        for (int j = 0; j < 32; j++)
            for (int k = 0; k < 32; k++)
                bins[j][k] += b[j][k];
    }
    double mean = 0.0;
    for (int j = 0; j < 32; j++) {
        for (int k = 0; k < 32; k++) {
            double diff = (bins[j][k] - 2147483648L) / 2147483648.0;
            mean += (diff * diff) / (32 * 32);
        }
    }
    return sqrt(mean) * 1000.0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x4060, %rsp           # imm = 0x4060
movq %rdi, -0x8(%rbp)
leaq -0x2010(%rbp), %rdi
xorl %esi, %esi
movl $0x2000, %edx           # imm = 0x2000
callq 0x1080
movl $0x0, -0x2014(%rbp)
cmpl $0x20, -0x2014(%rbp)
jge 0x1c76
leaq -0x4020(%rbp), %rdi
xorl %esi, %esi
movl $0x2000, %edx           # imm = 0x2000
callq 0x1080
movslq -0x2014(%rbp), %rax
shlq $0x1b, %rax
movq %rax, -0x4028(%rbp)
movq -0x4028(%rbp), %rax
movl -0x2014(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
shlq $0x1b, %rcx
cmpq %rcx, %rax
jae 0x1bcf
movq -0x8(%rbp), %rdi
movq -0x4028(%rbp), %rax
movl %eax, %esi
callq 0x2050
movl %eax, -0x402c(%rbp)
movl $0x0, -0x4030(%rbp)
cmpl $0x20, -0x4030(%rbp)
jge 0x1bb6
movl -0x4030(%rbp), %ecx
movl $0x1, %eax
shll %cl, %eax
movl %eax, -0x4034(%rbp)
movq -0x8(%rbp), %rdi
movq -0x4028(%rbp), %rax
movl -0x4034(%rbp), %ecx
xorq %rcx, %rax
movl %eax, %esi
callq 0x2050
movl %eax, -0x4038(%rbp)
movl -0x402c(%rbp), %eax
xorl -0x4038(%rbp), %eax
movl %eax, -0x403c(%rbp)
movl $0x0, -0x4040(%rbp)
cmpl $0x20, -0x4040(%rbp)
jge 0x1ba0
movl -0x403c(%rbp), %eax
movl -0x4040(%rbp), %ecx
shrl %cl, %eax
andl $0x1, %eax
movl %eax, %eax
movl %eax, %edx
movslq -0x4030(%rbp), %rcx
leaq -0x4020(%rbp), %rax
shlq $0x8, %rcx
addq %rcx, %rax
movslq -0x4040(%rbp), %rcx
addq (%rax,%rcx,8), %rdx
movq %rdx, (%rax,%rcx,8)
movl -0x4040(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4040(%rbp)
jmp 0x1b4d
jmp 0x1ba2
movl -0x4030(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4030(%rbp)
jmp 0x1af0
jmp 0x1bb8
movq -0x4028(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x4028(%rbp)
jmp 0x1aae
movl $0x0, -0x4044(%rbp)
cmpl $0x20, -0x4044(%rbp)
jge 0x1c60
movl $0x0, -0x4048(%rbp)
cmpl $0x20, -0x4048(%rbp)
jge 0x1c4a
movslq -0x4044(%rbp), %rcx
leaq -0x4020(%rbp), %rax
shlq $0x8, %rcx
addq %rcx, %rax
movslq -0x4048(%rbp), %rcx
movq (%rax,%rcx,8), %rdx
movslq -0x4044(%rbp), %rcx
leaq -0x2010(%rbp), %rax
shlq $0x8, %rcx
addq %rcx, %rax
movslq -0x4048(%rbp), %rcx
addq (%rax,%rcx,8), %rdx
movq %rdx, (%rax,%rcx,8)
movl -0x4048(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4048(%rbp)
jmp 0x1bec
jmp 0x1c4c
movl -0x4044(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4044(%rbp)
jmp 0x1bd9
jmp 0x1c62
movl -0x2014(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2014(%rbp)
jmp 0x1a7c
xorps %xmm0, %xmm0
movsd %xmm0, -0x4050(%rbp)
movl $0x0, -0x4054(%rbp)
cmpl $0x20, -0x4054(%rbp)
jge 0x1d4b
movl $0x0, -0x4058(%rbp)
cmpl $0x20, -0x4058(%rbp)
jge 0x1d35
movslq -0x4054(%rbp), %rcx
leaq -0x2010(%rbp), %rax
shlq $0x8, %rcx
addq %rcx, %rax
movslq -0x4058(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movabsq $0x80000000, %rcx       # imm = 0x80000000
subq %rcx, %rax
cvtsi2sd %rax, %xmm0
movsd 0x133f(%rip), %xmm1     # 0x3028
divsd %xmm1, %xmm0
movsd %xmm0, -0x4060(%rbp)
movsd -0x4060(%rbp), %xmm0
mulsd -0x4060(%rbp), %xmm0
movsd 0x1313(%rip), %xmm1     # 0x3020
divsd %xmm1, %xmm0
addsd -0x4050(%rbp), %xmm0
movsd %xmm0, -0x4050(%rbp)
movl -0x4058(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4058(%rbp)
jmp 0x1ca2
jmp 0x1d37
movl -0x4054(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4054(%rbp)
jmp 0x1c8b
movsd -0x4050(%rbp), %xmm0
callq 0x10c0
movsd 0x12a8(%rip), %xmm1     # 0x3008
mulsd %xmm1, %xmm0
addq $0x4060, %rsp           # imm = 0x4060
popq %rbp
retq
nopl (%rax)