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

```asm
<interp1_table0_complex_per>:
  endbr64
  push   %r15
  mov    %rdi,%r10
  push   %r14
  mov    %r9d,%r14d
  push   %r13
  push   %r12
  push   %rbp
  mov    %edx,%ebp
  mov    %r14d,%edx
  push   %rbx
  mov    %rcx,%rbx
  mov    0x38(%rsp),%ecx
  movslq 0x48(%rsp),%rax
  mov    0x40(%rsp),%r9
  imul   %ecx,%edx
  mov    0x50(%rsp),%r12
  mov    0x58(%rsp),%r13
  mov    %edx,%edi
  shr    $0x1f,%edi
  add    %edx,%edi
  sar    %edi
  test   %eax,%eax
  jle    L37
  pxor   %xmm14,%xmm14
  mov    %rsi,%r11
  lea    (%r9,%rax,8),%r15
  movslq %edi,%rdi
  cvtsi2sd %r14d,%xmm14
  pxor   %xmm13,%xmm13
  movsd  D3(%rip),%xmm12
  movsd  D24(%rip),%xmm8
  movsd  D5(%rip),%xmm10
  movsd  D16(%rip),%xmm15
  mulsd  %xmm12,%xmm14
  movsd  %xmm14,-0x8(%rsp)
  nopl   0x0(%rax)
L7:
  movsd  (%r9),%xmm14
  add    $0x8,%r9
  movapd %xmm14,%xmm0
  subsd  -0x8(%rsp),%xmm0
  movapd %xmm0,%xmm1
  andpd  %xmm15,%xmm1
  ucomisd %xmm1,%xmm8
  jbe    L45
  cvttsd2si %xmm0,%rax
  pxor   %xmm1,%xmm1
  cvtsi2sd %rax,%xmm1
  movapd %xmm1,%xmm2
  cmpnlesd %xmm0,%xmm2
  andpd  %xmm10,%xmm2
  subsd  %xmm2,%xmm1
  movapd %xmm15,%xmm2
  andnpd %xmm0,%xmm2
  orpd   %xmm2,%xmm1
  movapd %xmm1,%xmm0
L45:
  addsd  %xmm10,%xmm0
  cvttsd2si %xmm0,%edx
  test   %r14d,%r14d
  jle    L73
  pxor   %xmm11,%xmm11
  pxor   %xmm9,%xmm9
  lea    (%rdx,%r14,1),%esi
  cvtsi2sd %ecx,%xmm11
  movapd %xmm13,%xmm6
  movapd %xmm13,%xmm7
  cvtsi2sd %ebp,%xmm9
  nopl   0x0(%rax)
L57:
  pxor   %xmm2,%xmm2
  movapd %xmm14,%xmm0
  cvtsi2sd %edx,%xmm2
  subsd  %xmm2,%xmm0
  mulsd  %xmm11,%xmm0
  addsd  %xmm12,%xmm0
  movapd %xmm0,%xmm1
  andpd  %xmm15,%xmm1
  ucomisd %xmm1,%xmm8
  jbe    L60
  cvttsd2si %xmm0,%rax
  pxor   %xmm1,%xmm1
  cvtsi2sd %rax,%xmm1
  movapd %xmm1,%xmm3
  cmpnlesd %xmm0,%xmm3
  andpd  %xmm10,%xmm3
  subsd  %xmm3,%xmm1
  movapd %xmm15,%xmm3
  andnpd %xmm0,%xmm3
  movapd %xmm1,%xmm0
  orpd   %xmm3,%xmm0
L60:
  movapd %xmm2,%xmm1
  cvttsd2si %xmm0,%eax
  divsd  %xmm9,%xmm1
  cltq
  add    %rdi,%rax
  movsd  (%rbx,%rax,8),%xmm5
  movsd  (%r8,%rax,8),%xmm4
  movapd %xmm1,%xmm3
  andpd  %xmm15,%xmm3
  ucomisd %xmm3,%xmm8
  jbe    L72
  cvttsd2si %xmm1,%rax
  pxor   %xmm3,%xmm3
  cvtsi2sd %rax,%xmm3
  movapd %xmm3,%xmm0
  cmpnlesd %xmm1,%xmm0
  andpd  %xmm10,%xmm0
  subsd  %xmm0,%xmm3
  movapd %xmm15,%xmm0
  andnpd %xmm1,%xmm0
  orpd   %xmm0,%xmm3
  movapd %xmm3,%xmm1
L72:
  mulsd  %xmm9,%xmm1
  add    $0x1,%edx
  subsd  %xmm1,%xmm2
  cvttsd2si %xmm2,%eax
  cltq
  movsd  (%r10,%rax,8),%xmm1
  movsd  (%r11,%rax,8),%xmm0
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm3
  mulsd  %xmm5,%xmm2
  mulsd  %xmm4,%xmm3
  mulsd  %xmm5,%xmm0
  mulsd  %xmm4,%xmm1
  subsd  %xmm3,%xmm2
  addsd  %xmm1,%xmm0
  addsd  %xmm2,%xmm7
  addsd  %xmm0,%xmm6
  cmp    %esi,%edx
  jne    L57
L10:
  add    $0x8,%r13
  add    $0x8,%r12
  movsd  %xmm7,-0x8(%r12)
  movsd  %xmm6,-0x8(%r13)
  cmp    %r15,%r9
  jne    L7
L37:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L73:
  movapd %xmm13,%xmm6
  movapd %xmm13,%xmm7
  jmp    L10
```

tool_calls: name: disassemble_data
arguments: tag: D3
data_type: f64
name: disassemble_data
arguments: tag: D24
data_type: f32[2]
name: disassemble_data
arguments: tag: D5
data_type: f32[2]
name: disassemble_data
arguments: tag: D16
data_type: byte[8]

tool: D3: 0.5

tool: {"D24": [0.0,176.0]}

tool: {"D5": [0.0,1.875]}

tool: {"D16": [0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f]}

assistant: ```c
void interp1_table0_complex_per(const double *r_ck, const double *i_ck, const int K1, const double *r_h1, const double *i_h1, const int J1, const int L1, const double *p_tm, const int M, double *r_fm, double *i_fm) {
  int mm;
  {
    const int ncenter1 = floor(J1 * L1 / 2);
    r_h1 += ncenter1;
    i_h1 += ncenter1;
  }
  for (mm = 0; mm < M; mm++) {
    int jj1;
    const double t1 = *p_tm++;
    register double sum1r = 0;
    register double sum1i = 0;
    int k1 = 1 + floor(t1 - J1 / 2.);
    for (jj1 = 0; jj1 < J1; jj1++, k1++) {
      const double p1 = (t1 - k1) * L1;
      const int n1 = floor(p1 + 0.5);
      register const double coef1r = r_h1[n1];
      register const double coef1i = i_h1[n1];
      const int k1mod = ((k1) - (K1)*floor((k1) / (double)(K1)));
      sum1r += coef1r * r_ck[k1mod] - coef1i * i_ck[k1mod];
      sum1i += coef1r * i_ck[k1mod] + coef1i * r_ck[k1mod];
    }
    *r_fm++ = sum1r;
    *i_fm++ = sum1i;
  }
}
```