user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<helper_double_28_recursive>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %esi,-0x5c(%rbp)
  cmpl   $0xa,-0x5c(%rbp)
  jne    L15
  movl   $0x0,-0x48(%rbp)
  jmp    L358
L128:
  movl   $0x0,-0x44(%rbp)
  jmp    L187
L320:
  mov    -0x48(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x44(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    -0x48(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x44(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  add    $0x4,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x58(%rbp),%rdx
  add    %rcx,%rdx
  mov    -0x48(%rbp),%ecx
  movslq %ecx,%rsi
  mov    -0x44(%rbp),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  add    $0x8,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x58(%rbp),%rcx
  add    %rsi,%rcx
  mov    -0x48(%rbp),%esi
  movslq %esi,%rdi
  mov    -0x44(%rbp),%esi
  movslq %esi,%rsi
  add    %rdi,%rsi
  add    $0xc,%rsi
  lea    0x0(,%rsi,8),%rdi
  mov    -0x58(%rbp),%rsi
  add    %rdi,%rsi
  mov    -0x48(%rbp),%edi
  movslq %edi,%r8
  mov    -0x44(%rbp),%edi
  movslq %edi,%rdi
  add    %r8,%rdi
  add    $0x10,%rdi
  lea    0x0(,%rdi,8),%r8
  mov    -0x58(%rbp),%rdi
  add    %r8,%rdi
  mov    -0x48(%rbp),%r8d
  movslq %r8d,%r9
  mov    -0x44(%rbp),%r8d
  movslq %r8d,%r8
  add    %r9,%r8
  add    $0x14,%r8
  lea    0x0(,%r8,8),%r9
  mov    -0x58(%rbp),%r8
  add    %r9,%r8
  mov    -0x48(%rbp),%r9d
  movslq %r9d,%r10
  mov    -0x44(%rbp),%r9d
  movslq %r9d,%r9
  add    %r10,%r9
  add    $0x18,%r9
  lea    0x0(,%r9,8),%r10
  mov    -0x58(%rbp),%r9
  add    %r10,%r9
  mov    -0x48(%rbp),%r10d
  movslq %r10d,%r11
  mov    -0x44(%rbp),%r10d
  movslq %r10d,%r10
  add    %r11,%r10
  add    $0x1c,%r10
  lea    0x0(,%r10,8),%r11
  mov    -0x58(%rbp),%r10
  add    %r11,%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
  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,(%rdx)
  vmovupd %ymm10,(%rcx)
  vmovupd %ymm11,(%rsi)
  vmovupd %ymm12,(%rdi)
  vmovupd %ymm13,(%r8)
  vmovupd %ymm14,(%r9)
  vmovupd %ymm15,(%r10)
  addl   $0x4,-0x44(%rbp)
L187:
  cmpl   $0x3,-0x44(%rbp)
  jle    L320
  addl   $0x20,-0x48(%rbp)
L358:
  cmpl   $0x3ff,-0x48(%rbp)
  jle    L128
  movl   $0x0,-0x40(%rbp)
  jmp    L150
L287:
  movl   $0x0,-0x3c(%rbp)
  jmp    L177
L233:
  mov    -0x40(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x3c(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    -0x40(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x3c(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  add    $0x20,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x58(%rbp),%rdx
  add    %rcx,%rdx
  mov    -0x40(%rbp),%ecx
  movslq %ecx,%rsi
  mov    -0x3c(%rbp),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  add    $0x40,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x58(%rbp),%rcx
  add    %rsi,%rcx
  mov    -0x40(%rbp),%esi
  movslq %esi,%rdi
  mov    -0x3c(%rbp),%esi
  movslq %esi,%rsi
  add    %rdi,%rsi
  add    $0x60,%rsi
  lea    0x0(,%rsi,8),%rdi
  mov    -0x58(%rbp),%rsi
  add    %rdi,%rsi
  mov    -0x40(%rbp),%edi
  movslq %edi,%r8
  mov    -0x3c(%rbp),%edi
  movslq %edi,%rdi
  add    %r8,%rdi
  sub    $0xffffffffffffff80,%rdi
  lea    0x0(,%rdi,8),%r8
  mov    -0x58(%rbp),%rdi
  add    %r8,%rdi
  mov    -0x40(%rbp),%r8d
  movslq %r8d,%r9
  mov    -0x3c(%rbp),%r8d
  movslq %r8d,%r8
  add    %r9,%r8
  add    $0xa0,%r8
  lea    0x0(,%r8,8),%r9
  mov    -0x58(%rbp),%r8
  add    %r9,%r8
  mov    -0x40(%rbp),%r9d
  movslq %r9d,%r10
  mov    -0x3c(%rbp),%r9d
  movslq %r9d,%r9
  add    %r10,%r9
  add    $0xc0,%r9
  lea    0x0(,%r9,8),%r10
  mov    -0x58(%rbp),%r9
  add    %r10,%r9
  mov    -0x40(%rbp),%r10d
  movslq %r10d,%r11
  mov    -0x3c(%rbp),%r10d
  movslq %r10d,%r10
  add    %r11,%r10
  add    $0xe0,%r10
  lea    0x0(,%r10,8),%r11
  mov    -0x58(%rbp),%r10
  add    %r11,%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)
  addl   $0x4,-0x3c(%rbp)
L177:
  cmpl   $0x1f,-0x3c(%rbp)
  jle    L233
  addl   $0x100,-0x40(%rbp)
L150:
  cmpl   $0x3ff,-0x40(%rbp)
  jle    L287
  movl   $0x0,-0x38(%rbp)
  jmp    L448
L269:
  movl   $0x0,-0x34(%rbp)
  jmp    L12
L285:
  mov    -0x38(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x34(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    -0x38(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x34(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  add    $0x100,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x58(%rbp),%rdx
  add    %rcx,%rdx
  mov    -0x38(%rbp),%ecx
  movslq %ecx,%rsi
  mov    -0x34(%rbp),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  add    $0x200,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x58(%rbp),%rcx
  add    %rsi,%rcx
  mov    -0x38(%rbp),%esi
  movslq %esi,%rdi
  mov    -0x34(%rbp),%esi
  movslq %esi,%rsi
  add    %rdi,%rsi
  add    $0x300,%rsi
  lea    0x0(,%rsi,8),%rdi
  mov    -0x58(%rbp),%rsi
  add    %rdi,%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)
  addl   $0x4,-0x34(%rbp)
L12:
  cmpl   $0xff,-0x34(%rbp)
  jle    L285
  addl   $0x400,-0x38(%rbp)
L448:
  cmpl   $0x3ff,-0x38(%rbp)
  jle    L269
  jmp    L236
L15:
  cmpl   $0xd,-0x5c(%rbp)
  jne    L483
  mov    -0x58(%rbp),%rax
  mov    $0xa,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x2000,%rax
  mov    $0xa,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x4000,%rax
  mov    $0xa,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x6000,%rax
  mov    $0xa,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x8000,%rax
  mov    $0xa,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0xa000,%rax
  mov    $0xa,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0xc000,%rax
  mov    $0xa,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0xe000,%rax
  mov    $0xa,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  movl   $0x0,-0x30(%rbp)
  jmp    L200
L72:
  movl   $0x0,-0x2c(%rbp)
  jmp    L286
L357:
  mov    -0x30(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x2c(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    -0x30(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x2c(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  add    $0x400,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x58(%rbp),%rdx
  add    %rcx,%rdx
  mov    -0x30(%rbp),%ecx
  movslq %ecx,%rsi
  mov    -0x2c(%rbp),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  add    $0x800,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x58(%rbp),%rcx
  add    %rsi,%rcx
  mov    -0x30(%rbp),%esi
  movslq %esi,%rdi
  mov    -0x2c(%rbp),%esi
  movslq %esi,%rsi
  add    %rdi,%rsi
  add    $0xc00,%rsi
  lea    0x0(,%rsi,8),%rdi
  mov    -0x58(%rbp),%rsi
  add    %rdi,%rsi
  mov    -0x30(%rbp),%edi
  movslq %edi,%r8
  mov    -0x2c(%rbp),%edi
  movslq %edi,%rdi
  add    %r8,%rdi
  add    $0x1000,%rdi
  lea    0x0(,%rdi,8),%r8
  mov    -0x58(%rbp),%rdi
  add    %r8,%rdi
  mov    -0x30(%rbp),%r8d
  movslq %r8d,%r9
  mov    -0x2c(%rbp),%r8d
  movslq %r8d,%r8
  add    %r9,%r8
  add    $0x1400,%r8
  lea    0x0(,%r8,8),%r9
  mov    -0x58(%rbp),%r8
  add    %r9,%r8
  mov    -0x30(%rbp),%r9d
  movslq %r9d,%r10
  mov    -0x2c(%rbp),%r9d
  movslq %r9d,%r9
  add    %r10,%r9
  add    $0x1800,%r9
  lea    0x0(,%r9,8),%r10
  mov    -0x58(%rbp),%r9
  add    %r10,%r9
  mov    -0x30(%rbp),%r10d
  movslq %r10d,%r11
  mov    -0x2c(%rbp),%r10d
  movslq %r10d,%r10
  add    %r11,%r10
  add    $0x1c00,%r10
  lea    0x0(,%r10,8),%r11
  mov    -0x58(%rbp),%r10
  add    %r11,%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)
  addl   $0x4,-0x2c(%rbp)
L286:
  cmpl   $0x3ff,-0x2c(%rbp)
  jle    L357
  addl   $0x2000,-0x30(%rbp)
L200:
  cmpl   $0x1fff,-0x30(%rbp)
  jle    L72
  jmp    L236
L483:
  cmpl   $0x10,-0x5c(%rbp)
  jne    L321
  mov    -0x58(%rbp),%rax
  mov    $0xd,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x10000,%rax
  mov    $0xd,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x20000,%rax
  mov    $0xd,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x30000,%rax
  mov    $0xd,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x40000,%rax
  mov    $0xd,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x50000,%rax
  mov    $0xd,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x60000,%rax
  mov    $0xd,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x70000,%rax
  mov    $0xd,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  movl   $0x0,-0x28(%rbp)
  jmp    L336
L416:
  movl   $0x0,-0x24(%rbp)
  jmp    L230
L37:
  mov    -0x28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x24(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    -0x28(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x24(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  add    $0x2000,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x58(%rbp),%rdx
  add    %rcx,%rdx
  mov    -0x28(%rbp),%ecx
  movslq %ecx,%rsi
  mov    -0x24(%rbp),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  add    $0x4000,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x58(%rbp),%rcx
  add    %rsi,%rcx
  mov    -0x28(%rbp),%esi
  movslq %esi,%rdi
  mov    -0x24(%rbp),%esi
  movslq %esi,%rsi
  add    %rdi,%rsi
  add    $0x6000,%rsi
  lea    0x0(,%rsi,8),%rdi
  mov    -0x58(%rbp),%rsi
  add    %rdi,%rsi
  mov    -0x28(%rbp),%edi
  movslq %edi,%r8
  mov    -0x24(%rbp),%edi
  movslq %edi,%rdi
  add    %r8,%rdi
  add    $0x8000,%rdi
  lea    0x0(,%rdi,8),%r8
  mov    -0x58(%rbp),%rdi
  add    %r8,%rdi
  mov    -0x28(%rbp),%r8d
  movslq %r8d,%r9
  mov    -0x24(%rbp),%r8d
  movslq %r8d,%r8
  add    %r9,%r8
  add    $0xa000,%r8
  lea    0x0(,%r8,8),%r9
  mov    -0x58(%rbp),%r8
  add    %r9,%r8
  mov    -0x28(%rbp),%r9d
  movslq %r9d,%r10
  mov    -0x24(%rbp),%r9d
  movslq %r9d,%r9
  add    %r10,%r9
  add    $0xc000,%r9
  lea    0x0(,%r9,8),%r10
  mov    -0x58(%rbp),%r9
  add    %r10,%r9
  mov    -0x28(%rbp),%r10d
  movslq %r10d,%r11
  mov    -0x24(%rbp),%r10d
  movslq %r10d,%r10
  add    %r11,%r10
  add    $0xe000,%r10
  lea    0x0(,%r10,8),%r11
  mov    -0x58(%rbp),%r10
  add    %r11,%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)
  addl   $0x4,-0x24(%rbp)
L230:
  cmpl   $0x1fff,-0x24(%rbp)
  jle    L37
  addl   $0x10000,-0x28(%rbp)
L336:
  cmpl   $0xffff,-0x28(%rbp)
  jle    L416
  jmp    L236
L321:
  cmpl   $0x13,-0x5c(%rbp)
  jne    L165
  mov    -0x58(%rbp),%rax
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x80000,%rax
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x100000,%rax
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x180000,%rax
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x200000,%rax
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x280000,%rax
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x300000,%rax
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x380000,%rax
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  movl   $0x0,-0x20(%rbp)
  jmp    L335
L328:
  movl   $0x0,-0x1c(%rbp)
  jmp    L229
L61:
  mov    -0x20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x1c(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    -0x20(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x1c(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  add    $0x10000,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x58(%rbp),%rdx
  add    %rcx,%rdx
  mov    -0x20(%rbp),%ecx
  movslq %ecx,%rsi
  mov    -0x1c(%rbp),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  add    $0x20000,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x58(%rbp),%rcx
  add    %rsi,%rcx
  mov    -0x20(%rbp),%esi
  movslq %esi,%rdi
  mov    -0x1c(%rbp),%esi
  movslq %esi,%rsi
  add    %rdi,%rsi
  add    $0x30000,%rsi
  lea    0x0(,%rsi,8),%rdi
  mov    -0x58(%rbp),%rsi
  add    %rdi,%rsi
  mov    -0x20(%rbp),%edi
  movslq %edi,%r8
  mov    -0x1c(%rbp),%edi
  movslq %edi,%rdi
  add    %r8,%rdi
  add    $0x40000,%rdi
  lea    0x0(,%rdi,8),%r8
  mov    -0x58(%rbp),%rdi
  add    %r8,%rdi
  mov    -0x20(%rbp),%r8d
  movslq %r8d,%r9
  mov    -0x1c(%rbp),%r8d
  movslq %r8d,%r8
  add    %r9,%r8
  add    $0x50000,%r8
  lea    0x0(,%r8,8),%r9
  mov    -0x58(%rbp),%r8
  add    %r9,%r8
  mov    -0x20(%rbp),%r9d
  movslq %r9d,%r10
  mov    -0x1c(%rbp),%r9d
  movslq %r9d,%r9
  add    %r10,%r9
  add    $0x60000,%r9
  lea    0x0(,%r9,8),%r10
  mov    -0x58(%rbp),%r9
  add    %r10,%r9
  mov    -0x20(%rbp),%r10d
  movslq %r10d,%r11
  mov    -0x1c(%rbp),%r10d
  movslq %r10d,%r10
  add    %r11,%r10
  add    $0x70000,%r10
  lea    0x0(,%r10,8),%r11
  mov    -0x58(%rbp),%r10
  add    %r11,%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)
  addl   $0x4,-0x1c(%rbp)
L229:
  cmpl   $0xffff,-0x1c(%rbp)
  jle    L61
  addl   $0x80000,-0x20(%rbp)
L335:
  cmpl   $0x7ffff,-0x20(%rbp)
  jle    L328
  jmp    L236
L165:
  cmpl   $0x16,-0x5c(%rbp)
  jne    L402
  mov    -0x58(%rbp),%rax
  mov    $0x13,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x400000,%rax
  mov    $0x13,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x800000,%rax
  mov    $0x13,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0xc00000,%rax
  mov    $0x13,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x1000000,%rax
  mov    $0x13,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x1400000,%rax
  mov    $0x13,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x1800000,%rax
  mov    $0x13,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x1c00000,%rax
  mov    $0x13,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  movl   $0x0,-0x18(%rbp)
  jmp    L176
L310:
  movl   $0x0,-0x14(%rbp)
  jmp    L485
L290:
  mov    -0x18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x14(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    -0x18(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x14(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  add    $0x80000,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x58(%rbp),%rdx
  add    %rcx,%rdx
  mov    -0x18(%rbp),%ecx
  movslq %ecx,%rsi
  mov    -0x14(%rbp),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  add    $0x100000,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x58(%rbp),%rcx
  add    %rsi,%rcx
  mov    -0x18(%rbp),%esi
  movslq %esi,%rdi
  mov    -0x14(%rbp),%esi
  movslq %esi,%rsi
  add    %rdi,%rsi
  add    $0x180000,%rsi
  lea    0x0(,%rsi,8),%rdi
  mov    -0x58(%rbp),%rsi
  add    %rdi,%rsi
  mov    -0x18(%rbp),%edi
  movslq %edi,%r8
  mov    -0x14(%rbp),%edi
  movslq %edi,%rdi
  add    %r8,%rdi
  add    $0x200000,%rdi
  lea    0x0(,%rdi,8),%r8
  mov    -0x58(%rbp),%rdi
  add    %r8,%rdi
  mov    -0x18(%rbp),%r8d
  movslq %r8d,%r9
  mov    -0x14(%rbp),%r8d
  movslq %r8d,%r8
  add    %r9,%r8
  add    $0x280000,%r8
  lea    0x0(,%r8,8),%r9
  mov    -0x58(%rbp),%r8
  add    %r9,%r8
  mov    -0x18(%rbp),%r9d
  movslq %r9d,%r10
  mov    -0x14(%rbp),%r9d
  movslq %r9d,%r9
  add    %r10,%r9
  add    $0x300000,%r9
  lea    0x0(,%r9,8),%r10
  mov    -0x58(%rbp),%r9
  add    %r10,%r9
  mov    -0x18(%rbp),%r10d
  movslq %r10d,%r11
  mov    -0x14(%rbp),%r10d
  movslq %r10d,%r10
  add    %r11,%r10
  add    $0x380000,%r10
  lea    0x0(,%r10,8),%r11
  mov    -0x58(%rbp),%r10
  add    %r11,%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)
  addl   $0x4,-0x14(%rbp)
L485:
  cmpl   $0x7ffff,-0x14(%rbp)
  jle    L290
  addl   $0x400000,-0x18(%rbp)
L176:
  cmpl   $0x3fffff,-0x18(%rbp)
  jle    L310
  jmp    L236
L402:
  cmpl   $0x19,-0x5c(%rbp)
  jne    L136
  mov    -0x58(%rbp),%rax
  mov    $0x16,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x2000000,%rax
  mov    $0x16,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x4000000,%rax
  mov    $0x16,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x6000000,%rax
  mov    $0x16,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x8000000,%rax
  mov    $0x16,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0xa000000,%rax
  mov    $0x16,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0xc000000,%rax
  mov    $0x16,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0xe000000,%rax
  mov    $0x16,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  movl   $0x0,-0x10(%rbp)
  jmp    L195
L88:
  movl   $0x0,-0xc(%rbp)
  jmp    L463
L250:
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    -0xc(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    -0x10(%rbp),%edx
  movslq %edx,%rcx
  mov    -0xc(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  add    $0x400000,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x58(%rbp),%rdx
  add    %rcx,%rdx
  mov    -0x10(%rbp),%ecx
  movslq %ecx,%rsi
  mov    -0xc(%rbp),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  add    $0x800000,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x58(%rbp),%rcx
  add    %rsi,%rcx
  mov    -0x10(%rbp),%esi
  movslq %esi,%rdi
  mov    -0xc(%rbp),%esi
  movslq %esi,%rsi
  add    %rdi,%rsi
  add    $0xc00000,%rsi
  lea    0x0(,%rsi,8),%rdi
  mov    -0x58(%rbp),%rsi
  add    %rdi,%rsi
  mov    -0x10(%rbp),%edi
  movslq %edi,%r8
  mov    -0xc(%rbp),%edi
  movslq %edi,%rdi
  add    %r8,%rdi
  add    $0x1000000,%rdi
  lea    0x0(,%rdi,8),%r8
  mov    -0x58(%rbp),%rdi
  add    %r8,%rdi
  mov    -0x10(%rbp),%r8d
  movslq %r8d,%r9
  mov    -0xc(%rbp),%r8d
  movslq %r8d,%r8
  add    %r9,%r8
  add    $0x1400000,%r8
  lea    0x0(,%r8,8),%r9
  mov    -0x58(%rbp),%r8
  add    %r9,%r8
  mov    -0x10(%rbp),%r9d
  movslq %r9d,%r10
  mov    -0xc(%rbp),%r9d
  movslq %r9d,%r9
  add    %r10,%r9
  add    $0x1800000,%r9
  lea    0x0(,%r9,8),%r10
  mov    -0x58(%rbp),%r9
  add    %r10,%r9
  mov    -0x10(%rbp),%r10d
  movslq %r10d,%r11
  mov    -0xc(%rbp),%r10d
  movslq %r10d,%r10
  add    %r11,%r10
  add    $0x1c00000,%r10
  lea    0x0(,%r10,8),%r11
  mov    -0x58(%rbp),%r10
  add    %r11,%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)
  addl   $0x4,-0xc(%rbp)
L463:
  cmpl   $0x3fffff,-0xc(%rbp)
  jle    L250
  addl   $0x2000000,-0x10(%rbp)
L195:
  cmpl   $0x1ffffff,-0x10(%rbp)
  jle    L88
  jmp    L236
L136:
  cmpl   $0x1c,-0x5c(%rbp)
  jne    L236
  mov    -0x58(%rbp),%rax
  mov    $0x19,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x10000000,%rax
  mov    $0x19,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x20000000,%rax
  mov    $0x19,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x30000000,%rax
  mov    $0x19,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x40000000,%rax
  mov    $0x19,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x50000000,%rax
  mov    $0x19,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x60000000,%rax
  mov    $0x19,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  mov    -0x58(%rbp),%rax
  add    $0x70000000,%rax
  mov    $0x19,%esi
  mov    %rax,%rdi
  call   <helper_double_28_recursive>
  movl   $0x0,-0x8(%rbp)
  jmp    L299
L252:
  movl   $0x0,-0x4(%rbp)
  jmp    L206
L266:
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    -0x8(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x4(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  add    $0x2000000,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x58(%rbp),%rdx
  add    %rcx,%rdx
  mov    -0x8(%rbp),%ecx
  movslq %ecx,%rsi
  mov    -0x4(%rbp),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  add    $0x4000000,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x58(%rbp),%rcx
  add    %rsi,%rcx
  mov    -0x8(%rbp),%esi
  movslq %esi,%rdi
  mov    -0x4(%rbp),%esi
  movslq %esi,%rsi
  add    %rdi,%rsi
  add    $0x6000000,%rsi
  lea    0x0(,%rsi,8),%rdi
  mov    -0x58(%rbp),%rsi
  add    %rdi,%rsi
  mov    -0x8(%rbp),%edi
  movslq %edi,%r8
  mov    -0x4(%rbp),%edi
  movslq %edi,%rdi
  add    %r8,%rdi
  add    $0x8000000,%rdi
  lea    0x0(,%rdi,8),%r8
  mov    -0x58(%rbp),%rdi
  add    %r8,%rdi
  mov    -0x8(%rbp),%r8d
  movslq %r8d,%r9
  mov    -0x4(%rbp),%r8d
  movslq %r8d,%r8
  add    %r9,%r8
  add    $0xa000000,%r8
  lea    0x0(,%r8,8),%r9
  mov    -0x58(%rbp),%r8
  add    %r9,%r8
  mov    -0x8(%rbp),%r9d
  movslq %r9d,%r10
  mov    -0x4(%rbp),%r9d
  movslq %r9d,%r9
  add    %r10,%r9
  add    $0xc000000,%r9
  lea    0x0(,%r9,8),%r10
  mov    -0x58(%rbp),%r9
  add    %r10,%r9
  mov    -0x8(%rbp),%r10d
  movslq %r10d,%r11
  mov    -0x4(%rbp),%r10d
  movslq %r10d,%r10
  add    %r11,%r10
  add    $0xe000000,%r10
  lea    0x0(,%r10,8),%r11
  mov    -0x58(%rbp),%r10
  add    %r11,%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)
  addl   $0x4,-0x4(%rbp)
L206:
  cmpl   $0x1ffffff,-0x4(%rbp)
  jle    L266
  addl   $0x10000000,-0x8(%rbp)
L299:
  cmpl   $0xfffffff,-0x8(%rbp)
  jle    L252
  nop
L236:
  leave
  ret
```

assistant: ```c
void helper_double_28_recursive(double *buf, int depth) {
  if (depth == 10) {
    for (int j = 0; j < 1024; 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 < 1024; 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 < 1024; j += 1024) {
      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"
                         "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 + 256), "r"(buf + j + k + 512), "r"(buf + j + k + 768)
                         : "%ymm0", "%ymm1", "%ymm2", "%ymm3", "%ymm4", "%ymm5", "%ymm6", "%ymm7", "%ymm8", "%ymm9", "%ymm10", "%ymm11", "%ymm12", "%ymm13", "%ymm14", "%ymm15", "memory");
      }
    }
    return;
  }
  if (depth == 13) {
    helper_double_28_recursive(buf + 0, 10);
    helper_double_28_recursive(buf + 1024, 10);
    helper_double_28_recursive(buf + 2048, 10);
    helper_double_28_recursive(buf + 3072, 10);
    helper_double_28_recursive(buf + 4096, 10);
    helper_double_28_recursive(buf + 5120, 10);
    helper_double_28_recursive(buf + 6144, 10);
    helper_double_28_recursive(buf + 7168, 10);
    for (int j = 0; j < 8192; j += 8192) {
      for (int k = 0; k < 1024; 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 + 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)
                         : "%ymm0", "%ymm1", "%ymm2", "%ymm3", "%ymm4", "%ymm5", "%ymm6", "%ymm7", "%ymm8", "%ymm9", "%ymm10", "%ymm11", "%ymm12", "%ymm13", "%ymm14", "%ymm15", "memory");
      }
    }
    return;
  }
  if (depth == 16) {
    helper_double_28_recursive(buf + 0, 13);
    helper_double_28_recursive(buf + 8192, 13);
    helper_double_28_recursive(buf + 16384, 13);
    helper_double_28_recursive(buf + 24576, 13);
    helper_double_28_recursive(buf + 32768, 13);
    helper_double_28_recursive(buf + 40960, 13);
    helper_double_28_recursive(buf + 49152, 13);
    helper_double_28_recursive(buf + 57344, 13);
    for (int j = 0; j < 65536; j += 65536) {
      for (int k = 0; k < 8192; 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 + 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)
                         : "%ymm0", "%ymm1", "%ymm2", "%ymm3", "%ymm4", "%ymm5", "%ymm6", "%ymm7", "%ymm8", "%ymm9", "%ymm10", "%ymm11", "%ymm12", "%ymm13", "%ymm14", "%ymm15", "memory");
      }
    }
    return;
  }
  if (depth == 19) {
    helper_double_28_recursive(buf + 0, 16);
    helper_double_28_recursive(buf + 65536, 16);
    helper_double_28_recursive(buf + 131072, 16);
    helper_double_28_recursive(buf + 196608, 16);
    helper_double_28_recursive(buf + 262144, 16);
    helper_double_28_recursive(buf + 327680, 16);
    helper_double_28_recursive(buf + 393216, 16);
    helper_double_28_recursive(buf + 458752, 16);
    for (int j = 0; j < 524288; j += 524288) {
      for (int k = 0; k < 65536; 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 + 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)
                         : "%ymm0", "%ymm1", "%ymm2", "%ymm3", "%ymm4", "%ymm5", "%ymm6", "%ymm7", "%ymm8", "%ymm9", "%ymm10", "%ymm11", "%ymm12", "%ymm13", "%ymm14", "%ymm15", "memory");
      }
    }
    return;
  }
  if (depth == 22) {
    helper_double_28_recursive(buf + 0, 19);
    helper_double_28_recursive(buf + 524288, 19);
    helper_double_28_recursive(buf + 1048576, 19);
    helper_double_28_recursive(buf + 1572864, 19);
    helper_double_28_recursive(buf + 2097152, 19);
    helper_double_28_recursive(buf + 2621440, 19);
    helper_double_28_recursive(buf + 3145728, 19);
    helper_double_28_recursive(buf + 3670016, 19);
    for (int j = 0; j < 4194304; j += 4194304) {
      for (int k = 0; k < 524288; 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 + 524288), "r"(buf + j + k + 1048576), "r"(buf + j + k + 1572864), "r"(buf + j + k + 2097152), "r"(buf + j + k + 2621440), "r"(buf + j + k + 3145728), "r"(buf + j + k + 3670016)
                         : "%ymm0", "%ymm1", "%ymm2", "%ymm3", "%ymm4", "%ymm5", "%ymm6", "%ymm7", "%ymm8", "%ymm9", "%ymm10", "%ymm11", "%ymm12", "%ymm13", "%ymm14", "%ymm15", "memory");
      }
    }
    return;
  }
  if (depth == 25) {
    helper_double_28_recursive(buf + 0, 22);
    helper_double_28_recursive(buf + 4194304, 22);
    helper_double_28_recursive(buf + 8388608, 22);
    helper_double_28_recursive(buf + 12582912, 22);
    helper_double_28_recursive(buf + 16777216, 22);
    helper_double_28_recursive(buf + 20971520, 22);
    helper_double_28_recursive(buf + 25165824, 22);
    helper_double_28_recursive(buf + 29360128, 22);
    for (int j = 0; j < 33554432; j += 33554432) {
      for (int k = 0; k < 4194304; 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 + 4194304), "r"(buf + j + k + 8388608), "r"(buf + j + k + 12582912), "r"(buf + j + k + 16777216), "r"(buf + j + k + 20971520), "r"(buf + j + k + 25165824), "r"(buf + j + k + 29360128)
                         : "%ymm0", "%ymm1", "%ymm2", "%ymm3", "%ymm4", "%ymm5", "%ymm6", "%ymm7", "%ymm8", "%ymm9", "%ymm10", "%ymm11", "%ymm12", "%ymm13", "%ymm14", "%ymm15", "memory");
      }
    }
    return;
  }
  if (depth == 28) {
    helper_double_28_recursive(buf + 0, 25);
    helper_double_28_recursive(buf + 33554432, 25);
    helper_double_28_recursive(buf + 67108864, 25);
    helper_double_28_recursive(buf + 100663296, 25);
    helper_double_28_recursive(buf + 134217728, 25);
    helper_double_28_recursive(buf + 167772160, 25);
    helper_double_28_recursive(buf + 201326592, 25);
    helper_double_28_recursive(buf + 234881024, 25);
    for (int j = 0; j < 268435456; j += 268435456) {
      for (int k = 0; k < 33554432; 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 + 33554432), "r"(buf + j + k + 67108864), "r"(buf + j + k + 100663296), "r"(buf + j + k + 134217728), "r"(buf + j + k + 167772160), "r"(buf + j + k + 201326592), "r"(buf + j + k + 234881024)
                         : "%ymm0", "%ymm1", "%ymm2", "%ymm3", "%ymm4", "%ymm5", "%ymm6", "%ymm7", "%ymm8", "%ymm9", "%ymm10", "%ymm11", "%ymm12", "%ymm13", "%ymm14", "%ymm15", "memory");
      }
    }
    return;
  }
}
```