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

```asm
<ChenIDct>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbx
  mov    %rdi,-0x30(%rbp)
  mov    %rsi,-0x38(%rbp)
  mov    $0x0,%r13d
  jmp    L11
L15:
  movslq %r13d,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x30(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  mov    (%rbx),%eax
  lea    0x0(,%rax,4),%edi
  add    $0x20,%rbx
  mov    (%rbx),%eax
  lea    0x0(,%rax,4),%r12d
  add    $0x20,%rbx
  mov    (%rbx),%eax
  lea    0x0(,%rax,4),%esi
  add    $0x20,%rbx
  mov    (%rbx),%eax
  lea    0x0(,%rax,4),%r14d
  add    $0x20,%rbx
  mov    (%rbx),%eax
  lea    0x0(,%rax,4),%r8d
  add    $0x20,%rbx
  mov    (%rbx),%eax
  lea    0x0(,%rax,4),%r15d
  add    $0x20,%rbx
  mov    (%rbx),%eax
  lea    0x0(,%rax,4),%r11d
  add    $0x20,%rbx
  mov    (%rbx),%eax
  lea    0x0(,%rax,4),%ebx
  movslq %r12d,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,%rdx
  movslq %ebx,%rax
  imul   $0xfffffffffffffe0a,%rax,%rax
  add    %rdx,%rax
  sar    $0x9,%rax
  mov    %eax,%r9d
  movslq %r15d,%rax
  imul   $0x1aa,%rax,%rdx
  movslq %r14d,%rax
  imul   $0xfffffffffffffee4,%rax,%rax
  add    %rdx,%rax
  sar    $0x9,%rax
  mov    %eax,-0x3c(%rbp)
  movslq %r14d,%rax
  imul   $0x1aa,%rax,%rdx
  movslq %r15d,%rax
  imul   $0x11c,%rax,%rax
  add    %rdx,%rax
  sar    $0x9,%rax
  mov    %eax,-0x40(%rbp)
  movslq %r12d,%rax
  imul   $0x1f6,%rax,%rcx
  movslq %ebx,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  sar    $0x9,%rax
  mov    %eax,%r10d
  mov    %edi,%eax
  add    %r8d,%eax
  cltq
  imul   $0x16a,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r12d
  sub    %r8d,%edi
  mov    %edi,%eax
  cltq
  imul   $0x16a,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r14d
  movslq %esi,%rax
  imul   $0xc4,%rax,%rdx
  movslq %r11d,%rax
  imul   $0xfffffffffffffe27,%rax,%rax
  add    %rdx,%rax
  sar    $0x9,%rax
  mov    %eax,%r15d
  movslq %esi,%rax
  imul   $0x1d9,%rax,%rdx
  movslq %r11d,%rax
  imul   $0xc4,%rax,%rax
  add    %rdx,%rax
  sar    $0x9,%rax
  mov    %eax,%ebx
  lea    (%r12,%rbx,1),%ecx
  lea    (%r14,%r15,1),%r8d
  mov    %r14d,%esi
  sub    %r15d,%esi
  mov    %r12d,%edi
  sub    %ebx,%edi
  mov    %r9d,%r12d
  mov    -0x3c(%rbp),%edx
  add    %edx,%r12d
  sub    %edx,%r9d
  mov    %r9d,%r14d
  mov    %r10d,%r15d
  mov    -0x40(%rbp),%eax
  sub    %eax,%r15d
  add    %eax,%r10d
  mov    %r10d,%ebx
  mov    %r15d,%eax
  sub    %r14d,%eax
  cltq
  imul   $0x16a,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r9d
  lea    (%r15,%r14,1),%eax
  cltq
  imul   $0x16a,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r10d
  mov    %ebx,%r14d
  movslq %r13d,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  mov    %ecx,%eax
  add    %r14d,%eax
  mov    %eax,(%rbx)
  add    $0x20,%rbx
  mov    %r8d,%eax
  add    %r10d,%eax
  mov    %eax,(%rbx)
  add    $0x20,%rbx
  mov    %esi,%eax
  add    %r9d,%eax
  mov    %eax,(%rbx)
  add    $0x20,%rbx
  mov    %edi,%eax
  add    %r12d,%eax
  mov    %eax,(%rbx)
  add    $0x20,%rbx
  sub    %r12d,%edi
  mov    %edi,%eax
  mov    %eax,(%rbx)
  add    $0x20,%rbx
  sub    %r9d,%esi
  mov    %esi,%eax
  mov    %eax,(%rbx)
  add    $0x20,%rbx
  sub    %r10d,%r8d
  mov    %r8d,%eax
  mov    %eax,(%rbx)
  add    $0x20,%rbx
  sub    %r14d,%ecx
  mov    %ecx,%eax
  mov    %eax,(%rbx)
  add    $0x1,%r13d
L11:
  cmp    $0x7,%r13d
  jle    L15
  mov    $0x0,%r13d
  jmp    L73
L56:
  lea    0x0(,%r13,8),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  mov    (%rax),%edi
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  mov    (%rax),%r12d
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  mov    (%rax),%esi
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  mov    (%rax),%r14d
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  mov    (%rax),%r8d
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  mov    (%rax),%r15d
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  mov    (%rax),%r11d
  mov    (%rbx),%ebx
  movslq %r12d,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,%rdx
  movslq %ebx,%rax
  imul   $0xfffffffffffffe0a,%rax,%rax
  add    %rdx,%rax
  sar    $0x9,%rax
  mov    %eax,%r9d
  movslq %r15d,%rax
  imul   $0x1aa,%rax,%rdx
  movslq %r14d,%rax
  imul   $0xfffffffffffffee4,%rax,%rax
  add    %rdx,%rax
  sar    $0x9,%rax
  mov    %eax,-0x3c(%rbp)
  movslq %r14d,%rax
  imul   $0x1aa,%rax,%rdx
  movslq %r15d,%rax
  imul   $0x11c,%rax,%rax
  add    %rdx,%rax
  sar    $0x9,%rax
  mov    %eax,-0x40(%rbp)
  movslq %r12d,%rax
  imul   $0x1f6,%rax,%rcx
  movslq %ebx,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  sar    $0x9,%rax
  mov    %eax,%r10d
  mov    %edi,%eax
  add    %r8d,%eax
  cltq
  imul   $0x16a,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r12d
  sub    %r8d,%edi
  mov    %edi,%eax
  cltq
  imul   $0x16a,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r14d
  movslq %esi,%rax
  imul   $0xc4,%rax,%rdx
  movslq %r11d,%rax
  imul   $0xfffffffffffffe27,%rax,%rax
  add    %rdx,%rax
  sar    $0x9,%rax
  mov    %eax,%r15d
  movslq %esi,%rax
  imul   $0x1d9,%rax,%rdx
  movslq %r11d,%rax
  imul   $0xc4,%rax,%rax
  add    %rdx,%rax
  sar    $0x9,%rax
  mov    %eax,%ebx
  lea    (%r12,%rbx,1),%edi
  lea    (%r14,%r15,1),%r11d
  mov    %r14d,%ecx
  sub    %r15d,%ecx
  mov    %r12d,%esi
  sub    %ebx,%esi
  mov    %r9d,%r12d
  mov    -0x3c(%rbp),%edx
  add    %edx,%r12d
  sub    %edx,%r9d
  mov    %r9d,%r14d
  mov    %r10d,%r15d
  mov    -0x40(%rbp),%eax
  sub    %eax,%r15d
  add    %eax,%r10d
  mov    %r10d,%ebx
  mov    %r15d,%eax
  sub    %r14d,%eax
  cltq
  imul   $0x16a,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r10d
  lea    (%r15,%r14,1),%eax
  cltq
  imul   $0x16a,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r9d
  mov    %ebx,%r14d
  lea    0x0(,%r13,8),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  mov    %edi,%edx
  add    %r14d,%edx
  mov    %edx,(%rax)
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  mov    %r11d,%edx
  add    %r9d,%edx
  mov    %edx,(%rax)
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  mov    %ecx,%edx
  add    %r10d,%edx
  mov    %edx,(%rax)
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  mov    %esi,%edx
  add    %r12d,%edx
  mov    %edx,(%rax)
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  sub    %r12d,%esi
  mov    %esi,%edx
  mov    %edx,(%rax)
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  sub    %r10d,%ecx
  mov    %ecx,%edx
  mov    %edx,(%rax)
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  sub    %r9d,%r11d
  mov    %r11d,%edx
  mov    %edx,(%rax)
  sub    %r14d,%edi
  mov    %edi,%eax
  mov    %eax,(%rbx)
  add    $0x1,%r13d
L73:
  cmp    $0x7,%r13d
  jle    L56
  mov    $0x0,%r13d
  mov    -0x38(%rbp),%rbx
  jmp    L53
L64:
  mov    (%rbx),%eax
  test   %eax,%eax
  jns    L51
  mov    (%rbx),%eax
  sub    $0x8,%eax
  lea    0xf(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x4,%eax
  jmp    L46
L51:
  mov    (%rbx),%eax
  add    $0x8,%eax
  lea    0xf(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x4,%eax
L46:
  mov    %eax,(%rbx)
  add    $0x1,%r13d
  add    $0x4,%rbx
L53:
  cmp    $0x3f,%r13d
  jle    L64
  nop
  nop
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  pop    %rbp
  ret
```

assistant: ```c
void ChenIDct(x, y) int *x;
int *y;
{
  register int i;
  register int *aptr;
  register int a0, a1, a2, a3;
  register int b0, b1, b2, b3;
  register int c0, c1, c2, c3;
  for (i = 0; i < 8; i++) {
    aptr = x + i;
    b0 = ((*aptr) << (2));
    aptr += 8;
    a0 = ((*aptr) << (2));
    aptr += 8;
    b2 = ((*aptr) << (2));
    aptr += 8;
    a1 = ((*aptr) << (2));
    aptr += 8;
    b1 = ((*aptr) << (2));
    aptr += 8;
    a2 = ((*aptr) << (2));
    aptr += 8;
    b3 = ((*aptr) << (2));
    aptr += 8;
    a3 = ((*aptr) << (2));
    c0 = ((((100L * a0) - (502L * a3))) >> (9));
    c1 = ((((426L * a2) - (284L * a1))) >> (9));
    c2 = ((((426L * a1) + (284L * a2))) >> (9));
    c3 = ((((502L * a0) + (100L * a3))) >> (9));
    a0 = (((362L * (b0 + b1))) >> (9));
    a1 = (((362L * (b0 - b1))) >> (9));
    a2 = ((((196L * b2) - (473L * b3))) >> (9));
    a3 = ((((473L * b2) + (196L * b3))) >> (9));
    b0 = a0 + a3;
    b1 = a1 + a2;
    b2 = a1 - a2;
    b3 = a0 - a3;
    a0 = c0 + c1;
    a1 = c0 - c1;
    a2 = c3 - c2;
    a3 = c3 + c2;
    c0 = a0;
    c1 = (((362L * (a2 - a1))) >> (9));
    c2 = (((362L * (a2 + a1))) >> (9));
    c3 = a3;
    aptr = y + i;
    *aptr = b0 + c3;
    aptr += 8;
    *aptr = b1 + c2;
    aptr += 8;
    *aptr = b2 + c1;
    aptr += 8;
    *aptr = b3 + c0;
    aptr += 8;
    *aptr = b3 - c0;
    aptr += 8;
    *aptr = b2 - c1;
    aptr += 8;
    *aptr = b1 - c2;
    aptr += 8;
    *aptr = b0 - c3;
  }
  for (i = 0; i < 8; i++) {
    aptr = y + ((i) << (3));
    b0 = *(aptr++);
    a0 = *(aptr++);
    b2 = *(aptr++);
    a1 = *(aptr++);
    b1 = *(aptr++);
    a2 = *(aptr++);
    b3 = *(aptr++);
    a3 = *(aptr);
    c0 = ((((100L * a0) - (502L * a3))) >> (9));
    c1 = ((((426L * a2) - (284L * a1))) >> (9));
    c2 = ((((426L * a1) + (284L * a2))) >> (9));
    c3 = ((((502L * a0) + (100L * a3))) >> (9));
    a0 = (((362L * (b0 + b1))) >> (9));
    a1 = (((362L * (b0 - b1))) >> (9));
    a2 = ((((196L * b2) - (473L * b3))) >> (9));
    a3 = ((((473L * b2) + (196L * b3))) >> (9));
    b0 = a0 + a3;
    b1 = a1 + a2;
    b2 = a1 - a2;
    b3 = a0 - a3;
    a0 = c0 + c1;
    a1 = c0 - c1;
    a2 = c3 - c2;
    a3 = c3 + c2;
    c0 = a0;
    c1 = (((362L * (a2 - a1))) >> (9));
    c2 = (((362L * (a2 + a1))) >> (9));
    c3 = a3;
    aptr = y + ((i) << (3));
    *(aptr++) = b0 + c3;
    *(aptr++) = b1 + c2;
    *(aptr++) = b2 + c1;
    *(aptr++) = b3 + c0;
    *(aptr++) = b3 - c0;
    *(aptr++) = b2 - c1;
    *(aptr++) = b1 - c2;
    *(aptr) = b0 - c3;
  }
  for (i = 0, aptr = y; i < 64; i++, aptr++)
    *aptr = (((*aptr < 0) ? (*aptr - 8) : (*aptr + 8)) / 16);
}
```