// File: 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
movq %rsp, %rbp
subq $0x90, %rsp
movq %rdi, -0x8(%rbp)
movsd %xmm0, -0x10(%rbp)
movsd %xmm1, -0x18(%rbp)
movl %esi, -0x1c(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x80(%rbp)
movsd -0x18(%rbp), %xmm1
movl -0x1c(%rbp), %eax
cvtsi2sd %rax, %xmm0
movsd 0x1bdecf(%rip), %xmm2   # 0x5fb018
subsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jb 0x43d1b8
leaq -0x41(%rbp), %rdi
movq %rdi, -0x88(%rbp)
callq 0x4771f0
movq -0x88(%rbp), %rdx
leaq 0x1c2bac(%rip), %rsi    # 0x5ffd1d
leaq -0x40(%rbp), %rdi
callq 0x407bd0
jmp 0x43d17c
leaq -0x40(%rbp), %rdi
callq 0x46d330
jmp 0x43d187
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x43d1aa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x4f1e40
leaq -0x41(%rbp), %rdi
callq 0x477210
jmp 0x43d459
movq -0x80(%rbp), %rax
movsd -0x18(%rbp), %xmm0
movl -0x1c(%rbp), %ecx
decl %ecx
cvtsi2sd %rcx, %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, 0x20(%rax)
movsd -0x10(%rbp), %xmm0
movsd -0x18(%rbp), %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
movsd 0x1bde1b(%rip), %xmm2   # 0x5fb018
subsd %xmm2, %xmm1
callq 0x51ef10
movq -0x80(%rbp), %rax
movsd %xmm0, 0x8(%rax)
movsd -0x10(%rbp), %xmm0
addsd (%rax), %xmm0
movsd %xmm0, 0x10(%rax)
cmpl $0x2, -0x1c(%rbp)
jne 0x43d24c
movq -0x80(%rbp), %rax
movsd 0x1bdde9(%rip), %xmm0   # 0x5fb018
movsd %xmm0, -0x70(%rbp)
movsd (%rax), %xmm0
movsd %xmm0, -0x68(%rbp)
movsd 0x1bf03b(%rip), %xmm0   # 0x5fc280
movsd %xmm0, -0x60(%rbp)
jmp 0x43d2a8
cmpl $0x3, -0x1c(%rbp)
jne 0x43d284
movq -0x80(%rbp), %rax
movsd 0x1bddba(%rip), %xmm0   # 0x5fb018
movsd %xmm0, -0x70(%rbp)
movsd 0x1bf045(%rip), %xmm0   # 0x5fc2b0
mulsd (%rax), %xmm0
movsd %xmm0, -0x68(%rbp)
movsd (%rax), %xmm0
callq 0x418110
movsd %xmm0, -0x60(%rbp)
jmp 0x43d2a6
movq $0x698ac0, %rdi         # imm = 0x698AC0
leaq 0x1c2aa2(%rip), %rsi    # 0x5ffd34
callq 0x4e1b60
movq %rax, %rdi
leaq 0x25a3f0(%rip), %rsi    # 0x697691
callq 0x46d700
jmp 0x43d2a8
movq -0x80(%rbp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, 0x18(%rax)
testb $0x1, 0x257ee5(%rip)    # 0x6951a0
je 0x43d2d0
movq $0x698ac0, %rdi         # imm = 0x698AC0
leaq 0x1c2a92(%rip), %rsi    # 0x5ffd5d
callq 0x4e1b60
movl $0x0, -0x74(%rbp)
movl -0x74(%rbp), %eax
cmpl -0x1c(%rbp), %eax
je 0x43d3df
movq -0x80(%rbp), %rax
movsd -0x10(%rbp), %xmm0
movsd 0x20(%rax), %xmm1
movaps 0x1c29e8(%rip), %xmm2   # 0x5ffce0
pxor %xmm2, %xmm1
movl -0x74(%rbp), %eax
cvtsi2sd %rax, %xmm2
subsd %xmm2, %xmm1
callq 0x51ef10
movq -0x80(%rbp), %rax
movsd 0x20(%rax), %xmm1
movl -0x74(%rbp), %eax
cvtsi2sd %rax, %xmm2
addsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movl -0x74(%rbp), %eax
mulsd -0x70(%rbp,%rax,8), %xmm0
movsd %xmm0, -0x70(%rbp,%rax,8)
movl -0x1c(%rbp), %edi
callq 0x41c670
movl -0x74(%rbp), %eax
mulsd -0x70(%rbp,%rax,8), %xmm0
movsd %xmm0, -0x70(%rbp,%rax,8)
movl -0x74(%rbp), %eax
movsd -0x70(%rbp,%rax,8), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x43d360
jmp 0x43d37f
leaq 0x1c2a00(%rip), %rdi    # 0x5ffd67
leaq 0x1c2a0f(%rip), %rsi    # 0x5ffd7d
movl $0x3e, %edx
leaq 0x1c2a17(%rip), %rcx    # 0x5ffd91
callq 0x53d020
movq -0x80(%rbp), %rax
movl -0x74(%rbp), %ecx
movsd -0x70(%rbp,%rcx,8), %xmm0
addsd 0x18(%rax), %xmm0
movsd %xmm0, 0x18(%rax)
movsd 0x18(%rax), %xmm0
movl -0x74(%rbp), %ecx
movsd %xmm0, 0x28(%rax,%rcx,8)
testb $0x1, 0x257df5(%rip)    # 0x6951a0
je 0x43d3cf
movq -0x80(%rbp), %rax
movsd 0x18(%rax), %xmm0
movq $0x698ac0, %rdi         # imm = 0x698AC0
callq 0x4e2ad0
movq %rax, %rdi
movl $0x20, %esi
callq 0x4e1a90
jmp 0x43d3d1
movl -0x74(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x74(%rbp)
jmp 0x43d2d7
movq -0x80(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x90(%rbp)
movl -0x1c(%rbp), %edi
movsd 0x10(%rax), %xmm0
callq 0x41c4c0
movq -0x80(%rbp), %rax
movaps %xmm0, %xmm2
movsd -0x90(%rbp), %xmm0
movsd 0x18(%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x18(%rax)
testb $0x1, 0x257d7b(%rip)    # 0x6951a0
je 0x43d449
movq -0x80(%rbp), %rax
movsd 0x18(%rax), %xmm0
movq $0x698ac0, %rdi         # imm = 0x698AC0
callq 0x4e2ad0
movq %rax, %rdi
movl $0xa, %esi
callq 0x4e1a90
movb $0x0, 0x257d50(%rip)    # 0x6951a0
addq $0x90, %rsp
popq %rbp
retq
movq -0x50(%rbp), %rdi
callq 0x5283c0
nopw %cs:(%rax,%rax)
nopl (%rax)