user: What would the C source look like for the assembly code provided here?

```asm
<helper_double_22_recursive>:
  endbr64
  sub    $0xb,%esi
  cmp    $0xb,%esi
  ja     L12
  lea    D1(%rip),%rdx
  push   %r12
  movslq (%rdx,%rsi,4),%rax
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    %rdi,%rdx
  lea    0x4000(%rdi),%rbp
  mov    %rdi,%rax
  nopl   (%rax)
L56:
  lea    0x20(%rax),%rcx
  lea    0x40(%rax),%rsi
  lea    0x60(%rax),%rdi
  lea    0x80(%rax),%r8
  lea    0xa0(%rax),%r9
  lea    0xc0(%rax),%r10
  lea    0xe0(%rax),%r11
  vmovupd (%rax),%ymm0
  vmovupd (%rcx),%ymm1
  vmovupd (%rsi),%ymm2
  vmovupd (%rdi),%ymm3
  vmovupd (%r8),%ymm4
  vmovupd (%r9),%ymm5
  vmovupd (%r10),%ymm6
  vmovupd (%r11),%ymm7
  vpermilpd $0x0,%ymm0,%ymm8
  vpermilpd $0xf,%ymm0,%ymm9
  vxorpd %ymm10,%ymm10,%ymm10
  vsubpd %ymm9,%ymm10,%ymm11
  vaddsubpd %ymm11,%ymm8,%ymm0
  vpermilpd $0x0,%ymm1,%ymm8
  vpermilpd $0xf,%ymm1,%ymm9
  vxorpd %ymm10,%ymm10,%ymm10
  vsubpd %ymm9,%ymm10,%ymm11
  vaddsubpd %ymm11,%ymm8,%ymm1
  vpermilpd $0x0,%ymm2,%ymm8
  vpermilpd $0xf,%ymm2,%ymm9
  vxorpd %ymm10,%ymm10,%ymm10
  vsubpd %ymm9,%ymm10,%ymm11
  vaddsubpd %ymm11,%ymm8,%ymm2
  vpermilpd $0x0,%ymm3,%ymm8
  vpermilpd $0xf,%ymm3,%ymm9
  vxorpd %ymm10,%ymm10,%ymm10
  vsubpd %ymm9,%ymm10,%ymm11
  vaddsubpd %ymm11,%ymm8,%ymm3
  vpermilpd $0x0,%ymm4,%ymm8
  vpermilpd $0xf,%ymm4,%ymm9
  vxorpd %ymm10,%ymm10,%ymm10
  vsubpd %ymm9,%ymm10,%ymm11
  vaddsubpd %ymm11,%ymm8,%ymm4
  vpermilpd $0x0,%ymm5,%ymm8
  vpermilpd $0xf,%ymm5,%ymm9
  vxorpd %ymm10,%ymm10,%ymm10
  vsubpd %ymm9,%ymm10,%ymm11
  vaddsubpd %ymm11,%ymm8,%ymm5
  vpermilpd $0x0,%ymm6,%ymm8
  vpermilpd $0xf,%ymm6,%ymm9
  vxorpd %ymm10,%ymm10,%ymm10
  vsubpd %ymm9,%ymm10,%ymm11
  vaddsubpd %ymm11,%ymm8,%ymm6
  vpermilpd $0x0,%ymm7,%ymm8
  vpermilpd $0xf,%ymm7,%ymm9
  vxorpd %ymm10,%ymm10,%ymm10
  vsubpd %ymm9,%ymm10,%ymm11
  vaddsubpd %ymm11,%ymm8,%ymm7
  vperm2f128 $0x0,%ymm0,%ymm0,%ymm8
  vxorpd %ymm9,%ymm9,%ymm9
  vsubpd %ymm0,%ymm9,%ymm10
  vperm2f128 $0x31,%ymm10,%ymm0,%ymm11
  vaddpd %ymm11,%ymm8,%ymm0
  vperm2f128 $0x0,%ymm1,%ymm1,%ymm8
  vxorpd %ymm9,%ymm9,%ymm9
  vsubpd %ymm1,%ymm9,%ymm10
  vperm2f128 $0x31,%ymm10,%ymm1,%ymm11
  vaddpd %ymm11,%ymm8,%ymm1
  vperm2f128 $0x0,%ymm2,%ymm2,%ymm8
  vxorpd %ymm9,%ymm9,%ymm9
  vsubpd %ymm2,%ymm9,%ymm10
  vperm2f128 $0x31,%ymm10,%ymm2,%ymm11
  vaddpd %ymm11,%ymm8,%ymm2
  vperm2f128 $0x0,%ymm3,%ymm3,%ymm8
  vxorpd %ymm9,%ymm9,%ymm9
  vsubpd %ymm3,%ymm9,%ymm10
  vperm2f128 $0x31,%ymm10,%ymm3,%ymm11
  vaddpd %ymm11,%ymm8,%ymm3
  vperm2f128 $0x0,%ymm4,%ymm4,%ymm8
  vxorpd %ymm9,%ymm9,%ymm9
  vsubpd %ymm4,%ymm9,%ymm10
  vperm2f128 $0x31,%ymm10,%ymm4,%ymm11
  vaddpd %ymm11,%ymm8,%ymm4
  vperm2f128 $0x0,%ymm5,%ymm5,%ymm8
  vxorpd %ymm9,%ymm9,%ymm9
  vsubpd %ymm5,%ymm9,%ymm10
  vperm2f128 $0x31,%ymm10,%ymm5,%ymm11
  vaddpd %ymm11,%ymm8,%ymm5
  vperm2f128 $0x0,%ymm6,%ymm6,%ymm8
  vxorpd %ymm9,%ymm9,%ymm9
  vsubpd %ymm6,%ymm9,%ymm10
  vperm2f128 $0x31,%ymm10,%ymm6,%ymm11
  vaddpd %ymm11,%ymm8,%ymm6
  vperm2f128 $0x0,%ymm7,%ymm7,%ymm8
  vxorpd %ymm9,%ymm9,%ymm9
  vsubpd %ymm7,%ymm9,%ymm10
  vperm2f128 $0x31,%ymm10,%ymm7,%ymm11
  vaddpd %ymm11,%ymm8,%ymm7
  vaddpd %ymm1,%ymm0,%ymm8
  vsubpd %ymm1,%ymm0,%ymm9
  vaddpd %ymm3,%ymm2,%ymm10
  vsubpd %ymm3,%ymm2,%ymm11
  vaddpd %ymm5,%ymm4,%ymm12
  vsubpd %ymm5,%ymm4,%ymm13
  vaddpd %ymm7,%ymm6,%ymm14
  vsubpd %ymm7,%ymm6,%ymm15
  vaddpd %ymm10,%ymm8,%ymm0
  vsubpd %ymm10,%ymm8,%ymm2
  vaddpd %ymm11,%ymm9,%ymm1
  vsubpd %ymm11,%ymm9,%ymm3
  vaddpd %ymm14,%ymm12,%ymm4
  vsubpd %ymm14,%ymm12,%ymm6
  vaddpd %ymm15,%ymm13,%ymm5
  vsubpd %ymm15,%ymm13,%ymm7
  vaddpd %ymm4,%ymm0,%ymm8
  vsubpd %ymm4,%ymm0,%ymm12
  vaddpd %ymm5,%ymm1,%ymm9
  vsubpd %ymm5,%ymm1,%ymm13
  vaddpd %ymm6,%ymm2,%ymm10
  vsubpd %ymm6,%ymm2,%ymm14
  vaddpd %ymm7,%ymm3,%ymm11
  vsubpd %ymm7,%ymm3,%ymm15
  vmovupd %ymm8,(%rax)
  vmovupd %ymm9,(%rcx)
  vmovupd %ymm10,(%rsi)
  vmovupd %ymm11,(%rdi)
  vmovupd %ymm12,(%r8)
  vmovupd %ymm13,(%r9)
  vmovupd %ymm14,(%r10)
  vmovupd %ymm15,(%r11)
  add    $0x100,%rax
  cmp    %rax,%rbp
  jne    L56
  lea    0x100(%rbx),%rbp
  lea    0x4100(%rbx),%r12
  nopl   (%rax)
L50:
  lea    -0x100(%rbp),%rax
  nop
L76:
  lea    0x100(%rax),%rcx
  lea    0x200(%rax),%rsi
  lea    0x300(%rax),%rdi
  lea    0x400(%rax),%r8
  lea    0x500(%rax),%r9
  lea    0x600(%rax),%r10
  lea    0x700(%rax),%r11
  vmovupd (%rax),%ymm0
  vmovupd (%rcx),%ymm1
  vmovupd (%rsi),%ymm2
  vmovupd (%rdi),%ymm3
  vmovupd (%r8),%ymm4
  vmovupd (%r9),%ymm5
  vmovupd (%r10),%ymm6
  vmovupd (%r11),%ymm7
  vaddpd %ymm1,%ymm0,%ymm8
  vsubpd %ymm1,%ymm0,%ymm9
  vaddpd %ymm3,%ymm2,%ymm10
  vsubpd %ymm3,%ymm2,%ymm11
  vaddpd %ymm5,%ymm4,%ymm12
  vsubpd %ymm5,%ymm4,%ymm13
  vaddpd %ymm7,%ymm6,%ymm14
  vsubpd %ymm7,%ymm6,%ymm15
  vaddpd %ymm10,%ymm8,%ymm0
  vsubpd %ymm10,%ymm8,%ymm2
  vaddpd %ymm11,%ymm9,%ymm1
  vsubpd %ymm11,%ymm9,%ymm3
  vaddpd %ymm14,%ymm12,%ymm4
  vsubpd %ymm14,%ymm12,%ymm6
  vaddpd %ymm15,%ymm13,%ymm5
  vsubpd %ymm15,%ymm13,%ymm7
  vaddpd %ymm4,%ymm0,%ymm8
  vsubpd %ymm4,%ymm0,%ymm12
  vaddpd %ymm5,%ymm1,%ymm9
  vsubpd %ymm5,%ymm1,%ymm13
  vaddpd %ymm6,%ymm2,%ymm10
  vsubpd %ymm6,%ymm2,%ymm14
  vaddpd %ymm7,%ymm3,%ymm11
  vsubpd %ymm7,%ymm3,%ymm15
  vmovupd %ymm8,(%rax)
  vmovupd %ymm9,(%rcx)
  vmovupd %ymm10,(%rsi)
  vmovupd %ymm11,(%rdi)
  vmovupd %ymm12,(%r8)
  vmovupd %ymm13,(%r9)
  vmovupd %ymm14,(%r10)
  vmovupd %ymm15,(%r11)
  add    $0x20,%rax
  cmp    %rax,%rbp
  jne    L76
  add    $0x800,%rbp
  cmp    %rbp,%r12
  jne    L50
  lea    0x800(%rbx),%rax
  nopl   (%rax)
L64:
  lea    0x800(%rdx),%rcx
  lea    0x1000(%rdx),%rsi
  lea    0x1800(%rdx),%rdi
  lea    0x2000(%rdx),%r8
  lea    0x2800(%rdx),%r9
  lea    0x3000(%rdx),%r10
  lea    0x3800(%rdx),%r11
  vmovupd (%rdx),%ymm0
  vmovupd (%rcx),%ymm1
  vmovupd (%rsi),%ymm2
  vmovupd (%rdi),%ymm3
  vmovupd (%r8),%ymm4
  vmovupd (%r9),%ymm5
  vmovupd (%r10),%ymm6
  vmovupd (%r11),%ymm7
  vaddpd %ymm1,%ymm0,%ymm8
  vsubpd %ymm1,%ymm0,%ymm9
  vaddpd %ymm3,%ymm2,%ymm10
  vsubpd %ymm3,%ymm2,%ymm11
  vaddpd %ymm5,%ymm4,%ymm12
  vsubpd %ymm5,%ymm4,%ymm13
  vaddpd %ymm7,%ymm6,%ymm14
  vsubpd %ymm7,%ymm6,%ymm15
  vaddpd %ymm10,%ymm8,%ymm0
  vsubpd %ymm10,%ymm8,%ymm2
  vaddpd %ymm11,%ymm9,%ymm1
  vsubpd %ymm11,%ymm9,%ymm3
  vaddpd %ymm14,%ymm12,%ymm4
  vsubpd %ymm14,%ymm12,%ymm6
  vaddpd %ymm15,%ymm13,%ymm5
  vsubpd %ymm15,%ymm13,%ymm7
  vaddpd %ymm4,%ymm0,%ymm8
  vsubpd %ymm4,%ymm0,%ymm12
  vaddpd %ymm5,%ymm1,%ymm9
  vsubpd %ymm5,%ymm1,%ymm13
  vaddpd %ymm6,%ymm2,%ymm10
  vsubpd %ymm6,%ymm2,%ymm14
  vaddpd %ymm7,%ymm3,%ymm11
  vsubpd %ymm7,%ymm3,%ymm15
  vmovupd %ymm8,(%rdx)
  vmovupd %ymm9,(%rcx)
  vmovupd %ymm10,(%rsi)
  vmovupd %ymm11,(%rdi)
  vmovupd %ymm12,(%r8)
  vmovupd %ymm13,(%r9)
  vmovupd %ymm14,(%r10)
  vmovupd %ymm15,(%r11)
  add    $0x20,%rdx
  cmp    %rdx,%rax
  jne    L64
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax,%rax,1)
L12:
  ret
  mov    $0x14,%esi
  lea    0x800000(%rbx),%rbp
  call   <helper_double_22_recursive>
  mov    $0x14,%esi
  mov    %rbp,%rdi
  call   <helper_double_22_recursive>
  lea    0x1000000(%rbx),%rdi
  mov    $0x14,%esi
  call   <helper_double_22_recursive>
  lea    0x1800000(%rbx),%rdi
  mov    $0x14,%esi
  call   <helper_double_22_recursive>
  mov    %rbx,%rax
  nopl   0x0(%rax)
L72:
  lea    0x800000(%rax),%rdx
  lea    0x1000000(%rax),%rcx
  lea    0x1800000(%rax),%rsi
  vmovupd (%rax),%ymm0
  vmovupd (%rdx),%ymm1
  vmovupd (%rcx),%ymm2
  vmovupd (%rsi),%ymm3
  vaddpd %ymm1,%ymm0,%ymm8
  vsubpd %ymm1,%ymm0,%ymm9
  vaddpd %ymm3,%ymm2,%ymm10
  vsubpd %ymm3,%ymm2,%ymm11
  vaddpd %ymm10,%ymm8,%ymm0
  vsubpd %ymm10,%ymm8,%ymm2
  vaddpd %ymm11,%ymm9,%ymm1
  vsubpd %ymm11,%ymm9,%ymm3
  vmovupd %ymm0,(%rax)
  vmovupd %ymm1,(%rdx)
  vmovupd %ymm2,(%rcx)
  vmovupd %ymm3,(%rsi)
  add    $0x20,%rax
  cmp    %rax,%rbp
  jne    L72
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  mov    $0xb,%esi
  lea    0x4000(%rbx),%rbp
  call   <helper_double_22_recursive>
  mov    $0xb,%esi
  mov    %rbp,%rdi
  call   <helper_double_22_recursive>
  lea    0x8000(%rbx),%rdi
  mov    $0xb,%esi
  call   <helper_double_22_recursive>
  lea    0xc000(%rbx),%rdi
  mov    $0xb,%esi
  call   <helper_double_22_recursive>
  lea    0x10000(%rbx),%rdi
  mov    $0xb,%esi
  call   <helper_double_22_recursive>
  lea    0x14000(%rbx),%rdi
  mov    $0xb,%esi
  call   <helper_double_22_recursive>
  lea    0x18000(%rbx),%rdi
  mov    $0xb,%esi
  call   <helper_double_22_recursive>
  lea    0x1c000(%rbx),%rdi
  mov    $0xb,%esi
  call   <helper_double_22_recursive>
  mov    %rbx,%rax
  cs nopw 0x0(%rax,%rax,1)
L66:
  lea    0x4000(%rax),%rdx
  lea    0x8000(%rax),%rcx
  lea    0xc000(%rax),%rsi
  lea    0x10000(%rax),%rdi
  lea    0x14000(%rax),%r8
  lea    0x18000(%rax),%r9
  lea    0x1c000(%rax),%r10
  vmovupd (%rax),%ymm0
  vmovupd (%rdx),%ymm1
  vmovupd (%rcx),%ymm2
  vmovupd (%rsi),%ymm3
  vmovupd (%rdi),%ymm4
  vmovupd (%r8),%ymm5
  vmovupd (%r9),%ymm6
  vmovupd (%r10),%ymm7
  vaddpd %ymm1,%ymm0,%ymm8
  vsubpd %ymm1,%ymm0,%ymm9
  vaddpd %ymm3,%ymm2,%ymm10
  vsubpd %ymm3,%ymm2,%ymm11
  vaddpd %ymm5,%ymm4,%ymm12
  vsubpd %ymm5,%ymm4,%ymm13
  vaddpd %ymm7,%ymm6,%ymm14
  vsubpd %ymm7,%ymm6,%ymm15
  vaddpd %ymm10,%ymm8,%ymm0
  vsubpd %ymm10,%ymm8,%ymm2
  vaddpd %ymm11,%ymm9,%ymm1
  vsubpd %ymm11,%ymm9,%ymm3
  vaddpd %ymm14,%ymm12,%ymm4
  vsubpd %ymm14,%ymm12,%ymm6
  vaddpd %ymm15,%ymm13,%ymm5
  vsubpd %ymm15,%ymm13,%ymm7
  vaddpd %ymm4,%ymm0,%ymm8
  vsubpd %ymm4,%ymm0,%ymm12
  vaddpd %ymm5,%ymm1,%ymm9
  vsubpd %ymm5,%ymm1,%ymm13
  vaddpd %ymm6,%ymm2,%ymm10
  vsubpd %ymm6,%ymm2,%ymm14
  vaddpd %ymm7,%ymm3,%ymm11
  vsubpd %ymm7,%ymm3,%ymm15
  vmovupd %ymm8,(%rax)
  vmovupd %ymm9,(%rdx)
  vmovupd %ymm10,(%rcx)
  vmovupd %ymm11,(%rsi)
  vmovupd %ymm12,(%rdi)
  vmovupd %ymm13,(%r8)
  vmovupd %ymm14,(%r9)
  vmovupd %ymm15,(%r10)
  add    $0x20,%rax
  cmp    %rax,%rbp
  jne    L66
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  mov    $0xe,%esi
  lea    0x20000(%rbx),%rbp
  call   <helper_double_22_recursive>
  mov    $0xe,%esi
  mov    %rbp,%rdi
  call   <helper_double_22_recursive>
  lea    0x40000(%rbx),%rdi
  mov    $0xe,%esi
  call   <helper_double_22_recursive>
  lea    0x60000(%rbx),%rdi
  mov    $0xe,%esi
  call   <helper_double_22_recursive>
  lea    0x80000(%rbx),%rdi
  mov    $0xe,%esi
  call   <helper_double_22_recursive>
  lea    0xa0000(%rbx),%rdi
  mov    $0xe,%esi
  call   <helper_double_22_recursive>
  lea    0xc0000(%rbx),%rdi
  mov    $0xe,%esi
  call   <helper_double_22_recursive>
  lea    0xe0000(%rbx),%rdi
  mov    $0xe,%esi
  call   <helper_double_22_recursive>
  mov    %rbx,%rax
  nopl   0x0(%rax,%rax,1)
L32:
  lea    0x20000(%rax),%rdx
  lea    0x40000(%rax),%rcx
  lea    0x60000(%rax),%rsi
  lea    0x80000(%rax),%rdi
  lea    0xa0000(%rax),%r8
  lea    0xc0000(%rax),%r9
  lea    0xe0000(%rax),%r10
  vmovupd (%rax),%ymm0
  vmovupd (%rdx),%ymm1
  vmovupd (%rcx),%ymm2
  vmovupd (%rsi),%ymm3
  vmovupd (%rdi),%ymm4
  vmovupd (%r8),%ymm5
  vmovupd (%r9),%ymm6
  vmovupd (%r10),%ymm7
  vaddpd %ymm1,%ymm0,%ymm8
  vsubpd %ymm1,%ymm0,%ymm9
  vaddpd %ymm3,%ymm2,%ymm10
  vsubpd %ymm3,%ymm2,%ymm11
  vaddpd %ymm5,%ymm4,%ymm12
  vsubpd %ymm5,%ymm4,%ymm13
  vaddpd %ymm7,%ymm6,%ymm14
  vsubpd %ymm7,%ymm6,%ymm15
  vaddpd %ymm10,%ymm8,%ymm0
  vsubpd %ymm10,%ymm8,%ymm2
  vaddpd %ymm11,%ymm9,%ymm1
  vsubpd %ymm11,%ymm9,%ymm3
  vaddpd %ymm14,%ymm12,%ymm4
  vsubpd %ymm14,%ymm12,%ymm6
  vaddpd %ymm15,%ymm13,%ymm5
  vsubpd %ymm15,%ymm13,%ymm7
  vaddpd %ymm4,%ymm0,%ymm8
  vsubpd %ymm4,%ymm0,%ymm12
  vaddpd %ymm5,%ymm1,%ymm9
  vsubpd %ymm5,%ymm1,%ymm13
  vaddpd %ymm6,%ymm2,%ymm10
  vsubpd %ymm6,%ymm2,%ymm14
  vaddpd %ymm7,%ymm3,%ymm11
  vsubpd %ymm7,%ymm3,%ymm15
  vmovupd %ymm8,(%rax)
  vmovupd %ymm9,(%rdx)
  vmovupd %ymm10,(%rcx)
  vmovupd %ymm11,(%rsi)
  vmovupd %ymm12,(%rdi)
  vmovupd %ymm13,(%r8)
  vmovupd %ymm14,(%r9)
  vmovupd %ymm15,(%r10)
  add    $0x20,%rax
  cmp    %rax,%rbp
  jne    L32
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  mov    $0x11,%esi
  lea    0x100000(%rbx),%rbp
  call   <helper_double_22_recursive>
  mov    $0x11,%esi
  mov    %rbp,%rdi
  call   <helper_double_22_recursive>
  lea    0x200000(%rbx),%rdi
  mov    $0x11,%esi
  call   <helper_double_22_recursive>
  lea    0x300000(%rbx),%rdi
  mov    $0x11,%esi
  call   <helper_double_22_recursive>
  lea    0x400000(%rbx),%rdi
  mov    $0x11,%esi
  call   <helper_double_22_recursive>
  lea    0x500000(%rbx),%rdi
  mov    $0x11,%esi
  call   <helper_double_22_recursive>
  lea    0x600000(%rbx),%rdi
  mov    $0x11,%esi
  call   <helper_double_22_recursive>
  lea    0x700000(%rbx),%rdi
  mov    $0x11,%esi
  call   <helper_double_22_recursive>
  mov    %rbx,%rax
  nopl   0x0(%rax,%rax,1)
L55:
  lea    0x100000(%rax),%rdx
  lea    0x200000(%rax),%rcx
  lea    0x300000(%rax),%rsi
  lea    0x400000(%rax),%rdi
  lea    0x500000(%rax),%r8
  lea    0x600000(%rax),%r9
  lea    0x700000(%rax),%r10
  vmovupd (%rax),%ymm0
  vmovupd (%rdx),%ymm1
  vmovupd (%rcx),%ymm2
  vmovupd (%rsi),%ymm3
  vmovupd (%rdi),%ymm4
  vmovupd (%r8),%ymm5
  vmovupd (%r9),%ymm6
  vmovupd (%r10),%ymm7
  vaddpd %ymm1,%ymm0,%ymm8
  vsubpd %ymm1,%ymm0,%ymm9
  vaddpd %ymm3,%ymm2,%ymm10
  vsubpd %ymm3,%ymm2,%ymm11
  vaddpd %ymm5,%ymm4,%ymm12
  vsubpd %ymm5,%ymm4,%ymm13
  vaddpd %ymm7,%ymm6,%ymm14
  vsubpd %ymm7,%ymm6,%ymm15
  vaddpd %ymm10,%ymm8,%ymm0
  vsubpd %ymm10,%ymm8,%ymm2
  vaddpd %ymm11,%ymm9,%ymm1
  vsubpd %ymm11,%ymm9,%ymm3
  vaddpd %ymm14,%ymm12,%ymm4
  vsubpd %ymm14,%ymm12,%ymm6
  vaddpd %ymm15,%ymm13,%ymm5
  vsubpd %ymm15,%ymm13,%ymm7
  vaddpd %ymm4,%ymm0,%ymm8
  vsubpd %ymm4,%ymm0,%ymm12
  vaddpd %ymm5,%ymm1,%ymm9
  vsubpd %ymm5,%ymm1,%ymm13
  vaddpd %ymm6,%ymm2,%ymm10
  vsubpd %ymm6,%ymm2,%ymm14
  vaddpd %ymm7,%ymm3,%ymm11
  vsubpd %ymm7,%ymm3,%ymm15
  vmovupd %ymm8,(%rax)
  vmovupd %ymm9,(%rdx)
  vmovupd %ymm10,(%rcx)
  vmovupd %ymm11,(%rsi)
  vmovupd %ymm12,(%rdi)
  vmovupd %ymm13,(%r8)
  vmovupd %ymm14,(%r9)
  vmovupd %ymm15,(%r10)
  add    $0x20,%rax
  cmp    %rax,%rbp
  jne    L55
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
```

assistant: ```c
void helper_double_22_recursive(double *buf, int depth) {
  if (depth == 11) {
    for (int j = 0; j < 2048; j += 32) {
      for (int k = 0; k < 4; k += 4) {
        __asm__ volatile("vmovupd (%0), %%ymm0\n"
                         "vmovupd (%1), %%ymm1\n"
                         "vmovupd (%2), %%ymm2\n"
                         "vmovupd (%3), %%ymm3\n"
                         "vmovupd (%4), %%ymm4\n"
                         "vmovupd (%5), %%ymm5\n"
                         "vmovupd (%6), %%ymm6\n"
                         "vmovupd (%7), %%ymm7\n"
                         "vpermilpd $0, %%ymm0, %%ymm8\n"
                         "vpermilpd $15, %%ymm0, %%ymm9\n"
                         "vxorpd %%ymm10, %%ymm10, %%ymm10\n"
                         "vsubpd %%ymm9, %%ymm10, %%ymm11\n"
                         "vaddsubpd %%ymm11, %%ymm8, %%ymm0\n"
                         "vpermilpd $0, %%ymm1, %%ymm8\n"
                         "vpermilpd $15, %%ymm1, %%ymm9\n"
                         "vxorpd %%ymm10, %%ymm10, %%ymm10\n"
                         "vsubpd %%ymm9, %%ymm10, %%ymm11\n"
                         "vaddsubpd %%ymm11, %%ymm8, %%ymm1\n"
                         "vpermilpd $0, %%ymm2, %%ymm8\n"
                         "vpermilpd $15, %%ymm2, %%ymm9\n"
                         "vxorpd %%ymm10, %%ymm10, %%ymm10\n"
                         "vsubpd %%ymm9, %%ymm10, %%ymm11\n"
                         "vaddsubpd %%ymm11, %%ymm8, %%ymm2\n"
                         "vpermilpd $0, %%ymm3, %%ymm8\n"
                         "vpermilpd $15, %%ymm3, %%ymm9\n"
                         "vxorpd %%ymm10, %%ymm10, %%ymm10\n"
                         "vsubpd %%ymm9, %%ymm10, %%ymm11\n"
                         "vaddsubpd %%ymm11, %%ymm8, %%ymm3\n"
                         "vpermilpd $0, %%ymm4, %%ymm8\n"
                         "vpermilpd $15, %%ymm4, %%ymm9\n"
                         "vxorpd %%ymm10, %%ymm10, %%ymm10\n"
                         "vsubpd %%ymm9, %%ymm10, %%ymm11\n"
                         "vaddsubpd %%ymm11, %%ymm8, %%ymm4\n"
                         "vpermilpd $0, %%ymm5, %%ymm8\n"
                         "vpermilpd $15, %%ymm5, %%ymm9\n"
                         "vxorpd %%ymm10, %%ymm10, %%ymm10\n"
                         "vsubpd %%ymm9, %%ymm10, %%ymm11\n"
                         "vaddsubpd %%ymm11, %%ymm8, %%ymm5\n"
                         "vpermilpd $0, %%ymm6, %%ymm8\n"
                         "vpermilpd $15, %%ymm6, %%ymm9\n"
                         "vxorpd %%ymm10, %%ymm10, %%ymm10\n"
                         "vsubpd %%ymm9, %%ymm10, %%ymm11\n"
                         "vaddsubpd %%ymm11, %%ymm8, %%ymm6\n"
                         "vpermilpd $0, %%ymm7, %%ymm8\n"
                         "vpermilpd $15, %%ymm7, %%ymm9\n"
                         "vxorpd %%ymm10, %%ymm10, %%ymm10\n"
                         "vsubpd %%ymm9, %%ymm10, %%ymm11\n"
                         "vaddsubpd %%ymm11, %%ymm8, %%ymm7\n"
                         "vperm2f128 $0, %%ymm0, %%ymm0, %%ymm8\n"
                         "vxorpd %%ymm9, %%ymm9, %%ymm9\n"
                         "vsubpd %%ymm0, %%ymm9, %%ymm10\n"
                         "vperm2f128 $49, %%ymm10, %%ymm0, %%ymm11\n"
                         "vaddpd %%ymm11, %%ymm8, %%ymm0\n"
                         "vperm2f128 $0, %%ymm1, %%ymm1, %%ymm8\n"
                         "vxorpd %%ymm9, %%ymm9, %%ymm9\n"
                         "vsubpd %%ymm1, %%ymm9, %%ymm10\n"
                         "vperm2f128 $49, %%ymm10, %%ymm1, %%ymm11\n"
                         "vaddpd %%ymm11, %%ymm8, %%ymm1\n"
                         "vperm2f128 $0, %%ymm2, %%ymm2, %%ymm8\n"
                         "vxorpd %%ymm9, %%ymm9, %%ymm9\n"
                         "vsubpd %%ymm2, %%ymm9, %%ymm10\n"
                         "vperm2f128 $49, %%ymm10, %%ymm2, %%ymm11\n"
                         "vaddpd %%ymm11, %%ymm8, %%ymm2\n"
                         "vperm2f128 $0, %%ymm3, %%ymm3, %%ymm8\n"
                         "vxorpd %%ymm9, %%ymm9, %%ymm9\n"
                         "vsubpd %%ymm3, %%ymm9, %%ymm10\n"
                         "vperm2f128 $49, %%ymm10, %%ymm3, %%ymm11\n"
                         "vaddpd %%ymm11, %%ymm8, %%ymm3\n"
                         "vperm2f128 $0, %%ymm4, %%ymm4, %%ymm8\n"
                         "vxorpd %%ymm9, %%ymm9, %%ymm9\n"
                         "vsubpd %%ymm4, %%ymm9, %%ymm10\n"
                         "vperm2f128 $49, %%ymm10, %%ymm4, %%ymm11\n"
                         "vaddpd %%ymm11, %%ymm8, %%ymm4\n"
                         "vperm2f128 $0, %%ymm5, %%ymm5, %%ymm8\n"
                         "vxorpd %%ymm9, %%ymm9, %%ymm9\n"
                         "vsubpd %%ymm5, %%ymm9, %%ymm10\n"
                         "vperm2f128 $49, %%ymm10, %%ymm5, %%ymm11\n"
                         "vaddpd %%ymm11, %%ymm8, %%ymm5\n"
                         "vperm2f128 $0, %%ymm6, %%ymm6, %%ymm8\n"
                         "vxorpd %%ymm9, %%ymm9, %%ymm9\n"
                         "vsubpd %%ymm6, %%ymm9, %%ymm10\n"
                         "vperm2f128 $49, %%ymm10, %%ymm6, %%ymm11\n"
                         "vaddpd %%ymm11, %%ymm8, %%ymm6\n"
                         "vperm2f128 $0, %%ymm7, %%ymm7, %%ymm8\n"
                         "vxorpd %%ymm9, %%ymm9, %%ymm9\n"
                         "vsubpd %%ymm7, %%ymm9, %%ymm10\n"
                         "vperm2f128 $49, %%ymm10, %%ymm7, %%ymm11\n"
                         "vaddpd %%ymm11, %%ymm8, %%ymm7\n"
                         "vaddpd %%ymm1, %%ymm0, %%ymm8\n"
                         "vsubpd %%ymm1, %%ymm0, %%ymm9\n"
                         "vaddpd %%ymm3, %%ymm2, %%ymm10\n"
                         "vsubpd %%ymm3, %%ymm2, %%ymm11\n"
                         "vaddpd %%ymm5, %%ymm4, %%ymm12\n"
                         "vsubpd %%ymm5, %%ymm4, %%ymm13\n"
                         "vaddpd %%ymm7, %%ymm6, %%ymm14\n"
                         "vsubpd %%ymm7, %%ymm6, %%ymm15\n"
                         "vaddpd %%ymm10, %%ymm8, %%ymm0\n"
                         "vsubpd %%ymm10, %%ymm8, %%ymm2\n"
                         "vaddpd %%ymm11, %%ymm9, %%ymm1\n"
                         "vsubpd %%ymm11, %%ymm9, %%ymm3\n"
                         "vaddpd %%ymm14, %%ymm12, %%ymm4\n"
                         "vsubpd %%ymm14, %%ymm12, %%ymm6\n"
                         "vaddpd %%ymm15, %%ymm13, %%ymm5\n"
                         "vsubpd %%ymm15, %%ymm13, %%ymm7\n"
                         "vaddpd %%ymm4, %%ymm0, %%ymm8\n"
                         "vsubpd %%ymm4, %%ymm0, %%ymm12\n"
                         "vaddpd %%ymm5, %%ymm1, %%ymm9\n"
                         "vsubpd %%ymm5, %%ymm1, %%ymm13\n"
                         "vaddpd %%ymm6, %%ymm2, %%ymm10\n"
                         "vsubpd %%ymm6, %%ymm2, %%ymm14\n"
                         "vaddpd %%ymm7, %%ymm3, %%ymm11\n"
                         "vsubpd %%ymm7, %%ymm3, %%ymm15\n"
                         "vmovupd %%ymm8, (%0)\n"
                         "vmovupd %%ymm9, (%1)\n"
                         "vmovupd %%ymm10, (%2)\n"
                         "vmovupd %%ymm11, (%3)\n"
                         "vmovupd %%ymm12, (%4)\n"
                         "vmovupd %%ymm13, (%5)\n"
                         "vmovupd %%ymm14, (%6)\n"
                         "vmovupd %%ymm15, (%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)
                         : "%ymm0", "%ymm1", "%ymm2", "%ymm3", "%ymm4", "%ymm5", "%ymm6", "%ymm7", "%ymm8", "%ymm9", "%ymm10", "%ymm11", "%ymm12", "%ymm13", "%ymm14", "%ymm15", "memory");
      }
    }
    for (int j = 0; j < 2048; j += 256) {
      for (int k = 0; k < 32; k += 4) {
        __asm__ volatile("vmovupd (%0), %%ymm0\n"
                         "vmovupd (%1), %%ymm1\n"
                         "vmovupd (%2), %%ymm2\n"
                         "vmovupd (%3), %%ymm3\n"
                         "vmovupd (%4), %%ymm4\n"
                         "vmovupd (%5), %%ymm5\n"
                         "vmovupd (%6), %%ymm6\n"
                         "vmovupd (%7), %%ymm7\n"
                         "vaddpd %%ymm1, %%ymm0, %%ymm8\n"
                         "vsubpd %%ymm1, %%ymm0, %%ymm9\n"
                         "vaddpd %%ymm3, %%ymm2, %%ymm10\n"
                         "vsubpd %%ymm3, %%ymm2, %%ymm11\n"
                         "vaddpd %%ymm5, %%ymm4, %%ymm12\n"
                         "vsubpd %%ymm5, %%ymm4, %%ymm13\n"
                         "vaddpd %%ymm7, %%ymm6, %%ymm14\n"
                         "vsubpd %%ymm7, %%ymm6, %%ymm15\n"
                         "vaddpd %%ymm10, %%ymm8, %%ymm0\n"
                         "vsubpd %%ymm10, %%ymm8, %%ymm2\n"
                         "vaddpd %%ymm11, %%ymm9, %%ymm1\n"
                         "vsubpd %%ymm11, %%ymm9, %%ymm3\n"
                         "vaddpd %%ymm14, %%ymm12, %%ymm4\n"
                         "vsubpd %%ymm14, %%ymm12, %%ymm6\n"
                         "vaddpd %%ymm15, %%ymm13, %%ymm5\n"
                         "vsubpd %%ymm15, %%ymm13, %%ymm7\n"
                         "vaddpd %%ymm4, %%ymm0, %%ymm8\n"
                         "vsubpd %%ymm4, %%ymm0, %%ymm12\n"
                         "vaddpd %%ymm5, %%ymm1, %%ymm9\n"
                         "vsubpd %%ymm5, %%ymm1, %%ymm13\n"
                         "vaddpd %%ymm6, %%ymm2, %%ymm10\n"
                         "vsubpd %%ymm6, %%ymm2, %%ymm14\n"
                         "vaddpd %%ymm7, %%ymm3, %%ymm11\n"
                         "vsubpd %%ymm7, %%ymm3, %%ymm15\n"
                         "vmovupd %%ymm8, (%0)\n"
                         "vmovupd %%ymm9, (%1)\n"
                         "vmovupd %%ymm10, (%2)\n"
                         "vmovupd %%ymm11, (%3)\n"
                         "vmovupd %%ymm12, (%4)\n"
                         "vmovupd %%ymm13, (%5)\n"
                         "vmovupd %%ymm14, (%6)\n"
                         "vmovupd %%ymm15, (%7)\n" ::"r"(buf + j + k + 0),
                         "r"(buf + j + k + 32), "r"(buf + j + k + 64), "r"(buf + j + k + 96), "r"(buf + j + k + 128), "r"(buf + j + k + 160), "r"(buf + j + k + 192), "r"(buf + j + k + 224)
                         : "%ymm0", "%ymm1", "%ymm2", "%ymm3", "%ymm4", "%ymm5", "%ymm6", "%ymm7", "%ymm8", "%ymm9", "%ymm10", "%ymm11", "%ymm12", "%ymm13", "%ymm14", "%ymm15", "memory");
      }
    }
    for (int j = 0; j < 2048; j += 2048) {
      for (int k = 0; k < 256; k += 4) {
        __asm__ volatile("vmovupd (%0), %%ymm0\n"
                         "vmovupd (%1), %%ymm1\n"
                         "vmovupd (%2), %%ymm2\n"
                         "vmovupd (%3), %%ymm3\n"
                         "vmovupd (%4), %%ymm4\n"
                         "vmovupd (%5), %%ymm5\n"
                         "vmovupd (%6), %%ymm6\n"
                         "vmovupd (%7), %%ymm7\n"
                         "vaddpd %%ymm1, %%ymm0, %%ymm8\n"
                         "vsubpd %%ymm1, %%ymm0, %%ymm9\n"
                         "vaddpd %%ymm3, %%ymm2, %%ymm10\n"
                         "vsubpd %%ymm3, %%ymm2, %%ymm11\n"
                         "vaddpd %%ymm5, %%ymm4, %%ymm12\n"
                         "vsubpd %%ymm5, %%ymm4, %%ymm13\n"
                         "vaddpd %%ymm7, %%ymm6, %%ymm14\n"
                         "vsubpd %%ymm7, %%ymm6, %%ymm15\n"
                         "vaddpd %%ymm10, %%ymm8, %%ymm0\n"
                         "vsubpd %%ymm10, %%ymm8, %%ymm2\n"
                         "vaddpd %%ymm11, %%ymm9, %%ymm1\n"
                         "vsubpd %%ymm11, %%ymm9, %%ymm3\n"
                         "vaddpd %%ymm14, %%ymm12, %%ymm4\n"
                         "vsubpd %%ymm14, %%ymm12, %%ymm6\n"
                         "vaddpd %%ymm15, %%ymm13, %%ymm5\n"
                         "vsubpd %%ymm15, %%ymm13, %%ymm7\n"
                         "vaddpd %%ymm4, %%ymm0, %%ymm8\n"
                         "vsubpd %%ymm4, %%ymm0, %%ymm12\n"
                         "vaddpd %%ymm5, %%ymm1, %%ymm9\n"
                         "vsubpd %%ymm5, %%ymm1, %%ymm13\n"
                         "vaddpd %%ymm6, %%ymm2, %%ymm10\n"
                         "vsubpd %%ymm6, %%ymm2, %%ymm14\n"
                         "vaddpd %%ymm7, %%ymm3, %%ymm11\n"
                         "vsubpd %%ymm7, %%ymm3, %%ymm15\n"
                         "vmovupd %%ymm8, (%0)\n"
                         "vmovupd %%ymm9, (%1)\n"
                         "vmovupd %%ymm10, (%2)\n"
                         "vmovupd %%ymm11, (%3)\n"
                         "vmovupd %%ymm12, (%4)\n"
                         "vmovupd %%ymm13, (%5)\n"
                         "vmovupd %%ymm14, (%6)\n"
                         "vmovupd %%ymm15, (%7)\n" ::"r"(buf + j + k + 0),
                         "r"(buf + j + k + 256), "r"(buf + j + k + 512), "r"(buf + j + k + 768), "r"(buf + j + k + 1024), "r"(buf + j + k + 1280), "r"(buf + j + k + 1536), "r"(buf + j + k + 1792)
                         : "%ymm0", "%ymm1", "%ymm2", "%ymm3", "%ymm4", "%ymm5", "%ymm6", "%ymm7", "%ymm8", "%ymm9", "%ymm10", "%ymm11", "%ymm12", "%ymm13", "%ymm14", "%ymm15", "memory");
      }
    }
    return;
  }
  if (depth == 14) {
    helper_double_22_recursive(buf + 0, 11);
    helper_double_22_recursive(buf + 2048, 11);
    helper_double_22_recursive(buf + 4096, 11);
    helper_double_22_recursive(buf + 6144, 11);
    helper_double_22_recursive(buf + 8192, 11);
    helper_double_22_recursive(buf + 10240, 11);
    helper_double_22_recursive(buf + 12288, 11);
    helper_double_22_recursive(buf + 14336, 11);
    for (int j = 0; j < 16384; j += 16384) {
      for (int k = 0; k < 2048; k += 4) {
        __asm__ volatile("vmovupd (%0), %%ymm0\n"
                         "vmovupd (%1), %%ymm1\n"
                         "vmovupd (%2), %%ymm2\n"
                         "vmovupd (%3), %%ymm3\n"
                         "vmovupd (%4), %%ymm4\n"
                         "vmovupd (%5), %%ymm5\n"
                         "vmovupd (%6), %%ymm6\n"
                         "vmovupd (%7), %%ymm7\n"
                         "vaddpd %%ymm1, %%ymm0, %%ymm8\n"
                         "vsubpd %%ymm1, %%ymm0, %%ymm9\n"
                         "vaddpd %%ymm3, %%ymm2, %%ymm10\n"
                         "vsubpd %%ymm3, %%ymm2, %%ymm11\n"
                         "vaddpd %%ymm5, %%ymm4, %%ymm12\n"
                         "vsubpd %%ymm5, %%ymm4, %%ymm13\n"
                         "vaddpd %%ymm7, %%ymm6, %%ymm14\n"
                         "vsubpd %%ymm7, %%ymm6, %%ymm15\n"
                         "vaddpd %%ymm10, %%ymm8, %%ymm0\n"
                         "vsubpd %%ymm10, %%ymm8, %%ymm2\n"
                         "vaddpd %%ymm11, %%ymm9, %%ymm1\n"
                         "vsubpd %%ymm11, %%ymm9, %%ymm3\n"
                         "vaddpd %%ymm14, %%ymm12, %%ymm4\n"
                         "vsubpd %%ymm14, %%ymm12, %%ymm6\n"
                         "vaddpd %%ymm15, %%ymm13, %%ymm5\n"
                         "vsubpd %%ymm15, %%ymm13, %%ymm7\n"
                         "vaddpd %%ymm4, %%ymm0, %%ymm8\n"
                         "vsubpd %%ymm4, %%ymm0, %%ymm12\n"
                         "vaddpd %%ymm5, %%ymm1, %%ymm9\n"
                         "vsubpd %%ymm5, %%ymm1, %%ymm13\n"
                         "vaddpd %%ymm6, %%ymm2, %%ymm10\n"
                         "vsubpd %%ymm6, %%ymm2, %%ymm14\n"
                         "vaddpd %%ymm7, %%ymm3, %%ymm11\n"
                         "vsubpd %%ymm7, %%ymm3, %%ymm15\n"
                         "vmovupd %%ymm8, (%0)\n"
                         "vmovupd %%ymm9, (%1)\n"
                         "vmovupd %%ymm10, (%2)\n"
                         "vmovupd %%ymm11, (%3)\n"
                         "vmovupd %%ymm12, (%4)\n"
                         "vmovupd %%ymm13, (%5)\n"
                         "vmovupd %%ymm14, (%6)\n"
                         "vmovupd %%ymm15, (%7)\n" ::"r"(buf + j + k + 0),
                         "r"(buf + j + k + 2048), "r"(buf + j + k + 4096), "r"(buf + j + k + 6144), "r"(buf + j + k + 8192), "r"(buf + j + k + 10240), "r"(buf + j + k + 12288), "r"(buf + j + k + 14336)
                         : "%ymm0", "%ymm1", "%ymm2", "%ymm3", "%ymm4", "%ymm5", "%ymm6", "%ymm7", "%ymm8", "%ymm9", "%ymm10", "%ymm11", "%ymm12", "%ymm13", "%ymm14", "%ymm15", "memory");
      }
    }
    return;
  }
  if (depth == 17) {
    helper_double_22_recursive(buf + 0, 14);
    helper_double_22_recursive(buf + 16384, 14);
    helper_double_22_recursive(buf + 32768, 14);
    helper_double_22_recursive(buf + 49152, 14);
    helper_double_22_recursive(buf + 65536, 14);
    helper_double_22_recursive(buf + 81920, 14);
    helper_double_22_recursive(buf + 98304, 14);
    helper_double_22_recursive(buf + 114688, 14);
    for (int j = 0; j < 131072; j += 131072) {
      for (int k = 0; k < 16384; k += 4) {
        __asm__ volatile("vmovupd (%0), %%ymm0\n"
                         "vmovupd (%1), %%ymm1\n"
                         "vmovupd (%2), %%ymm2\n"
                         "vmovupd (%3), %%ymm3\n"
                         "vmovupd (%4), %%ymm4\n"
                         "vmovupd (%5), %%ymm5\n"
                         "vmovupd (%6), %%ymm6\n"
                         "vmovupd (%7), %%ymm7\n"
                         "vaddpd %%ymm1, %%ymm0, %%ymm8\n"
                         "vsubpd %%ymm1, %%ymm0, %%ymm9\n"
                         "vaddpd %%ymm3, %%ymm2, %%ymm10\n"
                         "vsubpd %%ymm3, %%ymm2, %%ymm11\n"
                         "vaddpd %%ymm5, %%ymm4, %%ymm12\n"
                         "vsubpd %%ymm5, %%ymm4, %%ymm13\n"
                         "vaddpd %%ymm7, %%ymm6, %%ymm14\n"
                         "vsubpd %%ymm7, %%ymm6, %%ymm15\n"
                         "vaddpd %%ymm10, %%ymm8, %%ymm0\n"
                         "vsubpd %%ymm10, %%ymm8, %%ymm2\n"
                         "vaddpd %%ymm11, %%ymm9, %%ymm1\n"
                         "vsubpd %%ymm11, %%ymm9, %%ymm3\n"
                         "vaddpd %%ymm14, %%ymm12, %%ymm4\n"
                         "vsubpd %%ymm14, %%ymm12, %%ymm6\n"
                         "vaddpd %%ymm15, %%ymm13, %%ymm5\n"
                         "vsubpd %%ymm15, %%ymm13, %%ymm7\n"
                         "vaddpd %%ymm4, %%ymm0, %%ymm8\n"
                         "vsubpd %%ymm4, %%ymm0, %%ymm12\n"
                         "vaddpd %%ymm5, %%ymm1, %%ymm9\n"
                         "vsubpd %%ymm5, %%ymm1, %%ymm13\n"
                         "vaddpd %%ymm6, %%ymm2, %%ymm10\n"
                         "vsubpd %%ymm6, %%ymm2, %%ymm14\n"
                         "vaddpd %%ymm7, %%ymm3, %%ymm11\n"
                         "vsubpd %%ymm7, %%ymm3, %%ymm15\n"
                         "vmovupd %%ymm8, (%0)\n"
                         "vmovupd %%ymm9, (%1)\n"
                         "vmovupd %%ymm10, (%2)\n"
                         "vmovupd %%ymm11, (%3)\n"
                         "vmovupd %%ymm12, (%4)\n"
                         "vmovupd %%ymm13, (%5)\n"
                         "vmovupd %%ymm14, (%6)\n"
                         "vmovupd %%ymm15, (%7)\n" ::"r"(buf + j + k + 0),
                         "r"(buf + j + k + 16384), "r"(buf + j + k + 32768), "r"(buf + j + k + 49152), "r"(buf + j + k + 65536), "r"(buf + j + k + 81920), "r"(buf + j + k + 98304), "r"(buf + j + k + 114688)
                         : "%ymm0", "%ymm1", "%ymm2", "%ymm3", "%ymm4", "%ymm5", "%ymm6", "%ymm7", "%ymm8", "%ymm9", "%ymm10", "%ymm11", "%ymm12", "%ymm13", "%ymm14", "%ymm15", "memory");
      }
    }
    return;
  }
  if (depth == 20) {
    helper_double_22_recursive(buf + 0, 17);
    helper_double_22_recursive(buf + 131072, 17);
    helper_double_22_recursive(buf + 262144, 17);
    helper_double_22_recursive(buf + 393216, 17);
    helper_double_22_recursive(buf + 524288, 17);
    helper_double_22_recursive(buf + 655360, 17);
    helper_double_22_recursive(buf + 786432, 17);
    helper_double_22_recursive(buf + 917504, 17);
    for (int j = 0; j < 1048576; j += 1048576) {
      for (int k = 0; k < 131072; k += 4) {
        __asm__ volatile("vmovupd (%0), %%ymm0\n"
                         "vmovupd (%1), %%ymm1\n"
                         "vmovupd (%2), %%ymm2\n"
                         "vmovupd (%3), %%ymm3\n"
                         "vmovupd (%4), %%ymm4\n"
                         "vmovupd (%5), %%ymm5\n"
                         "vmovupd (%6), %%ymm6\n"
                         "vmovupd (%7), %%ymm7\n"
                         "vaddpd %%ymm1, %%ymm0, %%ymm8\n"
                         "vsubpd %%ymm1, %%ymm0, %%ymm9\n"
                         "vaddpd %%ymm3, %%ymm2, %%ymm10\n"
                         "vsubpd %%ymm3, %%ymm2, %%ymm11\n"
                         "vaddpd %%ymm5, %%ymm4, %%ymm12\n"
                         "vsubpd %%ymm5, %%ymm4, %%ymm13\n"
                         "vaddpd %%ymm7, %%ymm6, %%ymm14\n"
                         "vsubpd %%ymm7, %%ymm6, %%ymm15\n"
                         "vaddpd %%ymm10, %%ymm8, %%ymm0\n"
                         "vsubpd %%ymm10, %%ymm8, %%ymm2\n"
                         "vaddpd %%ymm11, %%ymm9, %%ymm1\n"
                         "vsubpd %%ymm11, %%ymm9, %%ymm3\n"
                         "vaddpd %%ymm14, %%ymm12, %%ymm4\n"
                         "vsubpd %%ymm14, %%ymm12, %%ymm6\n"
                         "vaddpd %%ymm15, %%ymm13, %%ymm5\n"
                         "vsubpd %%ymm15, %%ymm13, %%ymm7\n"
                         "vaddpd %%ymm4, %%ymm0, %%ymm8\n"
                         "vsubpd %%ymm4, %%ymm0, %%ymm12\n"
                         "vaddpd %%ymm5, %%ymm1, %%ymm9\n"
                         "vsubpd %%ymm5, %%ymm1, %%ymm13\n"
                         "vaddpd %%ymm6, %%ymm2, %%ymm10\n"
                         "vsubpd %%ymm6, %%ymm2, %%ymm14\n"
                         "vaddpd %%ymm7, %%ymm3, %%ymm11\n"
                         "vsubpd %%ymm7, %%ymm3, %%ymm15\n"
                         "vmovupd %%ymm8, (%0)\n"
                         "vmovupd %%ymm9, (%1)\n"
                         "vmovupd %%ymm10, (%2)\n"
                         "vmovupd %%ymm11, (%3)\n"
                         "vmovupd %%ymm12, (%4)\n"
                         "vmovupd %%ymm13, (%5)\n"
                         "vmovupd %%ymm14, (%6)\n"
                         "vmovupd %%ymm15, (%7)\n" ::"r"(buf + j + k + 0),
                         "r"(buf + j + k + 131072), "r"(buf + j + k + 262144), "r"(buf + j + k + 393216), "r"(buf + j + k + 524288), "r"(buf + j + k + 655360), "r"(buf + j + k + 786432), "r"(buf + j + k + 917504)
                         : "%ymm0", "%ymm1", "%ymm2", "%ymm3", "%ymm4", "%ymm5", "%ymm6", "%ymm7", "%ymm8", "%ymm9", "%ymm10", "%ymm11", "%ymm12", "%ymm13", "%ymm14", "%ymm15", "memory");
      }
    }
    return;
  }
  if (depth == 22) {
    helper_double_22_recursive(buf + 0, 20);
    helper_double_22_recursive(buf + 1048576, 20);
    helper_double_22_recursive(buf + 2097152, 20);
    helper_double_22_recursive(buf + 3145728, 20);
    for (int j = 0; j < 4194304; j += 4194304) {
      for (int k = 0; k < 1048576; k += 4) {
        __asm__ volatile("vmovupd (%0), %%ymm0\n"
                         "vmovupd (%1), %%ymm1\n"
                         "vmovupd (%2), %%ymm2\n"
                         "vmovupd (%3), %%ymm3\n"
                         "vaddpd %%ymm1, %%ymm0, %%ymm8\n"
                         "vsubpd %%ymm1, %%ymm0, %%ymm9\n"
                         "vaddpd %%ymm3, %%ymm2, %%ymm10\n"
                         "vsubpd %%ymm3, %%ymm2, %%ymm11\n"
                         "vaddpd %%ymm10, %%ymm8, %%ymm0\n"
                         "vsubpd %%ymm10, %%ymm8, %%ymm2\n"
                         "vaddpd %%ymm11, %%ymm9, %%ymm1\n"
                         "vsubpd %%ymm11, %%ymm9, %%ymm3\n"
                         "vmovupd %%ymm0, (%0)\n"
                         "vmovupd %%ymm1, (%1)\n"
                         "vmovupd %%ymm2, (%2)\n"
                         "vmovupd %%ymm3, (%3)\n" ::"r"(buf + j + k + 0),
                         "r"(buf + j + k + 1048576), "r"(buf + j + k + 2097152), "r"(buf + j + k + 3145728)
                         : "%ymm0", "%ymm1", "%ymm2", "%ymm3", "%ymm4", "%ymm5", "%ymm6", "%ymm7", "%ymm8", "%ymm9", "%ymm10", "%ymm11", "%ymm12", "%ymm13", "%ymm14", "%ymm15", "memory");
      }
    }
    return;
  }
}
```