// File: /workspace/github_cpp_makefile_star2_O1/Cell-veto[P]postlhc/./pareto_prober.hpp
// Function: ParetoProber::setup(double, double, unsigned int)
void setup (double int_dist, double exponent, unsigned DIM)
    {
        if (exponent <= DIM-1.)
            rt_error ("IPL exponent too small");

        // inner radius of zero shell would be rep_int_distance - error_bound
        // FIXME not implemented
        paralpha0 = exponent - (DIM-1);
        marginal_rate = pow (int_dist, -exponent-1);
        zeroshell_radius = int_dist + error_bound;

        double longrange_pr[3];
        if (DIM == 2)
        {
            longrange_pr[0] = 1.;
            longrange_pr[1] = error_bound;
            longrange_pr[2] = NAN;
        }
        else if (DIM == 3)
        {
            longrange_pr[0] = 1.;
            longrange_pr[1] = 2.*error_bound;
            longrange_pr[2] = sq (error_bound);
        }
        else
        {
            std::cerr << "DIM > 3 not implemented in pareto prober" << ABORT;
        }

        total_pr = 0.;
        static bool once = true;
        if (once) std::cerr << "total_pr ";
        for (unsigned n = 0; n != DIM; ++n)
        {
            // integrate out pareto distribution
            longrange_pr[n] *= pow (int_dist, -paralpha0-n) / (paralpha0+n);
            longrange_pr[n] *= sphere_surface (DIM);
            assert (longrange_pr[n] >= 0.);
            total_pr += longrange_pr[n];
            towerp[n] = total_pr;
            if (once) std::cerr << total_pr << ' ';
        }

        // zeroshell
        total_pr += marginal_rate * ball_volume (DIM, zeroshell_radius);
        if (once) std::cerr << total_pr << '\n';
        once = false;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x48, %rsp
movl %esi, %r13d
cvtsi2sd %r13, %xmm2
movsd 0x1a849c(%rip), %xmm3   # 0x5caff8
movsd %xmm2, 0x40(%rsp)
addsd %xmm2, %xmm3
ucomisd %xmm1, %xmm3
jae 0x422df7
movl %esi, %r14d
movq %rdi, %rbx
leal -0x1(%r14), %eax
xorps %xmm3, %xmm3
cvtsi2sd %rax, %xmm3
movapd %xmm1, %xmm2
subsd %xmm3, %xmm2
movsd %xmm2, 0x20(%rdi)
movsd 0x1a8461(%rip), %xmm2   # 0x5caff8
subsd %xmm1, %xmm2
movapd %xmm2, %xmm1
movsd %xmm0, 0x10(%rsp)
callq 0x4ee2f0
movsd 0x10(%rsp), %xmm2
movsd %xmm0, 0x8(%rbx)
movsd (%rbx), %xmm0
movapd %xmm0, %xmm1
addsd %xmm2, %xmm1
movsd %xmm1, 0x10(%rbx)
cmpl $0x3, %r14d
je 0x422bf5
cmpl $0x2, %r14d
jne 0x422e23
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, 0x20(%rsp)
movsd %xmm0, 0x28(%rsp)
movsd 0x1ab51d(%rip), %xmm0   # 0x5ce110
jmp 0x422c16
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, 0x20(%rsp)
movapd %xmm0, %xmm1
addsd %xmm0, %xmm1
movsd %xmm1, 0x28(%rsp)
mulsd %xmm0, %xmm0
movsd %xmm0, 0x30(%rsp)
movq $0x0, 0x18(%rbx)
cmpb $0x1, 0x23056d(%rip)    # 0x653198
jne 0x422c4b
movq $0x656aa0, %rdi         # imm = 0x656AA0
leaq 0x1ab56b(%rip), %rsi    # 0x5ce1a6
movl $0x9, %edx
callq 0x4b14d0
movsd 0x10(%rsp), %xmm2
testl %r14d, %r14d
je 0x422d2e
xorl %ebp, %ebp
movq $0x656aa0, %r15         # imm = 0x656AA0
leaq 0xf(%rsp), %r12
movsd 0x20(%rbx), %xmm1
xorpd 0x1a8461(%rip), %xmm1   # 0x5cb0d0
movl %ebp, %eax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
movsd %xmm0, 0x18(%rsp)
subsd %xmm0, %xmm1
movapd %xmm2, %xmm0
callq 0x4ee2f0
movsd 0x18(%rsp), %xmm1
addsd 0x20(%rbx), %xmm1
divsd %xmm1, %xmm0
mulsd 0x20(%rsp,%rbp,8), %xmm0
movsd %xmm0, 0x20(%rsp,%rbp,8)
cmpq $0x2, %r13
je 0x422cc0
movsd 0x1a83d3(%rip), %xmm1   # 0x5cb088
cmpl $0x3, %r13d
je 0x422cc8
jmp 0x422df2
movsd 0x1a8318(%rip), %xmm1   # 0x5cafe0
mulsd %xmm1, %xmm0
movsd %xmm0, 0x20(%rsp,%rbp,8)
ucomisd 0x1a830e(%rip), %xmm0   # 0x5cafe8
movsd 0x10(%rsp), %xmm2
jb 0x422dd3
addsd 0x18(%rbx), %xmm0
movsd %xmm0, 0x18(%rbx)
movsd %xmm0, 0x28(%rbx,%rbp,8)
cmpb $0x1, 0x23049b(%rip)    # 0x653198
jne 0x422d22
movq %r15, %rdi
callq 0x4b2730
movb $0x20, 0xf(%rsp)
movl $0x1, %edx
movq %rax, %rdi
movq %r12, %rsi
callq 0x4b14d0
movsd 0x10(%rsp), %xmm2
incq %rbp
cmpq %rbp, %r13
jne 0x422c62
movsd 0x8(%rbx), %xmm1
movsd 0x10(%rbx), %xmm0
cmpl $0x2, %r14d
movsd %xmm1, 0x18(%rsp)
je 0x422d58
cmpl $0x3, %r14d
jne 0x422df2
movsd 0x1a8332(%rip), %xmm2   # 0x5cb088
jmp 0x422d60
movsd 0x1a8280(%rip), %xmm2   # 0x5cafe0
movsd 0x40(%rsp), %xmm1
divsd %xmm1, %xmm2
movsd %xmm2, 0x10(%rsp)
callq 0x4ee2f0
mulsd 0x10(%rsp), %xmm0
movsd 0x18(%rsp), %xmm1
mulsd %xmm0, %xmm1
addsd 0x18(%rbx), %xmm1
movsd %xmm1, 0x18(%rbx)
cmpb $0x0, 0x230402(%rip)    # 0x653198
je 0x422dbd
movq $0x656aa0, %rdi         # imm = 0x656AA0
movapd %xmm1, %xmm0
callq 0x4b2730
leaq 0xf(%rsp), %rsi
movb $0xa, (%rsi)
movl $0x1, %edx
movq %rax, %rdi
callq 0x4b14d0
movb $0x0, 0x2303d4(%rip)    # 0x653198
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1ab3d6(%rip), %rdi    # 0x5ce1b0
leaq 0x1ab3e5(%rip), %rsi    # 0x5ce1c6
leaq 0x1ab3f2(%rip), %rcx    # 0x5ce1da
movl $0x3e, %edx
callq 0x50c400
callq 0x403fdf
leaq 0x30(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1ab35f(%rip), %rsi    # 0x5ce166
leaq 0x1ab36e(%rip), %rdx    # 0x5ce17c
leaq 0x20(%rsp), %rbx
movq %rbx, %rdi
callq 0x40843e
movq %rbx, %rdi
callq 0x440975
movq $0x656aa0, %rdi         # imm = 0x656AA0
leaq 0x1ab34c(%rip), %rsi    # 0x5ce17d
callq 0x4b1a00
leaq 0x232834(%rip), %rsi    # 0x655671
movq %rax, %rdi
callq 0x440cc2
movq %rax, %rbx
movq 0x20(%rsp), %rdi
cmpq %r14, %rdi
je 0x422e5f
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x4440d0
movq %rbx, %rdi
callq 0x4f77a0
nop