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

```asm
<PDJPG_TransIRDCT_Vert>:
  endbr64
  push   %r12
  mov    %rdi,%r10
  mov    %rsi,%r9
  push   %rbp
  push   %rbx
  movswl 0x60(%rdi),%eax
  movswl 0x70(%rdi),%edi
  movswl 0x30(%r10),%r11d
  imul   $0x2344,%eax,%ebx
  movswl (%r10),%edx
  movswl 0x20(%r10),%r8d
  imul   $0xffffbf06,%edi,%ebp
  movswl 0x40(%r10),%esi
  movswl 0x10(%r10),%ecx
  movswl 0x50(%r10),%r10d
  add    %ebp,%ebx
  imul   $0xfffff396,%r11d,%ebp
  add    %ebp,%ebx
  imul   $0x14ff,%edx,%ebp
  add    %ebp,%ebx
  imul   $0x27b2,%r8d,%ebp
  add    %ebp,%ebx
  imul   $0x350c,%esi,%ebp
  add    %ebp,%ebx
  imul   $0xffffd9e1,%ecx,%ebp
  lea    0x1000(%rbx,%rbp,1),%ebx
  sar    $0xd,%ebx
  imul   $0xffffe907,%edi,%ebp
  sub    %ebx,%r10d
  imul   $0x2014,%eax,%ebx
  add    %ebp,%ebx
  imul   $0xfffffd09,%r11d,%ebp
  add    %ebp,%ebx
  imul   $0xfffffefc,%edx,%ebp
  add    %ebp,%ebx
  imul   $0xd58,%r8d,%ebp
  add    %ebp,%ebx
  imul   $0x2554,%esi,%ebp
  add    %ebp,%ebx
  imul   $0xfb1,%r10d,%ebp
  lea    0x1000(%rbx,%rbp,1),%ebx
  sar    $0xd,%ebx
  imul   $0x1298,%edi,%ebp
  sub    %ebx,%ecx
  imul   $0xffffeaf8,%eax,%ebx
  mov    %ecx,0x20(%r9)
  add    %ebp,%ebx
  imul   $0xfffff6a0,%r11d,%ebp
  add    %ebp,%ebx
  imul   $0xffffef06,%edx,%ebp
  add    %ebp,%ebx
  imul   $0xffffe411,%r8d,%ebp
  add    %ebp,%ebx
  imul   $0xfffffae7,%ecx,%ebp
  add    %ebp,%ebx
  imul   $0xfffff49d,%r10d,%ebp
  lea    0x1000(%rbx,%rbp,1),%ebx
  sar    $0xd,%ebx
  imul   $0xd25,%edi,%ebp
  sub    %ebx,%esi
  imul   $0xeb1,%eax,%ebx
  mov    %esi,(%r9)
  add    %ebp,%ebx
  imul   $0xfffff95f,%r11d,%ebp
  add    %ebp,%ebx
  imul   $0xffffdd5e,%edx,%ebp
  add    %ebp,%ebx
  imul   $0x16a1,%esi,%ebp
  add    %ebp,%ebx
  imul   $0x1c65,%ecx,%ebp
  add    %ebp,%ebx
  imul   $0xfffff7f3,%r10d,%ebp
  lea    0x1000(%rbx,%rbp,1),%ebx
  sar    $0xd,%ebx
  imul   $0x1eed,%edi,%ebp
  sub    %ebx,%r8d
  imul   $0x1976,%eax,%ebx
  mov    %r8d,0xc0(%r9)
  add    %ebp,%ebx
  imul   $0xe34,%r11d,%ebp
  add    %ebp,%ebx
  imul   $0x13c1,%r8d,%ebp
  add    %ebp,%ebx
  imul   $0xfffffb74,%esi,%ebp
  add    %ebp,%ebx
  imul   $0x2136,%ecx,%ebp
  add    %ebp,%ebx
  imul   $0xfffffa90,%r10d,%ebp
  lea    0x1000(%rbx,%rbp,1),%ebx
  sar    $0xd,%ebx
  imul   $0xffffc945,%edi,%ebp
  sub    %ebx,%edx
  imul   $0xfffffed7,%eax,%ebx
  mov    %edx,%r12d
  mov    %edx,0x60(%r9)
  shl    $0xd,%r12d
  add    %ebp,%ebx
  mov    %edx,%ebp
  sub    %r12d,%ebp
  add    %ebp,%ebx
  imul   $0x9d0,%r8d,%ebp
  add    %ebp,%ebx
  imul   $0x1559,%esi,%ebp
  add    %ebp,%ebx
  imul   $0xffffecf4,%ecx,%ebp
  add    %ebp,%ebx
  imul   $0x686,%r10d,%ebp
  lea    0x1000(%rbx,%rbp,1),%ebx
  sar    $0xd,%ebx
  sub    %ebx,%r11d
  imul   $0xfffffdd0,%eax,%ebx
  imul   $0x8aa,%r11d,%ebp
  mov    %r11d,0x80(%r9)
  add    %ebp,%ebx
  imul   $0xfffff757,%edx,%ebp
  add    %ebp,%ebx
  imul   $0xfffff8da,%r8d,%ebp
  add    %ebp,%ebx
  imul   $0x838,%esi,%ebp
  add    %ebp,%ebx
  imul   $0xfffff5bf,%ecx,%ebp
  add    %ebp,%ebx
  imul   $0xc4b,%r10d,%ebp
  lea    0x1000(%rbx,%rbp,1),%ebx
  sar    $0xd,%ebx
  imul   $0x1d3,%r11d,%ebp
  sub    %ebx,%edi
  imul   $0x1133,%r11d,%r11d
  imul   $0xffffdc64,%edi,%ebx
  mov    %edi,0xe0(%r9)
  add    %ebp,%ebx
  imul   $0xfffff0ed,%edx,%ebp
  imul   $0xffffec9e,%edx,%edx
  add    %ebp,%ebx
  imul   $0x34b,%r8d,%ebp
  add    %ebp,%ebx
  mov    %esi,%ebp
  shl    $0x7,%ebp
  imul   $0xfffff3d4,%esi,%esi
  add    %ebp,%ebx
  imul   $0xfffff1a6,%ecx,%ebp
  imul   $0xec,%ecx,%ecx
  add    %ebp,%ebx
  imul   $0xfffff139,%r10d,%ebp
  lea    0x1000(%rbx,%rbp,1),%ebx
  sar    $0xd,%ebx
  sub    %ebx,%eax
  imul   $0xffffa5a8,%edi,%ebx
  mov    %eax,0x40(%r9)
  imul   $0x2546,%eax,%eax
  add    %ebx,%eax
  pop    %rbx
  pop    %rbp
  add    %r11d,%eax
  pop    %r12
  add    %edx,%eax
  imul   $0x2721,%r8d,%edx
  add    %edx,%eax
  add    %esi,%eax
  lea    0x1000(%rax,%rcx,1),%eax
  sar    $0xd,%eax
  sub    %r10d,%eax
  mov    %eax,0xa0(%r9)
  ret
```

assistant: ```c
void PDJPG_TransIRDCT_Vert(short *iblk, int *oblk) {
  int ib[8];
  ib[0] = iblk[48];
  ib[1] = iblk[56];
  ib[2] = iblk[24];
  ib[3] = iblk[0];
  ib[4] = iblk[16];
  ib[5] = iblk[32];
  ib[6] = iblk[8];
  ib[7] = iblk[40];
  ib[7] = ib[7] - (((ib[0] * ((int)((1.1020) * 8192 + 0.5)) + ib[1] * ((int)((-2.0306) * 8192 + 0.5)) + ib[2] * ((int)((-0.3881) * 8192 + 0.5)) + ib[3] * ((int)((0.6561) * 8192 + 0.5)) + ib[4] * ((int)((1.2405) * 8192 + 0.5)) + ib[5] * ((int)((1.6577) * 8192 + 0.5)) + ib[6] * ((int)((-1.1914) * 8192 + 0.5))) + 4096) >> 13);
  ib[6] = ib[6] - (((ib[0] * ((int)((1.0024) * 8192 + 0.5)) + ib[1] * ((int)((-0.7180) * 8192 + 0.5)) + ib[2] * ((int)((-0.0928) * 8192 + 0.5)) + ib[3] * ((int)((-0.0318) * 8192 + 0.5)) + ib[4] * ((int)((0.4170) * 8192 + 0.5)) + ib[5] * ((int)((1.1665) * 8192 + 0.5)) + ib[7] * ((int)((0.4904) * 8192 + 0.5))) + 4096) >> 13);
  ib[5] = ib[5] - (((ib[0] * ((int)((-0.6573) * 8192 + 0.5)) + ib[1] * ((int)((0.5810) * 8192 + 0.5)) + ib[2] * ((int)((-0.2931) * 8192 + 0.5)) + ib[3] * ((int)((-0.5307) * 8192 + 0.5)) + ib[4] * ((int)((-0.8730) * 8192 + 0.5)) + ib[6] * ((int)((-0.1594) * 8192 + 0.5)) + ib[7] * ((int)((-0.3560) * 8192 + 0.5))) + 4096) >> 13);
  ib[4] = ib[4] - (((ib[0] * ((int)((0.4591) * 8192 + 0.5)) + ib[1] * ((int)((0.4108) * 8192 + 0.5)) + ib[2] * ((int)((-0.2073) * 8192 + 0.5)) + ib[3] * ((int)((-1.0824) * 8192 + 0.5)) + ib[5] * ((int)((0.7071) * 8192 + 0.5)) + ib[6] * ((int)((0.8873) * 8192 + 0.5)) + ib[7] * ((int)((-0.2517) * 8192 + 0.5))) + 4096) >> 13);
  ib[3] = ib[3] - (((ib[0] * ((int)((0.7957) * 8192 + 0.5)) + ib[1] * ((int)((0.9664) * 8192 + 0.5)) + ib[2] * ((int)((0.4439) * 8192 + 0.5)) + ib[4] * ((int)((0.6173) * 8192 + 0.5)) + ib[5] * ((int)((-0.1422) * 8192 + 0.5)) + ib[6] * ((int)((1.0378) * 8192 + 0.5)) + ib[7] * ((int)((-0.1700) * 8192 + 0.5))) + 4096) >> 13);
  ib[2] = ib[2] - (((ib[0] * ((int)((-0.0364) * 8192 + 0.5)) + ib[1] * ((int)((-1.7104) * 8192 + 0.5)) + ib[3] * ((int)((-1.0000) * 8192 + 0.5)) + ib[4] * ((int)((0.3066) * 8192 + 0.5)) + ib[5] * ((int)((0.6671) * 8192 + 0.5)) + ib[6] * ((int)((-0.5953) * 8192 + 0.5)) + ib[7] * ((int)((0.2039) * 8192 + 0.5))) + 4096) >> 13);
  ib[1] = ib[1] - (((ib[0] * ((int)((-0.0685) * 8192 + 0.5)) + ib[2] * ((int)((0.2708) * 8192 + 0.5)) + ib[3] * ((int)((-0.2708) * 8192 + 0.5)) + ib[4] * ((int)((-0.2235) * 8192 + 0.5)) + ib[5] * ((int)((0.2568) * 8192 + 0.5)) + ib[6] * ((int)((-0.3205) * 8192 + 0.5)) + ib[7] * ((int)((0.3841) * 8192 + 0.5))) + 4096) >> 13);
  ib[0] = ib[0] - (((ib[1] * ((int)((-1.1129) * 8192 + 0.5)) + ib[2] * ((int)((0.0570) * 8192 + 0.5)) + ib[3] * ((int)((-0.4712) * 8192 + 0.5)) + ib[4] * ((int)((0.1029) * 8192 + 0.5)) + ib[5] * ((int)((0.0156) * 8192 + 0.5)) + ib[6] * ((int)((-0.4486) * 8192 + 0.5)) + ib[7] * ((int)((-0.4619) * 8192 + 0.5))) + 4096) >> 13);
  ib[7] = -ib[7] + (((ib[0] * ((int)((1.1648) * 8192 + 0.5)) + ib[1] * ((int)((-2.8234) * 8192 + 0.5)) + ib[2] * ((int)((0.5375) * 8192 + 0.5)) + ib[3] * ((int)((-0.6058) * 8192 + 0.5)) + ib[4] * ((int)((1.2228) * 8192 + 0.5)) + ib[5] * ((int)((-0.3805) * 8192 + 0.5)) + ib[6] * ((int)((0.0288) * 8192 + 0.5))) + 4096) >> 13);
  oblk[0] = ib[5];
  oblk[8] = ib[6];
  oblk[16] = ib[0];
  oblk[24] = ib[3];
  oblk[32] = ib[2];
  oblk[40] = ib[7];
  oblk[48] = ib[4];
  oblk[56] = ib[1];
}
```