user: Converte this assembly snippet into its equivalent C code:

```asm
<R8FirstPass>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %rdi,-0x68(%rbp)
  mov    %esi,-0x6c(%rbp)
  jmp    L10
L9:
  mov    -0x68(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x68(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x60(%rbp)
  mov    -0x68(%rbp),%rax
  mov    (%rax),%eax
  mov    -0x68(%rbp),%rdx
  add    $0x8,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x5c(%rbp)
  mov    -0x68(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x68(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x68(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  mov    -0x68(%rbp),%rdx
  add    $0xc,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x54(%rbp)
  mov    -0x68(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%edx
  mov    -0x68(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x50(%rbp)
  mov    -0x68(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%eax
  mov    -0x68(%rbp),%rdx
  add    $0x18,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x4c(%rbp)
  mov    -0x68(%rbp),%rax
  add    $0x14,%rax
  mov    (%rax),%edx
  mov    -0x68(%rbp),%rax
  add    $0x1c,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x48(%rbp)
  mov    -0x68(%rbp),%rax
  add    $0x14,%rax
  mov    (%rax),%eax
  mov    -0x68(%rbp),%rdx
  add    $0x1c,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x44(%rbp)
  mov    -0x60(%rbp),%edx
  mov    -0x50(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x40(%rbp)
  mov    -0x60(%rbp),%eax
  sub    -0x50(%rbp),%eax
  mov    %eax,-0x3c(%rbp)
  mov    -0x58(%rbp),%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x58(%rbp),%eax
  sub    -0x48(%rbp),%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x5c(%rbp),%eax
  sub    -0x44(%rbp),%eax
  mov    %eax,-0x30(%rbp)
  mov    -0x5c(%rbp),%edx
  mov    -0x44(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x54(%rbp),%edx
  mov    -0x4c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x54(%rbp),%eax
  sub    -0x4c(%rbp),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x68(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%edx
  mov    -0x68(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x60(%rbp)
  mov    -0x68(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%eax
  mov    -0x68(%rbp),%rdx
  add    $0x28,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x5c(%rbp)
  mov    -0x68(%rbp),%rax
  add    $0x24,%rax
  mov    (%rax),%edx
  mov    -0x68(%rbp),%rax
  add    $0x2c,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x68(%rbp),%rax
  add    $0x24,%rax
  mov    (%rax),%eax
  mov    -0x68(%rbp),%rdx
  add    $0x2c,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x54(%rbp)
  mov    -0x68(%rbp),%rax
  add    $0x30,%rax
  mov    (%rax),%edx
  mov    -0x68(%rbp),%rax
  add    $0x38,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x50(%rbp)
  mov    -0x68(%rbp),%rax
  add    $0x30,%rax
  mov    (%rax),%eax
  mov    -0x68(%rbp),%rdx
  add    $0x38,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x4c(%rbp)
  mov    -0x68(%rbp),%rax
  add    $0x34,%rax
  mov    (%rax),%edx
  mov    -0x68(%rbp),%rax
  add    $0x3c,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x48(%rbp)
  mov    -0x68(%rbp),%rax
  add    $0x34,%rax
  mov    (%rax),%eax
  mov    -0x68(%rbp),%rdx
  add    $0x3c,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x44(%rbp)
  mov    -0x60(%rbp),%edx
  mov    -0x50(%rbp),%eax
  add    %edx,%eax
  sar    %eax
  mov    %eax,-0x20(%rbp)
  mov    -0x60(%rbp),%eax
  sub    -0x50(%rbp),%eax
  sar    %eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x58(%rbp),%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  sar    %eax
  mov    %eax,-0x18(%rbp)
  mov    -0x58(%rbp),%eax
  sub    -0x48(%rbp),%eax
  sar    %eax
  mov    %eax,-0x14(%rbp)
  mov    -0x40(%rbp),%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x20(%rbp),%eax
  add    %eax,%edx
  mov    -0x68(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x40(%rbp),%eax
  sar    %eax
  mov    -0x68(%rbp),%rdx
  add    $0x20,%rdx
  sub    -0x20(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x38(%rbp),%eax
  sar    %eax
  mov    %eax,%ecx
  mov    -0x68(%rbp),%rax
  add    $0x4,%rax
  mov    -0x18(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x38(%rbp),%eax
  sar    %eax
  mov    -0x68(%rbp),%rdx
  add    $0x24,%rdx
  sub    -0x18(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x3c(%rbp),%eax
  sar    %eax
  mov    %eax,%ecx
  mov    -0x68(%rbp),%rax
  add    $0x10,%rax
  mov    -0x14(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x3c(%rbp),%eax
  sar    %eax
  mov    -0x68(%rbp),%rdx
  add    $0x30,%rdx
  sub    -0x14(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x34(%rbp),%eax
  sar    %eax
  mov    -0x68(%rbp),%rdx
  add    $0x14,%rdx
  sub    -0x1c(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x34(%rbp),%eax
  sar    %eax
  mov    %eax,%ecx
  mov    -0x68(%rbp),%rax
  add    $0x34,%rax
  mov    -0x1c(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x5c(%rbp),%eax
  sub    -0x44(%rbp),%eax
  mov    %eax,-0x60(%rbp)
  mov    -0x5c(%rbp),%edx
  mov    -0x44(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x50(%rbp)
  mov    -0x54(%rbp),%edx
  mov    -0x4c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x54(%rbp),%eax
  sub    -0x4c(%rbp),%eax
  mov    %eax,-0x48(%rbp)
  mov    -0x60(%rbp),%eax
  sub    -0x58(%rbp),%eax
  mov    %eax,%esi
  mov    $0x5a82799a,%edi
  mov    $0x0,%eax
  call   <cook_MULSHIFT32@plt>
  mov    %eax,-0x10(%rbp)
  mov    -0x60(%rbp),%edx
  mov    -0x58(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%esi
  mov    $0x5a82799a,%edi
  mov    $0x0,%eax
  call   <cook_MULSHIFT32@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0x50(%rbp),%eax
  sub    -0x48(%rbp),%eax
  mov    %eax,%esi
  mov    $0x5a82799a,%edi
  mov    $0x0,%eax
  call   <cook_MULSHIFT32@plt>
  mov    %eax,-0x8(%rbp)
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%esi
  mov    $0x5a82799a,%edi
  mov    $0x0,%eax
  call   <cook_MULSHIFT32@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x30(%rbp),%eax
  sar    %eax
  mov    -0x68(%rbp),%rdx
  add    $0x18,%rdx
  sub    -0x10(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x30(%rbp),%eax
  sar    %eax
  mov    %eax,%ecx
  mov    -0x68(%rbp),%rax
  add    $0x38,%rax
  mov    -0x10(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x28(%rbp),%eax
  sar    %eax
  mov    -0x68(%rbp),%rdx
  add    $0x1c,%rdx
  sub    -0xc(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x28(%rbp),%eax
  sar    %eax
  mov    %eax,%ecx
  mov    -0x68(%rbp),%rax
  add    $0x3c,%rax
  mov    -0xc(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x2c(%rbp),%eax
  sar    %eax
  mov    %eax,%ecx
  mov    -0x68(%rbp),%rax
  add    $0x8,%rax
  mov    -0x4(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x2c(%rbp),%eax
  sar    %eax
  mov    -0x68(%rbp),%rdx
  add    $0x28,%rdx
  sub    -0x4(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x24(%rbp),%eax
  sar    %eax
  mov    -0x68(%rbp),%rdx
  add    $0xc,%rdx
  sub    -0x8(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x24(%rbp),%eax
  sar    %eax
  mov    %eax,%ecx
  mov    -0x68(%rbp),%rax
  add    $0x2c,%rax
  mov    -0x8(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  addq   $0x40,-0x68(%rbp)
  subl   $0x1,-0x6c(%rbp)
L10:
  cmpl   $0x0,-0x6c(%rbp)
  jne    L9
  nop
  nop
  leave
  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;
  }
}
```