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

```asm
<R8FirstPass>:
  endbr64
  test   %esi,%esi
  je     L14
  push   %r15
  mov    %esi,%esi
  mov    %rdi,%r15
  push   %r14
  shl    $0x6,%rsi
  push   %r13
  lea    (%rdi,%rsi,1),%rax
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %rax,0x18(%rsp)
  nopl   0x0(%rax)
L4:
  mov    (%r15),%r8d
  mov    0x8(%r15),%ecx
  mov    0x4(%r15),%esi
  mov    0x10(%r15),%eax
  mov    0x14(%r15),%edi
  mov    0xc(%r15),%edx
  add    %r8d,%ecx
  mov    0x18(%r15),%r13d
  mov    0x1c(%r15),%r12d
  sub    0x8(%r15),%r8d
  mov    0x20(%r15),%r11d
  add    %esi,%edx
  mov    0x28(%r15),%r10d
  sub    0xc(%r15),%esi
  add    %eax,%r13d
  add    %edi,%r12d
  sub    0x18(%r15),%eax
  sub    0x1c(%r15),%edi
  mov    %r8d,%ebx
  sub    %edi,%ebx
  lea    (%rsi,%rax,1),%r14d
  add    %r8d,%edi
  sub    %eax,%esi
  add    %r11d,%r10d
  mov    0x34(%r15),%eax
  mov    0x2c(%r15),%r8d
  mov    %ebx,0x8(%rsp)
  mov    0x3c(%r15),%r9d
  mov    0x38(%r15),%ebx
  mov    %edi,0xc(%rsp)
  mov    %r10d,%edi
  mov    0x30(%r15),%r10d
  sub    0x28(%r15),%r11d
  mov    %esi,0x14(%rsp)
  mov    0x24(%r15),%esi
  add    %eax,%r9d
  sub    0x3c(%r15),%eax
  mov    %r14d,0x10(%rsp)
  add    %r10d,%ebx
  sub    0x38(%r15),%r10d
  add    %esi,%r8d
  lea    (%rdi,%rbx,1),%ebp
  sub    %ebx,%edi
  sub    0x2c(%r15),%esi
  lea    (%r8,%r9,1),%ebx
  sar    %ebp
  sub    %r9d,%r8d
  sar    %edi
  lea    (%rcx,%r13,1),%r9d
  sar    %ebx
  sub    %r13d,%ecx
  sar    %r8d
  sar    %r9d
  sar    %ecx
  lea    (%rsi,%r10,1),%r13d
  lea    (%r9,%rbp,1),%r14d
  sub    %ebp,%r9d
  mov    %r9d,0x20(%r15)
  lea    (%rdx,%r12,1),%r9d
  sar    %r9d
  mov    %r14d,(%r15)
  lea    (%r9,%rbx,1),%ebp
  sub    %ebx,%r9d
  lea    (%r11,%rax,1),%ebx
  mov    %r9d,0x24(%r15)
  lea    (%rcx,%r8,1),%r9d
  sub    %r8d,%ecx
  sub    %r12d,%edx
  sar    %edx
  mov    %r11d,%r12d
  mov    %ebp,0x4(%r15)
  mov    %esi,%ebp
  mov    %r9d,0x10(%r15)
  sub    %eax,%r12d
  xor    %eax,%eax
  sub    %r10d,%ebp
  mov    %ecx,0x30(%r15)
  mov    %edx,%ecx
  add    %edi,%edx
  add    $0x40,%r15
  sub    %edi,%ecx
  mov    %edx,-0xc(%r15)
  mov    %r12d,%edx
  mov    $0x5a82799a,%edi
  mov    %ecx,-0x2c(%r15)
  sub    %r13d,%edx
  mov    %edx,%esi
  call   <cook_MULSHIFT32@plt>
  lea    (%r12,%r13,1),%esi
  mov    $0x5a82799a,%edi
  mov    %eax,%r14d
  xor    %eax,%eax
  call   <cook_MULSHIFT32@plt>
  mov    %ebx,%edx
  mov    $0x5a82799a,%edi
  sub    %ebp,%edx
  mov    %eax,%r13d
  xor    %eax,%eax
  mov    %edx,%esi
  call   <cook_MULSHIFT32@plt>
  mov    $0x5a82799a,%edi
  lea    (%rbx,%rbp,1),%esi
  mov    %eax,%r12d
  xor    %eax,%eax
  call   <cook_MULSHIFT32@plt>
  mov    0xc(%rsp),%edi
  mov    %eax,%edx
  mov    0x8(%rsp),%eax
  sar    %edi
  sar    %eax
  mov    %eax,%ecx
  add    %r14d,%eax
  sub    %r14d,%ecx
  mov    0x10(%rsp),%r14d
  mov    %eax,-0x8(%r15)
  mov    %ecx,-0x28(%r15)
  sar    %r14d
  mov    %r14d,%eax
  mov    %r14d,%ecx
  add    %r13d,%eax
  sub    %r13d,%ecx
  mov    %eax,-0x4(%r15)
  mov    %edi,%eax
  sub    %edx,%eax
  mov    %ecx,-0x24(%r15)
  lea    (%rdi,%rdx,1),%ecx
  mov    %eax,-0x18(%r15)
  mov    0x14(%rsp),%eax
  mov    %ecx,-0x38(%r15)
  sar    %eax
  mov    %eax,%edx
  add    %r12d,%eax
  sub    %r12d,%edx
  mov    %eax,-0x14(%r15)
  mov    %edx,-0x34(%r15)
  cmp    0x18(%rsp),%r15
  jne    L4
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L14:
  ret
```

assistant: ```c
void R8FirstPass(int *x, int bg) {
  int ar, ai, br, bi, cr, ci, dr, di;
  int sr, si, tr, ti, ur, ui, vr, vi;
  int wr, wi, xr, xi, yr, yi, zr, zi;
  for (; bg != 0; bg--) {
    ar = x[0] + x[2];
    br = x[0] - x[2];
    ai = x[1] + x[3];
    bi = x[1] - x[3];
    cr = x[4] + x[6];
    dr = x[4] - x[6];
    ci = x[5] + x[7];
    di = x[5] - x[7];
    sr = ar + cr;
    ur = ar - cr;
    si = ai + ci;
    ui = ai - ci;
    tr = br - di;
    vr = br + di;
    ti = bi + dr;
    vi = bi - dr;
    ar = x[8] + x[10];
    br = x[8] - x[10];
    ai = x[9] + x[11];
    bi = x[9] - x[11];
    cr = x[12] + x[14];
    dr = x[12] - x[14];
    ci = x[13] + x[15];
    di = x[13] - x[15];
    wr = (ar + cr) >> 1;
    yr = (ar - cr) >> 1;
    wi = (ai + ci) >> 1;
    yi = (ai - ci) >> 1;
    x[0] = (sr >> 1) + wr;
    x[8] = (sr >> 1) - wr;
    x[1] = (si >> 1) + wi;
    x[9] = (si >> 1) - wi;
    x[4] = (ur >> 1) + yi;
    x[12] = (ur >> 1) - yi;
    x[5] = (ui >> 1) - yr;
    x[13] = (ui >> 1) + yr;
    ar = br - di;
    cr = br + di;
    ai = bi + dr;
    ci = bi - dr;
    xr = cook_MULSHIFT32(1518500250, ar - ai);
    xi = cook_MULSHIFT32(1518500250, ar + ai);
    zr = cook_MULSHIFT32(1518500250, cr - ci);
    zi = cook_MULSHIFT32(1518500250, cr + ci);
    x[6] = (tr >> 1) - xr;
    x[14] = (tr >> 1) + xr;
    x[7] = (ti >> 1) - xi;
    x[15] = (ti >> 1) + xi;
    x[2] = (vr >> 1) + zi;
    x[10] = (vr >> 1) - zi;
    x[3] = (vi >> 1) - zr;
    x[11] = (vi >> 1) + zr;
    x += 16;
  }
}
```