user: 下面的汇编指令对应的C源代码是什么：

```asm
<helper_double_21_recursive>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %esi,-0x4c(%rbp)
  cmpl   $0xd,-0x4c(%rbp)
  jne    L105
  movl   $0x0,-0x38(%rbp)
  jmp    L308
L68:
  movl   $0x0,-0x34(%rbp)
  jmp    L221
L20:
  mov    -0x38(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x34(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    -0x38(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x34(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  add    $0x2,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x48(%rbp),%rdx
  add    %rcx,%rdx
  mov    -0x38(%rbp),%ecx
  movslq %ecx,%rsi
  mov    -0x34(%rbp),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  add    $0x4,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x48(%rbp),%rcx
  add    %rsi,%rcx
  mov    -0x38(%rbp),%esi
  movslq %esi,%rdi
  mov    -0x34(%rbp),%esi
  movslq %esi,%rsi
  add    %rdi,%rsi
  add    $0x6,%rsi
  lea    0x0(,%rsi,8),%rdi
  mov    -0x48(%rbp),%rsi
  add    %rdi,%rsi
  mov    -0x38(%rbp),%edi
  movslq %edi,%r8
  mov    -0x34(%rbp),%edi
  movslq %edi,%rdi
  add    %r8,%rdi
  add    $0x8,%rdi
  lea    0x0(,%rdi,8),%r8
  mov    -0x48(%rbp),%rdi
  add    %r8,%rdi
  mov    -0x38(%rbp),%r8d
  movslq %r8d,%r9
  mov    -0x34(%rbp),%r8d
  movslq %r8d,%r8
  add    %r9,%r8
  add    $0xa,%r8
  lea    0x0(,%r8,8),%r9
  mov    -0x48(%rbp),%r8
  add    %r9,%r8
  mov    -0x38(%rbp),%r9d
  movslq %r9d,%r10
  mov    -0x34(%rbp),%r9d
  movslq %r9d,%r9
  add    %r10,%r9
  add    $0xc,%r9
  lea    0x0(,%r9,8),%r10
  mov    -0x48(%rbp),%r9
  add    %r10,%r9
  mov    -0x38(%rbp),%r10d
  movslq %r10d,%r11
  mov    -0x34(%rbp),%r10d
  movslq %r10d,%r10
  add    %r11,%r10
  add    $0xe,%r10
  lea    0x0(,%r10,8),%r11
  mov    -0x48(%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,-0x34(%rbp)
L221:
  cmpl   $0x1,-0x34(%rbp)
  jle    L20
  addl   $0x10,-0x38(%rbp)
L308:
  cmpl   $0x1fff,-0x38(%rbp)
  jle    L68
  movl   $0x0,-0x30(%rbp)
  jmp    L95
L218:
  movl   $0x0,-0x2c(%rbp)
  jmp    L127
L209:
  mov    -0x30(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x2c(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    -0x30(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x2c(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  add    $0x10,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x48(%rbp),%rdx
  add    %rcx,%rdx
  mov    -0x30(%rbp),%ecx
  movslq %ecx,%rsi
  mov    -0x2c(%rbp),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  add    $0x20,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x48(%rbp),%rcx
  add    %rsi,%rcx
  mov    -0x30(%rbp),%esi
  movslq %esi,%rdi
  mov    -0x2c(%rbp),%esi
  movslq %esi,%rsi
  add    %rdi,%rsi
  add    $0x30,%rsi
  lea    0x0(,%rsi,8),%rdi
  mov    -0x48(%rbp),%rsi
  add    %rdi,%rsi
  mov    -0x30(%rbp),%edi
  movslq %edi,%r8
  mov    -0x2c(%rbp),%edi
  movslq %edi,%rdi
  add    %r8,%rdi
  add    $0x40,%rdi
  lea    0x0(,%rdi,8),%r8
  mov    -0x48(%rbp),%rdi
  add    %r8,%rdi
  mov    -0x30(%rbp),%r8d
  movslq %r8d,%r9
  mov    -0x2c(%rbp),%r8d
  movslq %r8d,%r8
  add    %r9,%r8
  add    $0x50,%r8
  lea    0x0(,%r8,8),%r9
  mov    -0x48(%rbp),%r8
  add    %r9,%r8
  mov    -0x30(%rbp),%r9d
  movslq %r9d,%r10
  mov    -0x2c(%rbp),%r9d
  movslq %r9d,%r9
  add    %r10,%r9
  add    $0x60,%r9
  lea    0x0(,%r9,8),%r10
  mov    -0x48(%rbp),%r9
  add    %r10,%r9
  mov    -0x30(%rbp),%r10d
  movslq %r10d,%r11
  mov    -0x2c(%rbp),%r10d
  movslq %r10d,%r10
  add    %r11,%r10
  add    $0x70,%r10
  lea    0x0(,%r10,8),%r11
  mov    -0x48(%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,-0x2c(%rbp)
L127:
  cmpl   $0xf,-0x2c(%rbp)
  jle    L209
  subl   $0xffffff80,-0x30(%rbp)
L95:
  cmpl   $0x1fff,-0x30(%rbp)
  jle    L218
  movl   $0x0,-0x28(%rbp)
  jmp    L258
L239:
  movl   $0x0,-0x24(%rbp)
  jmp    L279
L264:
  mov    -0x28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x24(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    -0x28(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x24(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  sub    $0xffffffffffffff80,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x48(%rbp),%rdx
  add    %rcx,%rdx
  mov    -0x28(%rbp),%ecx
  movslq %ecx,%rsi
  mov    -0x24(%rbp),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  add    $0x100,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x48(%rbp),%rcx
  add    %rsi,%rcx
  mov    -0x28(%rbp),%esi
  movslq %esi,%rdi
  mov    -0x24(%rbp),%esi
  movslq %esi,%rsi
  add    %rdi,%rsi
  add    $0x180,%rsi
  lea    0x0(,%rsi,8),%rdi
  mov    -0x48(%rbp),%rsi
  add    %rdi,%rsi
  mov    -0x28(%rbp),%edi
  movslq %edi,%r8
  mov    -0x24(%rbp),%edi
  movslq %edi,%rdi
  add    %r8,%rdi
  add    $0x200,%rdi
  lea    0x0(,%rdi,8),%r8
  mov    -0x48(%rbp),%rdi
  add    %r8,%rdi
  mov    -0x28(%rbp),%r8d
  movslq %r8d,%r9
  mov    -0x24(%rbp),%r8d
  movslq %r8d,%r8
  add    %r9,%r8
  add    $0x280,%r8
  lea    0x0(,%r8,8),%r9
  mov    -0x48(%rbp),%r8
  add    %r9,%r8
  mov    -0x28(%rbp),%r9d
  movslq %r9d,%r10
  mov    -0x24(%rbp),%r9d
  movslq %r9d,%r9
  add    %r10,%r9
  add    $0x300,%r9
  lea    0x0(,%r9,8),%r10
  mov    -0x48(%rbp),%r9
  add    %r10,%r9
  mov    -0x28(%rbp),%r10d
  movslq %r10d,%r11
  mov    -0x24(%rbp),%r10d
  movslq %r10d,%r10
  add    %r11,%r10
  add    $0x380,%r10
  lea    0x0(,%r10,8),%r11
  mov    -0x48(%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,-0x24(%rbp)
L279:
  cmpl   $0x7f,-0x24(%rbp)
  jle    L264
  addl   $0x400,-0x28(%rbp)
L258:
  cmpl   $0x1fff,-0x28(%rbp)
  jle    L239
  movl   $0x0,-0x20(%rbp)
  jmp    L252
L322:
  movl   $0x0,-0x1c(%rbp)
  jmp    L133
L106:
  mov    -0x20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x1c(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    -0x20(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x1c(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  add    $0x400,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x48(%rbp),%rdx
  add    %rcx,%rdx
  mov    -0x20(%rbp),%ecx
  movslq %ecx,%rsi
  mov    -0x1c(%rbp),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  add    $0x800,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x48(%rbp),%rcx
  add    %rsi,%rcx
  mov    -0x20(%rbp),%esi
  movslq %esi,%rdi
  mov    -0x1c(%rbp),%esi
  movslq %esi,%rsi
  add    %rdi,%rsi
  add    $0xc00,%rsi
  lea    0x0(,%rsi,8),%rdi
  mov    -0x48(%rbp),%rsi
  add    %rdi,%rsi
  mov    -0x20(%rbp),%edi
  movslq %edi,%r8
  mov    -0x1c(%rbp),%edi
  movslq %edi,%rdi
  add    %r8,%rdi
  add    $0x1000,%rdi
  lea    0x0(,%rdi,8),%r8
  mov    -0x48(%rbp),%rdi
  add    %r8,%rdi
  mov    -0x20(%rbp),%r8d
  movslq %r8d,%r9
  mov    -0x1c(%rbp),%r8d
  movslq %r8d,%r8
  add    %r9,%r8
  add    $0x1400,%r8
  lea    0x0(,%r8,8),%r9
  mov    -0x48(%rbp),%r8
  add    %r9,%r8
  mov    -0x20(%rbp),%r9d
  movslq %r9d,%r10
  mov    -0x1c(%rbp),%r9d
  movslq %r9d,%r9
  add    %r10,%r9
  add    $0x1800,%r9
  lea    0x0(,%r9,8),%r10
  mov    -0x48(%rbp),%r9
  add    %r10,%r9
  mov    -0x20(%rbp),%r10d
  movslq %r10d,%r11
  mov    -0x1c(%rbp),%r10d
  movslq %r10d,%r10
  add    %r11,%r10
  add    $0x1c00,%r10
  lea    0x0(,%r10,8),%r11
  mov    -0x48(%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,-0x1c(%rbp)
L133:
  cmpl   $0x3ff,-0x1c(%rbp)
  jle    L106
  addl   $0x2000,-0x20(%rbp)
L252:
  cmpl   $0x1fff,-0x20(%rbp)
  jle    L322
  jmp    L238
L105:
  cmpl   $0x10,-0x4c(%rbp)
  jne    L313
  mov    -0x48(%rbp),%rax
  mov    $0xd,%esi
  mov    %rax,%rdi
  call   <helper_double_21_recursive>
  mov    -0x48(%rbp),%rax
  add    $0x10000,%rax
  mov    $0xd,%esi
  mov    %rax,%rdi
  call   <helper_double_21_recursive>
  mov    -0x48(%rbp),%rax
  add    $0x20000,%rax
  mov    $0xd,%esi
  mov    %rax,%rdi
  call   <helper_double_21_recursive>
  mov    -0x48(%rbp),%rax
  add    $0x30000,%rax
  mov    $0xd,%esi
  mov    %rax,%rdi
  call   <helper_double_21_recursive>
  mov    -0x48(%rbp),%rax
  add    $0x40000,%rax
  mov    $0xd,%esi
  mov    %rax,%rdi
  call   <helper_double_21_recursive>
  mov    -0x48(%rbp),%rax
  add    $0x50000,%rax
  mov    $0xd,%esi
  mov    %rax,%rdi
  call   <helper_double_21_recursive>
  mov    -0x48(%rbp),%rax
  add    $0x60000,%rax
  mov    $0xd,%esi
  mov    %rax,%rdi
  call   <helper_double_21_recursive>
  mov    -0x48(%rbp),%rax
  add    $0x70000,%rax
  mov    $0xd,%esi
  mov    %rax,%rdi
  call   <helper_double_21_recursive>
  movl   $0x0,-0x18(%rbp)
  jmp    L237
L199:
  movl   $0x0,-0x14(%rbp)
  jmp    L58
L334:
  mov    -0x18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x14(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    -0x18(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x14(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  add    $0x2000,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x48(%rbp),%rdx
  add    %rcx,%rdx
  mov    -0x18(%rbp),%ecx
  movslq %ecx,%rsi
  mov    -0x14(%rbp),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  add    $0x4000,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x48(%rbp),%rcx
  add    %rsi,%rcx
  mov    -0x18(%rbp),%esi
  movslq %esi,%rdi
  mov    -0x14(%rbp),%esi
  movslq %esi,%rsi
  add    %rdi,%rsi
  add    $0x6000,%rsi
  lea    0x0(,%rsi,8),%rdi
  mov    -0x48(%rbp),%rsi
  add    %rdi,%rsi
  mov    -0x18(%rbp),%edi
  movslq %edi,%r8
  mov    -0x14(%rbp),%edi
  movslq %edi,%rdi
  add    %r8,%rdi
  add    $0x8000,%rdi
  lea    0x0(,%rdi,8),%r8
  mov    -0x48(%rbp),%rdi
  add    %r8,%rdi
  mov    -0x18(%rbp),%r8d
  movslq %r8d,%r9
  mov    -0x14(%rbp),%r8d
  movslq %r8d,%r8
  add    %r9,%r8
  add    $0xa000,%r8
  lea    0x0(,%r8,8),%r9
  mov    -0x48(%rbp),%r8
  add    %r9,%r8
  mov    -0x18(%rbp),%r9d
  movslq %r9d,%r10
  mov    -0x14(%rbp),%r9d
  movslq %r9d,%r9
  add    %r10,%r9
  add    $0xc000,%r9
  lea    0x0(,%r9,8),%r10
  mov    -0x48(%rbp),%r9
  add    %r10,%r9
  mov    -0x18(%rbp),%r10d
  movslq %r10d,%r11
  mov    -0x14(%rbp),%r10d
  movslq %r10d,%r10
  add    %r11,%r10
  add    $0xe000,%r10
  lea    0x0(,%r10,8),%r11
  mov    -0x48(%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)
L58:
  cmpl   $0x1fff,-0x14(%rbp)
  jle    L334
  addl   $0x10000,-0x18(%rbp)
L237:
  cmpl   $0xffff,-0x18(%rbp)
  jle    L199
  jmp    L238
L313:
  cmpl   $0x13,-0x4c(%rbp)
  jne    L3
  mov    -0x48(%rbp),%rax
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <helper_double_21_recursive>
  mov    -0x48(%rbp),%rax
  add    $0x80000,%rax
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <helper_double_21_recursive>
  mov    -0x48(%rbp),%rax
  add    $0x100000,%rax
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <helper_double_21_recursive>
  mov    -0x48(%rbp),%rax
  add    $0x180000,%rax
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <helper_double_21_recursive>
  mov    -0x48(%rbp),%rax
  add    $0x200000,%rax
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <helper_double_21_recursive>
  mov    -0x48(%rbp),%rax
  add    $0x280000,%rax
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <helper_double_21_recursive>
  mov    -0x48(%rbp),%rax
  add    $0x300000,%rax
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <helper_double_21_recursive>
  mov    -0x48(%rbp),%rax
  add    $0x380000,%rax
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <helper_double_21_recursive>
  movl   $0x0,-0x10(%rbp)
  jmp    L228
L62:
  movl   $0x0,-0xc(%rbp)
  jmp    L187
L150:
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    -0xc(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    -0x10(%rbp),%edx
  movslq %edx,%rcx
  mov    -0xc(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  add    $0x10000,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x48(%rbp),%rdx
  add    %rcx,%rdx
  mov    -0x10(%rbp),%ecx
  movslq %ecx,%rsi
  mov    -0xc(%rbp),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  add    $0x20000,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x48(%rbp),%rcx
  add    %rsi,%rcx
  mov    -0x10(%rbp),%esi
  movslq %esi,%rdi
  mov    -0xc(%rbp),%esi
  movslq %esi,%rsi
  add    %rdi,%rsi
  add    $0x30000,%rsi
  lea    0x0(,%rsi,8),%rdi
  mov    -0x48(%rbp),%rsi
  add    %rdi,%rsi
  mov    -0x10(%rbp),%edi
  movslq %edi,%r8
  mov    -0xc(%rbp),%edi
  movslq %edi,%rdi
  add    %r8,%rdi
  add    $0x40000,%rdi
  lea    0x0(,%rdi,8),%r8
  mov    -0x48(%rbp),%rdi
  add    %r8,%rdi
  mov    -0x10(%rbp),%r8d
  movslq %r8d,%r9
  mov    -0xc(%rbp),%r8d
  movslq %r8d,%r8
  add    %r9,%r8
  add    $0x50000,%r8
  lea    0x0(,%r8,8),%r9
  mov    -0x48(%rbp),%r8
  add    %r9,%r8
  mov    -0x10(%rbp),%r9d
  movslq %r9d,%r10
  mov    -0xc(%rbp),%r9d
  movslq %r9d,%r9
  add    %r10,%r9
  add    $0x60000,%r9
  lea    0x0(,%r9,8),%r10
  mov    -0x48(%rbp),%r9
  add    %r10,%r9
  mov    -0x10(%rbp),%r10d
  movslq %r10d,%r11
  mov    -0xc(%rbp),%r10d
  movslq %r10d,%r10
  add    %r11,%r10
  add    $0x70000,%r10
  lea    0x0(,%r10,8),%r11
  mov    -0x48(%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)
L187:
  cmpl   $0xffff,-0xc(%rbp)
  jle    L150
  addl   $0x80000,-0x10(%rbp)
L228:
  cmpl   $0x7ffff,-0x10(%rbp)
  jle    L62
  jmp    L238
L3:
  cmpl   $0x15,-0x4c(%rbp)
  jne    L238
  mov    -0x48(%rbp),%rax
  mov    $0x13,%esi
  mov    %rax,%rdi
  call   <helper_double_21_recursive>
  mov    -0x48(%rbp),%rax
  add    $0x400000,%rax
  mov    $0x13,%esi
  mov    %rax,%rdi
  call   <helper_double_21_recursive>
  mov    -0x48(%rbp),%rax
  add    $0x800000,%rax
  mov    $0x13,%esi
  mov    %rax,%rdi
  call   <helper_double_21_recursive>
  mov    -0x48(%rbp),%rax
  add    $0xc00000,%rax
  mov    $0x13,%esi
  mov    %rax,%rdi
  call   <helper_double_21_recursive>
  movl   $0x0,-0x8(%rbp)
  jmp    L128
L299:
  movl   $0x0,-0x4(%rbp)
  jmp    L9
L318:
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    -0x8(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x4(%rbp),%edx
  movslq %edx,%rdx
  add    %rcx,%rdx
  add    $0x80000,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x48(%rbp),%rdx
  add    %rcx,%rdx
  mov    -0x8(%rbp),%ecx
  movslq %ecx,%rsi
  mov    -0x4(%rbp),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  add    $0x100000,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x48(%rbp),%rcx
  add    %rsi,%rcx
  mov    -0x8(%rbp),%esi
  movslq %esi,%rdi
  mov    -0x4(%rbp),%esi
  movslq %esi,%rsi
  add    %rdi,%rsi
  add    $0x180000,%rsi
  lea    0x0(,%rsi,8),%rdi
  mov    -0x48(%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)
L9:
  cmpl   $0x7ffff,-0x4(%rbp)
  jle    L318
  addl   $0x200000,-0x8(%rbp)
L128:
  cmpl   $0x1fffff,-0x8(%rbp)
  jle    L299
  nop
L238:
  leave
  ret
```

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