// File: /workspace/github_cpp_makefile_star2_O3/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 %r13
pushq %r12
pushq %rbx
subq $0x1a8, %rsp            # imm = 0x1A8
movss %xmm0, 0xc(%rsp)
movq %rdi, %rbx
movslq 0x30(%rdi), %r15
xorps %xmm0, %xmm0
leaq 0x10(%rsp), %r14
movaps %xmm0, (%r14)
movl $0x1, %edx
movq %r14, %rdi
movq %r15, %rsi
callq 0xd270
cmpq %r15, 0x18(%rsp)
je 0x1a660
leaq 0x10(%rsp), %rdi
movl $0x1, %edx
movq %r15, %rsi
callq 0xd270
movq 0x18(%rsp), %r15
testq %r15, %r15
jle 0x1a68f
movq 0x10(%rsp), %r12
xorl %r13d, %r13d
callq 0xd110
xorps %xmm0, %xmm0
cvtsi2ss %eax, %xmm0
mulss 0xa997(%rip), %xmm0     # 0x25018
movss %xmm0, (%r12,%r13,4)
incq %r13
cmpq %r13, %r15
jne 0x1a66d
movslq 0x30(%rbx), %r12
xorps %xmm0, %xmm0
leaq 0x20(%rsp), %r15
movaps %xmm0, (%r15)
movl $0x1, %edx
movq %r15, %rdi
movq %r12, %rsi
callq 0xd270
cmpq %r12, 0x28(%rsp)
je 0x1a6cd
leaq 0x20(%rsp), %rdi
movl $0x1, %edx
movq %r12, %rsi
callq 0xd270
movq 0x28(%rsp), %r12
testq %r12, %r12
jle 0x1a701
movq 0x20(%rsp), %r13
xorl %ebp, %ebp
callq 0xd110
xorps %xmm0, %xmm0
cvtsi2ss %eax, %xmm0
mulss 0xa92b(%rip), %xmm0     # 0x25018
movss %xmm0, (%r13,%rbp,4)
incq %rbp
cmpq %rbp, %r12
jne 0x1a6d9
movq 0x28(%rsp), %r12
movq 0x18(%rsp), %rax
movss 0x34(%rbx), %xmm0
movq %r14, 0xb0(%rsp)
movq %rax, 0xc0(%rsp)
movl $0xc0000000, 0xcc(%rsp) # imm = 0xC0000000
movq %r15, 0xf0(%rsp)
movq %r12, 0xf8(%rsp)
movl $0x40000000, 0x104(%rsp) # imm = 0x40000000
movq %r12, 0x110(%rsp)
movl $0x40490fdb, 0x11c(%rsp) # imm = 0x40490FDB
movq %r12, 0x138(%rsp)
movss %xmm0, 0x144(%rsp)
movq %r12, 0x150(%rsp)
movss 0xc(%rsp), %xmm0
movss %xmm0, 0x15c(%rsp)
xorps %xmm0, %xmm0
leaq 0x40(%rsp), %rdi
movaps %xmm0, (%rdi)
movl $0x1, %edx
movq %r12, %rsi
callq 0xd270
leaq 0x40(%rsp), %rdi
leaq 0x88(%rsp), %rsi
leaq 0x170(%rsp), %rdx
callq 0xd380
movq 0x28(%rsp), %rax
movq 0x18(%rsp), %rsi
movss 0x34(%rbx), %xmm0
movq %r15, 0xb0(%rsp)
movq %rax, 0xc0(%rsp)
movl $0xc0000000, 0xcc(%rsp) # imm = 0xC0000000
movq %r14, 0xf0(%rsp)
movq %rsi, 0xf8(%rsp)
movl $0x40000000, 0x104(%rsp) # imm = 0x40000000
movq %rsi, 0x110(%rsp)
movl $0x40490fdb, 0x11c(%rsp) # imm = 0x40490FDB
movq %rsi, 0x138(%rsp)
movss %xmm0, 0x144(%rsp)
movq %rsi, 0x150(%rsp)
movss 0xc(%rsp), %xmm0
movss %xmm0, 0x15c(%rsp)
xorps %xmm0, %xmm0
leaq 0x50(%rsp), %rdi
movaps %xmm0, (%rdi)
movl $0x1, %edx
callq 0xd270
leaq 0x50(%rsp), %rdi
leaq 0x88(%rsp), %r14
leaq 0x170(%rsp), %rdx
movq %r14, %rsi
callq 0xd0f0
xorps %xmm0, %xmm0
leaq 0x30(%rsp), %r15
movaps %xmm0, (%r15)
movslq 0x30(%rbx), %rsi
movl $0x2, %edx
movq %r15, %rdi
callq 0xd0b0
movq %r15, 0x68(%rsp)
movq $0x0, 0x70(%rsp)
movl $0x1, %eax
movq %rax, 0x78(%rsp)
movq 0x40(%rsp), %rcx
movq 0x48(%rsp), %rdx
movq %rdx, 0x80(%rsp)
movq 0x30(%rsp), %rsi
movq 0x38(%rsp), %rdi
movq %rsi, 0x88(%rsp)
movq %rdx, 0x90(%rsp)
movq %rax, 0x98(%rsp)
movq %r15, 0xa0(%rsp)
xorps %xmm0, %xmm0
movups %xmm0, 0xa8(%rsp)
movq %rdi, 0xb8(%rsp)
leaq 0x168(%rsp), %rax
movq %rcx, (%rax)
leaq 0x190(%rsp), %rcx
movq %rsi, (%rcx)
movq %rdi, 0x10(%rcx)
leaq 0x170(%rsp), %rdi
movq %rcx, (%rdi)
movq %rax, 0x8(%rdi)
leaq 0xb(%rsp), %rax
movq %rax, 0x10(%rdi)
movq %r14, 0x18(%rdi)
callq 0xd810
leaq 0x68(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0xd760
movq 0x8(%rbx), %r14
movq 0x30(%rsp), %r15
movq 0x38(%rsp), %rsi
cmpq %rsi, 0x10(%rbx)
jne 0x1a947
movq %r14, %rax
jmp 0x1a95d
leaq 0x8(%rbx), %rdi
movl $0x2, %edx
callq 0xd0b0
movq 0x8(%rbx), %rax
movq 0x10(%rbx), %rsi
leaq (%rsi,%rsi), %rcx
movq %rsi, %rdx
shrq $0x3f, %rdx
addq %rsi, %rdx
addq %rdx, %rdx
andq $-0x4, %rdx
cmpq $0x2, %rsi
jl 0x1a991
xorl %esi, %esi
movaps (%r15,%rsi,4), %xmm0
addps (%r14,%rsi,4), %xmm0
movaps %xmm0, (%rax,%rsi,4)
addq $0x4, %rsi
cmpq %rdx, %rsi
jl 0x1a97a
cmpq %rcx, %rdx
jge 0x1a9af
movss (%r15,%rdx,4), %xmm0
addss (%r14,%rdx,4), %xmm0
movss %xmm0, (%rax,%rdx,4)
incq %rdx
cmpq %rdx, %rcx
jne 0x1a996
movq 0x30(%rsp), %rdi
callq 0xd740
movq 0x50(%rsp), %rdi
callq 0xd740
movq 0x40(%rsp), %rdi
callq 0xd740
movq 0x20(%rsp), %rdi
callq 0xd740
movq 0x10(%rsp), %rdi
callq 0xd740
addq $0x1a8, %rsp            # imm = 0x1A8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x1a9f9
jmp 0x1a9f9
jmp 0x1a9f9
movq %rax, %rbx
movq 0x30(%rsp), %rdi
callq 0xd740
jmp 0x1aa15
movq %rax, %rbx
jmp 0x1aa2e
movq %rax, %rbx
jmp 0x1aa38
movq %rax, %rbx
movq 0x50(%rsp), %rdi
callq 0xd740
jmp 0x1aa24
movq %rax, %rbx
movq 0x40(%rsp), %rdi
callq 0xd740
movq 0x20(%rsp), %rdi
callq 0xd740
movq 0x10(%rsp), %rdi
callq 0xd740
movq %rbx, %rdi
callq 0xdb20