// File: /workspace/github_cpp_makefile_star2_O2/schuyler[P]quickfix/include/quickfix/particle_filter.h
// Function: ParticleFilter<float, 2>::perturb(float)
void ParticleFilter<F,D>::perturb(F dT) {
    // FIXME: this only works in 2D for now
    // z0 = sqrt(-2.0 * log(u1)) * cos(two_pi * u2);
    Array<F, Dynamic, 1> u1 = Array<F, Dynamic, 1>::Random(N, 1) * 0.5 + 0.5,
                         u2 = Array<F, Dynamic, 1>::Random(N, 1) * 0.5 + 0.5;
    Array<F, Dynamic, 1> dx = (u1.log() * -2.).sqrt() * (u2 * 2 * M_PI).cos() * dispersion * dT,
                         dy = (u2.log() * -2.).sqrt() * (u1 * 2 * M_PI).sin() * dispersion * dT;
    Particles dP(N, D);
    dP << dx, dy;
    P = P + dP;
    // FIXME: clipping should happen here
    //P = P.cwiseMax(bound.row(0))
    //     .cwiseMin(bound.row(1));
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x320, %rsp            # imm = 0x320
movq %rdi, %rbx
movss %xmm0, 0xc(%rsp)
movslq 0x30(%rdi), %rax
leaq 0x50(%rsp), %r15
movq %rax, 0x10(%r15)
movq %rax, 0x20(%r15)
movl $0x3f000000, %ebp       # imm = 0x3F000000
movl %ebp, 0x2c(%r15)
movq %rax, 0x38(%r15)
movl %ebp, 0x44(%r15)
leaq 0x20(%rsp), %r14
movq %r14, %rdi
movq %r15, %rsi
callq 0x4cb10
movslq 0x30(%rbx), %rax
movq %rax, 0x10(%r15)
movq %rax, 0x20(%r15)
movl %ebp, 0x2c(%r15)
movq %rax, 0x38(%r15)
movl %ebp, 0x44(%r15)
leaq 0x10(%rsp), %r15
leaq 0x50(%rsp), %rsi
movq %r15, %rdi
callq 0x4cb10
movq 0x28(%rsp), %rax
leaq 0x1f0(%rsp), %rsi
movq %r14, 0x10(%rsi)
movq %rax, 0x20(%rsi)
movl $0xc0000000, 0x2c(%rsi) # imm = 0xC0000000
movq 0x18(%rsp), %rax
leaq 0x230(%rsp), %rdx
movq %r15, 0x10(%rdx)
movq %rax, 0x18(%rdx)
movl $0x40000000, 0x24(%rdx) # imm = 0x40000000
movq %rax, 0x30(%rdx)
movl $0x40490fdb, 0x3c(%rdx) # imm = 0x40490FDB
leaq 0x280(%rsp), %rdi
callq 0x4c680
leaq 0x34(%rbx), %r12
leaq 0x130(%rsp), %rdi
leaq 0x280(%rsp), %rsi
movq %r12, %rdx
callq 0x4df60
leaq 0x50(%rsp), %rdi
leaq 0x130(%rsp), %rsi
leaq 0xc(%rsp), %rdx
callq 0x4d4c0
leaq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x4cd90
movq 0x18(%rsp), %rax
leaq 0x1f0(%rsp), %rsi
movq %r15, 0x10(%rsi)
movq %rax, 0x20(%rsi)
movl $0xc0000000, 0x2c(%rsi) # imm = 0xC0000000
movq 0x28(%rsp), %rax
leaq 0x230(%rsp), %rdx
movq %r14, 0x10(%rdx)
movq %rax, 0x18(%rdx)
movl $0x40000000, 0x24(%rdx) # imm = 0x40000000
movq %rax, 0x30(%rdx)
movl $0x40490fdb, 0x3c(%rdx) # imm = 0x40490FDB
leaq 0x280(%rsp), %rdi
callq 0x4c500
leaq 0x130(%rsp), %rdi
leaq 0x280(%rsp), %rsi
movq %r12, %rdx
callq 0x4e740
leaq 0x50(%rsp), %rdi
leaq 0x130(%rsp), %rsi
leaq 0xc(%rsp), %rdx
callq 0x4da00
leaq 0x30(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x4e150
leaq 0x30(%rbx), %rsi
leaq 0x50(%rsp), %rdx
movl $0x2, (%rdx)
leaq 0x130(%rsp), %rdi
callq 0x4e770
leaq 0x50(%rsp), %rdi
leaq 0x130(%rsp), %r14
leaq 0x40(%rsp), %rdx
movq %r14, %rsi
callq 0x4c770
leaq 0x50(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0x4e730
addq $0x8, %rbx
leaq 0x50(%rsp), %rsi
movq %rbx, (%rsi)
movq %r14, 0x8(%rsi)
movq %rbx, %rdi
callq 0x4d1c0
movq 0x130(%rsp), %rdi
callq 0x4e5b0
movq 0x30(%rsp), %rdi
callq 0x4e5b0
movq 0x40(%rsp), %rdi
callq 0x4e5b0
movq 0x10(%rsp), %rdi
callq 0x4e5b0
movq 0x20(%rsp), %rdi
callq 0x4e5b0
addq $0x320, %rsp            # imm = 0x320
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
jmp 0x5e626
jmp 0x5e626
movq %rax, %rbx
movq 0x130(%rsp), %rdi
callq 0x4e5b0
jmp 0x5e63b
movq %rax, %rbx
movq 0x30(%rsp), %rdi
callq 0x4e5b0
jmp 0x5e64f
movq %rax, %rbx
jmp 0x5e668
movq %rax, %rbx
movq 0x40(%rsp), %rdi
callq 0x4e5b0
jmp 0x5e65e
movq %rax, %rbx
movq 0x10(%rsp), %rdi
callq 0x4e5b0
movq 0x20(%rsp), %rdi
callq 0x4e5b0
movq %rbx, %rdi
callq 0x4f920