user: Please show me the C implementation that matches the assembly code listed below:

```asm
<LeeIDct>:
  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    -0x38(%rbp),%rbx
  mov    -0x30(%rbp),%r13
  movl   $0x0,-0x3c(%rbp)
  jmp    L101
L70:
  mov    %r13,%rax
  lea    0x4(%rax),%r13
  mov    (%rax),%eax
  shl    $0x2,%eax
  cltq
  imul   $0x16a,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r15d
  mov    %r13,%rax
  lea    0x4(%rax),%r13
  mov    (%rax),%eax
  lea    0x0(,%rax,4),%ecx
  mov    %r13,%rax
  lea    0x4(%rax),%r13
  mov    (%rax),%eax
  lea    0x0(,%rax,4),%esi
  mov    %r13,%rax
  lea    0x4(%rax),%r13
  mov    (%rax),%eax
  lea    0x0(,%rax,4),%edx
  mov    %r13,%rax
  lea    0x4(%rax),%r13
  mov    (%rax),%eax
  lea    0x0(,%rax,4),%r11d
  mov    %r13,%rax
  lea    0x4(%rax),%r13
  mov    (%rax),%eax
  lea    0x0(,%rax,4),%r10d
  mov    %r13,%rax
  lea    0x4(%rax),%r13
  mov    (%rax),%eax
  lea    0x0(,%rax,4),%edi
  mov    %r13,%rax
  lea    0x4(%rax),%r13
  mov    (%rax),%eax
  shl    $0x2,%eax
  mov    %eax,-0x40(%rbp)
  movslq %r11d,%rax
  imul   $0x16a,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r12d
  lea    (%r15,%r12,1),%r14d
  sub    %r12d,%r15d
  mov    %edi,%eax
  add    %esi,%eax
  cltq
  imul   $0x16a,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r12d
  lea    (%rsi,%r12,1),%eax
  cltq
  imul   $0x115,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%edi
  sub    %r12d,%esi
  mov    %esi,%eax
  cltq
  imul   $0x29d,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r12d
  lea    (%r14,%rdi,1),%r8d
  lea    (%r15,%r12,1),%r9d
  mov    %r14d,%esi
  sub    %edi,%esi
  mov    %r15d,%edi
  sub    %r12d,%edi
  mov    %edx,%eax
  add    %r10d,%eax
  cltq
  imul   $0x16a,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r12d
  lea    (%rcx,%r12,1),%r14d
  mov    %ecx,%r15d
  sub    %r12d,%r15d
  add    %edx,%ecx
  add    -0x40(%rbp),%r10d
  mov    %r10d,%r12d
  lea    (%rcx,%r12,1),%eax
  cltq
  imul   $0x16a,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r12d
  lea    (%rcx,%r12,1),%eax
  cltq
  imul   $0x115,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%edx
  mov    %ecx,%eax
  sub    %r12d,%eax
  cltq
  imul   $0x29d,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r12d
  mov    %edx,%ecx
  lea    (%r14,%rcx,1),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x6,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  sar    $0x9,%rax
  mov    %eax,-0x44(%rbp)
  lea    (%r15,%r12,1),%eax
  cltq
  imul   $0x134,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r10d
  mov    %r14d,%eax
  sub    %ecx,%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  add    %rdx,%rax
  shl    $0x5,%rax
  sar    $0x9,%rax
  mov    %eax,%ecx
  mov    %r15d,%eax
  sub    %r12d,%eax
  cltq
  imul   $0x1cd,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r11d
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  mov    %r8d,%edx
  mov    -0x44(%rbp),%r14d
  add    %r14d,%edx
  mov    %edx,(%rax)
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  mov    %r9d,%edx
  add    %r10d,%edx
  mov    %edx,(%rax)
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  mov    %edi,%edx
  add    %r11d,%edx
  mov    %edx,(%rax)
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  mov    %esi,%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  sub    %ecx,%esi
  mov    %esi,%edx
  mov    %edx,(%rax)
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  sub    %r11d,%edi
  mov    %edi,%edx
  mov    %edx,(%rax)
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  sub    %r10d,%r9d
  mov    %r9d,%edx
  mov    %edx,(%rax)
  mov    %rbx,%rax
  lea    0x4(%rax),%rbx
  sub    %r14d,%r8d
  mov    %r8d,%edx
  mov    %edx,(%rax)
  addl   $0x1,-0x3c(%rbp)
L101:
  cmpl   $0x7,-0x3c(%rbp)
  jle    L70
  movl   $0x0,-0x3c(%rbp)
  jmp    L128
L116:
  movslq -0x3c(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  lea    (%rdx,%rax,1),%r13
  mov    %r13,%rbx
  mov    0x0(%r13),%eax
  cltq
  imul   $0x16a,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r15d
  lea    0x80(%r13),%rax
  mov    (%rax),%eax
  cltq
  imul   $0x16a,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r12d
  lea    (%r15,%r12,1),%r14d
  sub    %r12d,%r15d
  lea    0x40(%r13),%rax
  mov    (%rax),%edx
  lea    0xc0(%r13),%rax
  mov    (%rax),%eax
  add    %edx,%eax
  cltq
  imul   $0x16a,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r12d
  lea    0x40(%r13),%rax
  mov    (%rax),%eax
  add    %r12d,%eax
  cltq
  imul   $0x115,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%esi
  lea    0x40(%r13),%rax
  mov    (%rax),%eax
  sub    %r12d,%eax
  cltq
  imul   $0x29d,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r12d
  lea    (%r14,%rsi,1),%ecx
  mov    %ecx,-0x48(%rbp)
  lea    (%r15,%r12,1),%eax
  mov    %eax,%r8d
  sub    %esi,%r14d
  mov    %r14d,%r9d
  sub    %r12d,%r15d
  mov    %r15d,%r11d
  lea    0x60(%r13),%rax
  mov    (%rax),%edx
  lea    0xa0(%r13),%rax
  mov    (%rax),%eax
  add    %edx,%eax
  cltq
  imul   $0x16a,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r12d
  lea    0x20(%r13),%rax
  mov    (%rax),%eax
  lea    (%r12,%rax,1),%r14d
  lea    0x20(%r13),%rax
  mov    (%rax),%eax
  sub    %r12d,%eax
  mov    %eax,%r15d
  lea    0x20(%r13),%rax
  mov    (%rax),%edx
  lea    0x60(%r13),%rax
  mov    (%rax),%eax
  lea    (%rdx,%rax,1),%edi
  lea    0xa0(%r13),%rax
  mov    (%rax),%edx
  lea    0xe0(%r13),%rax
  mov    (%rax),%eax
  lea    (%rdx,%rax,1),%r12d
  lea    (%rdi,%r12,1),%eax
  cltq
  imul   $0x16a,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r12d
  lea    (%rdi,%r12,1),%eax
  cltq
  imul   $0x115,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%esi
  mov    %edi,%eax
  sub    %r12d,%eax
  cltq
  imul   $0x29d,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r12d
  lea    (%r14,%rsi,1),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x6,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  sar    $0x9,%rax
  mov    %eax,%edi
  mov    %edi,-0x44(%rbp)
  lea    (%r15,%r12,1),%eax
  cltq
  imul   $0x134,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,%r10d
  mov    %r14d,%eax
  sub    %esi,%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  add    %rdx,%rax
  shl    $0x5,%rax
  sar    $0x9,%rax
  mov    %eax,%esi
  mov    %r15d,%eax
  sub    %r12d,%eax
  cltq
  imul   $0x1cd,%rax,%rax
  sar    $0x9,%rax
  mov    %eax,-0x40(%rbp)
  add    %edi,%ecx
  mov    %ecx,%r12d
  test   %r12d,%r12d
  jns    L159
  lea    -0x8(%r12),%eax
  lea    0xf(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x4,%eax
  jmp    L141
L159:
  lea    0x8(%r12),%eax
  lea    0xf(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x4,%eax
L141:
  mov    %eax,(%rbx)
  add    $0x20,%rbx
  mov    %r8d,%r12d
  add    %r10d,%r12d
  test   %r12d,%r12d
  jns    L41
  lea    -0x8(%r12),%eax
  lea    0xf(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x4,%eax
  jmp    L44
L41:
  lea    0x8(%r12),%eax
  lea    0xf(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x4,%eax
L44:
  mov    %eax,(%rbx)
  add    $0x20,%rbx
  mov    %r11d,%r12d
  add    -0x40(%rbp),%r12d
  test   %r12d,%r12d
  jns    L161
  lea    -0x8(%r12),%eax
  lea    0xf(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x4,%eax
  jmp    L87
L161:
  lea    0x8(%r12),%eax
  lea    0xf(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x4,%eax
L87:
  mov    %eax,(%rbx)
  add    $0x20,%rbx
  mov    %r9d,%r12d
  add    %esi,%r12d
  test   %r12d,%r12d
  jns    L86
  lea    -0x8(%r12),%eax
  lea    0xf(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x4,%eax
  jmp    L63
L86:
  lea    0x8(%r12),%eax
  lea    0xf(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x4,%eax
L63:
  mov    %eax,(%rbx)
  add    $0x20,%rbx
  mov    %r9d,%r12d
  sub    %esi,%r12d
  test   %r12d,%r12d
  jns    L165
  lea    -0x8(%r12),%eax
  lea    0xf(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x4,%eax
  jmp    L56
L165:
  lea    0x8(%r12),%eax
  lea    0xf(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x4,%eax
L56:
  mov    %eax,(%rbx)
  add    $0x20,%rbx
  mov    %r11d,%r12d
  sub    -0x40(%rbp),%r12d
  test   %r12d,%r12d
  jns    L125
  lea    -0x8(%r12),%eax
  lea    0xf(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x4,%eax
  jmp    L131
L125:
  lea    0x8(%r12),%eax
  lea    0xf(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x4,%eax
L131:
  mov    %eax,(%rbx)
  add    $0x20,%rbx
  mov    %r8d,%r12d
  sub    %r10d,%r12d
  test   %r12d,%r12d
  jns    L126
  lea    -0x8(%r12),%eax
  lea    0xf(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x4,%eax
  jmp    L83
L126:
  lea    0x8(%r12),%eax
  lea    0xf(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x4,%eax
L83:
  mov    %eax,(%rbx)
  add    $0x20,%rbx
  mov    -0x48(%rbp),%r12d
  sub    -0x44(%rbp),%r12d
  test   %r12d,%r12d
  jns    L75
  lea    -0x8(%r12),%eax
  lea    0xf(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x4,%eax
  jmp    L48
L75:
  lea    0x8(%r12),%eax
  lea    0xf(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x4,%eax
L48:
  mov    %eax,(%rbx)
  addl   $0x1,-0x3c(%rbp)
L128:
  cmpl   $0x7,-0x3c(%rbp)
  jle    L116
  nop
  nop
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  pop    %rbp
  ret
```

assistant: ```c
void LeeIDct(x, y) int *x;
int *y;
{
  register int ex0, ex1, ex2, ex3, ex4, ex5, ex6, ex7;
  register int tx0, tx1, tx2, tx3;
  register int rx0, rx1, rx2, rx3;
  register int gx0, gx1, gx2;
  register int *iptr, *jptr;
  register int i;
  for (jptr = y, iptr = x, i = 0; i < 8; i++) {
    tx0 = (((362L * ((*(iptr++)) << (2)))) >> (9));
    tx1 = ((*(iptr++)) << (2));
    tx2 = ((*(iptr++)) << (2));
    tx3 = ((*(iptr++)) << (2));
    ex4 = ((*(iptr++)) << (2));
    ex5 = ((*(iptr++)) << (2));
    ex6 = ((*(iptr++)) << (2));
    ex7 = ((*(iptr++)) << (2));
    gx2 = (((362L * ex4)) >> (9));
    rx0 = tx0 + gx2;
    rx1 = tx0 - gx2;
    gx2 = (((362L * (tx2 + ex6))) >> (9));
    rx2 = (((277L * (tx2 + gx2))) >> (9));
    rx3 = (((669L * (tx2 - gx2))) >> (9));
    ex0 = rx0 + rx2;
    ex1 = rx1 + rx3;
    ex2 = rx0 - rx2;
    ex3 = rx1 - rx3;
    gx0 = tx3 + ex5;
    gx2 = (((362L * gx0)) >> (9));
    rx0 = tx1 + gx2;
    rx1 = tx1 - gx2;
    gx0 = tx1 + tx3;
    gx1 = ex5 + ex7;
    gx2 = (((362L * (gx0 + gx1))) >> (9));
    rx2 = (((277L * (gx0 + gx2))) >> (9));
    rx3 = (((669L * (gx0 - gx2))) >> (9));
    ex4 = (((261L * (rx0 + rx2))) >> (9));
    ex5 = (((308L * (rx1 + rx3))) >> (9));
    ex6 = (((1312L * (rx0 - rx2))) >> (9));
    ex7 = (((461L * (rx1 - rx3))) >> (9));
    *(jptr++) = ex0 + ex4;
    *(jptr++) = ex1 + ex5;
    *(jptr++) = ex3 + ex7;
    *(jptr++) = ex2 + ex6;
    *(jptr++) = ex2 - ex6;
    *(jptr++) = ex3 - ex7;
    *(jptr++) = ex1 - ex5;
    *(jptr++) = ex0 - ex4;
  }
  for (i = 0; i < 8; i++) {
    jptr = iptr = y + i;
    tx0 = (((362L * (*iptr))) >> (9));
    gx2 = (((362L * iptr[32])) >> (9));
    rx0 = tx0 + gx2;
    rx1 = tx0 - gx2;
    gx2 = (((362L * (iptr[16] + iptr[48]))) >> (9));
    rx2 = (((277L * (iptr[16] + gx2))) >> (9));
    rx3 = (((669L * (iptr[16] - gx2))) >> (9));
    ex0 = rx0 + rx2;
    ex1 = rx1 + rx3;
    ex2 = rx0 - rx2;
    ex3 = rx1 - rx3;
    gx0 = iptr[24] + iptr[40];
    gx2 = (((362L * gx0)) >> (9));
    rx0 = iptr[8] + gx2;
    rx1 = iptr[8] - gx2;
    gx0 = iptr[8] + iptr[24];
    gx1 = iptr[40] + iptr[56];
    gx2 = (((362L * (gx0 + gx1))) >> (9));
    rx2 = (((277L * (gx0 + gx2))) >> (9));
    rx3 = (((669L * (gx0 - gx2))) >> (9));
    ex4 = (((261L * (rx0 + rx2))) >> (9));
    ex5 = (((308L * (rx1 + rx3))) >> (9));
    ex6 = (((1312L * (rx0 - rx2))) >> (9));
    ex7 = (((461L * (rx1 - rx3))) >> (9));
    gx1 = ex0 + ex4;
    (*jptr) = (((gx1 < 0) ? (gx1 - 8) : (gx1 + 8)) / 16);
    ;
    jptr += 8;
    gx1 = ex1 + ex5;
    (*jptr) = (((gx1 < 0) ? (gx1 - 8) : (gx1 + 8)) / 16);
    ;
    jptr += 8;
    gx1 = ex3 + ex7;
    (*jptr) = (((gx1 < 0) ? (gx1 - 8) : (gx1 + 8)) / 16);
    ;
    jptr += 8;
    gx1 = ex2 + ex6;
    (*jptr) = (((gx1 < 0) ? (gx1 - 8) : (gx1 + 8)) / 16);
    ;
    jptr += 8;
    gx1 = ex2 - ex6;
    (*jptr) = (((gx1 < 0) ? (gx1 - 8) : (gx1 + 8)) / 16);
    ;
    jptr += 8;
    gx1 = ex3 - ex7;
    (*jptr) = (((gx1 < 0) ? (gx1 - 8) : (gx1 + 8)) / 16);
    ;
    jptr += 8;
    gx1 = ex1 - ex5;
    (*jptr) = (((gx1 < 0) ? (gx1 - 8) : (gx1 + 8)) / 16);
    ;
    jptr += 8;
    gx1 = ex0 - ex4;
    (*jptr) = (((gx1 < 0) ? (gx1 - 8) : (gx1 + 8)) / 16);
    ;
  }
}
```