void vl_rodrigues(double *R_pt, double *dR_pt, const double *om_pt) {
  const double small = 1e-6;
  double th = sqrt(om_pt[(0)] * om_pt[(0)] + om_pt[(1)] * om_pt[(1)] +
                   om_pt[(2)] * om_pt[(2)]);
  if (th < small) {
    R_pt[(0) + 3 * (0)] = 1.0;
    R_pt[(0) + 3 * (1)] = 0.0;
    R_pt[(0) + 3 * (2)] = 0.0;
    R_pt[(1) + 3 * (0)] = 0.0;
    R_pt[(1) + 3 * (1)] = 1.0;
    R_pt[(1) + 3 * (2)] = 0.0;
    R_pt[(2) + 3 * (0)] = 0.0;
    R_pt[(2) + 3 * (1)] = 0.0;
    R_pt[(2) + 3 * (2)] = 1.0;
    if (dR_pt) {
      dR_pt[(0) + 9 * (0)] = 0;
      dR_pt[(0) + 9 * (1)] = 0;
      dR_pt[(0) + 9 * (2)] = 0;
      dR_pt[(1) + 9 * (0)] = 0;
      dR_pt[(1) + 9 * (1)] = 0;
      dR_pt[(1) + 9 * (2)] = 1;
      dR_pt[(2) + 9 * (0)] = 0;
      dR_pt[(2) + 9 * (1)] = -1;
      dR_pt[(2) + 9 * (2)] = 0;
      dR_pt[(3) + 9 * (0)] = 0;
      dR_pt[(3) + 9 * (1)] = 0;
      dR_pt[(3) + 9 * (2)] = -1;
      dR_pt[(4) + 9 * (0)] = 0;
      dR_pt[(4) + 9 * (1)] = 0;
      dR_pt[(4) + 9 * (2)] = 0;
      dR_pt[(5) + 9 * (0)] = 1;
      dR_pt[(5) + 9 * (1)] = 0;
      dR_pt[(5) + 9 * (2)] = 0;
      dR_pt[(6) + 9 * (0)] = 0;
      dR_pt[(6) + 9 * (1)] = 1;
      dR_pt[(6) + 9 * (2)] = 0;
      dR_pt[(7) + 9 * (0)] = -1;
      dR_pt[(7) + 9 * (1)] = 0;
      dR_pt[(7) + 9 * (2)] = 0;
      dR_pt[(8) + 9 * (0)] = 0;
      dR_pt[(8) + 9 * (1)] = 0;
      dR_pt[(8) + 9 * (2)] = 0;
    }
    return;
  }
  {
    double x = om_pt[(0)] / th;
    double y = om_pt[(1)] / th;
    double z = om_pt[(2)] / th;
    double xx = x * x;
    double xy = x * y;
    double xz = x * z;
    double yy = y * y;
    double yz = y * z;
    double zz = z * z;
    const double yx = xy;
    const double zx = xz;
    const double zy = yz;
    double sth = sin(th);
    double cth = cos(th);
    double mcth = 1.0 - cth;
    R_pt[(0) + 3 * (0)] = 1 - mcth * (yy + zz);
    R_pt[(1) + 3 * (0)] = sth * z + mcth * xy;
    R_pt[(2) + 3 * (0)] = -sth * y + mcth * xz;
    R_pt[(0) + 3 * (1)] = -sth * z + mcth * yx;
    R_pt[(1) + 3 * (1)] = 1 - mcth * (zz + xx);
    R_pt[(2) + 3 * (1)] = sth * x + mcth * yz;
    R_pt[(0) + 3 * (2)] = sth * y + mcth * xz;
    R_pt[(1) + 3 * (2)] = -sth * x + mcth * yz;
    R_pt[(2) + 3 * (2)] = 1 - mcth * (xx + yy);
    if (dR_pt) {
      double a = sth / th;
      double b = mcth / th;
      double c = cth - a;
      double d = sth - 2 * b;
      dR_pt[(0) + 9 * (0)] = -d * (yy + zz) * x;
      dR_pt[(1) + 9 * (0)] = b * y + c * zx + d * xy * x;
      dR_pt[(2) + 9 * (0)] = b * z - c * yx + d * xz * x;
      dR_pt[(3) + 9 * (0)] = b * y - c * zx + d * xy * x;
      dR_pt[(4) + 9 * (0)] = -2 * b * x - d * (zz + xx) * x;
      dR_pt[(5) + 9 * (0)] = a + c * xx + d * yz * x;
      dR_pt[(6) + 9 * (0)] = b * z + c * yx + d * zx * x;
      dR_pt[(7) + 9 * (0)] = -a - c * xx + d * zy * x;
      dR_pt[(8) + 9 * (0)] = -2 * b * x - d * (yy + xx) * x;
      dR_pt[(0) + 9 * (1)] = -2 * b * y - d * (yy + zz) * y;
      dR_pt[(1) + 9 * (1)] = b * x + c * zy + d * xy * y;
      dR_pt[(2) + 9 * (1)] = -a - c * yy + d * xz * y;
      dR_pt[(3) + 9 * (1)] = b * x - c * zy + d * xy * y;
      dR_pt[(4) + 9 * (1)] = -d * (zz + xx) * y;
      dR_pt[(5) + 9 * (1)] = b * z + c * xy + d * yz * y;
      dR_pt[(6) + 9 * (1)] = a + c * yy + d * zx * y;
      dR_pt[(7) + 9 * (1)] = b * z - c * xy + d * zy * y;
      dR_pt[(8) + 9 * (1)] = -2 * b * y - d * (yy + xx) * y;
      dR_pt[(0) + 9 * (2)] = -2 * b * z - d * (yy + zz) * z;
      dR_pt[(1) + 9 * (2)] = a + c * zz + d * xy * z;
      dR_pt[(2) + 9 * (2)] = b * x - c * yz + d * xz * z;
      dR_pt[(3) + 9 * (2)] = -a - c * zz + d * xy * z;
      dR_pt[(4) + 9 * (2)] = -2 * b * z - d * (zz + xx) * z;
      dR_pt[(5) + 9 * (2)] = b * y + c * xz + d * yz * z;
      dR_pt[(6) + 9 * (2)] = b * x + c * yz + d * zx * z;
      dR_pt[(7) + 9 * (2)] = b * y - c * xz + d * zy * z;
      dR_pt[(8) + 9 * (2)] = -d * (yy + xx) * z;
    }
  }
}


x86 assembly (clang, -O0):
<vl_rodrigues>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movsd  0x1eb1(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x18(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1050 <sqrt@plt>
movsd  %xmm0,-0x28(%rbp)
movsd  0x1e56(%rip),%xmm0
ucomisd -0x28(%rbp),%xmm0
jbe    13c1 <vl_rodrigues+0x291>
mov    -0x8(%rbp),%rax
movsd  0x1e47(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x18(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x30(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x8(%rbp),%rax
movsd  0x1e13(%rip),%xmm0
movsd  %xmm0,0x20(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x38(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x28(%rax)
mov    -0x8(%rbp),%rax
movsd  0x1dde(%rip),%xmm0
movsd  %xmm0,0x40(%rax)
cmpq   $0x0,-0x10(%rbp)
je     13bc <vl_rodrigues+0x28c>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x48(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x90(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x50(%rax)
mov    -0x10(%rbp),%rax
movsd  0x1d84(%rip),%xmm0
movsd  %xmm0,0x98(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x10(%rbp),%rax
movsd  0x1d74(%rip),%xmm0
movsd  %xmm0,0x58(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0xa0(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x18(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x60(%rax)
mov    -0x10(%rbp),%rax
movsd  0x1d3c(%rip),%xmm0
movsd  %xmm0,0xa8(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x20(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x68(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0xb0(%rax)
mov    -0x10(%rbp),%rax
movsd  0x1cf1(%rip),%xmm0
movsd  %xmm0,0x28(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x70(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0xb8(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x30(%rax)
mov    -0x10(%rbp),%rax
movsd  0x1cb9(%rip),%xmm0
movsd  %xmm0,0x78(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0xc0(%rax)
mov    -0x10(%rbp),%rax
movsd  0x1ca9(%rip),%xmm0
movsd  %xmm0,0x38(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x80(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0xc8(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x40(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x88(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0xd0(%rax)
jmp    1fe9 <vl_rodrigues+0xeb9>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
divsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
divsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
divsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x30(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x30(%rbp),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x30(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x38(%rbp),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1030 <sin@plt>
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1040 <cos@plt>
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0x1b68(%rip),%xmm0
subsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0x60(%rbp),%xmm1
addsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0x1b23(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0x50(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x90(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x38(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x90(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0x70(%rbp),%xmm1
addsd  -0x48(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0x1a33(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x30(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x38(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x90(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0x48(%rbp),%xmm1
addsd  -0x60(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0x1959(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x40(%rax)
cmpq   $0x0,-0x10(%rbp)
je     1fe9 <vl_rodrigues+0xeb9>
movsd  -0x90(%rbp),%xmm0
ff
divsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
divsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
subsd  -0xa8(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0xb0(%rbp),%xmm1
ff
addsd  %xmm1,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x60(%rbp),%xmm1
addsd  -0x70(%rbp),%xmm1
mulsd  %xmm1,%xmm0
mulsd  -0x30(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0x38(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x80(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0x50(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0x40(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x78(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0x58(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0x38(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x80(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0x50(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  0x17a8(%rip),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  -0x30(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
movsd  -0x70(%rbp),%xmm3
addsd  -0x48(%rbp),%xmm3
mulsd  %xmm3,%xmm1
mulsd  -0x30(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0x48(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0x68(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0x40(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x78(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0x80(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0x48(%rbp),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  0x165a(%rip),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  -0x30(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
movsd  -0x60(%rbp),%xmm3
addsd  -0x48(%rbp),%xmm3
mulsd  %xmm3,%xmm1
mulsd  -0x30(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  0x1602(%rip),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  -0x38(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
movsd  -0x60(%rbp),%xmm3
addsd  -0x70(%rbp),%xmm3
mulsd  %xmm3,%xmm1
mulsd  -0x38(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0x30(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0x50(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0x60(%rbp),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0x58(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x58(%rax)
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0x30(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0x50(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x70(%rbp),%xmm1
addsd  -0x48(%rbp),%xmm1
mulsd  %xmm1,%xmm0
mulsd  -0x38(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0x40(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x50(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0x68(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0x80(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x78(%rax)
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0x40(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x80(%rax)
movsd  0x1373(%rip),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  -0x38(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
movsd  -0x60(%rbp),%xmm3
addsd  -0x48(%rbp),%xmm3
mulsd  %xmm3,%xmm1
mulsd  -0x38(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x88(%rax)
movsd  0x1318(%rip),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
movsd  -0x60(%rbp),%xmm3
addsd  -0x70(%rbp),%xmm3
mulsd  %xmm3,%xmm1
mulsd  -0x40(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x90(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0x70(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0x50(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x98(%rax)
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0x30(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x68(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0x58(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0xa0(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0x70(%rbp),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0x50(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0xa8(%rax)
movsd  0x11aa(%rip),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
movsd  -0x70(%rbp),%xmm3
addsd  -0x48(%rbp),%xmm3
mulsd  %xmm3,%xmm1
mulsd  -0x40(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0xb0(%rax)
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0x38(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x58(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0x68(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0xb8(%rax)
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0x30(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x68(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0x80(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0xc0(%rax)
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0x38(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0xc8(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x60(%rbp),%xmm1
addsd  -0x48(%rbp),%xmm1
mulsd  %xmm1,%xmm0
mulsd  -0x40(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0xd0(%rax)
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<vl_rodrigues>:
push   %r15
push   %r14
push   %rbx
sub    $0xe0,%rsp
mov    %rdx,%rbx
mov    %rsi,%r14
mov    %rdi,%r15
movsd  (%rdx),%xmm1
movsd  0x8(%rdx),%xmm0
mulsd  %xmm0,%xmm0
mulsd  %xmm1,%xmm1
addsd  %xmm0,%xmm1
movsd  0x10(%rdx),%xmm0
mulsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1177 <vl_rodrigues+0x47>
sqrtsd %xmm0,%xmm0
jmp    117c <vl_rodrigues+0x4c>
call   1050 <sqrt@plt>
movsd  0xe7c(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    125a <vl_rodrigues+0x12a>
movsd  0xe72(%rip),%xmm1
movupd %xmm1,(%r15)
xorpd  %xmm0,%xmm0
movupd %xmm0,0x30(%r15)
movupd %xmm0,0x10(%r15)
movupd %xmm1,0x20(%r15)
movabs $0x3ff0000000000000,%rax
mov    %rax,0x40(%r15)
test   %r14,%r14
je     17e4 <vl_rodrigues+0x6b4>
movupd %xmm0,(%r14)
movupd %xmm0,0x48(%r14)
xorpd  %xmm1,%xmm1
movhpd 0xe29(%rip),%xmm1
movupd %xmm1,0x90(%r14)
movupd %xmm0,0x10(%r14)
movsd  0xe1a(%rip),%xmm2
movupd %xmm2,0x58(%r14)
xorpd  %xmm2,%xmm2
movhpd 0xe08(%rip),%xmm2
movupd %xmm2,0xa0(%r14)
movupd %xmm1,0x20(%r14)
movupd %xmm0,0x68(%r14)
movupd %xmm0,0xb0(%r14)
mov    %rax,0x78(%r14)
movq   $0x0,0xc0(%r14)
movupd %xmm2,0x30(%r14)
movq   $0x0,0x40(%r14)
movupd %xmm0,0x80(%r14)
movupd %xmm0,0xc8(%r14)
jmp    17e4 <vl_rodrigues+0x6b4>
movsd  (%rbx),%xmm2
divsd  %xmm0,%xmm2
movupd 0x8(%rbx),%xmm3
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
divpd  %xmm1,%xmm3
movapd %xmm2,%xmm1
movapd %xmm2,%xmm4
movapd %xmm2,0x50(%rsp)
unpcklpd %xmm2,%xmm1
movapd %xmm1,0x40(%rsp)
movapd %xmm3,%xmm2
movapd %xmm3,0x60(%rsp)
mulpd  %xmm3,%xmm1
movapd %xmm1,0x20(%rsp)
movapd %xmm3,%xmm1
mulpd  %xmm3,%xmm1
movapd %xmm1,0x70(%rsp)
movapd %xmm3,%xmm1
unpckhpd %xmm3,%xmm1
movapd %xmm1,0xd0(%rsp)
mulsd  %xmm1,%xmm3
movapd %xmm3,(%rsp)
movsd  %xmm4,%xmm2
mulpd  %xmm2,%xmm2
movapd %xmm2,0x80(%rsp)
movapd %xmm0,0x10(%rsp)
call   1030 <sin@plt>
movapd %xmm0,0x30(%rsp)
movapd 0x10(%rsp),%xmm0
call   1040 <cos@plt>
movapd 0x20(%rsp),%xmm12
movsd  0xd04(%rip),%xmm8
movapd %xmm8,%xmm15
subsd  %xmm0,%xmm15
movapd 0xd09(%rip),%xmm14
movapd %xmm15,%xmm6
xorpd  %xmm14,%xmm6
movapd 0x70(%rsp),%xmm2
unpcklpd %xmm2,%xmm2
movapd 0x80(%rsp),%xmm13
addpd  %xmm13,%xmm2
movapd %xmm15,%xmm4
unpcklpd %xmm15,%xmm4
mulpd  %xmm12,%xmm4
movapd %xmm4,%xmm7
shufpd $0x1,%xmm4,%xmm7
movapd 0x30(%rsp),%xmm5
unpcklpd %xmm5,%xmm6
movapd %xmm2,%xmm1
movapd 0x60(%rsp),%xmm10
unpckhpd %xmm10,%xmm1
movapd %xmm8,%xmm3
unpcklpd %xmm4,%xmm3
mulpd  %xmm6,%xmm1
addpd  %xmm3,%xmm1
movupd %xmm1,(%r15)
movapd %xmm5,%xmm1
unpcklpd %xmm5,%xmm1
mulpd  %xmm10,%xmm1
subpd  %xmm1,%xmm7
movupd %xmm7,0x10(%r15)
movapd %xmm13,%xmm9
unpckhpd %xmm13,%xmm9
addsd  %xmm9,%xmm13
movapd (%rsp),%xmm1
mulsd  %xmm15,%xmm1
movapd %xmm13,%xmm3
movapd 0x50(%rsp),%xmm7
unpcklpd %xmm7,%xmm3
mulpd  %xmm6,%xmm3
movapd %xmm8,%xmm6
unpcklpd %xmm1,%xmm6
addpd  %xmm6,%xmm3
movapd %xmm5,%xmm6
xorpd  %xmm5,%xmm14
movupd %xmm3,0x20(%r15)
movapd %xmm5,%xmm11
movapd %xmm5,%xmm3
unpcklpd %xmm14,%xmm3
movapd %xmm10,%xmm5
unpcklpd %xmm7,%xmm5
mulpd  %xmm3,%xmm5
shufpd $0x1,%xmm1,%xmm4
addpd  %xmm5,%xmm4
movupd %xmm4,0x30(%r15)
movapd %xmm15,%xmm1
mulsd  %xmm2,%xmm1
subsd  %xmm1,%xmm8
movsd  %xmm8,0x40(%r15)
test   %r14,%r14
je     17e4 <vl_rodrigues+0x6b4>
movapd %xmm10,%xmm14
movapd %xmm7,%xmm10
movapd %xmm11,%xmm4
movapd %xmm11,%xmm1
movapd 0x10(%rsp),%xmm5
divsd  %xmm5,%xmm1
movapd %xmm1,%xmm3
movapd %xmm1,0xb0(%rsp)
divsd  %xmm5,%xmm15
movapd %xmm15,%xmm1
addsd  %xmm15,%xmm1
subsd  %xmm1,%xmm4
movapd 0xbb1(%rip),%xmm11
movapd %xmm4,%xmm5
xorpd  %xmm11,%xmm5
pshufd $0x44,%xmm5,%xmm1
mulpd  %xmm1,%xmm2
movapd %xmm2,0x30(%rsp)
movapd %xmm2,%xmm1
unpckhpd %xmm2,%xmm1
movapd %xmm1,0x10(%rsp)
movapd %xmm7,%xmm8
movapd %xmm10,%xmm2
mulsd  %xmm1,%xmm2
movsd  %xmm2,(%r14)
subsd  %xmm3,%xmm0
movapd %xmm12,%xmm3
unpckhpd %xmm12,%xmm3
mulsd  %xmm0,%xmm3
movapd %xmm12,%xmm2
mulsd  %xmm0,%xmm2
movapd %xmm2,0xa0(%rsp)
xorpd  %xmm11,%xmm2
movapd %xmm3,%xmm6
unpcklpd %xmm2,%xmm6
movapd %xmm15,%xmm10
unpcklpd %xmm15,%xmm10
movapd %xmm10,%xmm1
mulpd  %xmm14,%xmm1
addpd  %xmm6,%xmm1
movapd %xmm1,0xc0(%rsp)
movapd %xmm4,%xmm7
unpcklpd %xmm4,%xmm7
mulpd  %xmm12,%xmm7
movapd %xmm7,%xmm2
movapd 0x40(%rsp),%xmm12
mulpd  %xmm12,%xmm2
addpd  %xmm1,%xmm2
movupd %xmm2,0x8(%r14)
mulsd  %xmm5,%xmm13
shufpd $0x2,0xb01(%rip),%xmm4
movapd (%rsp),%xmm1
movapd %xmm1,%xmm2
unpcklpd %xmm15,%xmm2
mulpd  %xmm2,%xmm4
xorpd  %xmm11,%xmm3
mulsd  %xmm0,%xmm1
movapd %xmm1,(%rsp)
movapd %xmm1,%xmm2
unpcklpd %xmm3,%xmm2
movapd %xmm8,%xmm6
unpcklpd %xmm14,%xmm6
movapd %xmm14,%xmm1
mulpd  %xmm6,%xmm10
addpd  %xmm2,%xmm10
movapd %xmm8,%xmm2
movapd %xmm8,%xmm14
mulsd  %xmm13,%xmm2
movapd %xmm4,%xmm3
movsd  %xmm7,%xmm3
mulpd  %xmm12,%xmm3
movapd %xmm9,0x20(%rsp)
movapd %xmm7,%xmm9
shufpd $0x1,%xmm4,%xmm9
mulpd  %xmm9,%xmm12
movapd %xmm12,0x40(%rsp)
movapd %xmm7,%xmm8
mulsd  %xmm1,%xmm8
movapd %xmm8,%xmm1
addsd  %xmm10,%xmm1
movapd %xmm1,0x90(%rsp)
movapd 0xd0(%rsp),%xmm1
mulpd  %xmm1,%xmm9
addpd  %xmm10,%xmm9
movapd %xmm10,%xmm5
shufpd $0x1,%xmm2,%xmm5
addpd  %xmm5,%xmm3
movupd %xmm3,0x18(%r14)
movapd %xmm0,%xmm2
movapd 0x80(%rsp),%xmm10
mulsd  %xmm10,%xmm2
movapd 0xb0(%rsp),%xmm5
addsd  %xmm5,%xmm2
movapd %xmm4,%xmm3
mulsd  %xmm14,%xmm3
addsd  %xmm2,%xmm3
movsd  %xmm3,0x28(%r14)
movapd %xmm0,%xmm2
xorpd  %xmm11,%xmm2
unpcklpd %xmm2,%xmm15
movapd (%rsp),%xmm2
unpcklpd %xmm5,%xmm2
movapd %xmm2,(%rsp)
movapd %xmm5,%xmm14
xorpd  %xmm2,%xmm11
pshufd $0xee,%xmm11,%xmm2
movlpd 0xa0(%rsp),%xmm11
movapd %xmm13,%xmm12
movapd 0x60(%rsp),%xmm13
movapd %xmm13,%xmm3
shufpd $0x1,%xmm10,%xmm3
mulpd  %xmm15,%xmm3
addpd  %xmm11,%xmm3
movapd 0x40(%rsp),%xmm5
addpd  %xmm3,%xmm5
movupd %xmm5,0x30(%r14)
movapd %xmm4,%xmm5
unpckhpd %xmm4,%xmm5
mulpd  %xmm6,%xmm5
movapd 0x30(%rsp),%xmm11
mulpd  %xmm11,%xmm6
addpd  %xmm5,%xmm6
movupd %xmm6,0x40(%r14)
movaps 0x90(%rsp),%xmm5
movsd  %xmm5,0x50(%r14)
movapd %xmm7,%xmm5
unpckhpd %xmm7,%xmm5
movapd 0x70(%rsp),%xmm6
mulsd  %xmm0,%xmm6
subsd  %xmm6,%xmm2
mulsd  %xmm13,%xmm5
addsd  %xmm2,%xmm5
movsd  %xmm5,0x58(%r14)
movlpd 0x50(%rsp),%xmm10
mulpd  %xmm15,%xmm10
subpd  (%rsp),%xmm10
addsd  %xmm10,%xmm8
movsd  %xmm8,0x60(%r14)
movapd %xmm13,%xmm2
mulsd  %xmm12,%xmm2
movsd  %xmm2,0x68(%r14)
addsd  %xmm14,%xmm6
movapd %xmm7,%xmm2
movsd  %xmm4,%xmm2
unpcklpd %xmm6,%xmm3
movapd %xmm13,%xmm5
unpcklpd %xmm13,%xmm5
mulpd  %xmm5,%xmm2
addpd  %xmm3,%xmm2
movupd %xmm2,0x70(%r14)
mulpd  %xmm11,%xmm13
movapd %xmm11,%xmm3
mulsd  %xmm1,%xmm12
movapd 0xc0(%rsp),%xmm11
unpcklpd %xmm11,%xmm12
shufpd $0x1,%xmm13,%xmm11
mulpd  %xmm4,%xmm5
addpd  %xmm11,%xmm5
movupd %xmm5,0x80(%r14)
mulsd  0x20(%rsp),%xmm0
addsd  %xmm14,%xmm0
movapd 0x10(%rsp),%xmm2
mulsd  %xmm1,%xmm2
unpcklpd %xmm0,%xmm2
movapd %xmm4,%xmm0
shufpd $0x1,%xmm7,%xmm0
mulpd  %xmm1,%xmm0
addpd  %xmm2,%xmm0
movupd %xmm0,0x90(%r14)
shufpd $0x1,%xmm7,%xmm7
mulpd  %xmm1,%xmm7
addpd  %xmm10,%xmm7
movupd %xmm7,0xa0(%r14)
mulpd  %xmm1,%xmm4
shufpd $0x1,%xmm4,%xmm4
addpd  %xmm12,%xmm4
movupd %xmm4,0xb0(%r14)
movupd %xmm9,0xc0(%r14)
movapd %xmm3,%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0xd0(%r14)
add    $0xe0,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
define void @vl_rodrigues(double* %0, double* %1, double* %2) {
%4 = alloca double*
%5 = alloca double*
%6 = alloca double*
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca double
%26 = alloca double
%27 = alloca double
store double* %0, double** %4
store double* %1, double** %5
store double* %2, double** %6
store double 0x3EB0C6F7A0B5ED8D, double* %7
%28 = load double*, double** %6
%29 = getelementptr inbounds double, double* %28, i64 0
%30 = load double, double* %29
%31 = load double*, double** %6
%32 = getelementptr inbounds double, double* %31, i64 0
%33 = load double, double* %32
%34 = load double*, double** %6
%35 = getelementptr inbounds double, double* %34, i64 1
%36 = load double, double* %35
%37 = load double*, double** %6
%38 = getelementptr inbounds double, double* %37, i64 1
%39 = load double, double* %38
%40 = fmul double %36, %39
%41 = call double @llvm.fmuladd.f64(double %30, double %33, double %40)
%42 = load double*, double** %6
%43 = getelementptr inbounds double, double* %42, i64 2
%44 = load double, double* %43
%45 = load double*, double** %6
%46 = getelementptr inbounds double, double* %45, i64 2
%47 = load double, double* %46
%48 = call double @llvm.fmuladd.f64(double %44, double %47, double %41)
%49 = call double @sqrt(double %48)
store double %49, double* %8
%50 = load double, double* %8
%51 = fcmp olt double %50, 0x3EB0C6F7A0B5ED8D
br i1 %51, label %52, label %129
52: ; preds = %3
%53 = load double*, double** %4
%54 = getelementptr inbounds double, double* %53, i64 0
store double 1.000000e+00, double* %54
%55 = load double*, double** %4
%56 = getelementptr inbounds double, double* %55, i64 3
store double 0.000000e+00, double* %56
%57 = load double*, double** %4
%58 = getelementptr inbounds double, double* %57, i64 6
store double 0.000000e+00, double* %58
%59 = load double*, double** %4
%60 = getelementptr inbounds double, double* %59, i64 1
store double 0.000000e+00, double* %60
%61 = load double*, double** %4
%62 = getelementptr inbounds double, double* %61, i64 4
store double 1.000000e+00, double* %62
%63 = load double*, double** %4
%64 = getelementptr inbounds double, double* %63, i64 7
store double 0.000000e+00, double* %64
%65 = load double*, double** %4
%66 = getelementptr inbounds double, double* %65, i64 2
store double 0.000000e+00, double* %66
%67 = load double*, double** %4
%68 = getelementptr inbounds double, double* %67, i64 5
store double 0.000000e+00, double* %68
%69 = load double*, double** %4
%70 = getelementptr inbounds double, double* %69, i64 8
store double 1.000000e+00, double* %70
%71 = load double*, double** %5
%72 = icmp ne double* %71, null
br i1 %72, label %73, label %128
73: ; preds = %52
%74 = load double*, double** %5
%75 = getelementptr inbounds double, double* %74, i64 0
store double 0.000000e+00, double* %75
%76 = load double*, double** %5
%77 = getelementptr inbounds double, double* %76, i64 9
store double 0.000000e+00, double* %77
%78 = load double*, double** %5
%79 = getelementptr inbounds double, double* %78, i64 18
store double 0.000000e+00, double* %79
%80 = load double*, double** %5
%81 = getelementptr inbounds double, double* %80, i64 1
store double 0.000000e+00, double* %81
%82 = load double*, double** %5
%83 = getelementptr inbounds double, double* %82, i64 10
store double 0.000000e+00, double* %83
%84 = load double*, double** %5
%85 = getelementptr inbounds double, double* %84, i64 19
store double 1.000000e+00, double* %85
%86 = load double*, double** %5
%87 = getelementptr inbounds double, double* %86, i64 2
store double 0.000000e+00, double* %87
%88 = load double*, double** %5
%89 = getelementptr inbounds double, double* %88, i64 11
store double -1.000000e+00, double* %89
%90 = load double*, double** %5
%91 = getelementptr inbounds double, double* %90, i64 20
store double 0.000000e+00, double* %91
%92 = load double*, double** %5
%93 = getelementptr inbounds double, double* %92, i64 3
store double 0.000000e+00, double* %93
%94 = load double*, double** %5
%95 = getelementptr inbounds double, double* %94, i64 12
store double 0.000000e+00, double* %95
%96 = load double*, double** %5
%97 = getelementptr inbounds double, double* %96, i64 21
store double -1.000000e+00, double* %97
%98 = load double*, double** %5
%99 = getelementptr inbounds double, double* %98, i64 4
store double 0.000000e+00, double* %99
%100 = load double*, double** %5
%101 = getelementptr inbounds double, double* %100, i64 13
store double 0.000000e+00, double* %101
%102 = load double*, double** %5
%103 = getelementptr inbounds double, double* %102, i64 22
store double 0.000000e+00, double* %103
%104 = load double*, double** %5
%105 = getelementptr inbounds double, double* %104, i64 5
store double 1.000000e+00, double* %105
%106 = load double*, double** %5
%107 = getelementptr inbounds double, double* %106, i64 14
store double 0.000000e+00, double* %107
%108 = load double*, double** %5
%109 = getelementptr inbounds double, double* %108, i64 23
store double 0.000000e+00, double* %109
%110 = load double*, double** %5
%111 = getelementptr inbounds double, double* %110, i64 6
store double 0.000000e+00, double* %111
%112 = load double*, double** %5
%113 = getelementptr inbounds double, double* %112, i64 15
store double 1.000000e+00, double* %113
%114 = load double*, double** %5
%115 = getelementptr inbounds double, double* %114, i64 24
store double 0.000000e+00, double* %115
%116 = load double*, double** %5
%117 = getelementptr inbounds double, double* %116, i64 7
store double -1.000000e+00, double* %117
%118 = load double*, double** %5
%119 = getelementptr inbounds double, double* %118, i64 16
store double 0.000000e+00, double* %119
%120 = load double*, double** %5
%121 = getelementptr inbounds double, double* %120, i64 25
store double 0.000000e+00, double* %121
%122 = load double*, double** %5
%123 = getelementptr inbounds double, double* %122, i64 8
store double 0.000000e+00, double* %123
%124 = load double*, double** %5
%125 = getelementptr inbounds double, double* %124, i64 17
store double 0.000000e+00, double* %125
%126 = load double*, double** %5
%127 = getelementptr inbounds double, double* %126, i64 26
store double 0.000000e+00, double* %127
br label %128
128: ; preds = %73, %52
br label %610
129: ; preds = %3
%130 = load double*, double** %6
%131 = getelementptr inbounds double, double* %130, i64 0
%132 = load double, double* %131
%133 = load double, double* %8
%134 = fdiv double %132, %133
store double %134, double* %9
%135 = load double*, double** %6
%136 = getelementptr inbounds double, double* %135, i64 1
%137 = load double, double* %136
%138 = load double, double* %8
%139 = fdiv double %137, %138
store double %139, double* %10
%140 = load double*, double** %6
%141 = getelementptr inbounds double, double* %140, i64 2
%142 = load double, double* %141
%143 = load double, double* %8
%144 = fdiv double %142, %143
store double %144, double* %11
%145 = load double, double* %9
%146 = load double, double* %9
%147 = fmul double %145, %146
store double %147, double* %12
%148 = load double, double* %9
%149 = load double, double* %10
%150 = fmul double %148, %149
store double %150, double* %13
%151 = load double, double* %9
%152 = load double, double* %11
%153 = fmul double %151, %152
store double %153, double* %14
%154 = load double, double* %10
%155 = load double, double* %10
%156 = fmul double %154, %155
store double %156, double* %15
%157 = load double, double* %10
%158 = load double, double* %11
%159 = fmul double %157, %158
store double %159, double* %16
%160 = load double, double* %11
%161 = load double, double* %11
%162 = fmul double %160, %161
store double %162, double* %17
%163 = load double, double* %13
store double %163, double* %18
%164 = load double, double* %14
store double %164, double* %19
%165 = load double, double* %16
store double %165, double* %20
%166 = load double, double* %8
%167 = call double @sin(double %166)
store double %167, double* %21
%168 = load double, double* %8
%169 = call double @cos(double %168)
store double %169, double* %22
%170 = load double, double* %22
%171 = fsub double 1.000000e+00, %170
store double %171, double* %23
%172 = load double, double* %23
%173 = load double, double* %15
%174 = load double, double* %17
%175 = fadd double %173, %174
%176 = fneg double %172
%177 = call double @llvm.fmuladd.f64(double %176, double %175, double 1.000000e+00)
%178 = load double*, double** %4
%179 = getelementptr inbounds double, double* %178, i64 0
store double %177, double* %179
%180 = load double, double* %21
%181 = load double, double* %11
%182 = load double, double* %23
%183 = load double, double* %13
%184 = fmul double %182, %183
%185 = call double @llvm.fmuladd.f64(double %180, double %181, double %184)
%186 = load double*, double** %4
%187 = getelementptr inbounds double, double* %186, i64 1
store double %185, double* %187
%188 = load double, double* %21
%189 = fneg double %188
%190 = load double, double* %10
%191 = load double, double* %23
%192 = load double, double* %14
%193 = fmul double %191, %192
%194 = call double @llvm.fmuladd.f64(double %189, double %190, double %193)
%195 = load double*, double** %4
%196 = getelementptr inbounds double, double* %195, i64 2
store double %194, double* %196
%197 = load double, double* %21
%198 = fneg double %197
%199 = load double, double* %11
%200 = load double, double* %23
%201 = load double, double* %18
%202 = fmul double %200, %201
%203 = call double @llvm.fmuladd.f64(double %198, double %199, double %202)
%204 = load double*, double** %4
%205 = getelementptr inbounds double, double* %204, i64 3
store double %203, double* %205
%206 = load double, double* %23
%207 = load double, double* %17
%208 = load double, double* %12
%209 = fadd double %207, %208
%210 = fneg double %206
%211 = call double @llvm.fmuladd.f64(double %210, double %209, double 1.000000e+00)
%212 = load double*, double** %4
%213 = getelementptr inbounds double, double* %212, i64 4
store double %211, double* %213
%214 = load double, double* %21
%215 = load double, double* %9
%216 = load double, double* %23
%217 = load double, double* %16
%218 = fmul double %216, %217
%219 = call double @llvm.fmuladd.f64(double %214, double %215, double %218)
%220 = load double*, double** %4
%221 = getelementptr inbounds double, double* %220, i64 5
store double %219, double* %221
%222 = load double, double* %21
%223 = load double, double* %10
%224 = load double, double* %23
%225 = load double, double* %14
%226 = fmul double %224, %225
%227 = call double @llvm.fmuladd.f64(double %222, double %223, double %226)
%228 = load double*, double** %4
%229 = getelementptr inbounds double, double* %228, i64 6
store double %227, double* %229
%230 = load double, double* %21
%231 = fneg double %230
%232 = load double, double* %9
%233 = load double, double* %23
%234 = load double, double* %16
%235 = fmul double %233, %234
%236 = call double @llvm.fmuladd.f64(double %231, double %232, double %235)
%237 = load double*, double** %4
%238 = getelementptr inbounds double, double* %237, i64 7
store double %236, double* %238
%239 = load double, double* %23
%240 = load double, double* %12
%241 = load double, double* %15
%242 = fadd double %240, %241
%243 = fneg double %239
%244 = call double @llvm.fmuladd.f64(double %243, double %242, double 1.000000e+00)
%245 = load double*, double** %4
%246 = getelementptr inbounds double, double* %245, i64 8
store double %244, double* %246
%247 = load double*, double** %5
%248 = icmp ne double* %247, null
br i1 %248, label %249, label %610
249: ; preds = %129
%250 = load double, double* %21
%251 = load double, double* %8
%252 = fdiv double %250, %251
store double %252, double* %24
%253 = load double, double* %23
%254 = load double, double* %8
%255 = fdiv double %253, %254
store double %255, double* %25
%256 = load double, double* %22
%257 = load double, double* %24
%258 = fsub double %256, %257
store double %258, double* %26
%259 = load double, double* %21
%260 = load double, double* %25
%261 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %260, double %259)
store double %261, double* %27
%262 = load double, double* %27
%263 = fneg double %262
%264 = load double, double* %15
%265 = load double, double* %17
%266 = fadd double %264, %265
%267 = fmul double %263, %266
%268 = load double, double* %9
%269 = fmul double %267, %268
%270 = load double*, double** %5
%271 = getelementptr inbounds double, double* %270, i64 0
store double %269, double* %271
%272 = load double, double* %25
%273 = load double, double* %10
%274 = load double, double* %26
%275 = load double, double* %19
%276 = fmul double %274, %275
%277 = call double @llvm.fmuladd.f64(double %272, double %273, double %276)
%278 = load double, double* %27
%279 = load double, double* %13
%280 = fmul double %278, %279
%281 = load double, double* %9
%282 = call double @llvm.fmuladd.f64(double %280, double %281, double %277)
%283 = load double*, double** %5
%284 = getelementptr inbounds double, double* %283, i64 1
store double %282, double* %284
%285 = load double, double* %25
%286 = load double, double* %11
%287 = load double, double* %26
%288 = load double, double* %18
%289 = fmul double %287, %288
%290 = fneg double %289
%291 = call double @llvm.fmuladd.f64(double %285, double %286, double %290)
%292 = load double, double* %27
%293 = load double, double* %14
%294 = fmul double %292, %293
%295 = load double, double* %9
%296 = call double @llvm.fmuladd.f64(double %294, double %295, double %291)
%297 = load double*, double** %5
%298 = getelementptr inbounds double, double* %297, i64 2
store double %296, double* %298
%299 = load double, double* %25
%300 = load double, double* %10
%301 = load double, double* %26
%302 = load double, double* %19
%303 = fmul double %301, %302
%304 = fneg double %303
%305 = call double @llvm.fmuladd.f64(double %299, double %300, double %304)
%306 = load double, double* %27
%307 = load double, double* %13
%308 = fmul double %306, %307
%309 = load double, double* %9
%310 = call double @llvm.fmuladd.f64(double %308, double %309, double %305)
%311 = load double*, double** %5
%312 = getelementptr inbounds double, double* %311, i64 3
store double %310, double* %312
%313 = load double, double* %25
%314 = fmul double -2.000000e+00, %313
%315 = load double, double* %9
%316 = load double, double* %27
%317 = load double, double* %17
%318 = load double, double* %12
%319 = fadd double %317, %318
%320 = fmul double %316, %319
%321 = load double, double* %9
%322 = fmul double %320, %321
%323 = fneg double %322
%324 = call double @llvm.fmuladd.f64(double %314, double %315, double %323)
%325 = load double*, double** %5
%326 = getelementptr inbounds double, double* %325, i64 4
store double %324, double* %326
%327 = load double, double* %24
%328 = load double, double* %26
%329 = load double, double* %12
%330 = call double @llvm.fmuladd.f64(double %328, double %329, double %327)
%331 = load double, double* %27
%332 = load double, double* %16
%333 = fmul double %331, %332
%334 = load double, double* %9
%335 = call double @llvm.fmuladd.f64(double %333, double %334, double %330)
%336 = load double*, double** %5
%337 = getelementptr inbounds double, double* %336, i64 5
store double %335, double* %337
%338 = load double, double* %25
%339 = load double, double* %11
%340 = load double, double* %26
%341 = load double, double* %18
%342 = fmul double %340, %341
%343 = call double @llvm.fmuladd.f64(double %338, double %339, double %342)
%344 = load double, double* %27
%345 = load double, double* %19
%346 = fmul double %344, %345
%347 = load double, double* %9
%348 = call double @llvm.fmuladd.f64(double %346, double %347, double %343)
%349 = load double*, double** %5
%350 = getelementptr inbounds double, double* %349, i64 6
store double %348, double* %350
%351 = load double, double* %24
%352 = fneg double %351
%353 = load double, double* %26
%354 = load double, double* %12
%355 = fneg double %353
%356 = call double @llvm.fmuladd.f64(double %355, double %354, double %352)
%357 = load double, double* %27
%358 = load double, double* %20
%359 = fmul double %357, %358
%360 = load double, double* %9
%361 = call double @llvm.fmuladd.f64(double %359, double %360, double %356)
%362 = load double*, double** %5
%363 = getelementptr inbounds double, double* %362, i64 7
store double %361, double* %363
%364 = load double, double* %25
%365 = fmul double -2.000000e+00, %364
%366 = load double, double* %9
%367 = load double, double* %27
%368 = load double, double* %15
%369 = load double, double* %12
%370 = fadd double %368, %369
%371 = fmul double %367, %370
%372 = load double, double* %9
%373 = fmul double %371, %372
%374 = fneg double %373
%375 = call double @llvm.fmuladd.f64(double %365, double %366, double %374)
%376 = load double*, double** %5
%377 = getelementptr inbounds double, double* %376, i64 8
store double %375, double* %377
%378 = load double, double* %25
%379 = fmul double -2.000000e+00, %378
%380 = load double, double* %10
%381 = load double, double* %27
%382 = load double, double* %15
%383 = load double, double* %17
%384 = fadd double %382, %383
%385 = fmul double %381, %384
%386 = load double, double* %10
%387 = fmul double %385, %386
%388 = fneg double %387
%389 = call double @llvm.fmuladd.f64(double %379, double %380, double %388)
%390 = load double*, double** %5
%391 = getelementptr inbounds double, double* %390, i64 9
store double %389, double* %391
%392 = load double, double* %25
%393 = load double, double* %9
%394 = load double, double* %26
%395 = load double, double* %20
%396 = fmul double %394, %395
%397 = call double @llvm.fmuladd.f64(double %392, double %393, double %396)
%398 = load double, double* %27
%399 = load double, double* %13
%400 = fmul double %398, %399
%401 = load double, double* %10
%402 = call double @llvm.fmuladd.f64(double %400, double %401, double %397)
%403 = load double*, double** %5
%404 = getelementptr inbounds double, double* %403, i64 10
store double %402, double* %404
%405 = load double, double* %24
%406 = fneg double %405
%407 = load double, double* %26
%408 = load double, double* %15
%409 = fneg double %407
%410 = call double @llvm.fmuladd.f64(double %409, double %408, double %406)
%411 = load double, double* %27
%412 = load double, double* %14
%413 = fmul double %411, %412
%414 = load double, double* %10
%415 = call double @llvm.fmuladd.f64(double %413, double %414, double %410)
%416 = load double*, double** %5
%417 = getelementptr inbounds double, double* %416, i64 11
store double %415, double* %417
%418 = load double, double* %25
%419 = load double, double* %9
%420 = load double, double* %26
%421 = load double, double* %20
%422 = fmul double %420, %421
%423 = fneg double %422
%424 = call double @llvm.fmuladd.f64(double %418, double %419, double %423)
%425 = load double, double* %27
%426 = load double, double* %13
%427 = fmul double %425, %426
%428 = load double, double* %10
%429 = call double @llvm.fmuladd.f64(double %427, double %428, double %424)
%430 = load double*, double** %5
%431 = getelementptr inbounds double, double* %430, i64 12
store double %429, double* %431
%432 = load double, double* %27
%433 = fneg double %432
%434 = load double, double* %17
%435 = load double, double* %12
%436 = fadd double %434, %435
%437 = fmul double %433, %436
%438 = load double, double* %10
%439 = fmul double %437, %438
%440 = load double*, double** %5
%441 = getelementptr inbounds double, double* %440, i64 13
store double %439, double* %441
%442 = load double, double* %25
%443 = load double, double* %11
%444 = load double, double* %26
%445 = load double, double* %13
%446 = fmul double %444, %445
%447 = call double @llvm.fmuladd.f64(double %442, double %443, double %446)
%448 = load double, double* %27
%449 = load double, double* %16
%450 = fmul double %448, %449
%451 = load double, double* %10
%452 = call double @llvm.fmuladd.f64(double %450, double %451, double %447)
%453 = load double*, double** %5
%454 = getelementptr inbounds double, double* %453, i64 14
store double %452, double* %454
%455 = load double, double* %24
%456 = load double, double* %26
%457 = load double, double* %15
%458 = call double @llvm.fmuladd.f64(double %456, double %457, double %455)
%459 = load double, double* %27
%460 = load double, double* %19
%461 = fmul double %459, %460
%462 = load double, double* %10
%463 = call double @llvm.fmuladd.f64(double %461, double %462, double %458)
%464 = load double*, double** %5
%465 = getelementptr inbounds double, double* %464, i64 15
store double %463, double* %465
%466 = load double, double* %25
%467 = load double, double* %11
%468 = load double, double* %26
%469 = load double, double* %13
%470 = fmul double %468, %469
%471 = fneg double %470
%472 = call double @llvm.fmuladd.f64(double %466, double %467, double %471)
%473 = load double, double* %27
%474 = load double, double* %20
%475 = fmul double %473, %474
%476 = load double, double* %10
%477 = call double @llvm.fmuladd.f64(double %475, double %476, double %472)
%478 = load double*, double** %5
%479 = getelementptr inbounds double, double* %478, i64 16
store double %477, double* %479
%480 = load double, double* %25
%481 = fmul double -2.000000e+00, %480
%482 = load double, double* %10
%483 = load double, double* %27
%484 = load double, double* %15
%485 = load double, double* %12
%486 = fadd double %484, %485
%487 = fmul double %483, %486
%488 = load double, double* %10
%489 = fmul double %487, %488
%490 = fneg double %489
%491 = call double @llvm.fmuladd.f64(double %481, double %482, double %490)
%492 = load double*, double** %5
%493 = getelementptr inbounds double, double* %492, i64 17
store double %491, double* %493
%494 = load double, double* %25
%495 = fmul double -2.000000e+00, %494
%496 = load double, double* %11
%497 = load double, double* %27
%498 = load double, double* %15
%499 = load double, double* %17
%500 = fadd double %498, %499
%501 = fmul double %497, %500
%502 = load double, double* %11
%503 = fmul double %501, %502
%504 = fneg double %503
%505 = call double @llvm.fmuladd.f64(double %495, double %496, double %504)
%506 = load double*, double** %5
%507 = getelementptr inbounds double, double* %506, i64 18
store double %505, double* %507
%508 = load double, double* %24
%509 = load double, double* %26
%510 = load double, double* %17
%511 = call double @llvm.fmuladd.f64(double %509, double %510, double %508)
%512 = load double, double* %27
%513 = load double, double* %13
%514 = fmul double %512, %513
%515 = load double, double* %11
%516 = call double @llvm.fmuladd.f64(double %514, double %515, double %511)
%517 = load double*, double** %5
%518 = getelementptr inbounds double, double* %517, i64 19
store double %516, double* %518
%519 = load double, double* %25
%520 = load double, double* %9
%521 = load double, double* %26
%522 = load double, double* %16
%523 = fmul double %521, %522
%524 = fneg double %523
%525 = call double @llvm.fmuladd.f64(double %519, double %520, double %524)
%526 = load double, double* %27
%527 = load double, double* %14
%528 = fmul double %526, %527
%529 = load double, double* %11
%530 = call double @llvm.fmuladd.f64(double %528, double %529, double %525)
%531 = load double*, double** %5
%532 = getelementptr inbounds double, double* %531, i64 20
store double %530, double* %532
%533 = load double, double* %24
%534 = fneg double %533
%535 = load double, double* %26
%536 = load double, double* %17
%537 = fneg double %535
%538 = call double @llvm.fmuladd.f64(double %537, double %536, double %534)
%539 = load double, double* %27
%540 = load double, double* %13
%541 = fmul double %539, %540
%542 = load double, double* %11
%543 = call double @llvm.fmuladd.f64(double %541, double %542, double %538)
%544 = load double*, double** %5
%545 = getelementptr inbounds double, double* %544, i64 21
store double %543, double* %545
%546 = load double, double* %25
%547 = fmul double -2.000000e+00, %546
%548 = load double, double* %11
%549 = load double, double* %27
%550 = load double, double* %17
%551 = load double, double* %12
%552 = fadd double %550, %551
%553 = fmul double %549, %552
%554 = load double, double* %11
%555 = fmul double %553, %554
%556 = fneg double %555
%557 = call double @llvm.fmuladd.f64(double %547, double %548, double %556)
%558 = load double*, double** %5
%559 = getelementptr inbounds double, double* %558, i64 22
store double %557, double* %559
%560 = load double, double* %25
%561 = load double, double* %10
%562 = load double, double* %26
%563 = load double, double* %14
%564 = fmul double %562, %563
%565 = call double @llvm.fmuladd.f64(double %560, double %561, double %564)
%566 = load double, double* %27
%567 = load double, double* %16
%568 = fmul double %566, %567
%569 = load double, double* %11
%570 = call double @llvm.fmuladd.f64(double %568, double %569, double %565)
%571 = load double*, double** %5
%572 = getelementptr inbounds double, double* %571, i64 23
store double %570, double* %572
%573 = load double, double* %25
%574 = load double, double* %9
%575 = load double, double* %26
%576 = load double, double* %16
%577 = fmul double %575, %576
%578 = call double @llvm.fmuladd.f64(double %573, double %574, double %577)
%579 = load double, double* %27
%580 = load double, double* %19
%581 = fmul double %579, %580
%582 = load double, double* %11
%583 = call double @llvm.fmuladd.f64(double %581, double %582, double %578)
%584 = load double*, double** %5
%585 = getelementptr inbounds double, double* %584, i64 24
store double %583, double* %585
%586 = load double, double* %25
%587 = load double, double* %10
%588 = load double, double* %26
%589 = load double, double* %14
%590 = fmul double %588, %589
%591 = fneg double %590
%592 = call double @llvm.fmuladd.f64(double %586, double %587, double %591)
%593 = load double, double* %27
%594 = load double, double* %20
%595 = fmul double %593, %594
%596 = load double, double* %11
%597 = call double @llvm.fmuladd.f64(double %595, double %596, double %592)
%598 = load double*, double** %5
%599 = getelementptr inbounds double, double* %598, i64 25
store double %597, double* %599
%600 = load double, double* %27
%601 = fneg double %600
%602 = load double, double* %15
%603 = load double, double* %12
%604 = fadd double %602, %603
%605 = fmul double %601, %604
%606 = load double, double* %11
%607 = fmul double %605, %606
%608 = load double*, double** %5
%609 = getelementptr inbounds double, double* %608, i64 26
store double %607, double* %609
br label %610
610: ; preds = %128, %249, %129
ret void
}

LLVM IR (-O2):
define void @vl_rodrigues(double* nocapture writeonly %0, double* writeonly %1, double* nocapture %2) {
%4 = load double, double* %2
%5 = getelementptr inbounds double, double* %2, i64 1
%6 = load double, double* %5
%7 = fmul double %6, %6
%8 = tail call double @llvm.fmuladd.f64(double %4, double %4, double %7)
%9 = getelementptr inbounds double, double* %2, i64 2
%10 = load double, double* %9
%11 = tail call double @llvm.fmuladd.f64(double %10, double %10, double %8)
%12 = tail call double @sqrt(double %11)
%13 = fcmp olt double %12, 0x3EB0C6F7A0B5ED8D
br i1 %13, label %14, label %51
14: ; preds = %3
%15 = getelementptr inbounds double, double* %0, i64 6
%16 = bitcast double* %0 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 0.000000e+00>, <2 x double>* %16
%17 = getelementptr inbounds double, double* %0, i64 4
%18 = bitcast double* %15 to <2 x double>*
store <2 x double> zeroinitializer, <2 x double>* %18
%19 = getelementptr inbounds double, double* %0, i64 2
%20 = bitcast double* %19 to <2 x double>*
store <2 x double> zeroinitializer, <2 x double>* %20
%21 = bitcast double* %17 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 0.000000e+00>, <2 x double>* %21
%22 = getelementptr inbounds double, double* %0, i64 8
store double 1.000000e+00, double* %22
%23 = icmp eq double* %1, null
br i1 %23, label %235, label %24
24: ; preds = %14
%25 = getelementptr inbounds double, double* %1, i64 9
%26 = getelementptr inbounds double, double* %1, i64 18
%27 = bitcast double* %1 to i8*
%28 = bitcast double* %25 to i8*
%29 = bitcast double* %26 to <2 x double>*
store <2 x double> <double 0.000000e+00, double 1.000000e+00>, <2 x double>* %29
%30 = getelementptr inbounds double, double* %1, i64 2
%31 = getelementptr inbounds double, double* %1, i64 11
%32 = getelementptr inbounds double, double* %1, i64 20
%33 = bitcast double* %30 to <2 x double>*
store <2 x double> zeroinitializer, <2 x double>* %33
%34 = bitcast double* %31 to <2 x double>*
store <2 x double> <double -1.000000e+00, double 0.000000e+00>, <2 x double>* %34
%35 = bitcast double* %32 to <2 x double>*
store <2 x double> <double 0.000000e+00, double -1.000000e+00>, <2 x double>* %35
%36 = getelementptr inbounds double, double* %1, i64 4
%37 = getelementptr inbounds double, double* %1, i64 13
%38 = getelementptr inbounds double, double* %1, i64 22
%39 = bitcast double* %36 to <2 x double>*
store <2 x double> <double 0.000000e+00, double 1.000000e+00>, <2 x double>* %39
%40 = bitcast double* %37 to <2 x double>*
store <2 x double> zeroinitializer, <2 x double>* %40
%41 = bitcast double* %38 to <2 x double>*
store <2 x double> zeroinitializer, <2 x double>* %41
%42 = getelementptr inbounds double, double* %1, i64 6
%43 = getelementptr inbounds double, double* %1, i64 15
store double 1.000000e+00, double* %43
%44 = getelementptr inbounds double, double* %1, i64 24
store double 0.000000e+00, double* %44
%45 = bitcast double* %42 to <2 x double>*
store <2 x double> <double 0.000000e+00, double -1.000000e+00>, <2 x double>* %45
%46 = getelementptr inbounds double, double* %1, i64 16
%47 = getelementptr inbounds double, double* %1, i64 25
%48 = getelementptr inbounds double, double* %1, i64 8
store double 0.000000e+00, double* %48
%49 = bitcast double* %46 to i8*
%50 = bitcast double* %47 to i8*
br label %235
51: ; preds = %3
%52 = load double, double* %2
%53 = fdiv double %52, %12
%54 = bitcast double* %5 to <2 x double>*
%55 = load <2 x double>, <2 x double>* %54
%56 = insertelement <2 x double> poison, double %12, i64 0
%57 = shufflevector <2 x double> %56, <2 x double> poison, <2 x i32> zeroinitializer
%58 = fdiv <2 x double> %55, %57
%59 = insertelement <2 x double> poison, double %53, i64 0
%60 = shufflevector <2 x double> %59, <2 x double> poison, <2 x i32> zeroinitializer
%61 = fmul <2 x double> %60, %58
%62 = extractelement <2 x double> %58, i64 0
%63 = fmul <2 x double> %58, %58
%64 = extractelement <2 x double> %63, i64 0
%65 = extractelement <2 x double> %58, i64 1
%66 = fmul double %62, %65
%67 = insertelement <2 x double> %58, double %53, i64 0
%68 = fmul <2 x double> %67, %67
%69 = tail call double @sin(double %12)
%70 = tail call double @cos(double %12)
%71 = fsub double 1.000000e+00, %70
%72 = fneg double %71
%73 = shufflevector <2 x double> %63, <2 x double> undef, <2 x i32> zeroinitializer
%74 = fadd <2 x double> %73, %68
%75 = insertelement <2 x double> poison, double %71, i64 0
%76 = shufflevector <2 x double> %75, <2 x double> poison, <2 x i32> zeroinitializer
%77 = fmul <2 x double> %61, %76
%78 = shufflevector <2 x double> %77, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%79 = insertelement <2 x double> poison, double %72, i64 0
%80 = insertelement <2 x double> %79, double %69, i64 1
%81 = shufflevector <2 x double> %74, <2 x double> %58, <2 x i32> <i32 1, i32 3>
%82 = shufflevector <2 x double> <double 1.000000e+00, double poison>, <2 x double> %77, <2 x i32> <i32 0, i32 2>
%83 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %80, <2 x double> %81, <2 x double> %82)
%84 = bitcast double* %0 to <2 x double>*
store <2 x double> %83, <2 x double>* %84
%85 = fneg double %69
%86 = getelementptr inbounds double, double* %0, i64 2
%87 = insertelement <2 x double> poison, double %85, i64 0
%88 = shufflevector <2 x double> %87, <2 x double> poison, <2 x i32> zeroinitializer
%89 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %88, <2 x double> %58, <2 x double> %78)
%90 = bitcast double* %86 to <2 x double>*
store <2 x double> %89, <2 x double>* %90
%91 = extractelement <2 x double> %68, i64 0
%92 = extractelement <2 x double> %68, i64 1
%93 = fadd double %91, %92
%94 = getelementptr inbounds double, double* %0, i64 4
%95 = fmul double %66, %71
%96 = insertelement <2 x double> poison, double %93, i64 0
%97 = insertelement <2 x double> %96, double %53, i64 1
%98 = insertelement <2 x double> <double 1.000000e+00, double poison>, double %95, i64 1
%99 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %80, <2 x double> %97, <2 x double> %98)
%100 = bitcast double* %94 to <2 x double>*
store <2 x double> %99, <2 x double>* %100
%101 = extractelement <2 x double> %77, i64 1
%102 = getelementptr inbounds double, double* %0, i64 6
%103 = insertelement <2 x double> poison, double %69, i64 0
%104 = insertelement <2 x double> %103, double %85, i64 1
%105 = insertelement <2 x double> %58, double %53, i64 1
%106 = insertelement <2 x double> poison, double %101, i64 0
%107 = insertelement <2 x double> %106, double %95, i64 1
%108 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %104, <2 x double> %105, <2 x double> %107)
%109 = bitcast double* %102 to <2 x double>*
store <2 x double> %108, <2 x double>* %109
%110 = extractelement <2 x double> %74, i64 0
%111 = tail call double @llvm.fmuladd.f64(double %72, double %110, double 1.000000e+00)
%112 = getelementptr inbounds double, double* %0, i64 8
store double %111, double* %112
%113 = icmp eq double* %1, null
br i1 %113, label %235, label %114
114: ; preds = %51
%115 = fdiv double %69, %12
%116 = fdiv double %71, %12
%117 = fsub double %70, %115
%118 = tail call double @llvm.fmuladd.f64(double %116, double -2.000000e+00, double %69)
%119 = fneg double %118
%120 = insertelement <2 x double> poison, double %119, i64 0
%121 = shufflevector <2 x double> %120, <2 x double> poison, <2 x i32> zeroinitializer
%122 = fmul <2 x double> %74, %121
%123 = extractelement <2 x double> %122, i64 1
%124 = fmul double %53, %123
store double %124, double* %1
%125 = extractelement <2 x double> %61, i64 1
%126 = fmul double %125, %117
%127 = getelementptr inbounds double, double* %1, i64 1
%128 = extractelement <2 x double> %61, i64 0
%129 = fmul double %128, %117
%130 = fneg double %129
%131 = insertelement <2 x double> poison, double %116, i64 0
%132 = shufflevector <2 x double> %131, <2 x double> poison, <2 x i32> zeroinitializer
%133 = insertelement <2 x double> poison, double %126, i64 0
%134 = insertelement <2 x double> %133, double %130, i64 1
%135 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %132, <2 x double> %58, <2 x double> %134)
%136 = insertelement <2 x double> poison, double %118, i64 0
%137 = shufflevector <2 x double> %136, <2 x double> poison, <2 x i32> zeroinitializer
%138 = fmul <2 x double> %61, %137
%139 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %138, <2 x double> %60, <2 x double> %135)
%140 = bitcast double* %127 to <2 x double>*
store <2 x double> %139, <2 x double>* %140
%141 = fneg double %126
%142 = extractelement <2 x double> %138, i64 0
%143 = getelementptr inbounds double, double* %1, i64 3
%144 = fmul double %93, %119
%145 = fmul double %53, %144
%146 = insertelement <2 x double> poison, double %66, i64 0
%147 = insertelement <2 x double> %146, double %116, i64 1
%148 = insertelement <2 x double> <double poison, double -2.000000e+00>, double %118, i64 0
%149 = fmul <2 x double> %147, %148
%150 = shufflevector <2 x double> %138, <2 x double> %149, <2 x i32> <i32 0, i32 3>
%151 = fmul double %66, %117
%152 = shufflevector <2 x double> %59, <2 x double> %58, <2 x i32> <i32 0, i32 2>
%153 = insertelement <2 x double> poison, double %151, i64 0
%154 = insertelement <2 x double> %153, double %141, i64 1
%155 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %132, <2 x double> %152, <2 x double> %154)
%156 = extractelement <2 x double> %155, i64 1
%157 = insertelement <2 x double> poison, double %156, i64 0
%158 = insertelement <2 x double> %157, double %145, i64 1
%159 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %150, <2 x double> %60, <2 x double> %158)
%160 = bitcast double* %143 to <2 x double>*
store <2 x double> %159, <2 x double>* %160
%161 = tail call double @llvm.fmuladd.f64(double %117, double %91, double %115)
%162 = extractelement <2 x double> %149, i64 0
%163 = tail call double @llvm.fmuladd.f64(double %162, double %53, double %161)
%164 = getelementptr inbounds double, double* %1, i64 5
store double %163, double* %164
%165 = extractelement <2 x double> %138, i64 1
%166 = getelementptr inbounds double, double* %1, i64 6
%167 = fneg double %117
%168 = insertelement <2 x double> %153, double %115, i64 1
%169 = fneg <2 x double> %168
%170 = insertelement <2 x double> %131, double %167, i64 1
%171 = shufflevector <2 x double> %58, <2 x double> undef, <2 x i32> <i32 1, i32 undef>
%172 = shufflevector <2 x double> %171, <2 x double> %68, <2 x i32> <i32 0, i32 2>
%173 = extractelement <2 x double> %169, i64 1
%174 = insertelement <2 x double> %169, double %129, i64 0
%175 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %170, <2 x double> %172, <2 x double> %174)
%176 = shufflevector <2 x double> %138, <2 x double> %149, <2 x i32> <i32 1, i32 2>
%177 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %176, <2 x double> %60, <2 x double> %175)
%178 = bitcast double* %166 to <2 x double>*
store <2 x double> %177, <2 x double>* %178
%179 = getelementptr inbounds double, double* %1, i64 8
%180 = fmul <2 x double> %152, %122
%181 = shufflevector <2 x double> %149, <2 x double> undef, <2 x i32> <i32 1, i32 undef>
%182 = shufflevector <2 x double> %149, <2 x double> poison, <2 x i32> <i32 1, i32 1>
%183 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %182, <2 x double> %152, <2 x double> %180)
%184 = bitcast double* %179 to <2 x double>*
store <2 x double> %183, <2 x double>* %184
%185 = extractelement <2 x double> %155, i64 0
%186 = tail call double @llvm.fmuladd.f64(double %142, double %62, double %185)
%187 = getelementptr inbounds double, double* %1, i64 10
store double %186, double* %187
%188 = tail call double @llvm.fmuladd.f64(double %167, double %64, double %173)
%189 = tail call double @llvm.fmuladd.f64(double %165, double %62, double %188)
%190 = getelementptr inbounds double, double* %1, i64 11
store double %189, double* %190
%191 = insertelement <2 x double> %68, double %53, i64 0
%192 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %170, <2 x double> %191, <2 x double> %169)
%193 = extractelement <2 x double> %192, i64 0
%194 = tail call double @llvm.fmuladd.f64(double %142, double %62, double %193)
%195 = getelementptr inbounds double, double* %1, i64 12
store double %194, double* %195
%196 = fmul double %62, %144
%197 = getelementptr inbounds double, double* %1, i64 13
store double %196, double* %197
%198 = getelementptr inbounds double, double* %1, i64 14
%199 = tail call double @llvm.fmuladd.f64(double %117, double %64, double %115)
%200 = shufflevector <2 x double> %149, <2 x double> %138, <2 x i32> <i32 0, i32 3>
%201 = shufflevector <2 x double> %58, <2 x double> poison, <2 x i32> zeroinitializer
%202 = insertelement <2 x double> %175, double %199, i64 1
%203 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %200, <2 x double> %201, <2 x double> %202)
%204 = bitcast double* %198 to <2 x double>*
store <2 x double> %203, <2 x double>* %204
%205 = getelementptr inbounds double, double* %1, i64 16
%206 = extractelement <2 x double> %122, i64 0
%207 = fmul <2 x double> %58, %122
%208 = shufflevector <2 x double> %135, <2 x double> %207, <2 x i32> <i32 1, i32 2>
%209 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %149, <2 x double> %201, <2 x double> %208)
%210 = bitcast double* %205 to <2 x double>*
store <2 x double> %209, <2 x double>* %210
%211 = fmul double %65, %123
%212 = getelementptr inbounds double, double* %1, i64 18
%213 = tail call double @llvm.fmuladd.f64(double %117, double %92, double %115)
%214 = shufflevector <2 x double> %181, <2 x double> %138, <2 x i32> <i32 0, i32 2>
%215 = shufflevector <2 x double> %58, <2 x double> poison, <2 x i32> <i32 1, i32 1>
%216 = insertelement <2 x double> poison, double %211, i64 0
%217 = insertelement <2 x double> %216, double %213, i64 1
%218 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %214, <2 x double> %215, <2 x double> %217)
%219 = bitcast double* %212 to <2 x double>*
store <2 x double> %218, <2 x double>* %219
%220 = getelementptr inbounds double, double* %1, i64 20
%221 = shufflevector <2 x double> %138, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%222 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %221, <2 x double> %215, <2 x double> %192)
%223 = bitcast double* %220 to <2 x double>*
store <2 x double> %222, <2 x double>* %223
%224 = fmul double %65, %144
%225 = getelementptr inbounds double, double* %1, i64 22
%226 = insertelement <2 x double> %135, double %224, i64 1
%227 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %149, <2 x double> %215, <2 x double> %226)
%228 = shufflevector <2 x double> %227, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%229 = bitcast double* %225 to <2 x double>*
store <2 x double> %228, <2 x double>* %229
%230 = getelementptr inbounds double, double* %1, i64 24
%231 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %176, <2 x double> %215, <2 x double> %155)
%232 = bitcast double* %230 to <2 x double>*
store <2 x double> %231, <2 x double>* %232
%233 = fmul double %65, %206
%234 = getelementptr inbounds double, double* %1, i64 26
store double %233, double* %234
br label %235
235: ; preds = %51, %114, %14, %24
ret void
}