user: Demonstrate the C code that generates the assembly output below:

```asm
<PDJPG_TransIDCT_Horiz>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%eax
  cwtl
  imul   $0x5b,%eax,%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x8,%rax
  movzwl (%rax),%eax
  cwtl
  imul   $0x5b,%eax,%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x4,%rax
  movzwl (%rax),%eax
  cwtl
  imul   $0x76,%eax,%eax
  mov    %eax,-0x30(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x4,%rax
  movzwl (%rax),%eax
  cwtl
  imul   $0x31,%eax,%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0xc,%rax
  movzwl (%rax),%eax
  cwtl
  imul   $0x76,%eax,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0xc,%rax
  movzwl (%rax),%eax
  cwtl
  imul   $0x31,%eax,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x38(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %eax,%edx
  mov    -0x34(%rbp),%eax
  add    %eax,%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x38(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  sub    -0x34(%rbp),%eax
  sub    -0x28(%rbp),%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x38(%rbp),%eax
  sub    -0x2c(%rbp),%eax
  sub    -0x34(%rbp),%eax
  mov    %eax,%edx
  mov    -0x28(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x38(%rbp),%eax
  sub    -0x30(%rbp),%eax
  mov    %eax,%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  sub    -0x24(%rbp),%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x2,%rax
  movzwl (%rax),%eax
  cwtl
  imul   $0x7e,%eax,%edx
  mov    -0x48(%rbp),%rax
  add    $0x6,%rax
  movzwl (%rax),%eax
  cwtl
  imul   $0x6a,%eax,%eax
  add    %eax,%edx
  mov    -0x48(%rbp),%rax
  add    $0xa,%rax
  movzwl (%rax),%eax
  cwtl
  imul   $0x47,%eax,%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x48(%rbp),%rax
  add    $0xe,%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  lea    0x0(,%rax,4),%edx
  add    %edx,%eax
  add    %ecx,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x2,%rax
  movzwl (%rax),%eax
  cwtl
  imul   $0x6a,%eax,%edx
  mov    -0x48(%rbp),%rax
  add    $0x6,%rax
  movzwl (%rax),%eax
  cwtl
  imul   $0xffffffe7,%eax,%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x48(%rbp),%rax
  add    $0xa,%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    %edx,%eax
  shl    $0x6,%edx
  sub    %edx,%eax
  add    %eax,%eax
  lea    (%rcx,%rax,1),%edx
  mov    -0x48(%rbp),%rax
  add    $0xe,%rax
  movzwl (%rax),%eax
  cwtl
  imul   $0xffffffb9,%eax,%eax
  add    %edx,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x2,%rax
  movzwl (%rax),%eax
  cwtl
  imul   $0x47,%eax,%ecx
  mov    -0x48(%rbp),%rax
  add    $0x6,%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    %edx,%eax
  shl    $0x6,%edx
  sub    %edx,%eax
  add    %eax,%eax
  add    %eax,%ecx
  mov    -0x48(%rbp),%rax
  add    $0xa,%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  lea    0x0(,%rax,4),%edx
  add    %edx,%eax
  lea    (%rcx,%rax,1),%edx
  mov    -0x48(%rbp),%rax
  add    $0xe,%rax
  movzwl (%rax),%eax
  cwtl
  imul   $0x6a,%eax,%eax
  add    %edx,%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x2,%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  lea    0x0(,%rax,4),%edx
  add    %eax,%edx
  mov    -0x48(%rbp),%rax
  add    $0x6,%rax
  movzwl (%rax),%eax
  cwtl
  imul   $0xffffffb9,%eax,%eax
  add    %eax,%edx
  mov    -0x48(%rbp),%rax
  add    $0xa,%rax
  movzwl (%rax),%eax
  cwtl
  imul   $0x6a,%eax,%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x48(%rbp),%rax
  add    $0xe,%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    %edx,%eax
  shl    $0x6,%edx
  sub    %edx,%eax
  add    %eax,%eax
  add    %ecx,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x20(%rbp),%edx
  mov    -0x10(%rbp),%eax
  add    %eax,%edx
  mov    -0x50(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x50(%rbp),%rax
  add    $0x4,%rax
  mov    -0x1c(%rbp),%ecx
  mov    -0xc(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x50(%rbp),%rax
  add    $0x8,%rax
  mov    -0x18(%rbp),%ecx
  mov    -0x8(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x50(%rbp),%rax
  add    $0xc,%rax
  mov    -0x14(%rbp),%ecx
  mov    -0x4(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x50(%rbp),%rax
  lea    0x10(%rax),%rdx
  mov    -0x14(%rbp),%eax
  sub    -0x4(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x50(%rbp),%rax
  lea    0x14(%rax),%rdx
  mov    -0x18(%rbp),%eax
  sub    -0x8(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x50(%rbp),%rax
  lea    0x18(%rax),%rdx
  mov    -0x1c(%rbp),%eax
  sub    -0xc(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x50(%rbp),%rax
  lea    0x1c(%rax),%rdx
  mov    -0x20(%rbp),%eax
  sub    -0x10(%rbp),%eax
  mov    %eax,(%rdx)
  nop
  pop    %rbp
  ret
```

assistant: ```c
void PDJPG_TransIDCT_Horiz(short *iblk, int *oblk) {
  int a, b, c, d, e, f;
  int i, j, k, l;
  int m, n, o, p;
  a = iblk[0] * 91;
  b = iblk[4] * 91;
  c = iblk[2] * 118;
  d = iblk[2] * 49;
  e = iblk[6] * 118;
  f = iblk[6] * 49;
  i = a + c + b + f;
  j = a + d - b - e;
  k = a - d - b + e;
  l = a - c + b - f;
  m = iblk[1] * 126 + iblk[3] * 106 + iblk[5] * 71 + iblk[7] * 25;
  n = iblk[1] * 106 - iblk[3] * 25 - iblk[5] * 126 - iblk[7] * 71;
  o = iblk[1] * 71 - iblk[3] * 126 + iblk[5] * 25 + iblk[7] * 106;
  p = iblk[1] * 25 - iblk[3] * 71 + iblk[5] * 106 - iblk[7] * 126;
  oblk[0] = i + m;
  oblk[1] = j + n;
  oblk[2] = k + o;
  oblk[3] = l + p;
  oblk[4] = l - p;
  oblk[5] = k - o;
  oblk[6] = j - n;
  oblk[7] = i - m;
}
```