user: Converte this assembly snippet into its equivalent C code:

```asm
<helper_double_21_recursive>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  cmp    $0xd,%esi
  je     L102
  cmp    $0x10,%esi
  je     L145
  cmp    $0x13,%esi
  je     L166
  cmp    $0x15,%esi
  je     L129
L59:
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L102:
  mov    %rdi,%rdx
  lea    0x10000(%rdi),%rbp
  mov    %rdi,%rax
L158:
  lea    0x10(%rax),%rcx
  lea    0x20(%rax),%rsi
  lea    0x30(%rax),%rdi
  lea    0x40(%rax),%r8
  lea    0x50(%rax),%r9
  lea    0x60(%rax),%r10
  lea    0x70(%rax),%r11
  movupd (%rax),%xmm0
  movupd (%rcx),%xmm1
  movupd (%rsi),%xmm2
  movupd (%rdi),%xmm3
  movupd (%r8),%xmm4
  movupd (%r9),%xmm5
  movupd (%r10),%xmm6
  movupd (%r11),%xmm7
  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 %xmm2,%xmm8
  haddpd %xmm8,%xmm8
  movapd %xmm2,%xmm9
  hsubpd %xmm9,%xmm9
  blendpd $0x1,%xmm8,%xmm9
  movapd %xmm9,%xmm2
  movapd %xmm3,%xmm8
  haddpd %xmm8,%xmm8
  movapd %xmm3,%xmm9
  hsubpd %xmm9,%xmm9
  blendpd $0x1,%xmm8,%xmm9
  movapd %xmm9,%xmm3
  movapd %xmm4,%xmm8
  haddpd %xmm8,%xmm8
  movapd %xmm4,%xmm9
  hsubpd %xmm9,%xmm9
  blendpd $0x1,%xmm8,%xmm9
  movapd %xmm9,%xmm4
  movapd %xmm5,%xmm8
  haddpd %xmm8,%xmm8
  movapd %xmm5,%xmm9
  hsubpd %xmm9,%xmm9
  blendpd $0x1,%xmm8,%xmm9
  movapd %xmm9,%xmm5
  movapd %xmm6,%xmm8
  haddpd %xmm8,%xmm8
  movapd %xmm6,%xmm9
  hsubpd %xmm9,%xmm9
  blendpd $0x1,%xmm8,%xmm9
  movapd %xmm9,%xmm6
  movapd %xmm7,%xmm8
  haddpd %xmm8,%xmm8
  movapd %xmm7,%xmm9
  hsubpd %xmm9,%xmm9
  blendpd $0x1,%xmm8,%xmm9
  movapd %xmm9,%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,(%rsi)
  movupd %xmm11,(%rdi)
  movupd %xmm12,(%r8)
  movupd %xmm13,(%r9)
  movupd %xmm14,(%r10)
  movupd %xmm15,(%r11)
  sub    $0xffffffffffffff80,%rax
  cmp    %rbp,%rax
  jne    L158
  lea    0x80(%rbx),%rbp
  lea    0x10080(%rbx),%r12
  jmp    L111
L168:
  add    $0x400,%rbp
  cmp    %r12,%rbp
  je     L29
L111:
  lea    -0x80(%rbp),%rax
L180:
  lea    0x80(%rax),%rcx
  lea    0x100(%rax),%rsi
  lea    0x180(%rax),%rdi
  lea    0x200(%rax),%r8
  lea    0x280(%rax),%r9
  lea    0x300(%rax),%r10
  lea    0x380(%rax),%r11
  movupd (%rax),%xmm0
  movupd (%rcx),%xmm1
  movupd (%rsi),%xmm2
  movupd (%rdi),%xmm3
  movupd (%r8),%xmm4
  movupd (%r9),%xmm5
  movupd (%r10),%xmm6
  movupd (%r11),%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,(%rsi)
  movupd %xmm11,(%rdi)
  movupd %xmm12,(%r8)
  movupd %xmm13,(%r9)
  movupd %xmm14,(%r10)
  movupd %xmm15,(%r11)
  add    $0x10,%rax
  cmp    %rbp,%rax
  jne    L180
  jmp    L168
L29:
  lea    0x400(%rbx),%rbp
  lea    0x10400(%rbx),%r12
L169:
  lea    -0x400(%rbp),%rax
L136:
  lea    0x400(%rax),%rcx
  lea    0x800(%rax),%rsi
  lea    0xc00(%rax),%rdi
  lea    0x1000(%rax),%r8
  lea    0x1400(%rax),%r9
  lea    0x1800(%rax),%r10
  lea    0x1c00(%rax),%r11
  movupd (%rax),%xmm0
  movupd (%rcx),%xmm1
  movupd (%rsi),%xmm2
  movupd (%rdi),%xmm3
  movupd (%r8),%xmm4
  movupd (%r9),%xmm5
  movupd (%r10),%xmm6
  movupd (%r11),%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,(%rsi)
  movupd %xmm11,(%rdi)
  movupd %xmm12,(%r8)
  movupd %xmm13,(%r9)
  movupd %xmm14,(%r10)
  movupd %xmm15,(%r11)
  add    $0x10,%rax
  cmp    %rax,%rbp
  jne    L136
  add    $0x2000,%rbp
  cmp    %rbp,%r12
  jne    L169
  add    $0x2000,%rbx
L184:
  lea    0x2000(%rdx),%rax
  lea    0x4000(%rdx),%rcx
  lea    0x6000(%rdx),%rsi
  lea    0x8000(%rdx),%rdi
  lea    0xa000(%rdx),%r8
  lea    0xc000(%rdx),%r9
  lea    0xe000(%rdx),%r10
  movupd (%rdx),%xmm0
  movupd (%rax),%xmm1
  movupd (%rcx),%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,(%rdx)
  movupd %xmm9,(%rax)
  movupd %xmm10,(%rcx)
  movupd %xmm11,(%rsi)
  movupd %xmm12,(%rdi)
  movupd %xmm13,(%r8)
  movupd %xmm14,(%r9)
  movupd %xmm15,(%r10)
  add    $0x10,%rdx
  cmp    %rbx,%rdx
  jne    L184
  jmp    L59
L145:
  mov    $0xd,%esi
  call   <helper_double_21_recursive>
  lea    0x10000(%rbx),%rbp
  mov    $0xd,%esi
  mov    %rbp,%rdi
  call   <helper_double_21_recursive>
  lea    0x20000(%rbx),%rdi
  mov    $0xd,%esi
  call   <helper_double_21_recursive>
  lea    0x30000(%rbx),%rdi
  mov    $0xd,%esi
  call   <helper_double_21_recursive>
  lea    0x40000(%rbx),%rdi
  mov    $0xd,%esi
  call   <helper_double_21_recursive>
  lea    0x50000(%rbx),%rdi
  mov    $0xd,%esi
  call   <helper_double_21_recursive>
  lea    0x60000(%rbx),%rdi
  mov    $0xd,%esi
  call   <helper_double_21_recursive>
  lea    0x70000(%rbx),%rdi
  mov    $0xd,%esi
  call   <helper_double_21_recursive>
L54:
  lea    0x10000(%rbx),%rax
  lea    0x20000(%rbx),%rdx
  lea    0x30000(%rbx),%rcx
  lea    0x40000(%rbx),%rsi
  lea    0x50000(%rbx),%rdi
  lea    0x60000(%rbx),%r8
  lea    0x70000(%rbx),%r9
  movupd (%rbx),%xmm0
  movupd (%rax),%xmm1
  movupd (%rdx),%xmm2
  movupd (%rcx),%xmm3
  movupd (%rsi),%xmm4
  movupd (%rdi),%xmm5
  movupd (%r8),%xmm6
  movupd (%r9),%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,(%rbx)
  movupd %xmm9,(%rax)
  movupd %xmm10,(%rdx)
  movupd %xmm11,(%rcx)
  movupd %xmm12,(%rsi)
  movupd %xmm13,(%rdi)
  movupd %xmm14,(%r8)
  movupd %xmm15,(%r9)
  add    $0x10,%rbx
  cmp    %rbp,%rbx
  jne    L54
  jmp    L59
L166:
  mov    $0x10,%esi
  call   <helper_double_21_recursive>
  lea    0x80000(%rbx),%rbp
  mov    $0x10,%esi
  mov    %rbp,%rdi
  call   <helper_double_21_recursive>
  lea    0x100000(%rbx),%rdi
  mov    $0x10,%esi
  call   <helper_double_21_recursive>
  lea    0x180000(%rbx),%rdi
  mov    $0x10,%esi
  call   <helper_double_21_recursive>
  lea    0x200000(%rbx),%rdi
  mov    $0x10,%esi
  call   <helper_double_21_recursive>
  lea    0x280000(%rbx),%rdi
  mov    $0x10,%esi
  call   <helper_double_21_recursive>
  lea    0x300000(%rbx),%rdi
  mov    $0x10,%esi
  call   <helper_double_21_recursive>
  lea    0x380000(%rbx),%rdi
  mov    $0x10,%esi
  call   <helper_double_21_recursive>
L125:
  lea    0x80000(%rbx),%rax
  lea    0x100000(%rbx),%rdx
  lea    0x180000(%rbx),%rcx
  lea    0x200000(%rbx),%rsi
  lea    0x280000(%rbx),%rdi
  lea    0x300000(%rbx),%r8
  lea    0x380000(%rbx),%r9
  movupd (%rbx),%xmm0
  movupd (%rax),%xmm1
  movupd (%rdx),%xmm2
  movupd (%rcx),%xmm3
  movupd (%rsi),%xmm4
  movupd (%rdi),%xmm5
  movupd (%r8),%xmm6
  movupd (%r9),%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,(%rbx)
  movupd %xmm9,(%rax)
  movupd %xmm10,(%rdx)
  movupd %xmm11,(%rcx)
  movupd %xmm12,(%rsi)
  movupd %xmm13,(%rdi)
  movupd %xmm14,(%r8)
  movupd %xmm15,(%r9)
  add    $0x10,%rbx
  cmp    %rbp,%rbx
  jne    L125
  jmp    L59
L129:
  mov    $0x13,%esi
  call   <helper_double_21_recursive>
  lea    0x400000(%rbx),%rbp
  mov    $0x13,%esi
  mov    %rbp,%rdi
  call   <helper_double_21_recursive>
  lea    0x800000(%rbx),%rdi
  mov    $0x13,%esi
  call   <helper_double_21_recursive>
  lea    0xc00000(%rbx),%rdi
  mov    $0x13,%esi
  call   <helper_double_21_recursive>
L115:
  lea    0x400000(%rbx),%rax
  lea    0x800000(%rbx),%rdx
  lea    0xc00000(%rbx),%rcx
  movupd (%rbx),%xmm0
  movupd (%rax),%xmm1
  movupd (%rdx),%xmm2
  movupd (%rcx),%xmm3
  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 %xmm8,%xmm0
  movapd %xmm8,%xmm2
  addpd  %xmm10,%xmm0
  subpd  %xmm10,%xmm2
  movapd %xmm9,%xmm1
  movapd %xmm9,%xmm3
  addpd  %xmm11,%xmm1
  subpd  %xmm11,%xmm3
  movupd %xmm0,(%rbx)
  movupd %xmm1,(%rax)
  movupd %xmm2,(%rdx)
  movupd %xmm3,(%rcx)
  add    $0x10,%rbx
  cmp    %rbp,%rbx
  jne    L115
  jmp    L59
```

assistant: ```c
void helper_double_21_recursive(double *buf, int depth) {
  if (depth == 13) {
    for (int j = 0; j < 8192; j += 16) {
      for (int k = 0; k < 2; 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"
                         "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 %%xmm2, %%xmm8\n"
                         "haddpd %%xmm8, %%xmm8\n"
                         "movapd %%xmm2, %%xmm9\n"
                         "hsubpd %%xmm9, %%xmm9\n"
                         "blendpd $1, %%xmm8, %%xmm9\n"
                         "movapd %%xmm9, %%xmm2\n"
                         "movapd %%xmm3, %%xmm8\n"
                         "haddpd %%xmm8, %%xmm8\n"
                         "movapd %%xmm3, %%xmm9\n"
                         "hsubpd %%xmm9, %%xmm9\n"
                         "blendpd $1, %%xmm8, %%xmm9\n"
                         "movapd %%xmm9, %%xmm3\n"
                         "movapd %%xmm4, %%xmm8\n"
                         "haddpd %%xmm8, %%xmm8\n"
                         "movapd %%xmm4, %%xmm9\n"
                         "hsubpd %%xmm9, %%xmm9\n"
                         "blendpd $1, %%xmm8, %%xmm9\n"
                         "movapd %%xmm9, %%xmm4\n"
                         "movapd %%xmm5, %%xmm8\n"
                         "haddpd %%xmm8, %%xmm8\n"
                         "movapd %%xmm5, %%xmm9\n"
                         "hsubpd %%xmm9, %%xmm9\n"
                         "blendpd $1, %%xmm8, %%xmm9\n"
                         "movapd %%xmm9, %%xmm5\n"
                         "movapd %%xmm6, %%xmm8\n"
                         "haddpd %%xmm8, %%xmm8\n"
                         "movapd %%xmm6, %%xmm9\n"
                         "hsubpd %%xmm9, %%xmm9\n"
                         "blendpd $1, %%xmm8, %%xmm9\n"
                         "movapd %%xmm9, %%xmm6\n"
                         "movapd %%xmm7, %%xmm8\n"
                         "haddpd %%xmm8, %%xmm8\n"
                         "movapd %%xmm7, %%xmm9\n"
                         "hsubpd %%xmm9, %%xmm9\n"
                         "blendpd $1, %%xmm8, %%xmm9\n"
                         "movapd %%xmm9, %%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 + 2), "r"(buf + j + k + 4), "r"(buf + j + k + 6), "r"(buf + j + k + 8), "r"(buf + j + k + 10), "r"(buf + j + k + 12), "r"(buf + j + k + 14)
                         : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7", "%xmm8", "%xmm9", "%xmm10", "%xmm11", "%xmm12", "%xmm13", "%xmm14", "%xmm15", "memory");
      }
    }
    for (int j = 0; j < 8192; j += 128) {
      for (int k = 0; k < 16; 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 + 16), "r"(buf + j + k + 32), "r"(buf + j + k + 48), "r"(buf + j + k + 64), "r"(buf + j + k + 80), "r"(buf + j + k + 96), "r"(buf + j + k + 112)
                         : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7", "%xmm8", "%xmm9", "%xmm10", "%xmm11", "%xmm12", "%xmm13", "%xmm14", "%xmm15", "memory");
      }
    }
    for (int j = 0; j < 8192; j += 1024) {
      for (int k = 0; k < 128; 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 + 128), "r"(buf + j + k + 256), "r"(buf + j + k + 384), "r"(buf + j + k + 512), "r"(buf + j + k + 640), "r"(buf + j + k + 768), "r"(buf + j + k + 896)
                         : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7", "%xmm8", "%xmm9", "%xmm10", "%xmm11", "%xmm12", "%xmm13", "%xmm14", "%xmm15", "memory");
      }
    }
    for (int j = 0; j < 8192; j += 8192) {
      for (int k = 0; k < 1024; 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 + 1024), "r"(buf + j + k + 2048), "r"(buf + j + k + 3072), "r"(buf + j + k + 4096), "r"(buf + j + k + 5120), "r"(buf + j + k + 6144), "r"(buf + j + k + 7168)
                         : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7", "%xmm8", "%xmm9", "%xmm10", "%xmm11", "%xmm12", "%xmm13", "%xmm14", "%xmm15", "memory");
      }
    }
    return;
  }
  if (depth == 16) {
    helper_double_21_recursive(buf + 0, 13);
    helper_double_21_recursive(buf + 8192, 13);
    helper_double_21_recursive(buf + 16384, 13);
    helper_double_21_recursive(buf + 24576, 13);
    helper_double_21_recursive(buf + 32768, 13);
    helper_double_21_recursive(buf + 40960, 13);
    helper_double_21_recursive(buf + 49152, 13);
    helper_double_21_recursive(buf + 57344, 13);
    for (int j = 0; j < 65536; j += 65536) {
      for (int k = 0; k < 8192; 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 + 8192), "r"(buf + j + k + 16384), "r"(buf + j + k + 24576), "r"(buf + j + k + 32768), "r"(buf + j + k + 40960), "r"(buf + j + k + 49152), "r"(buf + j + k + 57344)
                         : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7", "%xmm8", "%xmm9", "%xmm10", "%xmm11", "%xmm12", "%xmm13", "%xmm14", "%xmm15", "memory");
      }
    }
    return;
  }
  if (depth == 19) {
    helper_double_21_recursive(buf + 0, 16);
    helper_double_21_recursive(buf + 65536, 16);
    helper_double_21_recursive(buf + 131072, 16);
    helper_double_21_recursive(buf + 196608, 16);
    helper_double_21_recursive(buf + 262144, 16);
    helper_double_21_recursive(buf + 327680, 16);
    helper_double_21_recursive(buf + 393216, 16);
    helper_double_21_recursive(buf + 458752, 16);
    for (int j = 0; j < 524288; j += 524288) {
      for (int k = 0; k < 65536; 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 + 65536), "r"(buf + j + k + 131072), "r"(buf + j + k + 196608), "r"(buf + j + k + 262144), "r"(buf + j + k + 327680), "r"(buf + j + k + 393216), "r"(buf + j + k + 458752)
                         : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7", "%xmm8", "%xmm9", "%xmm10", "%xmm11", "%xmm12", "%xmm13", "%xmm14", "%xmm15", "memory");
      }
    }
    return;
  }
  if (depth == 21) {
    helper_double_21_recursive(buf + 0, 19);
    helper_double_21_recursive(buf + 524288, 19);
    helper_double_21_recursive(buf + 1048576, 19);
    helper_double_21_recursive(buf + 1572864, 19);
    for (int j = 0; j < 2097152; j += 2097152) {
      for (int k = 0; k < 524288; k += 2) {
        __asm__ volatile("movupd (%0), %%xmm0\n"
                         "movupd (%1), %%xmm1\n"
                         "movupd (%2), %%xmm2\n"
                         "movupd (%3), %%xmm3\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 %%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"
                         "movupd %%xmm0, (%0)\n"
                         "movupd %%xmm1, (%1)\n"
                         "movupd %%xmm2, (%2)\n"
                         "movupd %%xmm3, (%3)\n" ::"r"(buf + j + k + 0),
                         "r"(buf + j + k + 524288), "r"(buf + j + k + 1048576), "r"(buf + j + k + 1572864)
                         : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7", "%xmm8", "%xmm9", "%xmm10", "%xmm11", "%xmm12", "%xmm13", "%xmm14", "%xmm15", "memory");
      }
    }
    return;
  }
}
```