user: Demonstrate the C code that generates the assembly output below:

```asm
<sp2fctest>:
  endbr64
  push   %r15
  mov    %rdi,%rax
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xd8,%rsp
  mov    %rdx,0xc0(%rsp)
  mov    0x110(%rsp),%edi
  mov    0x110(%rsp),%edx
  mov    %ecx,0xc8(%rsp)
  add    $0x1,%edi
  mov    %r8d,0x1c(%rsp)
  add    $0x2,%edx
  mov    %edi,0xcc(%rsp)
  imul   %edi,%edx
  test   %ecx,%ecx
  jle    L29
  mov    %r9d,%ecx
  mov    %r8d,%ebx
  movslq %edx,%rdx
  mov    %rax,0x98(%rsp)
  imul   %r8d,%ecx
  mov    %rsi,0x90(%rsp)
  movl   $0x0,0xa8(%rsp)
  movslq %ecx,%rdi
  shl    $0x3,%ecx
  shl    $0x3,%rdi
  mov    %ecx,0xac(%rsp)
  movslq %r8d,%rcx
  shr    $0x1f,%r8d
  add    %ebx,%r8d
  mov    %rdi,0xb0(%rsp)
  lea    0x0(,%rdx,8),%rdi
  mov    %rcx,%rdx
  shl    $0x4,%rdx
  mov    %r8d,%r10d
  lea    (%rbx,%rbx,1),%r8d
  mov    %rdi,0xb8(%rsp)
  sar    %r10d
  lea    (%rsi,%rdx,1),%rax
  movslq %r8d,%r8
  mov    %rax,0xa0(%rsp)
  mov    %r10d,%esi
  mov    $0x8,%eax
  shl    $0x3,%r8
  shl    $0x3,%rsi
  mov    %rax,%r15
  cmp    $0x1,%ebx
  mov    %r8,0x68(%rsp)
  cmovg  %rsi,%r15
  lea    0x0(,%rcx,8),%r14
  sub    %rsi,%rax
  xor    %esi,%esi
  cmp    $0x1,%ebx
  mov    %r14,0x10(%rsp)
  cmovle %rsi,%rax
  lea    -0x10(%r14),%rsi
  mov    %r15,0x38(%rsp)
  cmp    %rdx,%rsi
  lea    -0x10(%rdx),%rsi
  mov    %r10d,0x88(%rsp)
  setge  %dil
  cmp    %r14,%rsi
  lea    -0x8(%rdx,%rax,1),%r11
  setge  %sil
  mov    %r11,0x70(%rsp)
  or     %edi,%esi
  cmp    $0x3,%ebx
  setg   %dil
  and    %edi,%esi
  mov    %r14,%rdi
  add    %r15,%r14
  cmp    %r11,%r14
  mov    %esi,%r8d
  mov    %rdi,%r14
  setle  %sil
  cmp    %rdi,%rdx
  lea    -0x8(%r14,%rax,1),%rax
  setle  %dil
  mov    %rax,0x78(%rsp)
  or     %edi,%esi
  mov    %r8d,%edi
  and    %esi,%edi
  cmp    %rax,%r15
  setle  %sil
  test   %r14,%r14
  setle  %al
  or     %eax,%esi
  lea    0x10(%r14),%rax
  test   %rax,%rax
  setle  0x8e(%rsp)
  cmp    %r15,%r11
  setge  %al
  test   %rdx,%rdx
  setle  %dl
  or     %eax,%edx
  cmp    $0x1,%ebx
  mov    $0x1,%eax
  cmovg  %r10d,%eax
  and    %edx,%esi
  and    %edi,%esi
  mov    %eax,%r14d
  mov    %eax,0x40(%rsp)
  shr    %eax
  sub    $0x1,%eax
  and    $0xfffffffe,%r14d
  mov    %sil,0x8f(%rsp)
  add    $0x1,%rax
  sub    %r14d,%ebx
  mov    %r14d,0x44(%rsp)
  shl    $0x4,%rax
  mov    %rax,%r11
  movslq %r14d,%rax
  lea    0x0(,%rax,8),%r12
  mov    %ebx,%eax
  mov    %r11,%r13
  sub    $0x1,%eax
  mov    %r12,%r14
  cltq
  shl    $0x3,%rax
  mov    %rax,0x80(%rsp)
  lea    -0x8(,%rcx,8),%rax
  mov    %rax,0x60(%rsp)
L22:
  mov    0x90(%rsp),%r15
  mov    0x98(%rsp),%rcx
  xor    %esi,%esi
  mov    0xac(%rsp),%edx
  mov    %r15,%rdi
  mov    %r15,(%rsp)
  mov    %rcx,0x50(%rsp)
  call   <memset@plt>
  mov    0x110(%rsp),%eax
  test   %eax,%eax
  js     L2
  mov    0xcc(%rsp),%eax
  mov    0x10(%rsp),%rbx
  mov    (%rsp),%r10
  mov    %eax,0x18(%rsp)
  mov    %r15,%rax
  add    %r15,%rbx
  add    $0x10,%rax
  mov    %rax,0x58(%rsp)
  mov    0xa0(%rsp),%rax
  mov    %rax,0x28(%rsp)
  lea    -0x10(%rax),%r15
  mov    0xc0(%rsp),%rax
  mov    %rax,0x48(%rsp)
  mov    0x10(%rsp),%rax
  nop
L54:
  lea    (%r10,%rax,1),%r8
  mov    0x48(%rsp),%rax
  mov    0x78(%rsp),%rsi
  movl   $0x0,(%rsp)
  cmp    0x58(%rsp),%rbx
  mov    0x80(%rsp),%rdx
  lea    (%r10,%r14,1),%rdi
  lea    0x8(%rax),%rcx
  setae  %r9b
  or     0x8e(%rsp),%r9b
  and    0x8f(%rsp),%r9b
  mov    %rcx,0x8(%rsp)
  lea    (%r10,%rsi,1),%rcx
  mov    0x70(%rsp),%rsi
  mov    0x50(%rsp),%r11
  mov    %r9b,0x8d(%rsp)
  mov    %rcx,0x20(%rsp)
  lea    (%r10,%rsi,1),%rcx
  lea    (%r8,%r14,1),%rsi
  mov    %rcx,0x30(%rsp)
  mov    %r11,%r12
  lea    (%r10,%rdx,1),%rcx
  add    %r8,%rdx
  nopl   (%rax)
L96:
  addl   $0x1,(%rsp)
  mov    (%rsp),%r9d
  add    $0x10,%r12
  movsd  -0x10(%r12),%xmm2
  movsd  -0x8(%r12),%xmm6
  and    $0x1,%r9d
  cmpl   $0x1,0x1c(%rsp)
  lea    -0x1(%r9,%r9,1),%r9d
  jle    L110
  mov    0x8(%rsp),%r11
  pxor   %xmm3,%xmm3
  cvtsi2sd %r9d,%xmm3
  mov    0x38(%rsp),%r9
  cmp    %rbx,%r11
  lea    (%rax,%r9,1),%rbp
  setne  %r9b
  and    0x8d(%rsp),%r9b
  cmp    %r11,%r10
  setne  %r11b
  and    %r11d,%r9d
  cmp    0x20(%rsp),%rbp
  setbe  %r11b
  cmp    %rbx,%rax
  setae  0x8c(%rsp)
  or     0x8c(%rsp),%r11b
  test   %r11b,%r9b
  je     L12
  cmp    0x30(%rsp),%rbp
  setbe  %r11b
  cmp    0x28(%rsp),%rax
  setae  %r9b
  or     %r11b,%r9b
  je     L12
  movapd %xmm2,%xmm8
  movapd %xmm6,%xmm7
  movapd %xmm3,%xmm5
  xor    %r11d,%r11d
  unpcklpd %xmm8,%xmm8
  unpcklpd %xmm7,%xmm7
  lea    -0x10(%rbx),%rbp
  xor    %r9d,%r9d
  unpcklpd %xmm5,%xmm5
  nopw   0x0(%rax,%rax,1)
L17:
  movupd (%rax,%r9,1),%xmm1
  movupd (%r10,%r9,1),%xmm0
  movapd %xmm1,%xmm4
  mulpd  %xmm8,%xmm4
  mulpd  %xmm7,%xmm1
  addpd  %xmm4,%xmm0
  mulpd  %xmm5,%xmm4
  movups %xmm0,(%r10,%r9,1)
  movupd (%rbx,%r9,1),%xmm0
  addpd  %xmm1,%xmm0
  mulpd  %xmm5,%xmm1
  movups %xmm0,(%rbx,%r9,1)
  movupd 0x0(%rbp,%r11,1),%xmm0
  add    $0x10,%r9
  shufpd $0x1,%xmm0,%xmm0
  addpd  %xmm4,%xmm0
  shufpd $0x1,%xmm0,%xmm0
  movups %xmm0,0x0(%rbp,%r11,1)
  movupd (%r15,%r11,1),%xmm0
  shufpd $0x1,%xmm0,%xmm0
  addpd  %xmm1,%xmm0
  shufpd $0x1,%xmm0,%xmm0
  movups %xmm0,(%r15,%r11,1)
  sub    $0x10,%r11
  cmp    %r13,%r9
  jne    L17
  mov    0x44(%rsp),%r9d
  cmp    %r9d,0x40(%rsp)
  je     L110
  movsd  (%rax,%r14,1),%xmm0
  movsd  (%rdi),%xmm1
  mulsd  %xmm0,%xmm2
  mulsd  %xmm6,%xmm0
  addsd  %xmm2,%xmm1
  mulsd  %xmm3,%xmm2
  movsd  %xmm1,(%rdi)
  movsd  (%rsi),%xmm1
  addsd  %xmm0,%xmm1
  mulsd  %xmm3,%xmm0
  movsd  %xmm1,(%rsi)
  addsd  (%rcx),%xmm2
  movsd  %xmm2,(%rcx)
  addsd  (%rdx),%xmm0
  movsd  %xmm0,(%rdx)
L110:
  mov    0x10(%rsp),%r9
  mov    0x18(%rsp),%r11d
  add    %r9,0x8(%rsp)
  add    %r9,%rax
  cmp    %r11d,(%rsp)
  jne    L96
  mov    %r11d,%eax
  mov    %rax,%rcx
  mov    %rax,%rdx
  imul   0x10(%rsp),%rax
  add    %rax,0x48(%rsp)
  shl    $0x4,%rdx
  mov    0x68(%rsp),%rax
  add    %rax,0x58(%rsp)
  add    %rax,0x28(%rsp)
  add    %rax,%r10
  add    %rax,%rbx
  add    %rax,%r15
  mov    %ecx,%eax
  add    %rdx,0x50(%rsp)
  sub    $0x1,%eax
  je     L2
  mov    %eax,0x18(%rsp)
  mov    %r9,%rax
  jmp    L54
  nopl   0x0(%rax)
L12:
  mov    0x60(%rsp),%r11
  mov    0x88(%rsp),%ebp
  xor    %r9d,%r9d
  nop
L79:
  movsd  (%rax,%r9,8),%xmm0
  movapd %xmm2,%xmm1
  movsd  (%r10,%r9,8),%xmm4
  mulsd  %xmm0,%xmm1
  mulsd  %xmm6,%xmm0
  addsd  %xmm1,%xmm4
  mulsd  %xmm3,%xmm1
  movsd  %xmm4,(%r10,%r9,8)
  movsd  (%r8,%r9,8),%xmm4
  addsd  %xmm0,%xmm4
  mulsd  %xmm3,%xmm0
  movsd  %xmm4,(%r8,%r9,8)
  addsd  (%r10,%r11,1),%xmm1
  add    $0x1,%r9
  movsd  %xmm1,(%r10,%r11,1)
  addsd  (%r8,%r11,1),%xmm0
  movsd  %xmm0,(%r8,%r11,1)
  sub    $0x8,%r11
  cmp    %r9d,%ebp
  jg     L79
  jmp    L110
L2:
  mov    0xb0(%rsp),%rdi
  addl   $0x1,0xa8(%rsp)
  mov    0xb8(%rsp),%rsi
  add    %rdi,0x90(%rsp)
  add    %rsi,0x98(%rsp)
  mov    0xa8(%rsp),%eax
  add    %rdi,0xa0(%rsp)
  cmp    %eax,0xc8(%rsp)
  jne    L22
L29:
  add    $0xd8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
void sp2fctest(double *sa, double *fa, double *poli, int nlev, int nlat, int nfc, int nt) {
  int lev, jm, jn, latn, lats, nsp2, is;
  double sar, sai;
  double *far, *fai, *pol;
  double *sal, *fal;
  double pval;
  nsp2 = (nt + 1) * (nt + 2);
  for (lev = 0; lev < nlev; lev++) {
    pol = poli;
    fal = fa + lev * nfc * nlat;
    sal = sa + lev * nsp2;
    memset(fal, 0, nfc * nlat * sizeof(double));
    for (jm = 0; jm <= nt; jm++) {
      for (jn = 0; jn <= nt - jm; jn++) {
        is = (jn + 1) % 2 * 2 - 1;
        sar = *sal++;
        sai = *sal++;
        far = fal;
        fai = fal + nlat;
        for (latn = 0; latn < nlat / 2; latn++) {
          lats = nlat - latn - 1;
          pval = pol[latn];
          far[latn] += pval * sar;
          fai[latn] += pval * sai;
          far[lats] += pval * sar * is;
          fai[lats] += pval * sai * is;
        }
        pol += nlat;
      }
      fal += 2 * nlat;
    }
  }
}
```