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

```asm
<mdct_butterfly_generic>:
  endbr64
  mov    %rsi,%r9
  movslq %edx,%rax
  lea    -0x40(%rsi,%rax,8),%rsi
  sar    %edx
  movslq %edx,%rdx
  lea    -0x40(%r9,%rdx,8),%rax
  movslq %ecx,%rdx
  lea    0x0(,%rdx,8),%r8
  mov    %rdx,%r10
  shl    $0x5,%r10
  shl    $0x4,%rdx
  add    %rdi,%rdx
L0:
  movsd  0x30(%rsi),%xmm3
  movsd  0x30(%rax),%xmm4
  movapd %xmm3,%xmm1
  subsd  %xmm4,%xmm1
  movsd  0x38(%rsi),%xmm2
  movapd %xmm2,%xmm0
  subsd  0x38(%rax),%xmm0
  addsd  %xmm4,%xmm3
  movsd  %xmm3,0x30(%rsi)
  addsd  0x38(%rax),%xmm2
  movsd  %xmm2,0x38(%rsi)
  movapd %xmm0,%xmm2
  mulsd  0x8(%rdi),%xmm2
  movapd %xmm1,%xmm3
  mulsd  (%rdi),%xmm3
  addsd  %xmm3,%xmm2
  movsd  %xmm2,0x30(%rax)
  mulsd  (%rdi),%xmm0
  mulsd  0x8(%rdi),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x38(%rax)
  movsd  0x20(%rsi),%xmm3
  movsd  0x20(%rax),%xmm4
  movapd %xmm3,%xmm1
  subsd  %xmm4,%xmm1
  movsd  0x28(%rsi),%xmm2
  movapd %xmm2,%xmm0
  subsd  0x28(%rax),%xmm0
  addsd  %xmm4,%xmm3
  movsd  %xmm3,0x20(%rsi)
  addsd  0x28(%rax),%xmm2
  movsd  %xmm2,0x28(%rsi)
  movapd %xmm0,%xmm2
  mulsd  0x8(%rdi,%r8,1),%xmm2
  movapd %xmm1,%xmm3
  mulsd  (%rdi,%r8,1),%xmm3
  addsd  %xmm3,%xmm2
  movsd  %xmm2,0x20(%rax)
  mulsd  (%rdi,%r8,1),%xmm0
  mulsd  0x8(%rdi,%r8,1),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x28(%rax)
  movsd  0x10(%rsi),%xmm3
  movsd  0x10(%rax),%xmm4
  movapd %xmm3,%xmm1
  subsd  %xmm4,%xmm1
  movsd  0x18(%rsi),%xmm2
  movapd %xmm2,%xmm0
  subsd  0x18(%rax),%xmm0
  addsd  %xmm4,%xmm3
  movsd  %xmm3,0x10(%rsi)
  addsd  0x18(%rax),%xmm2
  movsd  %xmm2,0x18(%rsi)
  movapd %xmm0,%xmm2
  mulsd  0x8(%rdx),%xmm2
  movapd %xmm1,%xmm3
  mulsd  (%rdx),%xmm3
  addsd  %xmm3,%xmm2
  movsd  %xmm2,0x10(%rax)
  mulsd  (%rdx),%xmm0
  mulsd  0x8(%rdx),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x18(%rax)
  movsd  (%rsi),%xmm3
  movsd  (%rax),%xmm4
  movapd %xmm3,%xmm1
  subsd  %xmm4,%xmm1
  movsd  0x8(%rsi),%xmm2
  movapd %xmm2,%xmm0
  subsd  0x8(%rax),%xmm0
  addsd  %xmm4,%xmm3
  movsd  %xmm3,(%rsi)
  addsd  0x8(%rax),%xmm2
  movsd  %xmm2,0x8(%rsi)
  movapd %xmm0,%xmm2
  mulsd  0x8(%rdx,%r8,1),%xmm2
  movapd %xmm1,%xmm3
  mulsd  (%rdx,%r8,1),%xmm3
  addsd  %xmm3,%xmm2
  movsd  %xmm2,(%rax)
  mulsd  (%rdx,%r8,1),%xmm0
  mulsd  0x8(%rdx,%r8,1),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x8(%rax)
  add    %r10,%rdi
  sub    $0x40,%rsi
  sub    $0x40,%rax
  add    %r10,%rdx
  cmp    %rax,%r9
  jbe    L0
  ret
```

assistant: ```c
void mdct_butterfly_generic(double *trig, double *x, int points, int trigint) {
  double *x1 = x + points - 8;
  double *x2 = x + (points >> 1) - 8;
  double r0;
  double r1;
  do {
    r0 = x1[6] - x2[6];
    r1 = x1[7] - x2[7];
    x1[6] += x2[6];
    x1[7] += x2[7];
    x2[6] = (r1 * trig[1] + r0 * trig[0]);
    x2[7] = (r1 * trig[0] - r0 * trig[1]);
    trig += trigint;
    r0 = x1[4] - x2[4];
    r1 = x1[5] - x2[5];
    x1[4] += x2[4];
    x1[5] += x2[5];
    x2[4] = (r1 * trig[1] + r0 * trig[0]);
    x2[5] = (r1 * trig[0] - r0 * trig[1]);
    trig += trigint;
    r0 = x1[2] - x2[2];
    r1 = x1[3] - x2[3];
    x1[2] += x2[2];
    x1[3] += x2[3];
    x2[2] = (r1 * trig[1] + r0 * trig[0]);
    x2[3] = (r1 * trig[0] - r0 * trig[1]);
    trig += trigint;
    r0 = x1[0] - x2[0];
    r1 = x1[1] - x2[1];
    x1[0] += x2[0];
    x1[1] += x2[1];
    x2[0] = (r1 * trig[1] + r0 * trig[0]);
    x2[1] = (r1 * trig[0] - r0 * trig[1]);
    trig += trigint;
    x1 -= 8;
    x2 -= 8;
  } while (x2 >= x);
}
```