// File: /workspace/github_cpp_makefile_star2_O3/Cell-veto[P]postlhc/./storage.hpp
// Function: Storage<Monodisperse2D>::probe(unsigned long*, unsigned long, std::array<double, 2ul>*, RandomContext*)
bool probe (key_t *k, key_t ref, vector_t *r, RandomContext *rng)
    {
        const double MAX = 1. + UINT64_MAX;
        uint64_t kv[DIM];
        assert (data_[ref].in_use ());
        // find fractional coordinates of probe location
        for (unsigned n = 0; n != DIM; ++n)
        {
            (*r)[n] *= real2frac[n];
            double abs = (*r)[n] + data_[ref].coord[n];
            double rem = std::remainder (abs, MAX);
            if (rem < 0.) // FIXME use std::remquo here
                rem += MAX;
            assert (rem >= 0. && rem < MAX);
            kv[n] = rem;
            (*r)[n] -= kv[n] << bc_[n] >> bc_[n];
        }
        *k = make_base_key (kv);
        *k += rng->uint (cell_count (DIM));
        // correct r for actual position of particle
        // (if there is no particle at *k, the result is bollocks,
        // but it won't be used.)
        for (unsigned n = 0; n != DIM; ++n)
        {
            (*r)[n] += data_[*k].coord[n] << bc_[n] >> bc_[n];
            (*r)[n] *= frac2real[n];
        }
        return data_[*k].in_use ();
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
shlq $0x4, %rdx
testb $0x1, 0x90(%rdi,%rdx)
je 0x411f21
movq %rcx, %rbx
movq %rsi, %r15
movq %rdi, %r14
movq %r8, 0x8(%rsp)
leaq 0x88(%rdi), %r13
leaq (%rdi,%rdx), %rbp
addq $0x88, %rbp
xorl %r12d, %r12d
movsd 0x1b8281(%rip), %xmm3   # 0x5c9fe0
movapd 0x1b8289(%rip), %xmm4   # 0x5c9ff0
movsd 0x1b8471(%rip), %xmm1   # 0x5ca1e0
movsd 0x68(%r14,%r12,2), %xmm5
mulsd (%rbx,%r12,2), %xmm5
movsd %xmm5, (%rbx,%r12,2)
movsd (%rbp,%r12,2), %xmm2
unpcklps %xmm3, %xmm2            # xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]
subpd %xmm4, %xmm2
movapd %xmm2, %xmm0
unpckhpd %xmm2, %xmm0            # xmm0 = xmm0[1],xmm2[1]
addsd %xmm2, %xmm0
addsd %xmm5, %xmm0
callq 0x4ed000
movsd 0x1b8433(%rip), %xmm1   # 0x5ca1e0
movapd %xmm0, %xmm2
addsd %xmm1, %xmm2
movapd %xmm0, %xmm3
xorpd %xmm4, %xmm4
cmpltsd %xmm4, %xmm3
andpd %xmm3, %xmm2
andnpd %xmm0, %xmm3
orpd %xmm2, %xmm3
ucomisd %xmm4, %xmm3
jb 0x411f02
ucomisd %xmm3, %xmm1
jbe 0x411f02
cvttsd2si %xmm3, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subsd 0x1b8322(%rip), %xmm3   # 0x5ca118
cvttsd2si %xmm3, %rdx
andq %rcx, %rdx
orq %rax, %rdx
movq %rdx, 0x10(%rsp,%r12,2)
movb 0x3c(%r14,%r12), %cl
shlq %cl, %rdx
shrq %cl, %rdx
movq %rdx, %xmm0
movq 0x1b81c2(%rip), %xmm3   # 0x5c9fe0
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
movapd 0x1b81c6(%rip), %xmm4   # 0x5c9ff0
subpd %xmm4, %xmm0
movapd %xmm0, %xmm2
unpckhpd %xmm0, %xmm2            # xmm2 = xmm2[1],xmm0[1]
addsd %xmm0, %xmm2
movsd (%rbx,%r12,2), %xmm0
subsd %xmm2, %xmm0
movsd %xmm0, (%rbx,%r12,2)
addq $0x4, %r12
cmpq $0x8, %r12
jne 0x411d6f
leaq 0x10(%rsp), %rsi
movq %r14, %rdi
callq 0x411aa6
movq %rax, (%r15)
movq (%r14), %rax
movq %r14, %rdi
movl $0x2, %esi
callq *0x48(%rax)
movq 0x8(%rsp), %rdi
movl %eax, %esi
callq 0x4403b6
movapd 0x1b8166(%rip), %xmm3   # 0x5c9ff0
movq 0x1b814e(%rip), %xmm2   # 0x5c9fe0
movl %eax, %eax
addq (%r15), %rax
movq %rax, (%r15)
shlq $0x4, %rax
leaq (%rax,%r13), %rdx
xorl %esi, %esi
movq (%rdx,%rsi,2), %rdi
movb 0x3c(%r14,%rsi), %cl
shlq %cl, %rdi
shrq %cl, %rdi
movq %rdi, %xmm0
punpckldq %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
subpd %xmm3, %xmm0
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
addsd (%rbx,%rsi,2), %xmm1
movsd %xmm1, (%rbx,%rsi,2)
mulsd 0x78(%r14,%rsi,2), %xmm1
movsd %xmm1, (%rbx,%rsi,2)
addq $0x4, %rsi
cmpq $0x8, %rsi
jne 0x411ea4
movb 0x8(%r13,%rax), %al
andb $0x1, %al
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1b9057(%rip), %rdi    # 0x5caf60
leaq 0x1b83e9(%rip), %rsi    # 0x5ca2f9
leaq 0x1b8fdc(%rip), %rcx    # 0x5caef3
movl $0x25c, %edx            # imm = 0x25C
callq 0x50b050
leaq 0x1b8fb6(%rip), %rdi    # 0x5caede
leaq 0x1b83ca(%rip), %rsi    # 0x5ca2f9
leaq 0x1b8fbd(%rip), %rcx    # 0x5caef3
movl $0x253, %edx            # imm = 0x253
callq 0x50b050