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

```asm
<bink_idct_put_c>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x118,%rsp
  mov    %rdi,%r13
  mov    %esi,%r14d
  mov    %fs:0x28,%rax
  mov    %rax,0x108(%rsp)
  xor    %eax,%eax
  mov    %rsp,%rbx
  mov    %rdx,%r12
  lea    0x20(%rsp),%r15
  mov    %rbx,%rbp
L11:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <bink_idct_col@plt>
  add    $0x4,%rbp
  add    $0x4,%r12
  cmp    %r15,%rbp
  jne    L11
  movslq %r14d,%r8
  shl    $0x2,%r8
  mov    %r13,%rdi
  lea    0x100(%rbx),%r9
L16:
  mov    (%rbx),%edx
  mov    %edx,%esi
  add    0x10(%rbx),%esi
  sub    0x10(%rbx),%edx
  mov    0x8(%rbx),%r14d
  mov    %r14d,%r13d
  add    0x18(%rbx),%r13d
  sub    0x18(%rbx),%r14d
  imul   $0xb50,%r14d,%r14d
  sar    $0xb,%r14d
  mov    0x14(%rbx),%ecx
  mov    %ecx,%r12d
  add    0xc(%rbx),%r12d
  sub    0xc(%rbx),%ecx
  mov    0x4(%rbx),%eax
  mov    %eax,%ebp
  add    0x1c(%rbx),%ebp
  sub    0x1c(%rbx),%eax
  lea    (%r12,%rbp,1),%r10d
  lea    (%rcx,%rax,1),%r11d
  imul   $0xec8,%r11d,%r11d
  sar    $0xb,%r11d
  imul   $0xffffeb18,%ecx,%ecx
  sar    $0xb,%ecx
  sub    %r10d,%ecx
  add    %r11d,%ecx
  sub    %r12d,%ebp
  imul   $0xb50,%ebp,%ebp
  sar    $0xb,%ebp
  sub    %ecx,%ebp
  imul   $0x8a9,%eax,%eax
  sar    $0xb,%eax
  add    %ebp,%eax
  sub    %r11d,%eax
  lea    (%rsi,%r13,1),%r11d
  lea    0x7f(%r11,%r10,1),%r12d
  sar    $0x8,%r12d
  mov    %r12d,(%rdi)
  lea    (%rdx,%r14,1),%r12d
  sub    %r13d,%r12d
  lea    0x7f(%r12,%rcx,1),%r15d
  sar    $0x8,%r15d
  mov    %r15d,0x4(%rdi)
  sub    %r14d,%edx
  add    %r13d,%edx
  lea    0x7f(%rdx,%rbp,1),%r14d
  sar    $0x8,%r14d
  mov    %r14d,0x8(%rdi)
  sub    %r13d,%esi
  mov    %esi,%r13d
  sub    %eax,%r13d
  add    $0x7f,%r13d
  sar    $0x8,%r13d
  mov    %r13d,0xc(%rdi)
  lea    0x7f(%rsi,%rax,1),%eax
  sar    $0x8,%eax
  mov    %eax,0x10(%rdi)
  mov    %edx,%esi
  sub    %ebp,%esi
  add    $0x7f,%esi
  sar    $0x8,%esi
  mov    %esi,0x14(%rdi)
  mov    %r12d,%edx
  sub    %ecx,%edx
  add    $0x7f,%edx
  sar    $0x8,%edx
  mov    %edx,0x18(%rdi)
  mov    %r11d,%eax
  sub    %r10d,%eax
  add    $0x7f,%eax
  sar    $0x8,%eax
  mov    %eax,0x1c(%rdi)
  add    $0x20,%rbx
  add    %r8,%rdi
  cmp    %r9,%rbx
  jne    L16
  mov    0x108(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L28
  mov    $0x0,%eax
  add    $0x118,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L28:
  call   <__stack_chk_fail@plt>
```

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;
}
```