void bitrv2conj(int n, double *a) {
  int j0, k0, j1, k1, l, m, i, j, k;
  double xr, xi, yr, yi;
  l = n >> 2;
  m = 2;
  while (m < l) {
    l >>= 1;
    m <<= 1;
  }
  if (m == l) {
    j0 = 0;
    for (k0 = 0; k0 < m; k0 += 2) {
      k = k0;
      for (j = j0; j < j0 + k0; j += 2) {
        xr = a[j];
        xi = -a[j + 1];
        yr = a[k];
        yi = -a[k + 1];
        a[j] = yr;
        a[j + 1] = yi;
        a[k] = xr;
        a[k + 1] = xi;
        j1 = j + m;
        k1 = k + 2 * m;
        xr = a[j1];
        xi = -a[j1 + 1];
        yr = a[k1];
        yi = -a[k1 + 1];
        a[j1] = yr;
        a[j1 + 1] = yi;
        a[k1] = xr;
        a[k1 + 1] = xi;
        j1 += m;
        k1 -= m;
        xr = a[j1];
        xi = -a[j1 + 1];
        yr = a[k1];
        yi = -a[k1 + 1];
        a[j1] = yr;
        a[j1 + 1] = yi;
        a[k1] = xr;
        a[k1 + 1] = xi;
        j1 += m;
        k1 += 2 * m;
        xr = a[j1];
        xi = -a[j1 + 1];
        yr = a[k1];
        yi = -a[k1 + 1];
        a[j1] = yr;
        a[j1 + 1] = yi;
        a[k1] = xr;
        a[k1 + 1] = xi;
        for (i = n >> 1; i > (k ^= i); i >>= 1)
          ;
      }
      k1 = j0 + k0;
      a[k1 + 1] = -a[k1 + 1];
      j1 = k1 + m;
      k1 = j1 + m;
      xr = a[j1];
      xi = -a[j1 + 1];
      yr = a[k1];
      yi = -a[k1 + 1];
      a[j1] = yr;
      a[j1 + 1] = yi;
      a[k1] = xr;
      a[k1 + 1] = xi;
      k1 += m;
      a[k1 + 1] = -a[k1 + 1];
      for (i = n >> 1; i > (j0 ^= i); i >>= 1)
        ;
    }
  } else {
    a[1] = -a[1];
    a[m + 1] = -a[m + 1];
    j0 = 0;
    for (k0 = 2; k0 < m; k0 += 2) {
      for (i = n >> 1; i > (j0 ^= i); i >>= 1)
        ;
      k = k0;
      for (j = j0; j < j0 + k0; j += 2) {
        xr = a[j];
        xi = -a[j + 1];
        yr = a[k];
        yi = -a[k + 1];
        a[j] = yr;
        a[j + 1] = yi;
        a[k] = xr;
        a[k + 1] = xi;
        j1 = j + m;
        k1 = k + m;
        xr = a[j1];
        xi = -a[j1 + 1];
        yr = a[k1];
        yi = -a[k1 + 1];
        a[j1] = yr;
        a[j1 + 1] = yi;
        a[k1] = xr;
        a[k1 + 1] = xi;
        for (i = n >> 1; i > (k ^= i); i >>= 1)
          ;
      }
      k1 = j0 + k0;
      a[k1 + 1] = -a[k1 + 1];
      a[k1 + m + 1] = -a[k1 + m + 1];
    }
  }
}


x86 assembly (clang, -O0):
<bitrv2conj>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x4(%rbp),%eax
sar    $0x2,%eax
mov    %eax,-0x24(%rbp)
movl   $0x2,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    113e <bitrv2conj+0x3e>
mov    -0x24(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    111b <bitrv2conj+0x1b>
mov    -0x28(%rbp),%eax
cmp    -0x24(%rbp),%eax
jne    1700 <bitrv2conj+0x600>
movl   $0x0,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x28(%rbp),%eax
jge    16fb <bitrv2conj+0x5fb>
mov    -0x18(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x14(%rbp),%ecx
add    -0x18(%rbp),%ecx
cmp    %ecx,%eax
jge    154c <bitrv2conj+0x44c>
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x48(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x28(%rbp),%ecx
shl    $0x1,%ecx
add    %ecx,%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x48(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x28(%rbp),%ecx
mov    -0x20(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x48(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x28(%rbp),%eax
shl    $0x1,%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x48(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x4(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x2c(%rbp),%ecx
xor    -0x34(%rbp),%ecx
mov    %ecx,-0x34(%rbp)
cmp    %ecx,%eax
jle    1539 <bitrv2conj+0x439>
jmp    152b <bitrv2conj+0x42b>
mov    -0x2c(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1512 <bitrv2conj+0x412>
jmp    153e <bitrv2conj+0x43e>
mov    -0x30(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x30(%rbp)
jmp    1170 <bitrv2conj+0x70>
mov    -0x14(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x48(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x4(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x2c(%rbp),%ecx
xor    -0x14(%rbp),%ecx
mov    %ecx,-0x14(%rbp)
cmp    %ecx,%eax
jle    16e8 <bitrv2conj+0x5e8>
jmp    16da <bitrv2conj+0x5da>
mov    -0x2c(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    16c1 <bitrv2conj+0x5c1>
jmp    16ed <bitrv2conj+0x5ed>
mov    -0x18(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x18(%rbp)
jmp    1158 <bitrv2conj+0x58>
jmp    1a5c <bitrv2conj+0x95c>
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x14(%rbp)
movl   $0x2,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x28(%rbp),%eax
jge    1a57 <bitrv2conj+0x957>
mov    -0x4(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x2c(%rbp),%ecx
xor    -0x14(%rbp),%ecx
mov    %ecx,-0x14(%rbp)
cmp    %ecx,%eax
jle    17ae <bitrv2conj+0x6ae>
jmp    17a0 <bitrv2conj+0x6a0>
mov    -0x2c(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1787 <bitrv2conj+0x687>
mov    -0x18(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x14(%rbp),%ecx
add    -0x18(%rbp),%ecx
cmp    %ecx,%eax
jge    19c4 <bitrv2conj+0x8c4>
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x48(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x34(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x48(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x4(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x2c(%rbp),%ecx
xor    -0x34(%rbp),%ecx
mov    %ecx,-0x34(%rbp)
cmp    %ecx,%eax
jle    19b1 <bitrv2conj+0x8b1>
jmp    19a3 <bitrv2conj+0x8a3>
mov    -0x2c(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    198a <bitrv2conj+0x88a>
jmp    19b6 <bitrv2conj+0x8b6>
mov    -0x30(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x30(%rbp)
jmp    17ba <bitrv2conj+0x6ba>
mov    -0x14(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x18(%rbp)
jmp    1772 <bitrv2conj+0x672>
jmp    1a5c <bitrv2conj+0x95c>
pop    %rbp
ret

x86 assembly (clang, -O2):
<bitrv2conj>:
mov    %edi,%r10d
sar    $0x2,%r10d
mov    $0x2,%r11d
cmp    $0xc,%edi
jl     112b <bitrv2conj+0x2b>
mov    $0x2,%r11d
nopl   0x0(%rax,%rax,1)
sar    %r10d
add    %r11d,%r11d
cmp    %r10d,%r11d
jl     1120 <bitrv2conj+0x20>
push   %rbp
push   %r15
push   %r14
push   %rbx
cmp    %r10d,%r11d
jne    130a <bitrv2conj+0x20a>
test   %r10d,%r10d
jle    1436 <bitrv2conj+0x336>
lea    (%r10,%r10,1),%r11d
mov    %r10d,%r8d
or     $0x1,%r8d
mov    %r10d,%r15d
xor    %r9d,%r9d
movaps 0xea5(%rip),%xmm0
xor    %eax,%eax
nopl   (%rax)
lea    (%r9,%rax,1),%ecx
movslq %ecx,%r14
test   %r9d,%r9d
je     1285 <bitrv2conj+0x185>
movslq %eax,%rbx
mov    %r9d,%ebp
cs nopw 0x0(%rax,%rax,1)
movsd  (%rsi,%rbx,8),%xmm1
movsd  0x8(%rsi,%rbx,8),%xmm2
xorps  %xmm0,%xmm2
movslq %ebp,%rdx
movsd  (%rsi,%rdx,8),%xmm3
movsd  0x8(%rsi,%rdx,8),%xmm4
xorps  %xmm0,%xmm4
movsd  %xmm3,(%rsi,%rbx,8)
movlps %xmm4,0x8(%rsi,%rbx,8)
movsd  %xmm1,(%rsi,%rdx,8)
movlps %xmm2,0x8(%rsi,%rdx,8)
lea    (%rbx,%r15,1),%rcx
add    %r11d,%edx
movsd  (%rsi,%rcx,8),%xmm1
movsd  0x8(%rsi,%rcx,8),%xmm2
xorps  %xmm0,%xmm2
movslq %edx,%rdx
movsd  (%rsi,%rdx,8),%xmm3
movsd  0x8(%rsi,%rdx,8),%xmm4
xorps  %xmm0,%xmm4
movsd  %xmm3,(%rsi,%rcx,8)
movlps %xmm4,0x8(%rsi,%rcx,8)
movsd  %xmm1,(%rsi,%rdx,8)
movlps %xmm2,0x8(%rsi,%rdx,8)
add    %r15,%rcx
sub    %r10d,%edx
movsd  (%rsi,%rcx,8),%xmm1
movsd  0x8(%rsi,%rcx,8),%xmm2
xorps  %xmm0,%xmm2
movslq %edx,%rdx
movsd  (%rsi,%rdx,8),%xmm3
movsd  0x8(%rsi,%rdx,8),%xmm4
xorps  %xmm0,%xmm4
movsd  %xmm3,(%rsi,%rcx,8)
movlps %xmm4,0x8(%rsi,%rcx,8)
movsd  %xmm1,(%rsi,%rdx,8)
movlps %xmm2,0x8(%rsi,%rdx,8)
add    %r15,%rcx
add    %r11d,%edx
movsd  (%rsi,%rcx,8),%xmm1
movsd  0x8(%rsi,%rcx,8),%xmm2
xorps  %xmm0,%xmm2
movslq %edx,%rdx
movsd  (%rsi,%rdx,8),%xmm3
movsd  0x8(%rsi,%rdx,8),%xmm4
xorps  %xmm0,%xmm4
movsd  %xmm3,(%rsi,%rcx,8)
movlps %xmm4,0x8(%rsi,%rcx,8)
movsd  %xmm1,(%rsi,%rdx,8)
movlps %xmm2,0x8(%rsi,%rdx,8)
mov    %edi,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
sar    %ecx
xor    %ecx,%ebp
cmp    %ebp,%ecx
jg     1270 <bitrv2conj+0x170>
add    $0x2,%rbx
cmp    %r14,%rbx
jl     1180 <bitrv2conj+0x80>
movsd  0x8(%rsi,%r14,8),%xmm1
xorps  %xmm0,%xmm1
movlps %xmm1,0x8(%rsi,%r14,8)
add    %r10d,%r14d
movslq %r14d,%rcx
add    %r10d,%r14d
movsd  (%rsi,%rcx,8),%xmm1
movsd  0x8(%rsi,%rcx,8),%xmm2
xorps  %xmm0,%xmm2
movslq %r14d,%rdx
movsd  (%rsi,%rdx,8),%xmm3
movsd  0x8(%rsi,%rdx,8),%xmm4
xorps  %xmm0,%xmm4
movsd  %xmm3,(%rsi,%rcx,8)
movlps %xmm4,0x8(%rsi,%rcx,8)
movsd  %xmm1,(%rsi,%rdx,8)
movlps %xmm2,0x8(%rsi,%rdx,8)
add    %r8d,%edx
movslq %edx,%rcx
movsd  (%rsi,%rcx,8),%xmm1
xorps  %xmm0,%xmm1
movlps %xmm1,(%rsi,%rcx,8)
mov    %edi,%ecx
cs nopw 0x0(%rax,%rax,1)
nop
sar    %ecx
xor    %ecx,%eax
cmp    %eax,%ecx
jg     12f0 <bitrv2conj+0x1f0>
add    $0x2,%r9d
cmp    %r10d,%r9d
jl     1160 <bitrv2conj+0x60>
jmp    1436 <bitrv2conj+0x336>
movsd  0x8(%rsi),%xmm1
movaps 0xcea(%rip),%xmm0
xorps  %xmm0,%xmm1
movlps %xmm1,0x8(%rsi)
mov    %r11d,%r8d
or     $0x1,%r8d
movslq %r8d,%rax
movsd  (%rsi,%rax,8),%xmm1
xorps  %xmm0,%xmm1
movlps %xmm1,(%rsi,%rax,8)
cmp    $0x3,%r11d
jl     1436 <bitrv2conj+0x336>
sar    %edi
mov    %r11d,%r10d
xor    %ecx,%ecx
mov    $0x2,%r9d
nopw   0x0(%rax,%rax,1)
mov    %edi,%edx
mov    %edi,%eax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
xor    %edx,%ecx
sar    %eax
cmp    %ecx,%edx
mov    %eax,%edx
jg     1360 <bitrv2conj+0x260>
lea    (%rcx,%r9,1),%eax
movslq %ecx,%rbx
movslq %eax,%r14
mov    %r9d,%edx
nopw   0x0(%rax,%rax,1)
movsd  (%rsi,%rbx,8),%xmm1
movsd  0x8(%rsi,%rbx,8),%xmm2
xorps  %xmm0,%xmm2
movslq %edx,%rax
movsd  (%rsi,%rax,8),%xmm3
movsd  0x8(%rsi,%rax,8),%xmm4
xorps  %xmm0,%xmm4
movsd  %xmm3,(%rsi,%rbx,8)
movlps %xmm4,0x8(%rsi,%rbx,8)
movsd  %xmm1,(%rsi,%rax,8)
movlps %xmm2,0x8(%rsi,%rax,8)
lea    (%rbx,%r10,1),%rbp
add    %r11d,%eax
movsd  (%rsi,%rbp,8),%xmm1
movsd  0x8(%rsi,%rbp,8),%xmm2
xorps  %xmm0,%xmm2
cltq
movsd  (%rsi,%rax,8),%xmm3
movsd  0x8(%rsi,%rax,8),%xmm4
xorps  %xmm0,%xmm4
movsd  %xmm3,(%rsi,%rbp,8)
movlps %xmm4,0x8(%rsi,%rbp,8)
movsd  %xmm1,(%rsi,%rax,8)
movlps %xmm2,0x8(%rsi,%rax,8)
mov    %edi,%ebp
mov    %edi,%eax
xor    %ebp,%edx
sar    %eax
cmp    %edx,%ebp
mov    %eax,%ebp
jg     13f0 <bitrv2conj+0x2f0>
add    $0x2,%rbx
cmp    %r14,%rbx
jl     1380 <bitrv2conj+0x280>
movsd  0x8(%rsi,%r14,8),%xmm1
xorps  %xmm0,%xmm1
movlps %xmm1,0x8(%rsi,%r14,8)
add    %r8d,%r14d
movslq %r14d,%rax
movsd  (%rsi,%rax,8),%xmm1
xorps  %xmm0,%xmm1
movlps %xmm1,(%rsi,%rax,8)
add    $0x2,%r9d
cmp    %r11d,%r9d
jl     1350 <bitrv2conj+0x250>
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @bitrv2conj(i32 %0, double* %1) {
%3 = ashr i32 %0, 2
%4 = icmp sgt i32 %0, 11
br i1 %4, label %5, label %11
5: ; preds = %2, %5
%6 = phi i32 [ %9, %5 ], [ 2, %2 ]
%7 = phi i32 [ %8, %5 ], [ %3, %2 ]
%8 = ashr i32 %7, 1
%9 = shl i32 %6, 1
%10 = icmp slt i32 %9, %8
br i1 %10, label %5, label %11
11: ; preds = %5, %2
%12 = phi i32 [ %3, %2 ], [ %8, %5 ]
%13 = phi i32 [ 2, %2 ], [ %9, %5 ]
%14 = icmp eq i32 %13, %12
br i1 %14, label %15, label %141
15: ; preds = %11
%16 = icmp sgt i32 %12, 0
br i1 %16, label %17, label %222
17: ; preds = %15
%18 = shl nuw nsw i32 %12, 1
%19 = or i32 %12, 1
%20 = zext i32 %12 to i64
br label %21
21: ; preds = %17, %138
%22 = phi i32 [ 0, %17 ], [ %139, %138 ]
%23 = phi i32 [ 0, %17 ], [ %136, %138 ]
%24 = add nsw i32 %22, %23
%25 = icmp eq i32 %22, 0
br i1 %25, label %103, label %26
26: ; preds = %21
%27 = sext i32 %23 to i64
%28 = sext i32 %24 to i64
br label %29
29: ; preds = %26, %100
%30 = phi i64 [ %27, %26 ], [ %101, %100 ]
%31 = phi i32 [ %22, %26 ], [ %98, %100 ]
%32 = getelementptr inbounds double, double* %1, i64 %30
%33 = load double, double* %32
%34 = add nsw i64 %30, 1
%35 = getelementptr inbounds double, double* %1, i64 %34
%36 = load double, double* %35
%37 = fneg double %36
%38 = sext i32 %31 to i64
%39 = getelementptr inbounds double, double* %1, i64 %38
%40 = load double, double* %39
%41 = add nsw i32 %31, 1
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds double, double* %1, i64 %42
%44 = load double, double* %43
%45 = fneg double %44
store double %40, double* %32
store double %45, double* %35
store double %33, double* %39
store double %37, double* %43
%46 = add nsw i64 %30, %20
%47 = add nsw i32 %31, %18
%48 = getelementptr inbounds double, double* %1, i64 %46
%49 = load double, double* %48
%50 = add nsw i64 %46, 1
%51 = getelementptr inbounds double, double* %1, i64 %50
%52 = load double, double* %51
%53 = fneg double %52
%54 = sext i32 %47 to i64
%55 = getelementptr inbounds double, double* %1, i64 %54
%56 = load double, double* %55
%57 = add nsw i32 %47, 1
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds double, double* %1, i64 %58
%60 = load double, double* %59
%61 = fneg double %60
store double %56, double* %48
store double %61, double* %51
store double %49, double* %55
store double %53, double* %59
%62 = add nsw i64 %46, %20
%63 = sub nsw i32 %47, %12
%64 = getelementptr inbounds double, double* %1, i64 %62
%65 = load double, double* %64
%66 = add nsw i64 %62, 1
%67 = getelementptr inbounds double, double* %1, i64 %66
%68 = load double, double* %67
%69 = fneg double %68
%70 = sext i32 %63 to i64
%71 = getelementptr inbounds double, double* %1, i64 %70
%72 = load double, double* %71
%73 = add nsw i32 %63, 1
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds double, double* %1, i64 %74
%76 = load double, double* %75
%77 = fneg double %76
store double %72, double* %64
store double %77, double* %67
store double %65, double* %71
store double %69, double* %75
%78 = add nsw i64 %62, %20
%79 = add nsw i32 %63, %18
%80 = getelementptr inbounds double, double* %1, i64 %78
%81 = load double, double* %80
%82 = add nsw i64 %78, 1
%83 = getelementptr inbounds double, double* %1, i64 %82
%84 = load double, double* %83
%85 = fneg double %84
%86 = sext i32 %79 to i64
%87 = getelementptr inbounds double, double* %1, i64 %86
%88 = load double, double* %87
%89 = add nsw i32 %79, 1
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds double, double* %1, i64 %90
%92 = load double, double* %91
%93 = fneg double %92
store double %88, double* %80
store double %93, double* %83
store double %81, double* %87
store double %85, double* %91
br label %94
94: ; preds = %94, %29
%95 = phi i32 [ %0, %29 ], [ %97, %94 ]
%96 = phi i32 [ %31, %29 ], [ %98, %94 ]
%97 = ashr i32 %95, 1
%98 = xor i32 %96, %97
%99 = icmp sgt i32 %97, %98
br i1 %99, label %94, label %100
100: ; preds = %94
%101 = add nsw i64 %30, 2
%102 = icmp slt i64 %101, %28
br i1 %102, label %29, label %103
103: ; preds = %100, %21
%104 = add nsw i32 %24, 1
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds double, double* %1, i64 %105
%107 = load double, double* %106
%108 = fneg double %107
store double %108, double* %106
%109 = add nsw i32 %24, %12
%110 = add nsw i32 %109, %12
%111 = sext i32 %109 to i64
%112 = getelementptr inbounds double, double* %1, i64 %111
%113 = load double, double* %112
%114 = add nsw i32 %109, 1
%115 = sext i32 %114 to i64
%116 = getelementptr inbounds double, double* %1, i64 %115
%117 = load double, double* %116
%118 = fneg double %117
%119 = sext i32 %110 to i64
%120 = getelementptr inbounds double, double* %1, i64 %119
%121 = load double, double* %120
%122 = add nsw i32 %110, 1
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds double, double* %1, i64 %123
%125 = load double, double* %124
%126 = fneg double %125
store double %121, double* %112
store double %126, double* %116
store double %113, double* %120
store double %118, double* %124
%127 = add i32 %19, %110
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds double, double* %1, i64 %128
%130 = load double, double* %129
%131 = fneg double %130
store double %131, double* %129
br label %132
132: ; preds = %132, %103
%133 = phi i32 [ %23, %103 ], [ %136, %132 ]
%134 = phi i32 [ %0, %103 ], [ %135, %132 ]
%135 = ashr i32 %134, 1
%136 = xor i32 %135, %133
%137 = icmp sgt i32 %135, %136
br i1 %137, label %132, label %138
138: ; preds = %132
%139 = add nuw nsw i32 %22, 2
%140 = icmp slt i32 %139, %12
br i1 %140, label %21, label %222
141: ; preds = %11
%142 = getelementptr inbounds double, double* %1, i64 1
%143 = load double, double* %142
%144 = fneg double %143
store double %144, double* %142
%145 = or i32 %13, 1
%146 = sext i32 %145 to i64
%147 = getelementptr inbounds double, double* %1, i64 %146
%148 = load double, double* %147
%149 = fneg double %148
store double %149, double* %147
%150 = icmp sgt i32 %13, 2
br i1 %150, label %151, label %222
151: ; preds = %141
%152 = ashr i32 %0, 1
%153 = zext i32 %13 to i64
br label %154
154: ; preds = %151, %209
%155 = phi i32 [ 2, %151 ], [ %220, %209 ]
%156 = phi i32 [ 0, %151 ], [ %160, %209 ]
br label %157
157: ; preds = %157, %154
%158 = phi i32 [ %156, %154 ], [ %160, %157 ]
%159 = phi i32 [ %152, %154 ], [ %162, %157 ]
%160 = xor i32 %159, %158
%161 = icmp sgt i32 %159, %160
%162 = ashr i32 %159, 1
br i1 %161, label %157, label %163
163: ; preds = %157
%164 = add nsw i32 %160, %155
%165 = sext i32 %160 to i64
%166 = sext i32 %164 to i64
br label %167
167: ; preds = %163, %206
%168 = phi i64 [ %165, %163 ], [ %207, %206 ]
%169 = phi i32 [ %155, %163 ], [ %203, %206 ]
%170 = getelementptr inbounds double, double* %1, i64 %168
%171 = load double, double* %170
%172 = add nsw i64 %168, 1
%173 = getelementptr inbounds double, double* %1, i64 %172
%174 = load double, double* %173
%175 = fneg double %174
%176 = sext i32 %169 to i64
%177 = getelementptr inbounds double, double* %1, i64 %176
%178 = load double, double* %177
%179 = add nsw i32 %169, 1
%180 = sext i32 %179 to i64
%181 = getelementptr inbounds double, double* %1, i64 %180
%182 = load double, double* %181
%183 = fneg double %182
store double %178, double* %170
store double %183, double* %173
store double %171, double* %177
store double %175, double* %181
%184 = add nsw i64 %168, %153
%185 = add nsw i32 %169, %13
%186 = getelementptr inbounds double, double* %1, i64 %184
%187 = load double, double* %186
%188 = add nsw i64 %184, 1
%189 = getelementptr inbounds double, double* %1, i64 %188
%190 = load double, double* %189
%191 = fneg double %190
%192 = sext i32 %185 to i64
%193 = getelementptr inbounds double, double* %1, i64 %192
%194 = load double, double* %193
%195 = add nsw i32 %185, 1
%196 = sext i32 %195 to i64
%197 = getelementptr inbounds double, double* %1, i64 %196
%198 = load double, double* %197
%199 = fneg double %198
store double %194, double* %186
store double %199, double* %189
store double %187, double* %193
store double %191, double* %197
br label %200
200: ; preds = %200, %167
%201 = phi i32 [ %152, %167 ], [ %205, %200 ]
%202 = phi i32 [ %169, %167 ], [ %203, %200 ]
%203 = xor i32 %202, %201
%204 = icmp sgt i32 %201, %203
%205 = ashr i32 %201, 1
br i1 %204, label %200, label %206
206: ; preds = %200
%207 = add nsw i64 %168, 2
%208 = icmp slt i64 %207, %166
br i1 %208, label %167, label %209
209: ; preds = %206
%210 = add nsw i32 %164, 1
%211 = sext i32 %210 to i64
%212 = getelementptr inbounds double, double* %1, i64 %211
%213 = load double, double* %212
%214 = fneg double %213
store double %214, double* %212
%215 = add i32 %145, %164
%216 = sext i32 %215 to i64
%217 = getelementptr inbounds double, double* %1, i64 %216
%218 = load double, double* %217
%219 = fneg double %218
store double %219, double* %217
%220 = add nuw nsw i32 %155, 2
%221 = icmp slt i32 %220, %13
br i1 %221, label %154, label %222
222: ; preds = %209, %138, %141, %15
ret void
}