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

```asm
<bink_idct_put_c>:
  endbr64
  push   %r15
  push   %r14
  movslq %esi,%r14
  push   %r13
  mov    %rdx,%r13
  push   %r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  sub    $0x118,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x108(%rsp)
  xor    %eax,%eax
  mov    %rsp,%r12
  lea    0x20(%rsp),%r15
  mov    %r12,%rbx
  nopl   0x0(%rax)
L16:
  mov    %r13,%rsi
  mov    %rbx,%rdi
  add    $0x4,%rbx
  add    $0x4,%r13
  call   <bink_idct_col@plt>
  cmp    %r15,%rbx
  jne    L16
  lea    0x0(,%r14,4),%rcx
  lea    0x1f(%rcx),%rax
  cmp    $0x3e,%rax
  jbe    L55
  mov    %r14,%rsi
  lea    0x0(%rbp,%r14,8),%rdx
  pxor   %xmm10,%xmm10
  mov    %rbp,%rax
  movdqa D0(%rip),%xmm6
  shl    $0x4,%rsi
  lea    0x100(%r12),%rdi
L12:
  movdqa (%r12),%xmm3
  movdqa 0x20(%r12),%xmm1
  sub    $0xffffffffffffff80,%r12
  movdqa -0x40(%r12),%xmm2
  movdqa -0x20(%r12),%xmm0
  movdqa %xmm3,%xmm5
  shufps $0x88,-0x70(%r12),%xmm5
  movdqa %xmm5,%xmm8
  movdqa %xmm1,%xmm7
  movdqa %xmm2,%xmm9
  shufps $0x88,-0x50(%r12),%xmm7
  shufps $0xdd,%xmm7,%xmm5
  shufps $0x88,-0x30(%r12),%xmm9
  shufps $0x88,%xmm7,%xmm8
  movdqa %xmm9,%xmm7
  shufps $0xdd,-0x70(%r12),%xmm3
  movdqa %xmm0,%xmm4
  shufps $0x88,-0x10(%r12),%xmm4
  shufps $0x88,%xmm4,%xmm7
  shufps $0xdd,%xmm4,%xmm9
  movdqa %xmm3,%xmm4
  shufps $0xdd,-0x50(%r12),%xmm1
  shufps $0x88,%xmm1,%xmm4
  shufps $0xdd,-0x30(%r12),%xmm2
  shufps $0xdd,%xmm1,%xmm3
  movdqa %xmm4,%xmm11
  movdqa %xmm2,%xmm1
  shufps $0xdd,-0x10(%r12),%xmm0
  shufps $0xdd,%xmm0,%xmm2
  shufps $0x88,%xmm0,%xmm1
  shufps $0x88,%xmm1,%xmm11
  shufps $0xdd,%xmm1,%xmm4
  movdqa %xmm3,%xmm1
  shufps $0x88,%xmm2,%xmm1
  shufps $0xdd,%xmm2,%xmm3
  movdqa %xmm8,%xmm0
  shufps $0xdd,%xmm7,%xmm8
  movdqa %xmm8,%xmm2
  shufps $0x88,%xmm7,%xmm0
  movdqa %xmm5,%xmm7
  shufps $0xdd,%xmm9,%xmm5
  paddd  %xmm0,%xmm2
  psubd  %xmm8,%xmm0
  movdqa %xmm5,%xmm8
  shufps $0x88,%xmm9,%xmm7
  paddd  %xmm7,%xmm8
  psubd  %xmm5,%xmm7
  movdqa %xmm1,%xmm12
  movdqa %xmm7,%xmm9
  paddd  %xmm4,%xmm12
  psubd  %xmm1,%xmm4
  pslld  $0x1,%xmm9
  movdqa %xmm3,%xmm1
  movdqa %xmm8,%xmm13
  paddd  %xmm7,%xmm9
  paddd  %xmm11,%xmm1
  movdqa %xmm9,%xmm5
  psubd  %xmm3,%xmm11
  paddd  %xmm2,%xmm13
  pslld  $0x4,%xmm5
  psubd  %xmm8,%xmm2
  psubd  %xmm9,%xmm5
  movdqa %xmm1,%xmm9
  psubd  %xmm12,%xmm1
  pslld  $0x2,%xmm5
  paddd  %xmm12,%xmm9
  movdqa %xmm1,%xmm12
  paddd  %xmm7,%xmm5
  pslld  $0x1,%xmm12
  movdqa %xmm11,%xmm7
  paddd  %xmm4,%xmm7
  paddd  %xmm1,%xmm12
  pslld  $0x4,%xmm5
  movdqa %xmm7,%xmm3
  psrad  $0xb,%xmm5
  pslld  $0x4,%xmm3
  psubd  %xmm7,%xmm3
  pslld  $0x2,%xmm3
  psubd  %xmm7,%xmm3
  pslld  $0x3,%xmm3
  paddd  %xmm7,%xmm3
  movdqa %xmm4,%xmm7
  pslld  $0x3,%xmm7
  pslld  $0x3,%xmm3
  psubd  %xmm4,%xmm7
  psrad  $0xb,%xmm3
  pslld  $0x5,%xmm7
  psubd  %xmm4,%xmm7
  movdqa %xmm7,%xmm4
  pslld  $0x2,%xmm4
  psubd  %xmm7,%xmm4
  movdqa %xmm10,%xmm7
  pslld  $0x3,%xmm4
  psubd  %xmm4,%xmm7
  movdqa %xmm12,%xmm4
  pslld  $0x4,%xmm4
  psrad  $0xb,%xmm7
  psubd  %xmm12,%xmm4
  psubd  %xmm9,%xmm7
  movdqa %xmm13,%xmm12
  pslld  $0x2,%xmm4
  paddd  %xmm3,%xmm7
  paddd  %xmm9,%xmm12
  paddd  %xmm1,%xmm4
  movdqa %xmm11,%xmm1
  paddd  %xmm6,%xmm12
  pslld  $0x4,%xmm1
  pslld  $0x4,%xmm4
  psrad  $0xb,%xmm4
  psrad  $0x8,%xmm12
  paddd  %xmm11,%xmm1
  pslld  $0x2,%xmm1
  psubd  %xmm7,%xmm4
  movd   %xmm12,(%rax)
  paddd  %xmm11,%xmm1
  pslld  $0x2,%xmm1
  paddd  %xmm11,%xmm1
  pslld  $0x3,%xmm1
  paddd  %xmm11,%xmm1
  psrad  $0xb,%xmm1
  paddd  %xmm4,%xmm1
  psubd  %xmm3,%xmm1
  movdqa %xmm5,%xmm3
  paddd  %xmm0,%xmm3
  psubd  %xmm5,%xmm0
  psubd  %xmm8,%xmm3
  paddd  %xmm8,%xmm0
  movdqa %xmm2,%xmm8
  movdqa %xmm3,%xmm11
  movdqa %xmm0,%xmm5
  psubd  %xmm4,%xmm0
  paddd  %xmm4,%xmm5
  paddd  %xmm7,%xmm11
  pshufd $0x55,%xmm12,%xmm4
  movd   %xmm4,(%rax,%rcx,1)
  paddd  %xmm6,%xmm11
  movdqa %xmm12,%xmm4
  paddd  %xmm6,%xmm5
  psrad  $0x8,%xmm11
  punpckhdq %xmm12,%xmm4
  pshufd $0xff,%xmm12,%xmm12
  movd   %xmm4,(%rdx)
  pshufd $0x55,%xmm11,%xmm4
  paddd  %xmm1,%xmm2
  paddd  %xmm6,%xmm0
  movd   %xmm12,(%rdx,%rcx,1)
  psrad  $0x8,%xmm5
  psubd  %xmm1,%xmm8
  paddd  %xmm6,%xmm2
  movd   %xmm11,0x4(%rax)
  paddd  %xmm6,%xmm8
  psrad  $0x8,%xmm2
  psubd  %xmm7,%xmm3
  movd   %xmm4,0x4(%rax,%rcx,1)
  movdqa %xmm11,%xmm4
  psrad  $0x8,%xmm8
  paddd  %xmm6,%xmm3
  punpckhdq %xmm11,%xmm4
  pshufd $0xff,%xmm11,%xmm11
  movdqa %xmm13,%xmm1
  movd   %xmm4,0x4(%rdx)
  pshufd $0x55,%xmm5,%xmm4
  psrad  $0x8,%xmm0
  psubd  %xmm9,%xmm1
  movd   %xmm11,0x4(%rdx,%rcx,1)
  psrad  $0x8,%xmm3
  paddd  %xmm6,%xmm1
  movd   %xmm5,0x8(%rax)
  psrad  $0x8,%xmm1
  movd   %xmm4,0x8(%rax,%rcx,1)
  movdqa %xmm5,%xmm4
  punpckhdq %xmm5,%xmm4
  pshufd $0xff,%xmm5,%xmm5
  movd   %xmm4,0x8(%rdx)
  pshufd $0x55,%xmm8,%xmm4
  movd   %xmm5,0x8(%rdx,%rcx,1)
  movd   %xmm8,0xc(%rax)
  movd   %xmm4,0xc(%rax,%rcx,1)
  movdqa %xmm8,%xmm4
  punpckhdq %xmm8,%xmm4
  pshufd $0xff,%xmm8,%xmm8
  movd   %xmm4,0xc(%rdx)
  pshufd $0x55,%xmm2,%xmm4
  movd   %xmm8,0xc(%rdx,%rcx,1)
  movd   %xmm2,0x10(%rax)
  movd   %xmm4,0x10(%rax,%rcx,1)
  movdqa %xmm2,%xmm4
  punpckhdq %xmm2,%xmm4
  pshufd $0xff,%xmm2,%xmm2
  movd   %xmm4,0x10(%rdx)
  movd   %xmm2,0x10(%rdx,%rcx,1)
  pshufd $0x55,%xmm0,%xmm2
  movd   %xmm0,0x14(%rax)
  movd   %xmm2,0x14(%rax,%rcx,1)
  movdqa %xmm0,%xmm2
  punpckhdq %xmm0,%xmm2
  pshufd $0xff,%xmm0,%xmm0
  movd   %xmm2,0x14(%rdx)
  movd   %xmm0,0x14(%rdx,%rcx,1)
  pshufd $0x55,%xmm3,%xmm0
  movd   %xmm3,0x18(%rax)
  movd   %xmm0,0x18(%rax,%rcx,1)
  movdqa %xmm3,%xmm0
  punpckhdq %xmm3,%xmm0
  pshufd $0xff,%xmm3,%xmm3
  movd   %xmm0,0x18(%rdx)
  pshufd $0x55,%xmm1,%xmm0
  movd   %xmm3,0x18(%rdx,%rcx,1)
  movd   %xmm1,0x1c(%rax)
  movd   %xmm0,0x1c(%rax,%rcx,1)
  movdqa %xmm1,%xmm0
  add    %rsi,%rax
  punpckhdq %xmm1,%xmm0
  pshufd $0xff,%xmm1,%xmm1
  movd   %xmm0,0x1c(%rdx)
  movd   %xmm1,0x1c(%rdx,%rcx,1)
  add    %rsi,%rdx
  cmp    %r12,%rdi
  jne    L12
L30:
  mov    0x108(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L53
  add    $0x118,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L55:
  movdqa D0(%rip),%xmm6
  mov    %rbp,%rax
  lea    0x100(%r12),%rbx
  nopl   0x0(%rax,%rax,1)
L19:
  mov    0x14(%r12),%edx
  mov    0x4(%r12),%esi
  mov    0xc(%r12),%r14d
  mov    0x1c(%r12),%r13d
  mov    0x8(%r12),%r9d
  mov    0x18(%r12),%r11d
  add    %edx,%r14d
  add    %esi,%r13d
  sub    0xc(%r12),%edx
  sub    0x1c(%r12),%esi
  lea    (%rsi,%rdx,1),%r10d
  lea    0x0(%r13,%r14,1),%ebp
  sub    %r14d,%r13d
  add    %r9d,%r11d
  imul   $0xffffeb18,%edx,%edx
  sub    0x18(%r12),%r9d
  mov    (%r12),%edi
  imul   $0xec8,%r10d,%r10d
  mov    0x10(%r12),%r8d
  imul   $0xb50,%r13d,%r13d
  imul   $0x8a9,%esi,%esi
  sar    $0xb,%edx
  add    %edi,%r8d
  sub    0x10(%r12),%edi
  sar    $0xb,%r10d
  imul   $0xb50,%r9d,%r9d
  lea    (%r11,%r8,1),%r14d
  sub    %ebp,%edx
  add    %r10d,%edx
  sar    $0xb,%r13d
  sub    %r11d,%r8d
  lea    (%r14,%rbp,1),%r15d
  sub    %edx,%r13d
  sar    $0xb,%esi
  movd   %r15d,%xmm0
  sar    $0xb,%r9d
  add    %r13d,%esi
  sub    %r10d,%esi
  lea    (%r9,%rdi,1),%r10d
  sub    %r9d,%edi
  sub    %r11d,%r10d
  add    %r11d,%edi
  mov    %r8d,%r11d
  sub    %esi,%r11d
  lea    (%rdi,%r13,1),%r15d
  lea    (%r10,%rdx,1),%r9d
  add    %r8d,%esi
  movd   %r11d,%xmm2
  movd   %r15d,%xmm1
  sub    %r13d,%edi
  sub    %edx,%r10d
  punpckldq %xmm2,%xmm1
  movd   %r9d,%xmm2
  sub    %ebp,%r14d
  add    $0x20,%r12
  punpckldq %xmm2,%xmm0
  movd   %r14d,%xmm2
  punpcklqdq %xmm1,%xmm0
  movd   %r10d,%xmm1
  paddd  %xmm6,%xmm0
  punpckldq %xmm2,%xmm1
  movd   %edi,%xmm2
  psrad  $0x8,%xmm0
  movups %xmm0,(%rax)
  movd   %esi,%xmm0
  punpckldq %xmm2,%xmm0
  punpcklqdq %xmm1,%xmm0
  paddd  %xmm6,%xmm0
  psrad  $0x8,%xmm0
  movups %xmm0,0x10(%rax)
  add    %rcx,%rax
  cmp    %rbx,%r12
  jne    L19
  jmp    L30
L53:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_label: D0
data_type: byte[16]

tool: {"D0": [0x7f,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7f,0x00,0x00,0x00]}

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