user: Translate the below assembly code into C programming language:

```asm
<bink_idct_put_c>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x170,%rsp
  mov    %rdi,-0x158(%rbp)
  mov    %esi,-0x15c(%rbp)
  mov    %rdx,-0x168(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x148(%rbp)
  jmp    L23
L15:
  mov    -0x148(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x168(%rbp),%rax
  add    %rax,%rdx
  lea    -0x110(%rbp),%rcx
  mov    -0x148(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rcx,%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <bink_idct_col@plt>
  addl   $0x1,-0x148(%rbp)
L23:
  cmpl   $0x7,-0x148(%rbp)
  jle    L15
  movl   $0x0,-0x148(%rbp)
  jmp    L5
L47:
  mov    -0x148(%rbp),%eax
  shl    $0x3,%eax
  cltq
  mov    -0x110(%rbp,%rax,4),%edx
  mov    -0x148(%rbp),%eax
  shl    $0x3,%eax
  lea    -0x110(%rbp),%rcx
  cltq
  shl    $0x2,%rax
  add    %rcx,%rax
  add    $0x10,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x144(%rbp)
  mov    -0x148(%rbp),%eax
  shl    $0x3,%eax
  cltq
  mov    -0x110(%rbp,%rax,4),%eax
  mov    -0x148(%rbp),%edx
  shl    $0x3,%edx
  lea    -0x110(%rbp),%rcx
  movslq %edx,%rdx
  shl    $0x2,%rdx
  add    %rcx,%rdx
  add    $0x10,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x140(%rbp)
  mov    -0x148(%rbp),%eax
  shl    $0x3,%eax
  lea    -0x110(%rbp),%rdx
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  add    $0x8,%rax
  mov    (%rax),%edx
  mov    -0x148(%rbp),%eax
  shl    $0x3,%eax
  lea    -0x110(%rbp),%rcx
  cltq
  shl    $0x2,%rax
  add    %rcx,%rax
  add    $0x18,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x13c(%rbp)
  mov    -0x148(%rbp),%eax
  shl    $0x3,%eax
  lea    -0x110(%rbp),%rdx
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  mov    -0x148(%rbp),%edx
  shl    $0x3,%edx
  lea    -0x110(%rbp),%rcx
  movslq %edx,%rdx
  shl    $0x2,%rdx
  add    %rcx,%rdx
  add    $0x18,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  imul   $0xb50,%eax,%eax
  sar    $0xb,%eax
  mov    %eax,-0x138(%rbp)
  mov    -0x148(%rbp),%eax
  shl    $0x3,%eax
  lea    -0x110(%rbp),%rdx
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  add    $0x14,%rax
  mov    (%rax),%edx
  mov    -0x148(%rbp),%eax
  shl    $0x3,%eax
  lea    -0x110(%rbp),%rcx
  cltq
  shl    $0x2,%rax
  add    %rcx,%rax
  add    $0xc,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x134(%rbp)
  mov    -0x148(%rbp),%eax
  shl    $0x3,%eax
  lea    -0x110(%rbp),%rdx
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  add    $0x14,%rax
  mov    (%rax),%eax
  mov    -0x148(%rbp),%edx
  shl    $0x3,%edx
  lea    -0x110(%rbp),%rcx
  movslq %edx,%rdx
  shl    $0x2,%rdx
  add    %rcx,%rdx
  add    $0xc,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x130(%rbp)
  mov    -0x148(%rbp),%eax
  shl    $0x3,%eax
  lea    -0x110(%rbp),%rdx
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x148(%rbp),%eax
  shl    $0x3,%eax
  lea    -0x110(%rbp),%rcx
  cltq
  shl    $0x2,%rax
  add    %rcx,%rax
  add    $0x1c,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x12c(%rbp)
  mov    -0x148(%rbp),%eax
  shl    $0x3,%eax
  lea    -0x110(%rbp),%rdx
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  mov    -0x148(%rbp),%edx
  shl    $0x3,%edx
  lea    -0x110(%rbp),%rcx
  movslq %edx,%rdx
  shl    $0x2,%rdx
  add    %rcx,%rdx
  add    $0x1c,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x128(%rbp)
  mov    -0x134(%rbp),%edx
  mov    -0x12c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x124(%rbp)
  mov    -0x130(%rbp),%edx
  mov    -0x128(%rbp),%eax
  add    %edx,%eax
  imul   $0xec8,%eax,%eax
  sar    $0xb,%eax
  mov    %eax,-0x120(%rbp)
  mov    -0x130(%rbp),%eax
  imul   $0xffffeb18,%eax,%eax
  sar    $0xb,%eax
  sub    -0x124(%rbp),%eax
  mov    %eax,%edx
  mov    -0x120(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x11c(%rbp)
  mov    -0x12c(%rbp),%eax
  sub    -0x134(%rbp),%eax
  imul   $0xb50,%eax,%eax
  sar    $0xb,%eax
  sub    -0x11c(%rbp),%eax
  mov    %eax,-0x118(%rbp)
  mov    -0x128(%rbp),%eax
  imul   $0x8a9,%eax,%eax
  sar    $0xb,%eax
  mov    %eax,%edx
  mov    -0x118(%rbp),%eax
  add    %edx,%eax
  sub    -0x120(%rbp),%eax
  mov    %eax,-0x114(%rbp)
  mov    -0x144(%rbp),%edx
  mov    -0x13c(%rbp),%eax
  add    %eax,%edx
  mov    -0x124(%rbp),%eax
  add    %edx,%eax
  lea    0x7f(%rax),%edx
  mov    -0x148(%rbp),%eax
  imul   -0x15c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x158(%rbp),%rax
  add    %rcx,%rax
  sar    $0x8,%edx
  mov    %edx,(%rax)
  mov    -0x140(%rbp),%edx
  mov    -0x138(%rbp),%eax
  add    %edx,%eax
  sub    -0x13c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x11c(%rbp),%eax
  add    %edx,%eax
  lea    0x7f(%rax),%edx
  mov    -0x148(%rbp),%eax
  imul   -0x15c(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rcx
  mov    -0x158(%rbp),%rax
  add    %rcx,%rax
  sar    $0x8,%edx
  mov    %edx,(%rax)
  mov    -0x140(%rbp),%eax
  sub    -0x138(%rbp),%eax
  mov    %eax,%edx
  mov    -0x13c(%rbp),%eax
  add    %eax,%edx
  mov    -0x118(%rbp),%eax
  add    %edx,%eax
  lea    0x7f(%rax),%edx
  mov    -0x148(%rbp),%eax
  imul   -0x15c(%rbp),%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,4),%rcx
  mov    -0x158(%rbp),%rax
  add    %rcx,%rax
  sar    $0x8,%edx
  mov    %edx,(%rax)
  mov    -0x144(%rbp),%eax
  sub    -0x13c(%rbp),%eax
  sub    -0x114(%rbp),%eax
  lea    0x7f(%rax),%edx
  mov    -0x148(%rbp),%eax
  imul   -0x15c(%rbp),%eax
  cltq
  add    $0x3,%rax
  lea    0x0(,%rax,4),%rcx
  mov    -0x158(%rbp),%rax
  add    %rcx,%rax
  sar    $0x8,%edx
  mov    %edx,(%rax)
  mov    -0x144(%rbp),%eax
  sub    -0x13c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x114(%rbp),%eax
  add    %edx,%eax
  lea    0x7f(%rax),%edx
  mov    -0x148(%rbp),%eax
  imul   -0x15c(%rbp),%eax
  cltq
  add    $0x4,%rax
  lea    0x0(,%rax,4),%rcx
  mov    -0x158(%rbp),%rax
  add    %rcx,%rax
  sar    $0x8,%edx
  mov    %edx,(%rax)
  mov    -0x140(%rbp),%eax
  sub    -0x138(%rbp),%eax
  mov    %eax,%edx
  mov    -0x13c(%rbp),%eax
  add    %edx,%eax
  sub    -0x118(%rbp),%eax
  lea    0x7f(%rax),%edx
  mov    -0x148(%rbp),%eax
  imul   -0x15c(%rbp),%eax
  cltq
  add    $0x5,%rax
  lea    0x0(,%rax,4),%rcx
  mov    -0x158(%rbp),%rax
  add    %rcx,%rax
  sar    $0x8,%edx
  mov    %edx,(%rax)
  mov    -0x140(%rbp),%edx
  mov    -0x138(%rbp),%eax
  add    %edx,%eax
  sub    -0x13c(%rbp),%eax
  sub    -0x11c(%rbp),%eax
  lea    0x7f(%rax),%edx
  mov    -0x148(%rbp),%eax
  imul   -0x15c(%rbp),%eax
  cltq
  add    $0x6,%rax
  lea    0x0(,%rax,4),%rcx
  mov    -0x158(%rbp),%rax
  add    %rcx,%rax
  sar    $0x8,%edx
  mov    %edx,(%rax)
  mov    -0x144(%rbp),%edx
  mov    -0x13c(%rbp),%eax
  add    %edx,%eax
  sub    -0x124(%rbp),%eax
  lea    0x7f(%rax),%edx
  mov    -0x148(%rbp),%eax
  imul   -0x15c(%rbp),%eax
  cltq
  add    $0x7,%rax
  lea    0x0(,%rax,4),%rcx
  mov    -0x158(%rbp),%rax
  add    %rcx,%rax
  sar    $0x8,%edx
  mov    %edx,(%rax)
  addl   $0x1,-0x148(%rbp)
L5:
  cmpl   $0x7,-0x148(%rbp)
  jle    L47
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L31
  call   <__stack_chk_fail@plt>
L31:
  leave
  ret
```

assistant: ```c
int bink_idct_put_c(uint8_t *dest, int linesize, int32_t *block) {
  int i;
  int temp[64];
  for (i = 0; i < 8; i++)
    bink_idct_col(&temp[i], &block[i]);
  for (i = 0; i < 8; i++) {
    {
      const int a0 = ((&temp[8 * i]))[0] + ((&temp[8 * i]))[4];
      const int a1 = ((&temp[8 * i]))[0] - ((&temp[8 * i]))[4];
      const int a2 = ((&temp[8 * i]))[2] + ((&temp[8 * i]))[6];
      const int a3 = (2896 * (((&temp[8 * i]))[2] - ((&temp[8 * i]))[6])) >> 11;
      const int a4 = ((&temp[8 * i]))[5] + ((&temp[8 * i]))[3];
      const int a5 = ((&temp[8 * i]))[5] - ((&temp[8 * i]))[3];
      const int a6 = ((&temp[8 * i]))[1] + ((&temp[8 * i]))[7];
      const int a7 = ((&temp[8 * i]))[1] - ((&temp[8 * i]))[7];
      const int b0 = a4 + a6;
      const int b1 = (3784 * (a5 + a7)) >> 11;
      const int b2 = ((-5352 * a5) >> 11) - b0 + b1;
      const int b3 = (2896 * (a6 - a4) >> 11) - b2;
      const int b4 = ((2217 * a7) >> 11) + b3 - b1;
      ((&dest[i * linesize]))[0] = (((a0 + a2 + b0) + 0x7F) >> 8);
      ((&dest[i * linesize]))[1] = (((a1 + a3 - a2 + b2) + 0x7F) >> 8);
      ((&dest[i * linesize]))[2] = (((a1 - a3 + a2 + b3) + 0x7F) >> 8);
      ((&dest[i * linesize]))[3] = (((a0 - a2 - b4) + 0x7F) >> 8);
      ((&dest[i * linesize]))[4] = (((a0 - a2 + b4) + 0x7F) >> 8);
      ((&dest[i * linesize]))[5] = (((a1 - a3 + a2 - b3) + 0x7F) >> 8);
      ((&dest[i * linesize]))[6] = (((a1 + a3 - a2 - b2) + 0x7F) >> 8);
      ((&dest[i * linesize]))[7] = (((a0 + a2 - b0) + 0x7F) >> 8);
    };
  }
  return 0;
}
```