void helper_double_5_recursive(double *buf, int depth) {
  if (depth == 2) {
    for (int j = 0; j < 4; j += 4) {
      for (int k = 0; k < 2; k += 2) {
        __asm__ volatile("movupd (%0), %%xmm0\n"
                         "movupd (%1), %%xmm1\n"
                         "movapd %%xmm0, %%xmm8\n"
                         "haddpd %%xmm8, %%xmm8\n"
                         "movapd %%xmm0, %%xmm9\n"
                         "hsubpd %%xmm9, %%xmm9\n"
                         "blendpd $1, %%xmm8, %%xmm9\n"
                         "movapd %%xmm9, %%xmm0\n"
                         "movapd %%xmm1, %%xmm8\n"
                         "haddpd %%xmm8, %%xmm8\n"
                         "movapd %%xmm1, %%xmm9\n"
                         "hsubpd %%xmm9, %%xmm9\n"
                         "blendpd $1, %%xmm8, %%xmm9\n"
                         "movapd %%xmm9, %%xmm1\n"
                         "movapd %%xmm0, %%xmm8\n"
                         "movapd %%xmm0, %%xmm9\n"
                         "addpd %%xmm1, %%xmm8\n"
                         "subpd %%xmm1, %%xmm9\n"
                         "movupd %%xmm8, (%0)\n"
                         "movupd %%xmm9, (%1)\n" ::"r"(buf + j + k + 0),
                         "r"(buf + j + k + 2)
                         : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5",
                           "%xmm6", "%xmm7", "%xmm8", "%xmm9", "%xmm10",
                           "%xmm11", "%xmm12", "%xmm13", "%xmm14", "%xmm15",
                           "memory");
      }
    }
    return;
  }
  if (depth == 5) {
    helper_double_5_recursive(buf + 0, 2);
    helper_double_5_recursive(buf + 4, 2);
    helper_double_5_recursive(buf + 8, 2);
    helper_double_5_recursive(buf + 12, 2);
    helper_double_5_recursive(buf + 16, 2);
    helper_double_5_recursive(buf + 20, 2);
    helper_double_5_recursive(buf + 24, 2);
    helper_double_5_recursive(buf + 28, 2);
    for (int j = 0; j < 32; j += 32) {
      for (int k = 0; k < 4; k += 2) {
        __asm__ volatile(
            "movupd (%0), %%xmm0\n"
            "movupd (%1), %%xmm1\n"
            "movupd (%2), %%xmm2\n"
            "movupd (%3), %%xmm3\n"
            "movupd (%4), %%xmm4\n"
            "movupd (%5), %%xmm5\n"
            "movupd (%6), %%xmm6\n"
            "movupd (%7), %%xmm7\n"
            "movapd %%xmm0, %%xmm8\n"
            "movapd %%xmm0, %%xmm9\n"
            "addpd %%xmm1, %%xmm8\n"
            "subpd %%xmm1, %%xmm9\n"
            "movapd %%xmm2, %%xmm10\n"
            "movapd %%xmm2, %%xmm11\n"
            "addpd %%xmm3, %%xmm10\n"
            "subpd %%xmm3, %%xmm11\n"
            "movapd %%xmm4, %%xmm12\n"
            "movapd %%xmm4, %%xmm13\n"
            "addpd %%xmm5, %%xmm12\n"
            "subpd %%xmm5, %%xmm13\n"
            "movapd %%xmm6, %%xmm14\n"
            "movapd %%xmm6, %%xmm15\n"
            "addpd %%xmm7, %%xmm14\n"
            "subpd %%xmm7, %%xmm15\n"
            "movapd %%xmm8, %%xmm0\n"
            "movapd %%xmm8, %%xmm2\n"
            "addpd %%xmm10, %%xmm0\n"
            "subpd %%xmm10, %%xmm2\n"
            "movapd %%xmm9, %%xmm1\n"
            "movapd %%xmm9, %%xmm3\n"
            "addpd %%xmm11, %%xmm1\n"
            "subpd %%xmm11, %%xmm3\n"
            "movapd %%xmm12, %%xmm4\n"
            "movapd %%xmm12, %%xmm6\n"
            "addpd %%xmm14, %%xmm4\n"
            "subpd %%xmm14, %%xmm6\n"
            "movapd %%xmm13, %%xmm5\n"
            "movapd %%xmm13, %%xmm7\n"
            "addpd %%xmm15, %%xmm5\n"
            "subpd %%xmm15, %%xmm7\n"
            "movapd %%xmm0, %%xmm8\n"
            "movapd %%xmm0, %%xmm12\n"
            "addpd %%xmm4, %%xmm8\n"
            "subpd %%xmm4, %%xmm12\n"
            "movapd %%xmm1, %%xmm9\n"
            "movapd %%xmm1, %%xmm13\n"
            "addpd %%xmm5, %%xmm9\n"
            "subpd %%xmm5, %%xmm13\n"
            "movapd %%xmm2, %%xmm10\n"
            "movapd %%xmm2, %%xmm14\n"
            "addpd %%xmm6, %%xmm10\n"
            "subpd %%xmm6, %%xmm14\n"
            "movapd %%xmm3, %%xmm11\n"
            "movapd %%xmm3, %%xmm15\n"
            "addpd %%xmm7, %%xmm11\n"
            "subpd %%xmm7, %%xmm15\n"
            "movupd %%xmm8, (%0)\n"
            "movupd %%xmm9, (%1)\n"
            "movupd %%xmm10, (%2)\n"
            "movupd %%xmm11, (%3)\n"
            "movupd %%xmm12, (%4)\n"
            "movupd %%xmm13, (%5)\n"
            "movupd %%xmm14, (%6)\n"
            "movupd %%xmm15, (%7)\n" ::"r"(buf + j + k + 0),
            "r"(buf + j + k + 4), "r"(buf + j + k + 8), "r"(buf + j + k + 12),
            "r"(buf + j + k + 16), "r"(buf + j + k + 20), "r"(buf + j + k + 24),
            "r"(buf + j + k + 28)
            : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6",
              "%xmm7", "%xmm8", "%xmm9", "%xmm10", "%xmm11", "%xmm12", "%xmm13",
              "%xmm14", "%xmm15", "memory");
      }
    }
    return;
  }
}


x86 assembly (clang, -O0):
<helper_double_5_recursive>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
cmpl   $0x2,-0xc(%rbp)
jne    120f <helper_double_5_recursive+0xff>
movl   $0x0,-0x10(%rbp)
cmpl   $0x4,-0x10(%rbp)
jge    120a <helper_double_5_recursive+0xfa>
movl   $0x0,-0x14(%rbp)
cmpl   $0x2,-0x14(%rbp)
jge    11f7 <helper_double_5_recursive+0xe7>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x14(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
movslq -0x10(%rbp),%rdx
shl    $0x3,%rdx
add    %rdx,%rcx
movslq -0x14(%rbp),%rdx
shl    $0x3,%rdx
add    %rdx,%rcx
add    $0x10,%rcx
movupd (%rax),%xmm0
movupd (%rcx),%xmm1
movapd %xmm0,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm0,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm0
movapd %xmm1,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm1,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm1
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movupd %xmm8,(%rax)
movupd %xmm9,(%rcx)
mov    -0x14(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x14(%rbp)
jmp    1141 <helper_double_5_recursive+0x31>
jmp    11fc <helper_double_5_recursive+0xec>
mov    -0x10(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x10(%rbp)
jmp    1130 <helper_double_5_recursive+0x20>
jmp    152c <helper_double_5_recursive+0x41c>
cmpl   $0x5,-0xc(%rbp)
jne    152c <helper_double_5_recursive+0x41c>
mov    -0x8(%rbp),%rdi
mov    $0x2,%esi
call   1030 <helper_double_5_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x20,%rdi
mov    $0x2,%esi
call   1030 <helper_double_5_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x40,%rdi
mov    $0x2,%esi
call   1030 <helper_double_5_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x60,%rdi
mov    $0x2,%esi
call   1030 <helper_double_5_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x80,%rdi
mov    $0x2,%esi
call   1030 <helper_double_5_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0xa0,%rdi
mov    $0x2,%esi
call   1030 <helper_double_5_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0xc0,%rdi
mov    $0x2,%esi
call   1030 <helper_double_5_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0xe0,%rdi
mov    $0x2,%esi
call   1030 <helper_double_5_recursive@plt>
movl   $0x0,-0x18(%rbp)
cmpl   $0x20,-0x18(%rbp)
jge    1527 <helper_double_5_recursive+0x417>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x4,-0x1c(%rbp)
jge    1514 <helper_double_5_recursive+0x404>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
movslq -0x18(%rbp),%rdx
shl    $0x3,%rdx
add    %rdx,%rcx
movslq -0x1c(%rbp),%rdx
shl    $0x3,%rdx
add    %rdx,%rcx
add    $0x20,%rcx
mov    -0x8(%rbp),%rdx
movslq -0x18(%rbp),%rsi
shl    $0x3,%rsi
add    %rsi,%rdx
movslq -0x1c(%rbp),%rsi
shl    $0x3,%rsi
add    %rsi,%rdx
add    $0x40,%rdx
mov    -0x8(%rbp),%rsi
movslq -0x18(%rbp),%rdi
shl    $0x3,%rdi
add    %rdi,%rsi
movslq -0x1c(%rbp),%rdi
shl    $0x3,%rdi
add    %rdi,%rsi
add    $0x60,%rsi
mov    -0x8(%rbp),%rdi
movslq -0x18(%rbp),%r8
shl    $0x3,%r8
add    %r8,%rdi
movslq -0x1c(%rbp),%r8
shl    $0x3,%r8
add    %r8,%rdi
add    $0x80,%rdi
mov    -0x8(%rbp),%r8
movslq -0x18(%rbp),%r9
shl    $0x3,%r9
add    %r9,%r8
movslq -0x1c(%rbp),%r9
shl    $0x3,%r9
add    %r9,%r8
add    $0xa0,%r8
mov    -0x8(%rbp),%r9
movslq -0x18(%rbp),%r10
shl    $0x3,%r10
add    %r10,%r9
movslq -0x1c(%rbp),%r10
shl    $0x3,%r10
add    %r10,%r9
add    $0xc0,%r9
mov    -0x8(%rbp),%r10
movslq -0x18(%rbp),%r11
shl    $0x3,%r11
add    %r11,%r10
movslq -0x1c(%rbp),%r11
shl    $0x3,%r11
add    %r11,%r10
add    $0xe0,%r10
movupd (%rax),%xmm0
movupd (%rcx),%xmm1
movupd (%rdx),%xmm2
movupd (%rsi),%xmm3
movupd (%rdi),%xmm4
movupd (%r8),%xmm5
movupd (%r9),%xmm6
movupd (%r10),%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movapd %xmm2,%xmm10
movapd %xmm2,%xmm11
addpd  %xmm3,%xmm10
subpd  %xmm3,%xmm11
movapd %xmm4,%xmm12
movapd %xmm4,%xmm13
addpd  %xmm5,%xmm12
subpd  %xmm5,%xmm13
movapd %xmm6,%xmm14
movapd %xmm6,%xmm15
addpd  %xmm7,%xmm14
subpd  %xmm7,%xmm15
movapd %xmm8,%xmm0
movapd %xmm8,%xmm2
addpd  %xmm10,%xmm0
subpd  %xmm10,%xmm2
movapd %xmm9,%xmm1
movapd %xmm9,%xmm3
addpd  %xmm11,%xmm1
subpd  %xmm11,%xmm3
movapd %xmm12,%xmm4
movapd %xmm12,%xmm6
addpd  %xmm14,%xmm4
subpd  %xmm14,%xmm6
movapd %xmm13,%xmm5
movapd %xmm13,%xmm7
addpd  %xmm15,%xmm5
subpd  %xmm15,%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm12
addpd  %xmm4,%xmm8
subpd  %xmm4,%xmm12
movapd %xmm1,%xmm9
movapd %xmm1,%xmm13
addpd  %xmm5,%xmm9
subpd  %xmm5,%xmm13
movapd %xmm2,%xmm10
movapd %xmm2,%xmm14
addpd  %xmm6,%xmm10
subpd  %xmm6,%xmm14
movapd %xmm3,%xmm11
movapd %xmm3,%xmm15
addpd  %xmm7,%xmm11
subpd  %xmm7,%xmm15
movupd %xmm8,(%rax)
movupd %xmm9,(%rcx)
movupd %xmm10,(%rdx)
movupd %xmm11,(%rsi)
movupd %xmm12,(%rdi)
movupd %xmm13,(%r8)
movupd %xmm14,(%r9)
movupd %xmm15,(%r10)
mov    -0x1c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x1c(%rbp)
jmp    12c9 <helper_double_5_recursive+0x1b9>
jmp    1519 <helper_double_5_recursive+0x409>
mov    -0x18(%rbp),%eax
add    $0x20,%eax
mov    %eax,-0x18(%rbp)
jmp    12b8 <helper_double_5_recursive+0x1a8>
jmp    152c <helper_double_5_recursive+0x41c>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<helper_double_5_recursive>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
cmp    $0x2,%esi
je     173b <helper_double_5_recursive+0x63b>
cmp    $0x5,%esi
jne    17a5 <helper_double_5_recursive+0x6a5>
lea    0x10(%rdi),%rax
mov    %rax,-0x8(%rsp)
movupd (%rdi),%xmm0
movupd (%rax),%xmm1
movapd %xmm0,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm0,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm0
movapd %xmm1,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm1,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm1
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movupd %xmm8,(%rdi)
movupd %xmm9,(%rax)
lea    0x20(%rdi),%r9
lea    0x30(%rdi),%r10
movupd (%r9),%xmm0
movupd (%r10),%xmm1
movapd %xmm0,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm0,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm0
movapd %xmm1,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm1,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm1
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movupd %xmm8,(%r9)
movupd %xmm9,(%r10)
lea    0x40(%rdi),%r14
lea    0x50(%rdi),%r11
movupd (%r14),%xmm0
movupd (%r11),%xmm1
movapd %xmm0,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm0,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm0
movapd %xmm1,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm1,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm1
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movupd %xmm8,(%r14)
movupd %xmm9,(%r11)
lea    0x60(%rdi),%r15
lea    0x70(%rdi),%r12
movupd (%r15),%xmm0
movupd (%r12),%xmm1
movapd %xmm0,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm0,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm0
movapd %xmm1,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm1,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm1
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movupd %xmm8,(%r15)
movupd %xmm9,(%r12)
lea    0x80(%rdi),%r13
lea    0x90(%rdi),%rbx
movupd 0x0(%r13),%xmm0
movupd (%rbx),%xmm1
movapd %xmm0,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm0,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm0
movapd %xmm1,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm1,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm1
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movupd %xmm8,0x0(%r13)
movupd %xmm9,(%rbx)
lea    0xa0(%rdi),%rsi
lea    0xb0(%rdi),%r8
movupd (%rsi),%xmm0
movupd (%r8),%xmm1
movapd %xmm0,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm0,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm0
movapd %xmm1,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm1,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm1
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movupd %xmm8,(%rsi)
movupd %xmm9,(%r8)
lea    0xc0(%rdi),%rdx
lea    0xd0(%rdi),%rcx
movupd (%rdx),%xmm0
movupd (%rcx),%xmm1
movapd %xmm0,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm0,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm0
movapd %xmm1,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm1,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm1
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movupd %xmm8,(%rdx)
movupd %xmm9,(%rcx)
mov    %rdi,%rbp
add    $0xf0,%rbp
lea    0xe0(%rdi),%rax
movupd (%rax),%xmm0
movupd 0x0(%rbp),%xmm1
movapd %xmm0,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm0,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm0
movapd %xmm1,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm1,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm1
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movupd %xmm8,(%rax)
movupd %xmm9,0x0(%rbp)
movupd (%rdi),%xmm0
movupd (%r9),%xmm1
movupd (%r14),%xmm2
movupd (%r15),%xmm3
movupd 0x0(%r13),%xmm4
movupd (%rsi),%xmm5
movupd (%rdx),%xmm6
movupd (%rax),%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movapd %xmm2,%xmm10
movapd %xmm2,%xmm11
addpd  %xmm3,%xmm10
subpd  %xmm3,%xmm11
movapd %xmm4,%xmm12
movapd %xmm4,%xmm13
addpd  %xmm5,%xmm12
subpd  %xmm5,%xmm13
movapd %xmm6,%xmm14
movapd %xmm6,%xmm15
addpd  %xmm7,%xmm14
subpd  %xmm7,%xmm15
movapd %xmm8,%xmm0
movapd %xmm8,%xmm2
addpd  %xmm10,%xmm0
subpd  %xmm10,%xmm2
movapd %xmm9,%xmm1
movapd %xmm9,%xmm3
addpd  %xmm11,%xmm1
subpd  %xmm11,%xmm3
movapd %xmm12,%xmm4
movapd %xmm12,%xmm6
addpd  %xmm14,%xmm4
subpd  %xmm14,%xmm6
movapd %xmm13,%xmm5
movapd %xmm13,%xmm7
addpd  %xmm15,%xmm5
subpd  %xmm15,%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm12
addpd  %xmm4,%xmm8
subpd  %xmm4,%xmm12
movapd %xmm1,%xmm9
movapd %xmm1,%xmm13
addpd  %xmm5,%xmm9
subpd  %xmm5,%xmm13
movapd %xmm2,%xmm10
movapd %xmm2,%xmm14
addpd  %xmm6,%xmm10
subpd  %xmm6,%xmm14
movapd %xmm3,%xmm11
movapd %xmm3,%xmm15
addpd  %xmm7,%xmm11
subpd  %xmm7,%xmm15
movupd %xmm8,(%rdi)
movupd %xmm9,(%r9)
movupd %xmm10,(%r14)
movupd %xmm11,(%r15)
movupd %xmm12,0x0(%r13)
movupd %xmm13,(%rsi)
movupd %xmm14,(%rdx)
movupd %xmm15,(%rax)
mov    -0x8(%rsp),%rax
movupd (%rax),%xmm0
movupd (%r10),%xmm1
movupd (%r11),%xmm2
movupd (%r12),%xmm3
movupd (%rbx),%xmm4
movupd (%r8),%xmm5
movupd (%rcx),%xmm6
movupd 0x0(%rbp),%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movapd %xmm2,%xmm10
movapd %xmm2,%xmm11
addpd  %xmm3,%xmm10
subpd  %xmm3,%xmm11
movapd %xmm4,%xmm12
movapd %xmm4,%xmm13
addpd  %xmm5,%xmm12
subpd  %xmm5,%xmm13
movapd %xmm6,%xmm14
movapd %xmm6,%xmm15
addpd  %xmm7,%xmm14
subpd  %xmm7,%xmm15
movapd %xmm8,%xmm0
movapd %xmm8,%xmm2
addpd  %xmm10,%xmm0
subpd  %xmm10,%xmm2
movapd %xmm9,%xmm1
movapd %xmm9,%xmm3
addpd  %xmm11,%xmm1
subpd  %xmm11,%xmm3
movapd %xmm12,%xmm4
movapd %xmm12,%xmm6
addpd  %xmm14,%xmm4
subpd  %xmm14,%xmm6
movapd %xmm13,%xmm5
movapd %xmm13,%xmm7
addpd  %xmm15,%xmm5
subpd  %xmm15,%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm12
addpd  %xmm4,%xmm8
subpd  %xmm4,%xmm12
movapd %xmm1,%xmm9
movapd %xmm1,%xmm13
addpd  %xmm5,%xmm9
subpd  %xmm5,%xmm13
movapd %xmm2,%xmm10
movapd %xmm2,%xmm14
addpd  %xmm6,%xmm10
subpd  %xmm6,%xmm14
movapd %xmm3,%xmm11
movapd %xmm3,%xmm15
addpd  %xmm7,%xmm11
subpd  %xmm7,%xmm15
movupd %xmm8,(%rax)
movupd %xmm9,(%r10)
movupd %xmm10,(%r11)
movupd %xmm11,(%r12)
movupd %xmm12,(%rbx)
movupd %xmm13,(%r8)
movupd %xmm14,(%rcx)
movupd %xmm15,0x0(%rbp)
jmp    17a5 <helper_double_5_recursive+0x6a5>
lea    0x10(%rdi),%rax
movupd (%rdi),%xmm0
movupd (%rax),%xmm1
movapd %xmm0,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm0,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm0
movapd %xmm1,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm1,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm1
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movupd %xmm8,(%rdi)
movupd %xmm9,(%rax)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @helper_double_5_recursive(double* %0, i32 %1) {
%3 = alloca double*
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
store double* %0, double** %3
store i32 %1, i32* %4
%9 = load i32, i32* %4
%10 = icmp eq i32 %9, 2
br i1 %10, label %11, label %44
11: ; preds = %2
store i32 0, i32* %5
br label %12
12: ; preds = %40, %11
%13 = load i32, i32* %5
%14 = icmp slt i32 %13, 4
br i1 %14, label %15, label %43
15: ; preds = %12
store i32 0, i32* %6
br label %16
16: ; preds = %36, %15
%17 = load i32, i32* %6
%18 = icmp slt i32 %17, 2
br i1 %18, label %19, label %39
19: ; preds = %16
%20 = load double*, double** %3
%21 = load i32, i32* %5
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds double, double* %20, i64 %22
%24 = load i32, i32* %6
%25 = sext i32 %24 to i64
%26 = getelementptr inbounds double, double* %23, i64 %25
%27 = getelementptr inbounds double, double* %26, i64 0
%28 = load double*, double** %3
%29 = load i32, i32* %5
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds double, double* %28, i64 %30
%32 = load i32, i32* %6
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds double, double* %31, i64 %33
%35 = getelementptr inbounds double, double* %34, i64 2
br label %36
36: ; preds = %19
%37 = load i32, i32* %6
%38 = add nsw i32 %37, 2
store i32 %38, i32* %6
br label %16
39: ; preds = %16
br label %40
40: ; preds = %39
%41 = load i32, i32* %5
%42 = add nsw i32 %41, 4
store i32 %42, i32* %5
br label %12
43: ; preds = %12
br label %144
44: ; preds = %2
%45 = load i32, i32* %4
%46 = icmp eq i32 %45, 5
br i1 %46, label %47, label %144
47: ; preds = %44
%48 = load double*, double** %3
%49 = getelementptr inbounds double, double* %48, i64 0
%50 = load double*, double** %3
%51 = getelementptr inbounds double, double* %50, i64 4
%52 = load double*, double** %3
%53 = getelementptr inbounds double, double* %52, i64 8
%54 = load double*, double** %3
%55 = getelementptr inbounds double, double* %54, i64 12
%56 = load double*, double** %3
%57 = getelementptr inbounds double, double* %56, i64 16
%58 = load double*, double** %3
%59 = getelementptr inbounds double, double* %58, i64 20
%60 = load double*, double** %3
%61 = getelementptr inbounds double, double* %60, i64 24
%62 = load double*, double** %3
%63 = getelementptr inbounds double, double* %62, i64 28
store i32 0, i32* %7
br label %64
64: ; preds = %140, %47
%65 = load i32, i32* %7
%66 = icmp slt i32 %65, 32
br i1 %66, label %67, label %143
67: ; preds = %64
store i32 0, i32* %8
br label %68
68: ; preds = %136, %67
%69 = load i32, i32* %8
%70 = icmp slt i32 %69, 4
br i1 %70, label %71, label %139
71: ; preds = %68
%72 = load double*, double** %3
%73 = load i32, i32* %7
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds double, double* %72, i64 %74
%76 = load i32, i32* %8
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds double, double* %75, i64 %77
%79 = getelementptr inbounds double, double* %78, i64 0
%80 = load double*, double** %3
%81 = load i32, i32* %7
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds double, double* %80, i64 %82
%84 = load i32, i32* %8
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds double, double* %83, i64 %85
%87 = getelementptr inbounds double, double* %86, i64 4
%88 = load double*, double** %3
%89 = load i32, i32* %7
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds double, double* %88, i64 %90
%92 = load i32, i32* %8
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds double, double* %91, i64 %93
%95 = getelementptr inbounds double, double* %94, i64 8
%96 = load double*, double** %3
%97 = load i32, i32* %7
%98 = sext i32 %97 to i64
%99 = getelementptr inbounds double, double* %96, i64 %98
%100 = load i32, i32* %8
%101 = sext i32 %100 to i64
%102 = getelementptr inbounds double, double* %99, i64 %101
%103 = getelementptr inbounds double, double* %102, i64 12
%104 = load double*, double** %3
%105 = load i32, i32* %7
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds double, double* %104, i64 %106
%108 = load i32, i32* %8
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds double, double* %107, i64 %109
%111 = getelementptr inbounds double, double* %110, i64 16
%112 = load double*, double** %3
%113 = load i32, i32* %7
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds double, double* %112, i64 %114
%116 = load i32, i32* %8
%117 = sext i32 %116 to i64
%118 = getelementptr inbounds double, double* %115, i64 %117
%119 = getelementptr inbounds double, double* %118, i64 20
%120 = load double*, double** %3
%121 = load i32, i32* %7
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds double, double* %120, i64 %122
%124 = load i32, i32* %8
%125 = sext i32 %124 to i64
%126 = getelementptr inbounds double, double* %123, i64 %125
%127 = getelementptr inbounds double, double* %126, i64 24
%128 = load double*, double** %3
%129 = load i32, i32* %7
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds double, double* %128, i64 %130
%132 = load i32, i32* %8
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds double, double* %131, i64 %133
%135 = getelementptr inbounds double, double* %134, i64 28
br label %136
136: ; preds = %71
%137 = load i32, i32* %8
%138 = add nsw i32 %137, 2
store i32 %138, i32* %8
br label %68
139: ; preds = %68
br label %140
140: ; preds = %139
%141 = load i32, i32* %7
%142 = add nsw i32 %141, 32
store i32 %142, i32* %7
br label %64
143: ; preds = %64
br label %144
144: ; preds = %43, %143, %44
ret void
}

LLVM IR (-O2):
define void @helper_double_5_recursive(double* %0, i32 %1) {
switch i32 %1, label %28 [
i32 2, label %26
i32 5, label %3
]
3: ; preds = %2
%4 = getelementptr inbounds double, double* %0, i64 2
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovapd %xmm0, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm0, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm0\0Amovapd %xmm1, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm1, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm1\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0A", "r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %0, double* %4)
%5 = getelementptr inbounds double, double* %0, i64 4
%6 = getelementptr inbounds double, double* %0, i64 6
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovapd %xmm0, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm0, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm0\0Amovapd %xmm1, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm1, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm1\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0A", "r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %5, double* %6)
%7 = getelementptr inbounds double, double* %0, i64 8
%8 = getelementptr inbounds double, double* %0, i64 10
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovapd %xmm0, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm0, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm0\0Amovapd %xmm1, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm1, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm1\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0A", "r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %7, double* %8)
%9 = getelementptr inbounds double, double* %0, i64 12
%10 = getelementptr inbounds double, double* %0, i64 14
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovapd %xmm0, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm0, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm0\0Amovapd %xmm1, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm1, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm1\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0A", "r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %9, double* %10)
%11 = getelementptr inbounds double, double* %0, i64 16
%12 = getelementptr inbounds double, double* %0, i64 18
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovapd %xmm0, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm0, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm0\0Amovapd %xmm1, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm1, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm1\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0A", "r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %11, double* %12)
%13 = getelementptr inbounds double, double* %0, i64 20
%14 = getelementptr inbounds double, double* %0, i64 22
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovapd %xmm0, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm0, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm0\0Amovapd %xmm1, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm1, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm1\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0A", "r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %13, double* %14)
%15 = getelementptr inbounds double, double* %0, i64 24
%16 = getelementptr inbounds double, double* %0, i64 26
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovapd %xmm0, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm0, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm0\0Amovapd %xmm1, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm1, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm1\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0A", "r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %15, double* %16)
%17 = getelementptr inbounds double, double* %0, i64 28
%18 = getelementptr inbounds double, double* %0, i64 30
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovapd %xmm0, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm0, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm0\0Amovapd %xmm1, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm1, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm1\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0A", "r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %17, double* %18)
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovupd ($2), %xmm2\0Amovupd ($3), %xmm3\0Amovupd ($4), %xmm4\0Amovupd ($5), %xmm5\0Amovupd ($6), %xmm6\0Amovupd ($7), %xmm7\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovapd %xmm2, %xmm10\0Amovapd %xmm2, %xmm11\0Aaddpd %xmm3, %xmm10\0Asubpd %xmm3, %xmm11\0Amovapd %xmm4, %xmm12\0Amovapd %xmm4, %xmm13\0Aaddpd %xmm5, %xmm12\0Asubpd %xmm5, %xmm13\0Amovapd %xmm6, %xmm14\0Amovapd %xmm6, %xmm15\0Aaddpd %xmm7, %xmm14\0Asubpd %xmm7, %xmm15\0Amovapd %xmm8, %xmm0\0Amovapd %xmm8, %xmm2\0Aaddpd %xmm10, %xmm0\0Asubpd %xmm10, %xmm2\0Amovapd %xmm9, %xmm1\0Amovapd %xmm9, %xmm3\0Aaddpd %xmm11, %xmm1\0Asubpd %xmm11, %xmm3\0Amovapd %xmm12, %xmm4\0Amovapd %xmm12, %xmm6\0Aaddpd %xmm14, %xmm4\0Asubpd %xmm14, %xmm6\0Amovapd %xmm13, %xmm5\0Amovapd %xmm13, %xmm7\0Aaddpd %xmm15, %xmm5\0Asubpd %xmm15, %xmm7\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm12\0Aaddpd %xmm4, %xmm8\0Asubpd %xmm4, %xmm12\0Amovapd %xmm1, %xmm9\0Amovapd %xmm1, %xmm13\0Aaddpd %xmm5, %xmm9\0Asubpd %xmm5, %xmm13\0Amovapd %xmm2, %xmm10\0Amovapd %xmm2, %xmm14\0Aaddpd %xmm6, %xmm10\0Asubpd %xmm6, %xmm14\0Amovapd %xmm3, %xmm11\0Amovapd %xmm3, %xmm15\0Aaddpd %xmm7, %xmm11\0Asubpd %xmm7, %xmm15\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0Amovupd %xmm10, ($2)\0Amovupd %xmm11, ($3)\0Amovupd %xmm12, ($4)\0Amovupd %xmm13, ($5)\0Amovupd %xmm14, ($6)\0Amovupd %xmm15, ($7)\0A", "r,r,r,r,r,r,r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %0, double* %5, double* %7, double* %9, double* %11, double* %13, double* %15, double* %17)
%19 = getelementptr inbounds double, double* %0, i64 6
%20 = getelementptr inbounds double, double* %0, i64 10
%21 = getelementptr inbounds double, double* %0, i64 14
%22 = getelementptr inbounds double, double* %0, i64 18
%23 = getelementptr inbounds double, double* %0, i64 22
%24 = getelementptr inbounds double, double* %0, i64 26
%25 = getelementptr inbounds double, double* %0, i64 30
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovupd ($2), %xmm2\0Amovupd ($3), %xmm3\0Amovupd ($4), %xmm4\0Amovupd ($5), %xmm5\0Amovupd ($6), %xmm6\0Amovupd ($7), %xmm7\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovapd %xmm2, %xmm10\0Amovapd %xmm2, %xmm11\0Aaddpd %xmm3, %xmm10\0Asubpd %xmm3, %xmm11\0Amovapd %xmm4, %xmm12\0Amovapd %xmm4, %xmm13\0Aaddpd %xmm5, %xmm12\0Asubpd %xmm5, %xmm13\0Amovapd %xmm6, %xmm14\0Amovapd %xmm6, %xmm15\0Aaddpd %xmm7, %xmm14\0Asubpd %xmm7, %xmm15\0Amovapd %xmm8, %xmm0\0Amovapd %xmm8, %xmm2\0Aaddpd %xmm10, %xmm0\0Asubpd %xmm10, %xmm2\0Amovapd %xmm9, %xmm1\0Amovapd %xmm9, %xmm3\0Aaddpd %xmm11, %xmm1\0Asubpd %xmm11, %xmm3\0Amovapd %xmm12, %xmm4\0Amovapd %xmm12, %xmm6\0Aaddpd %xmm14, %xmm4\0Asubpd %xmm14, %xmm6\0Amovapd %xmm13, %xmm5\0Amovapd %xmm13, %xmm7\0Aaddpd %xmm15, %xmm5\0Asubpd %xmm15, %xmm7\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm12\0Aaddpd %xmm4, %xmm8\0Asubpd %xmm4, %xmm12\0Amovapd %xmm1, %xmm9\0Amovapd %xmm1, %xmm13\0Aaddpd %xmm5, %xmm9\0Asubpd %xmm5, %xmm13\0Amovapd %xmm2, %xmm10\0Amovapd %xmm2, %xmm14\0Aaddpd %xmm6, %xmm10\0Asubpd %xmm6, %xmm14\0Amovapd %xmm3, %xmm11\0Amovapd %xmm3, %xmm15\0Aaddpd %xmm7, %xmm11\0Asubpd %xmm7, %xmm15\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0Amovupd %xmm10, ($2)\0Amovupd %xmm11, ($3)\0Amovupd %xmm12, ($4)\0Amovupd %xmm13, ($5)\0Amovupd %xmm14, ($6)\0Amovupd %xmm15, ($7)\0A", "r,r,r,r,r,r,r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %4, double* %19, double* %20, double* %21, double* %22, double* %23, double* %24, double* %25)
br label %28
26: ; preds = %2
%27 = getelementptr inbounds double, double* %0, i64 2
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovapd %xmm0, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm0, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm0\0Amovapd %xmm1, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm1, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm1\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0A", "r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %0, double* %27)
br label %28
28: ; preds = %3, %26, %2
ret void
}