user: What is the c source code of the assembly code below:

```asm
<dspl_conv_cmplx_krn>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    0x38(%rsp),%r13
  mov    0x40(%rsp),%r14
  mov    %edx,-0x3c(%rsp)
  mov    %r9d,-0x40(%rsp)
  test   %edx,%edx
  jle    L6
  mov    %rsi,%rax
  mov    %r9d,%esi
  test   %r9d,%r9d
  jle    L6
  movslq %r9d,%rdx
  mov    %rdi,%r10
  mov    %rcx,%rdi
  and    $0xfffffffe,%esi
  lea    0x0(,%rdx,8),%rcx
  mov    %rdx,-0x10(%rsp)
  xor    %r11d,%r11d
  lea    0x0(%r13,%rcx,1),%rdx
  add    %r14,%rcx
  mov    %rax,-0x58(%rsp)
  lea    0x10(%r13),%rax
  mov    %rcx,-0x48(%rsp)
  mov    %r9d,%ecx
  mov    %esi,%r9d
  shr    %ecx
  mov    %r9,%r12
  shl    $0x3,%r9
  mov    %r10,-0x68(%rsp)
  sub    $0x1,%ecx
  mov    %rdx,-0x50(%rsp)
  lea    (%rdi,%r9,1),%r10
  mov    %r13,%rdx
  add    $0x1,%rcx
  mov    %rax,-0x60(%rsp)
  add    %r8,%r9
  mov    %r14,%rax
  shl    $0x4,%rcx
  mov    %rcx,-0x18(%rsp)
  lea    0x8(%rdi),%rcx
  mov    %rcx,-0x38(%rsp)
  lea    0x8(%r8),%rcx
  mov    %rcx,-0x30(%rsp)
  lea    0x10(%rdi),%rcx
  mov    %rcx,-0x28(%rsp)
  lea    0x10(%r8),%rcx
  mov    %rcx,-0x20(%rsp)
  nopl   0x0(%rax)
L19:
  mov    -0x68(%rsp),%rsi
  mov    -0x58(%rsp),%r15
  mov    %rsi,%rcx
  add    $0x8,%rsi
  mov    %rsi,-0x68(%rsp)
  mov    %r15,%rsi
  add    $0x8,%r15
  cmp    -0x38(%rsp),%rax
  setne  %bl
  cmp    -0x30(%rsp),%rax
  mov    %r15,-0x58(%rsp)
  setne  %bpl
  and    %ebx,%ebp
  cmpl   $0x1,-0x40(%rsp)
  setne  %bl
  and    %ebx,%ebp
  cmp    -0x28(%rsp),%rdx
  setae  %bl
  cmp    -0x60(%rsp),%rdi
  setae  %r15b
  or     %r15d,%ebx
  and    %ebp,%ebx
  cmp    -0x20(%rsp),%rdx
  setae  %bpl
  cmp    -0x60(%rsp),%r8
  setae  %r15b
  or     %r15d,%ebp
  and    %ebx,%ebp
  cmp    -0x68(%rsp),%rdx
  setae  %bl
  cmp    -0x50(%rsp),%rcx
  setae  %r15b
  or     %r15d,%ebx
  and    %ebp,%ebx
  cmp    -0x58(%rsp),%rdx
  setae  %bpl
  cmp    %rsi,-0x50(%rsp)
  setbe  %r15b
  or     %r15d,%ebp
  and    %ebx,%ebp
  lea    0x10(%rax),%rbx
  cmp    %rbx,%rdx
  setae  %bl
  cmp    -0x60(%rsp),%rax
  setae  %r15b
  or     %r15d,%ebx
  and    %ebp,%ebx
  cmp    -0x68(%rsp),%rax
  setae  %bpl
  cmp    -0x48(%rsp),%rcx
  setae  %r15b
  or     %r15d,%ebp
  test   %bpl,%bl
  je     L48
  cmp    -0x58(%rsp),%rax
  setae  %bpl
  cmp    -0x48(%rsp),%rsi
  setae  %bl
  or     %bpl,%bl
  je     L48
  movsd  (%rcx),%xmm3
  movsd  (%rsi),%xmm2
  xor    %ebx,%ebx
  mov    -0x18(%rsp),%rbp
  unpcklpd %xmm3,%xmm3
  unpcklpd %xmm2,%xmm2
L77:
  movupd (%rdi,%rbx,1),%xmm0
  movupd (%r8,%rbx,1),%xmm1
  movupd (%rdx,%rbx,1),%xmm4
  mulpd  %xmm2,%xmm1
  mulpd  %xmm3,%xmm0
  subpd  %xmm1,%xmm0
  addpd  %xmm4,%xmm0
  movups %xmm0,(%rdx,%rbx,1)
  movupd (%r8,%rbx,1),%xmm0
  movupd (%rdi,%rbx,1),%xmm1
  movupd (%rax,%rbx,1),%xmm5
  mulpd  %xmm3,%xmm0
  mulpd  %xmm2,%xmm1
  addpd  %xmm1,%xmm0
  addpd  %xmm5,%xmm0
  movups %xmm0,(%rax,%rbx,1)
  add    $0x10,%rbx
  cmp    %rbp,%rbx
  jne    L77
  cmp    %r12d,-0x40(%rsp)
  je     L44
  movsd  (%rcx),%xmm0
  movsd  (%rsi),%xmm1
  lea    (%r11,%r12,1),%ebx
  mulsd  (%r9),%xmm1
  movslq %ebx,%rbx
  mulsd  (%r10),%xmm0
  shl    $0x3,%rbx
  lea    0x0(%r13,%rbx,1),%rbp
  add    %r14,%rbx
  subsd  %xmm1,%xmm0
  addsd  0x0(%rbp),%xmm0
  movsd  %xmm0,0x0(%rbp)
  movsd  (%rcx),%xmm0
  movsd  (%rsi),%xmm1
  mulsd  (%r9),%xmm0
  mulsd  (%r10),%xmm1
  addsd  %xmm1,%xmm0
  addsd  (%rbx),%xmm0
  movsd  %xmm0,(%rbx)
L44:
  addq   $0x8,-0x50(%rsp)
  add    $0x1,%r11d
  add    $0x8,%rdx
  add    $0x8,%rax
  addq   $0x8,-0x60(%rsp)
  addq   $0x8,-0x48(%rsp)
  cmp    %r11d,-0x3c(%rsp)
  jne    L19
L6:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L48:
  mov    -0x10(%rsp),%rbp
  xor    %ebx,%ebx
  nopw   0x0(%rax,%rax,1)
L5:
  movsd  (%rcx),%xmm0
  movsd  (%rsi),%xmm1
  mulsd  (%rdi,%rbx,8),%xmm0
  mulsd  (%r8,%rbx,8),%xmm1
  subsd  %xmm1,%xmm0
  addsd  (%rdx,%rbx,8),%xmm0
  movsd  %xmm0,(%rdx,%rbx,8)
  movsd  (%rcx),%xmm0
  movsd  (%rsi),%xmm1
  mulsd  (%r8,%rbx,8),%xmm0
  mulsd  (%rdi,%rbx,8),%xmm1
  addsd  %xmm1,%xmm0
  addsd  (%rax,%rbx,8),%xmm0
  movsd  %xmm0,(%rax,%rbx,8)
  add    $0x1,%rbx
  cmp    %rbx,%rbp
  jne    L5
  jmp    L44
```

assistant: ```c
void dspl_conv_cmplx_krn(double *aR, double *aI, int na, double *bR, double *bI, int nb, double *cR, double *cI) {
  int k;
  int n;
  for (k = 0; k < na; k++) {
    for (n = 0; n < nb; n++) {
      cR[k + n] += aR[k] * bR[n] - aI[k] * bI[n];
      cI[k + n] += aR[k] * bI[n] + aI[k] * bR[n];
    }
  }
}
```