// File: /workspace/github_cpp_makefile_star2_O3/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 $0x58, %rsp
movl %esi, %r12d
cvtsi2sd %r12, %xmm2
movsd 0x1a8024(%rip), %xmm3   # 0x5ca138
movsd %xmm2, 0x48(%rsp)
addsd %xmm2, %xmm3
ucomisd %xmm1, %xmm3
jae 0x422379
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 0x1a7fe9(%rip), %xmm2   # 0x5ca138
subsd %xmm1, %xmm2
movapd %xmm2, %xmm1
movsd %xmm0, 0x10(%rsp)
callq 0x4ecf40
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 0x4221ad
cmpl $0x2, %r14d
jne 0x4223a5
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, 0x20(%rsp)
movsd %xmm0, 0x28(%rsp)
movsd 0x1ab055(%rip), %xmm0   # 0x5cd200
jmp 0x4221ce
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, 0x22ffb5(%rip)    # 0x652198
jne 0x422203
movq $0x655aa0, %rdi         # imm = 0x655AA0
leaq 0x1ab0a3(%rip), %rsi    # 0x5cd296
movl $0x9, %edx
callq 0x4b0120
movsd 0x10(%rsp), %xmm2
xorl %eax, %eax
cmpl $0x3, %r14d
sete %al
leaq 0x1a7ead(%rip), %r13    # 0x5ca0c0
movsd (%r13,%rax,8), %xmm0
movsd %xmm0, 0x50(%rsp)
xorl %ebp, %ebp
movq $0x655aa0, %r14         # imm = 0x655AA0
leaq 0xf(%rsp), %r15
movsd 0x20(%rbx), %xmm1
xorpd 0x1a7e05(%rip), %xmm1   # 0x5ca040
movl %ebp, %eax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
movsd %xmm0, 0x18(%rsp)
subsd %xmm0, %xmm1
movapd %xmm2, %xmm0
callq 0x4ecf40
movsd 0x18(%rsp), %xmm1
addsd 0x20(%rbx), %xmm1
divsd %xmm1, %xmm0
mulsd 0x20(%rsp,%rbp,8), %xmm0
mulsd 0x50(%rsp), %xmm0
movsd %xmm0, 0x20(%rsp,%rbp,8)
ucomisd 0x1a7ea7(%rip), %xmm0   # 0x5ca128
jb 0x42235a
addsd 0x18(%rbx), %xmm0
movsd %xmm0, 0x18(%rbx)
movsd %xmm0, 0x28(%rbx,%rbp,8)
cmpb $0x1, 0x22fefa(%rip)    # 0x652198
jne 0x4222bd
movq %r14, %rdi
callq 0x4b1380
movb $0x20, 0xf(%rsp)
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x4b0120
incq %rbp
cmpq %rbp, %r12
movsd 0x10(%rsp), %xmm2
jne 0x42222e
movsd 0x8(%rbx), %xmm0
movsd %xmm0, 0x18(%rsp)
movsd 0x10(%rbx), %xmm0
xorl %eax, %eax
cmpl $0x3, %r12d
sete %al
movsd (%r13,%rax,8), %xmm2
movsd 0x48(%rsp), %xmm1
divsd %xmm1, %xmm2
movsd %xmm2, 0x10(%rsp)
callq 0x4ecf40
mulsd 0x10(%rsp), %xmm0
mulsd 0x18(%rsp), %xmm0
addsd 0x18(%rbx), %xmm0
movsd %xmm0, 0x18(%rbx)
cmpb $0x0, 0x22fe77(%rip)    # 0x652198
je 0x422344
movq $0x655aa0, %rdi         # imm = 0x655AA0
callq 0x4b1380
leaq 0xf(%rsp), %rsi
movb $0xa, (%rsi)
movl $0x1, %edx
movq %rax, %rdi
callq 0x4b0120
movb $0x0, 0x22fe4d(%rip)    # 0x652198
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1aaf3f(%rip), %rdi    # 0x5cd2a0
leaq 0x1aaf4e(%rip), %rsi    # 0x5cd2b6
leaq 0x1aaf5b(%rip), %rcx    # 0x5cd2ca
movl $0x3e, %edx
callq 0x50b050
leaq 0x30(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1aaecd(%rip), %rsi    # 0x5cd256
leaq 0x1aaedc(%rip), %rdx    # 0x5cd26c
leaq 0x20(%rsp), %rbx
movq %rbx, %rdi
callq 0x4083fe
movq %rbx, %rdi
callq 0x43f581
movq $0x655aa0, %rdi         # imm = 0x655AA0
leaq 0x1aaeba(%rip), %rsi    # 0x5cd26d
callq 0x4b0650
leaq 0x2322b2(%rip), %rsi    # 0x654671
movq %rax, %rdi
callq 0x43f8ce
movq %rax, %rbx
movq 0x20(%rsp), %rdi
cmpq %r14, %rdi
je 0x4223e1
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x442d20
movq %rbx, %rdi
callq 0x4f63f0
nop