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

```asm
<lsx_ordered_partial_convolve>:
  endbr64
  mov    %rsi,%rcx
  push   %rbx
  mov    %rdx,%rsi
  movsd  (%rcx),%xmm0
  mulsd  (%rdx),%xmm0
  movsd  %xmm0,(%rcx)
  cmp    $0x2,%edi
  jle    L23
  lea    0x30(%rsi),%r8
  lea    0x10(%rcx),%rax
  mov    %edi,%r9d
  cmp    %r8,%rax
  lea    0x10(%rdx),%rdx
  lea    0x30(%rcx),%r10
  setae  %r8b
  cmp    %r10,%rdx
  lea    -0x3(%rdi),%edi
  setae  %r11b
  or     %r11b,%r8b
  je     L36
  cmp    $0x3,%edi
  jbe    L36
  mov    %edi,%r11d
  shr    $0x2,%r11d
  lea    -0x1(%r11),%r8d
  shl    $0x5,%r8
  add    %r10,%r8
  nopl   0x0(%rax,%rax,1)
L55:
  movupd (%rax),%xmm3
  movupd (%rdx),%xmm4
  add    $0x20,%rax
  add    $0x20,%rdx
  movupd -0x10(%rdx),%xmm2
  movupd -0x10(%rax),%xmm0
  movlpd -0x18(%rdx),%xmm2
  movhpd -0x10(%rax),%xmm3
  movlpd -0x18(%rax),%xmm0
  movhpd -0x10(%rdx),%xmm4
  movapd %xmm3,%xmm1
  mulpd  %xmm2,%xmm0
  mulpd  %xmm4,%xmm1
  mulpd  %xmm2,%xmm3
  subpd  %xmm0,%xmm1
  movupd -0x18(%rax),%xmm0
  movhpd -0x8(%rax),%xmm0
  mulpd  %xmm4,%xmm0
  movapd %xmm1,%xmm2
  addpd  %xmm3,%xmm0
  unpcklpd %xmm0,%xmm2
  unpckhpd %xmm0,%xmm1
  movups %xmm2,-0x20(%rax)
  movups %xmm1,-0x10(%rax)
  cmp    %r8,%rax
  jne    L55
  lea    0x2(,%r11,4),%eax
  movslq %eax,%r8
  lea    0x0(,%r8,8),%rdx
  lea    0x8(,%r8,8),%r8
  lea    (%rsi,%r8,1),%r11
  lea    (%rcx,%rdx,1),%rbx
  add    %rcx,%r8
  lea    (%rsi,%rdx,1),%r10
  movsd  (%r8),%xmm1
  movsd  (%rbx),%xmm0
  movsd  (%r10),%xmm2
  movsd  (%r11),%xmm3
  mulsd  %xmm0,%xmm2
  mulsd  %xmm1,%xmm3
  subsd  %xmm3,%xmm2
  movsd  %xmm2,(%rbx)
  mulsd  (%r11),%xmm0
  mulsd  (%r10),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%r8)
  lea    0x2(%rax),%r8d
  cmp    %r8d,%r9d
  jle    L30
  add    $0x3,%eax
  add    $0x10,%rdx
  cltq
  lea    (%rcx,%rdx,1),%r8
  add    %rsi,%rdx
  shl    $0x3,%rax
  movsd  (%r8),%xmm0
  movsd  (%rdx),%xmm2
  lea    (%rsi,%rax,1),%r9
  add    %rcx,%rax
  movsd  (%rax),%xmm1
  movsd  (%r9),%xmm3
  mulsd  %xmm0,%xmm2
  mulsd  %xmm1,%xmm3
  subsd  %xmm3,%xmm2
  movsd  %xmm2,(%r8)
  mulsd  (%r9),%xmm0
  mulsd  (%rdx),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
L30:
  shr    %edi
  lea    0x4(%rdi,%rdi,1),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  lea    0x8(,%rax,8),%rax
L27:
  movsd  (%rsi,%rdx,1),%xmm0
  movsd  (%rsi,%rax,1),%xmm1
  mulsd  (%rcx,%rdx,1),%xmm0
  pop    %rbx
  mulsd  (%rcx,%rax,1),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x8(%rcx)
  ret
  nopl   0x0(%rax)
L36:
  mov    %edi,%r8d
  lea    0x18(%rcx),%rax
  lea    0x18(%rsi),%rdx
  shr    %r8d
  shl    $0x4,%r8
  lea    0x28(%rcx,%r8,1),%r8
  nopw   0x0(%rax,%rax,1)
L48:
  movsd  (%rax),%xmm1
  movsd  (%rdx),%xmm3
  add    $0x10,%rax
  add    $0x10,%rdx
  movsd  -0x18(%rax),%xmm0
  movsd  -0x18(%rdx),%xmm2
  mulsd  %xmm1,%xmm3
  mulsd  %xmm0,%xmm2
  subsd  %xmm3,%xmm2
  movsd  %xmm2,-0x18(%rax)
  mulsd  -0x10(%rdx),%xmm0
  mulsd  -0x18(%rdx),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rax)
  cmp    %r8,%rax
  jne    L48
  jmp    L30
  nopl   0x0(%rax,%rax,1)
L23:
  mov    $0x18,%eax
  mov    $0x10,%edx
  jmp    L27
```

assistant: ```c
void lsx_ordered_partial_convolve(int n, double *a, const double *b) {
  int i;
  a[0] *= b[0];
  for (i = 2; i < n; i += 2) {
    double tmp = a[i];
    a[i] = b[i] * tmp - b[i + 1] * a[i + 1];
    a[i + 1] = b[i + 1] * tmp + b[i] * a[i + 1];
  }
  a[1] = b[i] * a[i] - b[i + 1] * a[i + 1];
}
```