user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<helper_double_12_recursive>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %esi,-0x2c(%rbp)
  cmpl   $0xa,-0x2c(%rbp)
  jne    L13
  movl   $0x0,-0x20(%rbp)
  jmp    L182
L3:
  movl   $0x0,-0x1c(%rbp)
  jmp    L6
L83:
  mov    -0x20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x1c(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    -0x20(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x1c(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  add    $0x2,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x28(%rbp),%rdx
  add    %rcx,%rdx
  mov    -0x20(%rbp),%ecx
  movslq %ecx,%rsi
  mov    -0x1c(%rbp),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  add    $0x4,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x28(%rbp),%rcx
  add    %rsi,%rcx
  mov    -0x20(%rbp),%esi
  movslq %esi,%rdi
  mov    -0x1c(%rbp),%esi
  movslq %esi,%rsi
  add    %rdi,%rsi
  add    $0x6,%rsi
  lea    0x0(,%rsi,8),%rdi
  mov    -0x28(%rbp),%rsi
  add    %rdi,%rsi
  mov    -0x20(%rbp),%edi
  movslq %edi,%r8
  mov    -0x1c(%rbp),%edi
  movslq %edi,%rdi
  add    %r8,%rdi
  add    $0x8,%rdi
  lea    0x0(,%rdi,8),%r8
  mov    -0x28(%rbp),%rdi
  add    %r8,%rdi
  mov    -0x20(%rbp),%r8d
  movslq %r8d,%r9
  mov    -0x1c(%rbp),%r8d
  movslq %r8d,%r8
  add    %r9,%r8
  add    $0xa,%r8
  lea    0x0(,%r8,8),%r9
  mov    -0x28(%rbp),%r8
  add    %r9,%r8
  mov    -0x20(%rbp),%r9d
  movslq %r9d,%r10
  mov    -0x1c(%rbp),%r9d
  movslq %r9d,%r9
  add    %r10,%r9
  add    $0xc,%r9
  lea    0x0(,%r9,8),%r10
  mov    -0x28(%rbp),%r9
  add    %r10,%r9
  mov    -0x20(%rbp),%r10d
  movslq %r10d,%r11
  mov    -0x1c(%rbp),%r10d
  movslq %r10d,%r10
  add    %r11,%r10
  add    $0xe,%r10
  lea    0x0(,%r10,8),%r11
  mov    -0x28(%rbp),%r10
  add    %r11,%r10
  movupd (%rax),%xmm0
  movupd (%rdx),%xmm1
  movupd (%rcx),%xmm2
  movupd (%rsi),%xmm3
  movupd (%rdi),%xmm4
  movupd (%r8),%xmm5
  movupd (%r9),%xmm6
  movupd (%r10),%xmm7
  movapd %xmm0,%xmm8
  haddpd %xmm8,%xmm8
  movapd %xmm0,%xmm9
  hsubpd %xmm9,%xmm9
  blendpd $0x1,%xmm8,%xmm9
  movapd %xmm9,%xmm0
  movapd %xmm1,%xmm8
  haddpd %xmm8,%xmm8
  movapd %xmm1,%xmm9
  hsubpd %xmm9,%xmm9
  blendpd $0x1,%xmm8,%xmm9
  movapd %xmm9,%xmm1
  movapd %xmm2,%xmm8
  haddpd %xmm8,%xmm8
  movapd %xmm2,%xmm9
  hsubpd %xmm9,%xmm9
  blendpd $0x1,%xmm8,%xmm9
  movapd %xmm9,%xmm2
  movapd %xmm3,%xmm8
  haddpd %xmm8,%xmm8
  movapd %xmm3,%xmm9
  hsubpd %xmm9,%xmm9
  blendpd $0x1,%xmm8,%xmm9
  movapd %xmm9,%xmm3
  movapd %xmm4,%xmm8
  haddpd %xmm8,%xmm8
  movapd %xmm4,%xmm9
  hsubpd %xmm9,%xmm9
  blendpd $0x1,%xmm8,%xmm9
  movapd %xmm9,%xmm4
  movapd %xmm5,%xmm8
  haddpd %xmm8,%xmm8
  movapd %xmm5,%xmm9
  hsubpd %xmm9,%xmm9
  blendpd $0x1,%xmm8,%xmm9
  movapd %xmm9,%xmm5
  movapd %xmm6,%xmm8
  haddpd %xmm8,%xmm8
  movapd %xmm6,%xmm9
  hsubpd %xmm9,%xmm9
  blendpd $0x1,%xmm8,%xmm9
  movapd %xmm9,%xmm6
  movapd %xmm7,%xmm8
  haddpd %xmm8,%xmm8
  movapd %xmm7,%xmm9
  hsubpd %xmm9,%xmm9
  blendpd $0x1,%xmm8,%xmm9
  movapd %xmm9,%xmm7
  movapd %xmm0,%xmm8
  movapd %xmm0,%xmm9
  addpd  %xmm1,%xmm8
  subpd  %xmm1,%xmm9
  movapd %xmm2,%xmm10
  movapd %xmm2,%xmm11
  addpd  %xmm3,%xmm10
  subpd  %xmm3,%xmm11
  movapd %xmm4,%xmm12
  movapd %xmm4,%xmm13
  addpd  %xmm5,%xmm12
  subpd  %xmm5,%xmm13
  movapd %xmm6,%xmm14
  movapd %xmm6,%xmm15
  addpd  %xmm7,%xmm14
  subpd  %xmm7,%xmm15
  movapd %xmm8,%xmm0
  movapd %xmm8,%xmm2
  addpd  %xmm10,%xmm0
  subpd  %xmm10,%xmm2
  movapd %xmm9,%xmm1
  movapd %xmm9,%xmm3
  addpd  %xmm11,%xmm1
  subpd  %xmm11,%xmm3
  movapd %xmm12,%xmm4
  movapd %xmm12,%xmm6
  addpd  %xmm14,%xmm4
  subpd  %xmm14,%xmm6
  movapd %xmm13,%xmm5
  movapd %xmm13,%xmm7
  addpd  %xmm15,%xmm5
  subpd  %xmm15,%xmm7
  movapd %xmm0,%xmm8
  movapd %xmm0,%xmm12
  addpd  %xmm4,%xmm8
  subpd  %xmm4,%xmm12
  movapd %xmm1,%xmm9
  movapd %xmm1,%xmm13
  addpd  %xmm5,%xmm9
  subpd  %xmm5,%xmm13
  movapd %xmm2,%xmm10
  movapd %xmm2,%xmm14
  addpd  %xmm6,%xmm10
  subpd  %xmm6,%xmm14
  movapd %xmm3,%xmm11
  movapd %xmm3,%xmm15
  addpd  %xmm7,%xmm11
  subpd  %xmm7,%xmm15
  movupd %xmm8,(%rax)
  movupd %xmm9,(%rdx)
  movupd %xmm10,(%rcx)
  movupd %xmm11,(%rsi)
  movupd %xmm12,(%rdi)
  movupd %xmm13,(%r8)
  movupd %xmm14,(%r9)
  movupd %xmm15,(%r10)
  addl   $0x2,-0x1c(%rbp)
L6:
  cmpl   $0x1,-0x1c(%rbp)
  jle    L83
  addl   $0x10,-0x20(%rbp)
L182:
  cmpl   $0x3ff,-0x20(%rbp)
  jle    L3
  movl   $0x0,-0x18(%rbp)
  jmp    L89
L144:
  movl   $0x0,-0x14(%rbp)
  jmp    L116
L101:
  mov    -0x18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x14(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    -0x18(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x14(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  add    $0x10,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x28(%rbp),%rdx
  add    %rcx,%rdx
  mov    -0x18(%rbp),%ecx
  movslq %ecx,%rsi
  mov    -0x14(%rbp),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  add    $0x20,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x28(%rbp),%rcx
  add    %rsi,%rcx
  mov    -0x18(%rbp),%esi
  movslq %esi,%rdi
  mov    -0x14(%rbp),%esi
  movslq %esi,%rsi
  add    %rdi,%rsi
  add    $0x30,%rsi
  lea    0x0(,%rsi,8),%rdi
  mov    -0x28(%rbp),%rsi
  add    %rdi,%rsi
  mov    -0x18(%rbp),%edi
  movslq %edi,%r8
  mov    -0x14(%rbp),%edi
  movslq %edi,%rdi
  add    %r8,%rdi
  add    $0x40,%rdi
  lea    0x0(,%rdi,8),%r8
  mov    -0x28(%rbp),%rdi
  add    %r8,%rdi
  mov    -0x18(%rbp),%r8d
  movslq %r8d,%r9
  mov    -0x14(%rbp),%r8d
  movslq %r8d,%r8
  add    %r9,%r8
  add    $0x50,%r8
  lea    0x0(,%r8,8),%r9
  mov    -0x28(%rbp),%r8
  add    %r9,%r8
  mov    -0x18(%rbp),%r9d
  movslq %r9d,%r10
  mov    -0x14(%rbp),%r9d
  movslq %r9d,%r9
  add    %r10,%r9
  add    $0x60,%r9
  lea    0x0(,%r9,8),%r10
  mov    -0x28(%rbp),%r9
  add    %r10,%r9
  mov    -0x18(%rbp),%r10d
  movslq %r10d,%r11
  mov    -0x14(%rbp),%r10d
  movslq %r10d,%r10
  add    %r11,%r10
  add    $0x70,%r10
  lea    0x0(,%r10,8),%r11
  mov    -0x28(%rbp),%r10
  add    %r11,%r10
  movupd (%rax),%xmm0
  movupd (%rdx),%xmm1
  movupd (%rcx),%xmm2
  movupd (%rsi),%xmm3
  movupd (%rdi),%xmm4
  movupd (%r8),%xmm5
  movupd (%r9),%xmm6
  movupd (%r10),%xmm7
  movapd %xmm0,%xmm8
  movapd %xmm0,%xmm9
  addpd  %xmm1,%xmm8
  subpd  %xmm1,%xmm9
  movapd %xmm2,%xmm10
  movapd %xmm2,%xmm11
  addpd  %xmm3,%xmm10
  subpd  %xmm3,%xmm11
  movapd %xmm4,%xmm12
  movapd %xmm4,%xmm13
  addpd  %xmm5,%xmm12
  subpd  %xmm5,%xmm13
  movapd %xmm6,%xmm14
  movapd %xmm6,%xmm15
  addpd  %xmm7,%xmm14
  subpd  %xmm7,%xmm15
  movapd %xmm8,%xmm0
  movapd %xmm8,%xmm2
  addpd  %xmm10,%xmm0
  subpd  %xmm10,%xmm2
  movapd %xmm9,%xmm1
  movapd %xmm9,%xmm3
  addpd  %xmm11,%xmm1
  subpd  %xmm11,%xmm3
  movapd %xmm12,%xmm4
  movapd %xmm12,%xmm6
  addpd  %xmm14,%xmm4
  subpd  %xmm14,%xmm6
  movapd %xmm13,%xmm5
  movapd %xmm13,%xmm7
  addpd  %xmm15,%xmm5
  subpd  %xmm15,%xmm7
  movapd %xmm0,%xmm8
  movapd %xmm0,%xmm12
  addpd  %xmm4,%xmm8
  subpd  %xmm4,%xmm12
  movapd %xmm1,%xmm9
  movapd %xmm1,%xmm13
  addpd  %xmm5,%xmm9
  subpd  %xmm5,%xmm13
  movapd %xmm2,%xmm10
  movapd %xmm2,%xmm14
  addpd  %xmm6,%xmm10
  subpd  %xmm6,%xmm14
  movapd %xmm3,%xmm11
  movapd %xmm3,%xmm15
  addpd  %xmm7,%xmm11
  subpd  %xmm7,%xmm15
  movupd %xmm8,(%rax)
  movupd %xmm9,(%rdx)
  movupd %xmm10,(%rcx)
  movupd %xmm11,(%rsi)
  movupd %xmm12,(%rdi)
  movupd %xmm13,(%r8)
  movupd %xmm14,(%r9)
  movupd %xmm15,(%r10)
  addl   $0x2,-0x14(%rbp)
L116:
  cmpl   $0xf,-0x14(%rbp)
  jle    L101
  subl   $0xffffff80,-0x18(%rbp)
L89:
  cmpl   $0x3ff,-0x18(%rbp)
  jle    L144
  movl   $0x0,-0x10(%rbp)
  jmp    L126
L38:
  movl   $0x0,-0xc(%rbp)
  jmp    L60
L10:
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    -0xc(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    -0x10(%rbp),%edx
  movslq %edx,%rcx
  mov    -0xc(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  sub    $0xffffffffffffff80,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x28(%rbp),%rdx
  add    %rcx,%rdx
  mov    -0x10(%rbp),%ecx
  movslq %ecx,%rsi
  mov    -0xc(%rbp),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  add    $0x100,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x28(%rbp),%rcx
  add    %rsi,%rcx
  mov    -0x10(%rbp),%esi
  movslq %esi,%rdi
  mov    -0xc(%rbp),%esi
  movslq %esi,%rsi
  add    %rdi,%rsi
  add    $0x180,%rsi
  lea    0x0(,%rsi,8),%rdi
  mov    -0x28(%rbp),%rsi
  add    %rdi,%rsi
  mov    -0x10(%rbp),%edi
  movslq %edi,%r8
  mov    -0xc(%rbp),%edi
  movslq %edi,%rdi
  add    %r8,%rdi
  add    $0x200,%rdi
  lea    0x0(,%rdi,8),%r8
  mov    -0x28(%rbp),%rdi
  add    %r8,%rdi
  mov    -0x10(%rbp),%r8d
  movslq %r8d,%r9
  mov    -0xc(%rbp),%r8d
  movslq %r8d,%r8
  add    %r9,%r8
  add    $0x280,%r8
  lea    0x0(,%r8,8),%r9
  mov    -0x28(%rbp),%r8
  add    %r9,%r8
  mov    -0x10(%rbp),%r9d
  movslq %r9d,%r10
  mov    -0xc(%rbp),%r9d
  movslq %r9d,%r9
  add    %r10,%r9
  add    $0x300,%r9
  lea    0x0(,%r9,8),%r10
  mov    -0x28(%rbp),%r9
  add    %r10,%r9
  mov    -0x10(%rbp),%r10d
  movslq %r10d,%r11
  mov    -0xc(%rbp),%r10d
  movslq %r10d,%r10
  add    %r11,%r10
  add    $0x380,%r10
  lea    0x0(,%r10,8),%r11
  mov    -0x28(%rbp),%r10
  add    %r11,%r10
  movupd (%rax),%xmm0
  movupd (%rdx),%xmm1
  movupd (%rcx),%xmm2
  movupd (%rsi),%xmm3
  movupd (%rdi),%xmm4
  movupd (%r8),%xmm5
  movupd (%r9),%xmm6
  movupd (%r10),%xmm7
  movapd %xmm0,%xmm8
  movapd %xmm0,%xmm9
  addpd  %xmm1,%xmm8
  subpd  %xmm1,%xmm9
  movapd %xmm2,%xmm10
  movapd %xmm2,%xmm11
  addpd  %xmm3,%xmm10
  subpd  %xmm3,%xmm11
  movapd %xmm4,%xmm12
  movapd %xmm4,%xmm13
  addpd  %xmm5,%xmm12
  subpd  %xmm5,%xmm13
  movapd %xmm6,%xmm14
  movapd %xmm6,%xmm15
  addpd  %xmm7,%xmm14
  subpd  %xmm7,%xmm15
  movapd %xmm8,%xmm0
  movapd %xmm8,%xmm2
  addpd  %xmm10,%xmm0
  subpd  %xmm10,%xmm2
  movapd %xmm9,%xmm1
  movapd %xmm9,%xmm3
  addpd  %xmm11,%xmm1
  subpd  %xmm11,%xmm3
  movapd %xmm12,%xmm4
  movapd %xmm12,%xmm6
  addpd  %xmm14,%xmm4
  subpd  %xmm14,%xmm6
  movapd %xmm13,%xmm5
  movapd %xmm13,%xmm7
  addpd  %xmm15,%xmm5
  subpd  %xmm15,%xmm7
  movapd %xmm0,%xmm8
  movapd %xmm0,%xmm12
  addpd  %xmm4,%xmm8
  subpd  %xmm4,%xmm12
  movapd %xmm1,%xmm9
  movapd %xmm1,%xmm13
  addpd  %xmm5,%xmm9
  subpd  %xmm5,%xmm13
  movapd %xmm2,%xmm10
  movapd %xmm2,%xmm14
  addpd  %xmm6,%xmm10
  subpd  %xmm6,%xmm14
  movapd %xmm3,%xmm11
  movapd %xmm3,%xmm15
  addpd  %xmm7,%xmm11
  subpd  %xmm7,%xmm15
  movupd %xmm8,(%rax)
  movupd %xmm9,(%rdx)
  movupd %xmm10,(%rcx)
  movupd %xmm11,(%rsi)
  movupd %xmm12,(%rdi)
  movupd %xmm13,(%r8)
  movupd %xmm14,(%r9)
  movupd %xmm15,(%r10)
  addl   $0x2,-0xc(%rbp)
L60:
  cmpl   $0x7f,-0xc(%rbp)
  jle    L10
  addl   $0x400,-0x10(%rbp)
L126:
  cmpl   $0x3ff,-0x10(%rbp)
  jle    L38
  jmp    L63
L13:
  cmpl   $0xc,-0x2c(%rbp)
  jne    L63
  mov    -0x28(%rbp),%rax
  mov    $0xa,%esi
  mov    %rax,%rdi
  call   <helper_double_12_recursive>
  mov    -0x28(%rbp),%rax
  add    $0x2000,%rax
  mov    $0xa,%esi
  mov    %rax,%rdi
  call   <helper_double_12_recursive>
  mov    -0x28(%rbp),%rax
  add    $0x4000,%rax
  mov    $0xa,%esi
  mov    %rax,%rdi
  call   <helper_double_12_recursive>
  mov    -0x28(%rbp),%rax
  add    $0x6000,%rax
  mov    $0xa,%esi
  mov    %rax,%rdi
  call   <helper_double_12_recursive>
  movl   $0x0,-0x8(%rbp)
  jmp    L41
L66:
  movl   $0x0,-0x4(%rbp)
  jmp    L2
L100:
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    -0x8(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x4(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  add    $0x400,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x28(%rbp),%rdx
  add    %rcx,%rdx
  mov    -0x8(%rbp),%ecx
  movslq %ecx,%rsi
  mov    -0x4(%rbp),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  add    $0x800,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x28(%rbp),%rcx
  add    %rsi,%rcx
  mov    -0x8(%rbp),%esi
  movslq %esi,%rdi
  mov    -0x4(%rbp),%esi
  movslq %esi,%rsi
  add    %rdi,%rsi
  add    $0xc00,%rsi
  lea    0x0(,%rsi,8),%rdi
  mov    -0x28(%rbp),%rsi
  add    %rdi,%rsi
  movupd (%rax),%xmm0
  movupd (%rdx),%xmm1
  movupd (%rcx),%xmm2
  movupd (%rsi),%xmm3
  movapd %xmm0,%xmm8
  movapd %xmm0,%xmm9
  addpd  %xmm1,%xmm8
  subpd  %xmm1,%xmm9
  movapd %xmm2,%xmm10
  movapd %xmm2,%xmm11
  addpd  %xmm3,%xmm10
  subpd  %xmm3,%xmm11
  movapd %xmm8,%xmm0
  movapd %xmm8,%xmm2
  addpd  %xmm10,%xmm0
  subpd  %xmm10,%xmm2
  movapd %xmm9,%xmm1
  movapd %xmm9,%xmm3
  addpd  %xmm11,%xmm1
  subpd  %xmm11,%xmm3
  movupd %xmm0,(%rax)
  movupd %xmm1,(%rdx)
  movupd %xmm2,(%rcx)
  movupd %xmm3,(%rsi)
  addl   $0x2,-0x4(%rbp)
L2:
  cmpl   $0x3ff,-0x4(%rbp)
  jle    L100
  addl   $0x1000,-0x8(%rbp)
L41:
  cmpl   $0xfff,-0x8(%rbp)
  jle    L66
  nop
L63:
  leave
  ret
```

assistant: ```c
void helper_double_12_recursive(double *buf, int depth) {
  if (depth == 10) {
    for (int j = 0; j < 1024; j += 16) {
      for (int k = 0; k < 2; k += 2) {
        __asm__ volatile("movupd (%0), %%xmm0\n"
                         "movupd (%1), %%xmm1\n"
                         "movupd (%2), %%xmm2\n"
                         "movupd (%3), %%xmm3\n"
                         "movupd (%4), %%xmm4\n"
                         "movupd (%5), %%xmm5\n"
                         "movupd (%6), %%xmm6\n"
                         "movupd (%7), %%xmm7\n"
                         "movapd %%xmm0, %%xmm8\n"
                         "haddpd %%xmm8, %%xmm8\n"
                         "movapd %%xmm0, %%xmm9\n"
                         "hsubpd %%xmm9, %%xmm9\n"
                         "blendpd $1, %%xmm8, %%xmm9\n"
                         "movapd %%xmm9, %%xmm0\n"
                         "movapd %%xmm1, %%xmm8\n"
                         "haddpd %%xmm8, %%xmm8\n"
                         "movapd %%xmm1, %%xmm9\n"
                         "hsubpd %%xmm9, %%xmm9\n"
                         "blendpd $1, %%xmm8, %%xmm9\n"
                         "movapd %%xmm9, %%xmm1\n"
                         "movapd %%xmm2, %%xmm8\n"
                         "haddpd %%xmm8, %%xmm8\n"
                         "movapd %%xmm2, %%xmm9\n"
                         "hsubpd %%xmm9, %%xmm9\n"
                         "blendpd $1, %%xmm8, %%xmm9\n"
                         "movapd %%xmm9, %%xmm2\n"
                         "movapd %%xmm3, %%xmm8\n"
                         "haddpd %%xmm8, %%xmm8\n"
                         "movapd %%xmm3, %%xmm9\n"
                         "hsubpd %%xmm9, %%xmm9\n"
                         "blendpd $1, %%xmm8, %%xmm9\n"
                         "movapd %%xmm9, %%xmm3\n"
                         "movapd %%xmm4, %%xmm8\n"
                         "haddpd %%xmm8, %%xmm8\n"
                         "movapd %%xmm4, %%xmm9\n"
                         "hsubpd %%xmm9, %%xmm9\n"
                         "blendpd $1, %%xmm8, %%xmm9\n"
                         "movapd %%xmm9, %%xmm4\n"
                         "movapd %%xmm5, %%xmm8\n"
                         "haddpd %%xmm8, %%xmm8\n"
                         "movapd %%xmm5, %%xmm9\n"
                         "hsubpd %%xmm9, %%xmm9\n"
                         "blendpd $1, %%xmm8, %%xmm9\n"
                         "movapd %%xmm9, %%xmm5\n"
                         "movapd %%xmm6, %%xmm8\n"
                         "haddpd %%xmm8, %%xmm8\n"
                         "movapd %%xmm6, %%xmm9\n"
                         "hsubpd %%xmm9, %%xmm9\n"
                         "blendpd $1, %%xmm8, %%xmm9\n"
                         "movapd %%xmm9, %%xmm6\n"
                         "movapd %%xmm7, %%xmm8\n"
                         "haddpd %%xmm8, %%xmm8\n"
                         "movapd %%xmm7, %%xmm9\n"
                         "hsubpd %%xmm9, %%xmm9\n"
                         "blendpd $1, %%xmm8, %%xmm9\n"
                         "movapd %%xmm9, %%xmm7\n"
                         "movapd %%xmm0, %%xmm8\n"
                         "movapd %%xmm0, %%xmm9\n"
                         "addpd %%xmm1, %%xmm8\n"
                         "subpd %%xmm1, %%xmm9\n"
                         "movapd %%xmm2, %%xmm10\n"
                         "movapd %%xmm2, %%xmm11\n"
                         "addpd %%xmm3, %%xmm10\n"
                         "subpd %%xmm3, %%xmm11\n"
                         "movapd %%xmm4, %%xmm12\n"
                         "movapd %%xmm4, %%xmm13\n"
                         "addpd %%xmm5, %%xmm12\n"
                         "subpd %%xmm5, %%xmm13\n"
                         "movapd %%xmm6, %%xmm14\n"
                         "movapd %%xmm6, %%xmm15\n"
                         "addpd %%xmm7, %%xmm14\n"
                         "subpd %%xmm7, %%xmm15\n"
                         "movapd %%xmm8, %%xmm0\n"
                         "movapd %%xmm8, %%xmm2\n"
                         "addpd %%xmm10, %%xmm0\n"
                         "subpd %%xmm10, %%xmm2\n"
                         "movapd %%xmm9, %%xmm1\n"
                         "movapd %%xmm9, %%xmm3\n"
                         "addpd %%xmm11, %%xmm1\n"
                         "subpd %%xmm11, %%xmm3\n"
                         "movapd %%xmm12, %%xmm4\n"
                         "movapd %%xmm12, %%xmm6\n"
                         "addpd %%xmm14, %%xmm4\n"
                         "subpd %%xmm14, %%xmm6\n"
                         "movapd %%xmm13, %%xmm5\n"
                         "movapd %%xmm13, %%xmm7\n"
                         "addpd %%xmm15, %%xmm5\n"
                         "subpd %%xmm15, %%xmm7\n"
                         "movapd %%xmm0, %%xmm8\n"
                         "movapd %%xmm0, %%xmm12\n"
                         "addpd %%xmm4, %%xmm8\n"
                         "subpd %%xmm4, %%xmm12\n"
                         "movapd %%xmm1, %%xmm9\n"
                         "movapd %%xmm1, %%xmm13\n"
                         "addpd %%xmm5, %%xmm9\n"
                         "subpd %%xmm5, %%xmm13\n"
                         "movapd %%xmm2, %%xmm10\n"
                         "movapd %%xmm2, %%xmm14\n"
                         "addpd %%xmm6, %%xmm10\n"
                         "subpd %%xmm6, %%xmm14\n"
                         "movapd %%xmm3, %%xmm11\n"
                         "movapd %%xmm3, %%xmm15\n"
                         "addpd %%xmm7, %%xmm11\n"
                         "subpd %%xmm7, %%xmm15\n"
                         "movupd %%xmm8, (%0)\n"
                         "movupd %%xmm9, (%1)\n"
                         "movupd %%xmm10, (%2)\n"
                         "movupd %%xmm11, (%3)\n"
                         "movupd %%xmm12, (%4)\n"
                         "movupd %%xmm13, (%5)\n"
                         "movupd %%xmm14, (%6)\n"
                         "movupd %%xmm15, (%7)\n" ::"r"(buf + j + k + 0),
                         "r"(buf + j + k + 2), "r"(buf + j + k + 4), "r"(buf + j + k + 6), "r"(buf + j + k + 8), "r"(buf + j + k + 10), "r"(buf + j + k + 12), "r"(buf + j + k + 14)
                         : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7", "%xmm8", "%xmm9", "%xmm10", "%xmm11", "%xmm12", "%xmm13", "%xmm14", "%xmm15", "memory");
      }
    }
    for (int j = 0; j < 1024; j += 128) {
      for (int k = 0; k < 16; k += 2) {
        __asm__ volatile("movupd (%0), %%xmm0\n"
                         "movupd (%1), %%xmm1\n"
                         "movupd (%2), %%xmm2\n"
                         "movupd (%3), %%xmm3\n"
                         "movupd (%4), %%xmm4\n"
                         "movupd (%5), %%xmm5\n"
                         "movupd (%6), %%xmm6\n"
                         "movupd (%7), %%xmm7\n"
                         "movapd %%xmm0, %%xmm8\n"
                         "movapd %%xmm0, %%xmm9\n"
                         "addpd %%xmm1, %%xmm8\n"
                         "subpd %%xmm1, %%xmm9\n"
                         "movapd %%xmm2, %%xmm10\n"
                         "movapd %%xmm2, %%xmm11\n"
                         "addpd %%xmm3, %%xmm10\n"
                         "subpd %%xmm3, %%xmm11\n"
                         "movapd %%xmm4, %%xmm12\n"
                         "movapd %%xmm4, %%xmm13\n"
                         "addpd %%xmm5, %%xmm12\n"
                         "subpd %%xmm5, %%xmm13\n"
                         "movapd %%xmm6, %%xmm14\n"
                         "movapd %%xmm6, %%xmm15\n"
                         "addpd %%xmm7, %%xmm14\n"
                         "subpd %%xmm7, %%xmm15\n"
                         "movapd %%xmm8, %%xmm0\n"
                         "movapd %%xmm8, %%xmm2\n"
                         "addpd %%xmm10, %%xmm0\n"
                         "subpd %%xmm10, %%xmm2\n"
                         "movapd %%xmm9, %%xmm1\n"
                         "movapd %%xmm9, %%xmm3\n"
                         "addpd %%xmm11, %%xmm1\n"
                         "subpd %%xmm11, %%xmm3\n"
                         "movapd %%xmm12, %%xmm4\n"
                         "movapd %%xmm12, %%xmm6\n"
                         "addpd %%xmm14, %%xmm4\n"
                         "subpd %%xmm14, %%xmm6\n"
                         "movapd %%xmm13, %%xmm5\n"
                         "movapd %%xmm13, %%xmm7\n"
                         "addpd %%xmm15, %%xmm5\n"
                         "subpd %%xmm15, %%xmm7\n"
                         "movapd %%xmm0, %%xmm8\n"
                         "movapd %%xmm0, %%xmm12\n"
                         "addpd %%xmm4, %%xmm8\n"
                         "subpd %%xmm4, %%xmm12\n"
                         "movapd %%xmm1, %%xmm9\n"
                         "movapd %%xmm1, %%xmm13\n"
                         "addpd %%xmm5, %%xmm9\n"
                         "subpd %%xmm5, %%xmm13\n"
                         "movapd %%xmm2, %%xmm10\n"
                         "movapd %%xmm2, %%xmm14\n"
                         "addpd %%xmm6, %%xmm10\n"
                         "subpd %%xmm6, %%xmm14\n"
                         "movapd %%xmm3, %%xmm11\n"
                         "movapd %%xmm3, %%xmm15\n"
                         "addpd %%xmm7, %%xmm11\n"
                         "subpd %%xmm7, %%xmm15\n"
                         "movupd %%xmm8, (%0)\n"
                         "movupd %%xmm9, (%1)\n"
                         "movupd %%xmm10, (%2)\n"
                         "movupd %%xmm11, (%3)\n"
                         "movupd %%xmm12, (%4)\n"
                         "movupd %%xmm13, (%5)\n"
                         "movupd %%xmm14, (%6)\n"
                         "movupd %%xmm15, (%7)\n" ::"r"(buf + j + k + 0),
                         "r"(buf + j + k + 16), "r"(buf + j + k + 32), "r"(buf + j + k + 48), "r"(buf + j + k + 64), "r"(buf + j + k + 80), "r"(buf + j + k + 96), "r"(buf + j + k + 112)
                         : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7", "%xmm8", "%xmm9", "%xmm10", "%xmm11", "%xmm12", "%xmm13", "%xmm14", "%xmm15", "memory");
      }
    }
    for (int j = 0; j < 1024; j += 1024) {
      for (int k = 0; k < 128; k += 2) {
        __asm__ volatile("movupd (%0), %%xmm0\n"
                         "movupd (%1), %%xmm1\n"
                         "movupd (%2), %%xmm2\n"
                         "movupd (%3), %%xmm3\n"
                         "movupd (%4), %%xmm4\n"
                         "movupd (%5), %%xmm5\n"
                         "movupd (%6), %%xmm6\n"
                         "movupd (%7), %%xmm7\n"
                         "movapd %%xmm0, %%xmm8\n"
                         "movapd %%xmm0, %%xmm9\n"
                         "addpd %%xmm1, %%xmm8\n"
                         "subpd %%xmm1, %%xmm9\n"
                         "movapd %%xmm2, %%xmm10\n"
                         "movapd %%xmm2, %%xmm11\n"
                         "addpd %%xmm3, %%xmm10\n"
                         "subpd %%xmm3, %%xmm11\n"
                         "movapd %%xmm4, %%xmm12\n"
                         "movapd %%xmm4, %%xmm13\n"
                         "addpd %%xmm5, %%xmm12\n"
                         "subpd %%xmm5, %%xmm13\n"
                         "movapd %%xmm6, %%xmm14\n"
                         "movapd %%xmm6, %%xmm15\n"
                         "addpd %%xmm7, %%xmm14\n"
                         "subpd %%xmm7, %%xmm15\n"
                         "movapd %%xmm8, %%xmm0\n"
                         "movapd %%xmm8, %%xmm2\n"
                         "addpd %%xmm10, %%xmm0\n"
                         "subpd %%xmm10, %%xmm2\n"
                         "movapd %%xmm9, %%xmm1\n"
                         "movapd %%xmm9, %%xmm3\n"
                         "addpd %%xmm11, %%xmm1\n"
                         "subpd %%xmm11, %%xmm3\n"
                         "movapd %%xmm12, %%xmm4\n"
                         "movapd %%xmm12, %%xmm6\n"
                         "addpd %%xmm14, %%xmm4\n"
                         "subpd %%xmm14, %%xmm6\n"
                         "movapd %%xmm13, %%xmm5\n"
                         "movapd %%xmm13, %%xmm7\n"
                         "addpd %%xmm15, %%xmm5\n"
                         "subpd %%xmm15, %%xmm7\n"
                         "movapd %%xmm0, %%xmm8\n"
                         "movapd %%xmm0, %%xmm12\n"
                         "addpd %%xmm4, %%xmm8\n"
                         "subpd %%xmm4, %%xmm12\n"
                         "movapd %%xmm1, %%xmm9\n"
                         "movapd %%xmm1, %%xmm13\n"
                         "addpd %%xmm5, %%xmm9\n"
                         "subpd %%xmm5, %%xmm13\n"
                         "movapd %%xmm2, %%xmm10\n"
                         "movapd %%xmm2, %%xmm14\n"
                         "addpd %%xmm6, %%xmm10\n"
                         "subpd %%xmm6, %%xmm14\n"
                         "movapd %%xmm3, %%xmm11\n"
                         "movapd %%xmm3, %%xmm15\n"
                         "addpd %%xmm7, %%xmm11\n"
                         "subpd %%xmm7, %%xmm15\n"
                         "movupd %%xmm8, (%0)\n"
                         "movupd %%xmm9, (%1)\n"
                         "movupd %%xmm10, (%2)\n"
                         "movupd %%xmm11, (%3)\n"
                         "movupd %%xmm12, (%4)\n"
                         "movupd %%xmm13, (%5)\n"
                         "movupd %%xmm14, (%6)\n"
                         "movupd %%xmm15, (%7)\n" ::"r"(buf + j + k + 0),
                         "r"(buf + j + k + 128), "r"(buf + j + k + 256), "r"(buf + j + k + 384), "r"(buf + j + k + 512), "r"(buf + j + k + 640), "r"(buf + j + k + 768), "r"(buf + j + k + 896)
                         : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7", "%xmm8", "%xmm9", "%xmm10", "%xmm11", "%xmm12", "%xmm13", "%xmm14", "%xmm15", "memory");
      }
    }
    return;
  }
  if (depth == 12) {
    helper_double_12_recursive(buf + 0, 10);
    helper_double_12_recursive(buf + 1024, 10);
    helper_double_12_recursive(buf + 2048, 10);
    helper_double_12_recursive(buf + 3072, 10);
    for (int j = 0; j < 4096; j += 4096) {
      for (int k = 0; k < 1024; k += 2) {
        __asm__ volatile("movupd (%0), %%xmm0\n"
                         "movupd (%1), %%xmm1\n"
                         "movupd (%2), %%xmm2\n"
                         "movupd (%3), %%xmm3\n"
                         "movapd %%xmm0, %%xmm8\n"
                         "movapd %%xmm0, %%xmm9\n"
                         "addpd %%xmm1, %%xmm8\n"
                         "subpd %%xmm1, %%xmm9\n"
                         "movapd %%xmm2, %%xmm10\n"
                         "movapd %%xmm2, %%xmm11\n"
                         "addpd %%xmm3, %%xmm10\n"
                         "subpd %%xmm3, %%xmm11\n"
                         "movapd %%xmm8, %%xmm0\n"
                         "movapd %%xmm8, %%xmm2\n"
                         "addpd %%xmm10, %%xmm0\n"
                         "subpd %%xmm10, %%xmm2\n"
                         "movapd %%xmm9, %%xmm1\n"
                         "movapd %%xmm9, %%xmm3\n"
                         "addpd %%xmm11, %%xmm1\n"
                         "subpd %%xmm11, %%xmm3\n"
                         "movupd %%xmm0, (%0)\n"
                         "movupd %%xmm1, (%1)\n"
                         "movupd %%xmm2, (%2)\n"
                         "movupd %%xmm3, (%3)\n" ::"r"(buf + j + k + 0),
                         "r"(buf + j + k + 1024), "r"(buf + j + k + 2048), "r"(buf + j + k + 3072)
                         : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7", "%xmm8", "%xmm9", "%xmm10", "%xmm11", "%xmm12", "%xmm13", "%xmm14", "%xmm15", "memory");
      }
    }
    return;
  }
}
```