user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<DCT_8x4>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rax
  mov    %rsi,%rdx
  mov    0x10(%rdi),%ebx
  mov    %ebx,-0x10(%rsp)
  mov    0x40(%rdi),%edi
  mov    %edi,-0xc(%rsp)
  mov    0x50(%rax),%esi
  mov    %esi,-0x14(%rsp)
  imul   $0x5a80,(%rax),%ecx
  mov    %ecx,(%rax)
  imul   $0x5a80,%ebx,%r9d
  mov    %r9d,0x10(%rax)
  imul   $0x5a80,%edi,%r8d
  mov    %r8d,0x40(%rax)
  imul   $0x5a80,%esi,%esi
  mov    %esi,0x50(%rax)
  mov    0x48(%rax),%r14d
  add    0x8(%rax),%r14d
  mov    0x58(%rax),%r13d
  add    0x18(%rax),%r13d
  mov    0x44(%rax),%r10d
  add    0x4(%rax),%r10d
  mov    0x4c(%rax),%r12d
  add    0xc(%rax),%r12d
  mov    0x54(%rax),%edi
  add    0x14(%rax),%edi
  mov    0x5c(%rax),%ebp
  add    0x1c(%rax),%ebp
  add    %r9d,%ecx
  add    %r8d,%ecx
  lea    0x1000000(%rsi,%rcx,1),%ecx
  imul   $0x763e,%r14d,%ebx
  mov    %ebx,-0x8(%rsp)
  add    %ebx,%ecx
  imul   $0x30fa,%r13d,%ebx
  mov    %ebx,-0x4(%rsp)
  add    %ebx,%ecx
  imul   $0xa402,0x24(%rax),%r8d
  imul   $0x8b0a,0x2c(%rax),%esi
  add    %r8d,%esi
  imul   $0x5ce7,0x34(%rax),%r8d
  add    %r8d,%esi
  imul   $0x209f,0x3c(%rax),%r8d
  add    %r8d,%esi
  imul   $0x43ef,0x64(%rax),%r8d
  add    %r8d,%esi
  imul   $0x3997,0x6c(%rax),%r8d
  add    %r8d,%esi
  imul   $0x267b,0x74(%rax),%r8d
  add    %r8d,%esi
  imul   $0xd83,0x7c(%rax),%ebx
  add    %esi,%ebx
  imul   $0x7d86,%r10d,%r8d
  imul   $0x6a6a,%r12d,%esi
  add    %r8d,%esi
  imul   $0x471a,%edi,%r8d
  add    %r8d,%esi
  imul   $0x18f8,%ebp,%r11d
  add    %esi,%r11d
  mov    0x68(%rax),%esi
  add    0x38(%rax),%esi
  imul   $0x3ffe,%esi,%esi
  imul   $0x9a7e,0x28(%rax),%r8d
  add    %r8d,%esi
  imul   $0x1a81,0x78(%rax),%r8d
  add    %esi,%r8d
  mov    0x30(%rax),%esi
  add    0x20(%rax),%esi
  imul   $0x763e,%esi,%esi
  add    %r8d,%esi
  mov    0x70(%rax),%r8d
  add    0x60(%rax),%r8d
  imul   $0x30fa,%r8d,%r8d
  add    %esi,%r8d
  lea    (%rcx,%rbx,1),%esi
  lea    (%rsi,%r11,1),%r9d
  add    %r8d,%r9d
  sar    $0x11,%r9d
  mov    %r9d,%r15d
  test   $0xffffff00,%r9d
  je     L4
  not    %r9d
  sar    $0x1f,%r9d
  mov    %r9d,%r15d
L4:
  mov    %r15b,(%rdx)
  sub    %ebx,%ecx
  mov    %ecx,%r9d
  sub    %r11d,%r9d
  add    %r8d,%r9d
  sub    -0x10(%rsp),%r9d
  sub    -0x14(%rsp),%r9d
  sar    $0x11,%r9d
  mov    %r9d,%ebx
  test   $0xffffff00,%r9d
  je     L106
  not    %r9d
  sar    $0x1f,%r9d
  mov    %r9d,%ebx
L106:
  mov    %bl,0x7(%rdx)
  add    %r11d,%ecx
  sub    %r8d,%ecx
  sub    -0xc(%rsp),%ecx
  sub    -0x14(%rsp),%ecx
  sar    $0x11,%ecx
  mov    %ecx,%r9d
  test   $0xffffff00,%ecx
  je     L374
  not    %ecx
  sar    $0x1f,%ecx
  mov    %ecx,%r9d
L374:
  mov    %r9b,0x18(%rdx)
  sub    %r11d,%esi
  sub    %r8d,%esi
  sub    -0x10(%rsp),%esi
  sub    -0xc(%rsp),%esi
  sub    -0x14(%rsp),%esi
  sar    $0x11,%esi
  mov    %esi,%ecx
  test   $0xffffff00,%esi
  je     L396
  not    %esi
  sar    $0x1f,%esi
  mov    %esi,%ecx
L396:
  mov    %cl,0x1f(%rdx)
  mov    (%rax),%ecx
  sub    0x10(%rax),%ecx
  add    0x40(%rax),%ecx
  sub    0x50(%rax),%ecx
  imul   $0x30fa,%r14d,%r14d
  lea    0x1000000(%r14,%rcx,1),%ecx
  imul   $0x763e,%r13d,%r13d
  sub    %r13d,%ecx
  imul   $0x8b0a,0x24(%rax),%esi
  imul   $0x209f,0x2c(%rax),%r8d
  sub    %r8d,%esi
  imul   $0xa402,0x34(%rax),%r8d
  sub    %r8d,%esi
  imul   $0x5ce7,0x3c(%rax),%r8d
  sub    %r8d,%esi
  imul   $0x3997,0x64(%rax),%r8d
  sub    %r8d,%esi
  imul   $0xd83,0x6c(%rax),%r8d
  sub    %r8d,%esi
  imul   $0x43ef,0x74(%rax),%r8d
  sub    %r8d,%esi
  imul   $0x267b,0x7c(%rax),%r8d
  sub    %r8d,%esi
  imul   $0x6a6a,%r10d,%ebx
  imul   $0x18f8,%r12d,%r8d
  sub    %r8d,%ebx
  imul   $0x7d86,%edi,%r8d
  sub    %r8d,%ebx
  imul   $0x471a,%ebp,%r8d
  sub    %r8d,%ebx
  mov    0x28(%rax),%r9d
  mov    0x78(%rax),%r11d
  mov    $0x0,%r8d
  cmp    %r11d,%r9d
  je     L339
  sub    %r11d,%r9d
  imul   $0x3ffe,%r9d,%r8d
L339:
  imul   $0x9a7e,0x38(%rax),%r9d
  sub    %r9d,%r8d
  imul   $0x1a81,0x68(%rax),%r11d
  add    %r8d,%r11d
  mov    0x60(%rax),%r8d
  mov    0x70(%rax),%r15d
  mov    $0x0,%r9d
  cmp    %r15d,%r8d
  je     L428
  sub    %r15d,%r8d
  imul   $0x30fa,%r8d,%r9d
L428:
  add    %r9d,%r11d
  mov    0x20(%rax),%r8d
  mov    0x30(%rax),%r15d
  mov    $0x0,%r9d
  cmp    %r15d,%r8d
  je     L176
  sub    %r15d,%r8d
  imul   $0x763e,%r8d,%r9d
L176:
  add    %r9d,%r11d
  lea    (%rcx,%rsi,1),%r8d
  lea    (%r8,%rbx,1),%r9d
  add    %r11d,%r9d
  add    -0x10(%rsp),%r9d
  add    -0x14(%rsp),%r9d
  sar    $0x11,%r9d
  mov    %r9d,%r15d
  test   $0xffffff00,%r9d
  je     L220
  not    %r9d
  sar    $0x1f,%r9d
  mov    %r9d,%r15d
L220:
  mov    %r15b,0x1(%rdx)
  sub    %esi,%ecx
  mov    %ecx,%esi
  sub    %ebx,%esi
  add    %r11d,%esi
  sar    $0x11,%esi
  mov    %esi,%r9d
  test   $0xffffff00,%esi
  je     L321
  not    %esi
  sar    $0x1f,%esi
  mov    %esi,%r9d
L321:
  mov    %r9b,0x6(%rdx)
  add    %ebx,%ecx
  sub    %r11d,%ecx
  add    -0x10(%rsp),%ecx
  sub    -0xc(%rsp),%ecx
  add    -0x14(%rsp),%ecx
  sar    $0x11,%ecx
  mov    %ecx,%esi
  test   $0xffffff00,%ecx
  je     L180
  not    %ecx
  sar    $0x1f,%ecx
  mov    %ecx,%esi
L180:
  mov    %sil,0x19(%rdx)
  sub    %ebx,%r8d
  sub    %r11d,%r8d
  add    -0x14(%rsp),%r8d
  sar    $0x11,%r8d
  mov    %r8d,%ecx
  test   $0xffffff00,%r8d
  je     L432
  not    %r8d
  sar    $0x1f,%r8d
  mov    %r8d,%ecx
L432:
  mov    %cl,0x1e(%rdx)
  mov    (%rax),%ecx
  sub    0x10(%rax),%ecx
  add    0x40(%rax),%ecx
  sub    0x50(%rax),%ecx
  sub    %r14d,%r13d
  lea    0x1000000(%r13,%rcx,1),%esi
  imul   $0x5ce7,0x24(%rax),%r8d
  imul   $0xa402,0x2c(%rax),%ecx
  sub    %ecx,%r8d
  imul   $0x209f,0x34(%rax),%ecx
  add    %r8d,%ecx
  imul   $0x8b0a,0x3c(%rax),%r8d
  add    %ecx,%r8d
  imul   $0x267b,0x64(%rax),%ecx
  add    %r8d,%ecx
  imul   $0x43ef,0x6c(%rax),%r8d
  sub    %r8d,%ecx
  imul   $0xd83,0x74(%rax),%r8d
  add    %r8d,%ecx
  imul   $0x3997,0x7c(%rax),%r11d
  add    %ecx,%r11d
  imul   $0x471a,%r10d,%r8d
  imul   $0x7d86,%r12d,%ecx
  sub    %ecx,%r8d
  imul   $0x18f8,%edi,%ecx
  add    %r8d,%ecx
  imul   $0x6a6a,%ebp,%r9d
  add    %ecx,%r9d
  mov    0x28(%rax),%ebx
  mov    0x78(%rax),%ecx
  mov    $0x0,%r8d
  cmp    %ecx,%ebx
  je     L93
  sub    %ecx,%ebx
  mov    %ebx,%r8d
  mov    %ebx,%ecx
  shl    $0xd,%ecx
  sub    %ecx,%r8d
  add    %r8d,%r8d
L93:
  imul   $0x9a7e,0x38(%rax),%ecx
  add    %r8d,%ecx
  imul   $0x1a81,0x68(%rax),%r8d
  sub    %r8d,%ecx
  mov    0x60(%rax),%ebx
  mov    0x70(%rax),%r13d
  mov    $0x0,%r8d
  cmp    %r13d,%ebx
  je     L140
  sub    %r13d,%ebx
  imul   $0x30fa,%ebx,%r8d
L140:
  add    %ecx,%r8d
  mov    0x20(%rax),%ecx
  mov    0x30(%rax),%r13d
  mov    $0x0,%ebx
  cmp    %r13d,%ecx
  je     L185
  sub    %r13d,%ecx
  imul   $0x763e,%ecx,%ebx
L185:
  add    %ebx,%r8d
  lea    (%rsi,%r11,1),%ecx
  lea    (%rcx,%r9,1),%ebx
  add    %r8d,%ebx
  sar    $0x11,%ebx
  mov    %ebx,%r13d
  test   $0xffffff00,%ebx
  je     L152
  not    %ebx
  sar    $0x1f,%ebx
  mov    %ebx,%r13d
L152:
  mov    %r13b,0x2(%rdx)
  sub    %r11d,%esi
  mov    %esi,%r11d
  sub    %r9d,%r11d
  add    %r8d,%r11d
  sar    $0x11,%r11d
  mov    %r11d,%ebx
  test   $0xffffff00,%r11d
  je     L116
  not    %r11d
  sar    $0x1f,%r11d
  mov    %r11d,%ebx
L116:
  mov    %bl,0x5(%rdx)
  add    %r9d,%esi
  sub    %r8d,%esi
  sub    -0xc(%rsp),%esi
  sar    $0x11,%esi
  mov    %esi,%r11d
  test   $0xffffff00,%esi
  je     L327
  not    %esi
  sar    $0x1f,%esi
  mov    %esi,%r11d
L327:
  mov    %r11b,0x1a(%rdx)
  sub    %r9d,%ecx
  sub    %r8d,%ecx
  add    -0x10(%rsp),%ecx
  sub    -0xc(%rsp),%ecx
  add    -0x14(%rsp),%ecx
  sar    $0x11,%ecx
  mov    %ecx,%esi
  test   $0xffffff00,%ecx
  je     L155
  not    %ecx
  sar    $0x1f,%ecx
  mov    %ecx,%esi
L155:
  mov    %sil,0x1d(%rdx)
  mov    0x10(%rax),%ecx
  add    (%rax),%ecx
  add    0x40(%rax),%ecx
  add    0x50(%rax),%ecx
  add    $0x1000000,%ecx
  sub    -0x8(%rsp),%ecx
  sub    -0x4(%rsp),%ecx
  imul   $0x209f,0x24(%rax),%esi
  imul   $0x5ce7,0x2c(%rax),%r8d
  sub    %r8d,%esi
  imul   $0x8b0a,0x34(%rax),%r8d
  add    %esi,%r8d
  imul   $0xd83,0x64(%rax),%esi
  add    %r8d,%esi
  imul   $0x267b,0x6c(%rax),%r8d
  sub    %r8d,%esi
  imul   $0x3997,0x74(%rax),%r9d
  add    %esi,%r9d
  imul   $0x18f8,%r10d,%r10d
  imul   $0x471a,%r12d,%r12d
  sub    %r12d,%r10d
  imul   $0x6a6a,%edi,%edi
  add    %r10d,%edi
  mov    0x68(%rax),%esi
  add    0x38(%rax),%esi
  imul   $0x3ffe,%esi,%esi
  imul   $0xffff6582,0x28(%rax),%r8d
  add    %r8d,%esi
  imul   $0x1a81,0x78(%rax),%r8d
  sub    %r8d,%esi
  mov    0x30(%rax),%r8d
  add    0x20(%rax),%r8d
  imul   $0x763e,%r8d,%r8d
  add    %r8d,%esi
  mov    0x70(%rax),%r10d
  add    0x60(%rax),%r10d
  imul   $0x30fa,%r10d,%r10d
  add    %esi,%r10d
  imul   $0x7d86,%ebp,%ebp
  imul   $0xa402,0x3c(%rax),%r11d
  imul   $0x43ef,0x7c(%rax),%esi
  add    %esi,%r11d
  lea    (%rcx,%r9,1),%r8d
  lea    (%r8,%rdi,1),%esi
  add    %r10d,%esi
  sub    %ebp,%esi
  sub    %r11d,%esi
  sub    -0x10(%rsp),%esi
  sub    -0x14(%rsp),%esi
  sar    $0x11,%esi
  mov    %esi,%ebx
  test   $0xffffff00,%esi
  je     L215
  not    %esi
  sar    $0x1f,%esi
  mov    %esi,%ebx
L215:
  mov    %bl,0x3(%rdx)
  sub    %r9d,%ecx
  mov    %ecx,%esi
  sub    %edi,%esi
  add    %r10d,%esi
  sar    $0x11,%esi
  mov    %esi,%r9d
  test   $0xffffff00,%esi
  je     L199
  not    %esi
  sar    $0x1f,%esi
  mov    %esi,%r9d
L199:
  mov    %r9b,0x4(%rdx)
  add    %edi,%ecx
  sub    %r10d,%ecx
  sub    %ebp,%ecx
  add    %r11d,%ecx
  sar    $0x11,%ecx
  mov    %ecx,%esi
  test   $0xffffff00,%ecx
  je     L78
  not    %ecx
  sar    $0x1f,%ecx
  mov    %ecx,%esi
L78:
  mov    %sil,0x1b(%rdx)
  sub    %edi,%r8d
  sub    %r10d,%r8d
  sub    -0xc(%rsp),%r8d
  sub    -0x14(%rsp),%r8d
  sar    $0x11,%r8d
  mov    %r8d,%ecx
  test   $0xffffff00,%r8d
  je     L391
  not    %r8d
  sar    $0x1f,%r8d
  mov    %r8d,%ecx
L391:
  mov    %cl,0x1c(%rdx)
  mov    0x8(%rax),%r13d
  sub    0x48(%rax),%r13d
  mov    0x18(%rax),%r12d
  mov    %r12d,%r14d
  sub    0x58(%rax),%r14d
  mov    0x4(%rax),%r9d
  sub    0x44(%rax),%r9d
  mov    0xc(%rax),%ebx
  sub    0x4c(%rax),%ebx
  mov    0x14(%rax),%r8d
  sub    0x54(%rax),%r8d
  mov    0x1c(%rax),%r11d
  sub    0x5c(%rax),%r11d
  mov    0x10(%rax),%ecx
  add    (%rax),%ecx
  sub    0x40(%rax),%ecx
  sub    0x50(%rax),%ecx
  imul   $0x763e,%r13d,%edi
  mov    %edi,-0x8(%rsp)
  lea    0x1000000(%rdi,%rcx,1),%esi
  imul   $0x30fa,%r14d,%edi
  mov    %edi,-0x4(%rsp)
  add    %edi,%esi
  imul   $0x43ef,0x24(%rax),%edi
  imul   $0x3997,0x2c(%rax),%ecx
  add    %edi,%ecx
  imul   $0x267b,0x34(%rax),%edi
  add    %edi,%ecx
  imul   $0xd83,0x3c(%rax),%edi
  add    %edi,%ecx
  imul   $0xa402,0x64(%rax),%edi
  sub    %edi,%ecx
  imul   $0x8b0a,0x6c(%rax),%edi
  sub    %edi,%ecx
  imul   $0x5ce7,0x74(%rax),%edi
  sub    %edi,%ecx
  imul   $0x209f,0x7c(%rax),%edi
  sub    %edi,%ecx
  imul   $0x7d86,%r9d,%r10d
  imul   $0x6a6a,%ebx,%edi
  add    %r10d,%edi
  imul   $0x471a,%r8d,%r10d
  add    %r10d,%edi
  imul   $0x18f8,%r11d,%r12d
  add    %edi,%r12d
  mov    0x28(%rax),%edi
  mov    0x78(%rax),%ebp
  mov    $0x0,%r10d
  cmp    %ebp,%edi
  je     L198
  sub    %ebp,%edi
  imul   $0x3ffe,%edi,%r10d
L198:
  imul   $0x1a81,0x38(%rax),%edi
  add    %r10d,%edi
  imul   $0x9a7e,0x68(%rax),%r10d
  sub    %r10d,%edi
  mov    0x70(%rax),%r10d
  add    0x60(%rax),%r10d
  imul   $0x763e,%r10d,%r10d
  sub    %r10d,%edi
  mov    0x30(%rax),%r10d
  add    0x20(%rax),%r10d
  imul   $0x30fa,%r10d,%r10d
  add    %edi,%r10d
  lea    (%rsi,%rcx,1),%edi
  lea    (%rdi,%r12,1),%ebp
  add    %r10d,%ebp
  sar    $0x11,%ebp
  mov    %ebp,%r15d
  test   $0xffffff00,%ebp
  je     L88
  not    %ebp
  sar    $0x1f,%ebp
  mov    %ebp,%r15d
L88:
  mov    %r15b,0x8(%rdx)
  sub    %ecx,%esi
  mov    %esi,%ecx
  sub    %r12d,%ecx
  add    %r10d,%ecx
  sub    -0x10(%rsp),%ecx
  add    -0xc(%rsp),%ecx
  add    -0x14(%rsp),%ecx
  sar    $0x11,%ecx
  mov    %ecx,%ebp
  test   $0xffffff00,%ecx
  je     L29
  not    %ecx
  sar    $0x1f,%ecx
  mov    %ecx,%ebp
L29:
  mov    %bpl,0xf(%rdx)
  add    %r12d,%esi
  sub    %r10d,%esi
  sar    $0x11,%esi
  mov    %esi,%ecx
  test   $0xffffff00,%esi
  je     L157
  not    %esi
  sar    $0x1f,%esi
  mov    %esi,%ecx
L157:
  mov    %cl,0x10(%rdx)
  sub    %r12d,%edi
  sub    %r10d,%edi
  sub    -0x10(%rsp),%edi
  add    -0x14(%rsp),%edi
  sar    $0x11,%edi
  mov    %edi,%ecx
  test   $0xffffff00,%edi
  je     L241
  not    %edi
  sar    $0x1f,%edi
  mov    %edi,%ecx
L241:
  mov    %cl,0x17(%rdx)
  mov    (%rax),%ecx
  sub    0x10(%rax),%ecx
  sub    0x40(%rax),%ecx
  add    0x50(%rax),%ecx
  imul   $0x30fa,%r13d,%r13d
  lea    0x1000000(%r13,%rcx,1),%ecx
  imul   $0x763e,%r14d,%r12d
  sub    %r12d,%ecx
  imul   $0x3997,0x24(%rax),%esi
  imul   $0xd83,0x2c(%rax),%edi
  sub    %edi,%esi
  imul   $0x43ef,0x34(%rax),%edi
  sub    %edi,%esi
  imul   $0x267b,0x3c(%rax),%edi
  sub    %edi,%esi
  imul   $0x8b0a,0x64(%rax),%edi
  sub    %edi,%esi
  imul   $0x209f,0x6c(%rax),%edi
  add    %edi,%esi
  imul   $0xa402,0x74(%rax),%edi
  add    %edi,%esi
  imul   $0x5ce7,0x7c(%rax),%r14d
  add    %esi,%r14d
  imul   $0x6a6a,%r9d,%ebp
  imul   $0x18f8,%ebx,%esi
  sub    %esi,%ebp
  imul   $0x7d86,%r8d,%esi
  sub    %esi,%ebp
  imul   $0x471a,%r11d,%esi
  sub    %esi,%ebp
  imul   $0x1a81,0x28(%rax),%edi
  mov    0x68(%rax),%esi
  add    0x38(%rax),%esi
  imul   $0x3ffe,%esi,%esi
  sub    %esi,%edi
  imul   $0x9a7e,0x78(%rax),%r10d
  add    %edi,%r10d
  mov    0x20(%rax),%esi
  mov    0x30(%rax),%r15d
  mov    $0x0,%edi
  cmp    %r15d,%esi
  je     L143
  sub    %r15d,%esi
  imul   $0x30fa,%esi,%edi
L143:
  add    %edi,%r10d
  mov    0x60(%rax),%esi
  mov    0x70(%rax),%r15d
  mov    $0x0,%edi
  cmp    %r15d,%esi
  je     L249
  sub    %r15d,%esi
  imul   $0x763e,%esi,%edi
L249:
  sub    %edi,%r10d
  lea    (%rcx,%r14,1),%edi
  lea    (%rdi,%rbp,1),%esi
  add    %r10d,%esi
  add    -0x10(%rsp),%esi
  add    -0xc(%rsp),%esi
  sub    -0x14(%rsp),%esi
  sar    $0x11,%esi
  mov    %esi,%r15d
  test   $0xffffff00,%esi
  je     L86
  not    %esi
  sar    $0x1f,%esi
  mov    %esi,%r15d
L86:
  mov    %r15b,0x9(%rdx)
  sub    %r14d,%ecx
  mov    %ecx,%esi
  sub    %ebp,%esi
  add    %r10d,%esi
  add    -0xc(%rsp),%esi
  sar    $0x11,%esi
  mov    %esi,%r14d
  test   $0xffffff00,%esi
  je     L191
  not    %esi
  sar    $0x1f,%esi
  mov    %esi,%r14d
L191:
  mov    %r14b,0xe(%rdx)
  add    %ebp,%ecx
  sub    %r10d,%ecx
  add    -0x10(%rsp),%ecx
  sar    $0x11,%ecx
  mov    %ecx,%esi
  test   $0xffffff00,%ecx
  je     L92
  not    %ecx
  sar    $0x1f,%ecx
  mov    %ecx,%esi
L92:
  mov    %sil,0x11(%rdx)
  sub    %ebp,%edi
  sub    %r10d,%edi
  sar    $0x11,%edi
  mov    %edi,%ecx
  test   $0xffffff00,%edi
  je     L205
  not    %edi
  sar    $0x1f,%edi
  mov    %edi,%ecx
L205:
  mov    %cl,0x16(%rdx)
  mov    (%rax),%ecx
  sub    0x10(%rax),%ecx
  sub    0x40(%rax),%ecx
  add    0x50(%rax),%ecx
  sub    %r13d,%r12d
  lea    0x1000000(%r12,%rcx,1),%ecx
  imul   $0x267b,0x24(%rax),%esi
  imul   $0x43ef,0x2c(%rax),%edi
  sub    %edi,%esi
  imul   $0xd83,0x34(%rax),%edi
  add    %esi,%edi
  imul   $0x3997,0x3c(%rax),%esi
  add    %edi,%esi
  imul   $0x5ce7,0x64(%rax),%edi
  sub    %edi,%esi
  imul   $0xa402,0x6c(%rax),%r10d
  add    %esi,%r10d
  imul   $0x209f,0x74(%rax),%esi
  sub    %esi,%r10d
  imul   $0x8b0a,0x7c(%rax),%esi
  sub    %esi,%r10d
  imul   $0x471a,%r9d,%edi
  imul   $0x7d86,%ebx,%esi
  sub    %esi,%edi
  imul   $0x18f8,%r8d,%esi
  add    %edi,%esi
  imul   $0x6a6a,%r11d,%r12d
  add    %esi,%r12d
  mov    0x68(%rax),%edi
  add    0x38(%rax),%edi
  imul   $0x3ffe,%edi,%edi
  imul   $0xffffe57f,0x28(%rax),%esi
  add    %edi,%esi
  imul   $0x9a7e,0x78(%rax),%edi
  sub    %edi,%esi
  mov    0x20(%rax),%ebp
  mov    0x30(%rax),%r13d
  mov    $0x0,%edi
  cmp    %r13d,%ebp
  je     L237
  sub    %r13d,%ebp
  imul   $0x30fa,%ebp,%edi
L237:
  add    %esi,%edi
  mov    0x60(%rax),%esi
  mov    0x70(%rax),%r13d
  mov    $0x0,%ebp
  cmp    %r13d,%esi
  je     L351
  sub    %r13d,%esi
  imul   $0x763e,%esi,%ebp
L351:
  sub    %ebp,%edi
  lea    (%rcx,%r10,1),%esi
  lea    (%rsi,%r12,1),%ebp
  add    %edi,%ebp
  sar    $0x11,%ebp
  mov    %ebp,%r13d
  test   $0xffffff00,%ebp
  je     L189
  not    %ebp
  sar    $0x1f,%ebp
  mov    %ebp,%r13d
L189:
  mov    %r13b,0xa(%rdx)
  sub    %r10d,%ecx
  mov    %ecx,%r10d
  sub    %r12d,%r10d
  add    %edi,%r10d
  add    -0x10(%rsp),%r10d
  add    -0xc(%rsp),%r10d
  sub    -0x14(%rsp),%r10d
  sar    $0x11,%r10d
  mov    %r10d,%ebp
  test   $0xffffff00,%r10d
  je     L165
  not    %r10d
  sar    $0x1f,%r10d
  mov    %r10d,%ebp
L165:
  mov    %bpl,0xd(%rdx)
  add    %r12d,%ecx
  sub    %edi,%ecx
  sar    $0x11,%ecx
  mov    %ecx,%r10d
  test   $0xffffff00,%ecx
  je     L162
  not    %ecx
  sar    $0x1f,%ecx
  mov    %ecx,%r10d
L162:
  mov    %r10b,0x12(%rdx)
  sub    %r12d,%esi
  sub    %edi,%esi
  add    -0x10(%rsp),%esi
  sar    $0x11,%esi
  mov    %esi,%ecx
  test   $0xffffff00,%esi
  je     L21
  not    %esi
  sar    $0x1f,%esi
  mov    %esi,%ecx
L21:
  mov    %cl,0x15(%rdx)
  mov    0x10(%rax),%ecx
  add    (%rax),%ecx
  sub    0x40(%rax),%ecx
  sub    0x50(%rax),%ecx
  add    $0x1000000,%ecx
  sub    -0x8(%rsp),%ecx
  sub    -0x4(%rsp),%ecx
  imul   $0xd83,0x24(%rax),%edi
  imul   $0x267b,0x2c(%rax),%esi
  sub    %esi,%edi
  imul   $0x3997,0x34(%rax),%esi
  add    %edi,%esi
  imul   $0x209f,0x64(%rax),%edi
  sub    %edi,%esi
  imul   $0x5ce7,0x6c(%rax),%r10d
  add    %esi,%r10d
  imul   $0x8b0a,0x74(%rax),%esi
  sub    %esi,%r10d
  imul   $0x18f8,%r9d,%r9d
  imul   $0x471a,%ebx,%ebx
  sub    %ebx,%r9d
  imul   $0x6a6a,%r8d,%r8d
  add    %r9d,%r8d
  mov    0x28(%rax),%esi
  mov    0x78(%rax),%r9d
  mov    $0x0,%edi
  cmp    %r9d,%esi
  je     L10
  sub    %r9d,%esi
  mov    %esi,%edi
  shl    $0xd,%edi
  sub    %edi,%esi
  lea    (%rsi,%rsi,1),%edi
L10:
  imul   $0x1a81,0x38(%rax),%r9d
  sub    %r9d,%edi
  mov    %edi,%esi
  imul   $0x9a7e,0x68(%rax),%edi
  add    %esi,%edi
  mov    0x70(%rax),%esi
  add    0x60(%rax),%esi
  imul   $0x763e,%esi,%esi
  sub    %esi,%edi
  mov    0x30(%rax),%esi
  add    0x20(%rax),%esi
  imul   $0x30fa,%esi,%esi
  add    %edi,%esi
  imul   $0x7d86,%r11d,%r11d
  imul   $0xffffbc11,0x3c(%rax),%r9d
  imul   $0xa402,0x7c(%rax),%eax
  add    %eax,%r9d
  lea    (%rcx,%r10,1),%edi
  lea    (%rdi,%r8,1),%eax
  add    %esi,%eax
  sub    %r11d,%eax
  add    %r9d,%eax
  add    -0xc(%rsp),%eax
  add    -0x14(%rsp),%eax
  sar    $0x11,%eax
  mov    %eax,%ebx
  test   $0xffffff00,%eax
  je     L181
  not    %eax
  sar    $0x1f,%eax
  mov    %eax,%ebx
L181:
  mov    %bl,0xb(%rdx)
  mov    %ecx,%eax
  sub    %r10d,%eax
  mov    %eax,%ecx
  sub    %r8d,%ecx
  add    %esi,%ecx
  add    -0xc(%rsp),%ecx
  add    -0x14(%rsp),%ecx
  sar    $0x11,%ecx
  mov    %ecx,%r10d
  test   $0xffffff00,%ecx
  je     L8
  not    %ecx
  sar    $0x1f,%ecx
  mov    %ecx,%r10d
L8:
  mov    %r10b,0xc(%rdx)
  add    %r8d,%eax
  sub    %esi,%eax
  sub    %r11d,%eax
  sub    %r9d,%eax
  sub    -0x10(%rsp),%eax
  add    -0x14(%rsp),%eax
  sar    $0x11,%eax
  mov    %eax,%ecx
  test   $0xffffff00,%eax
  je     L276
  not    %eax
  sar    $0x1f,%eax
  mov    %eax,%ecx
L276:
  mov    %cl,0x13(%rdx)
  sub    %r8d,%edi
  sub    %esi,%edi
  sar    $0x11,%edi
  mov    %edi,%eax
  test   $0xffffff00,%edi
  je     L393
  not    %edi
  sar    $0x1f,%edi
  mov    %edi,%eax
L393:
  mov    %al,0x14(%rdx)
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
void DCT_8x4(int *coeff, unsigned char *out) {
  register int base, val1, val2, val3;
  int tmp1, tmp2;
  int C4, C16, C20;
  int C2_18, C6_22, C1_17, C3_19, C5_21, C7_23;
  register int t;
  C4 = coeff[4];
  C16 = coeff[16];
  C20 = coeff[20];
  coeff[0] = ((coeff[0]) ? 23168 * (coeff[0]) : 0);
  coeff[4] = ((coeff[4]) ? 23168 * (coeff[4]) : 0);
  coeff[16] = ((coeff[16]) ? 23168 * (coeff[16]) : 0);
  coeff[20] = ((coeff[20]) ? 23168 * (coeff[20]) : 0);
  C2_18 = coeff[2] + coeff[18];
  C6_22 = coeff[6] + coeff[22];
  C1_17 = coeff[1] + coeff[17];
  C3_19 = coeff[3] + coeff[19];
  C5_21 = coeff[5] + coeff[21];
  C7_23 = coeff[7] + coeff[23];
  base = 0x1000000;
  base += coeff[0] + coeff[4] + coeff[16] + coeff[20];
  base += ((C2_18) ? 30270 * (C2_18) : 0);
  base += ((C6_22) ? 12538 * (C6_22) : 0);
  val1 = ((coeff[9]) ? 41986 * (coeff[9]) : 0);
  val1 += ((coeff[11]) ? 35594 * (coeff[11]) : 0);
  val1 += ((coeff[13]) ? 23783 * (coeff[13]) : 0);
  val1 += ((coeff[15]) ? 8351 * (coeff[15]) : 0);
  val1 += ((coeff[25]) ? 17391 * (coeff[25]) : 0);
  val1 += ((coeff[27]) ? 14743 * (coeff[27]) : 0);
  val1 += ((coeff[29]) ? 9851 * (coeff[29]) : 0);
  val1 += ((coeff[31]) ? 3459 * (coeff[31]) : 0);
  val2 = ((C1_17) ? 32134 * (C1_17) : 0);
  val2 += ((C3_19) ? 27242 * (C3_19) : 0);
  val2 += ((C5_21) ? 18202 * (C5_21) : 0);
  val2 += ((C7_23) ? 6392 * (C7_23) : 0);
  val3 = ((coeff[10]) ? 39550 * (coeff[10]) : 0);
  val3 += ((coeff[14] + coeff[26]) ? 16382 * (coeff[14] + coeff[26]) : 0);
  val3 += ((coeff[30]) ? 6785 * (coeff[30]) : 0);
  val3 += ((coeff[8] + coeff[12]) ? 30270 * (coeff[8] + coeff[12]) : 0);
  val3 += ((coeff[24] + coeff[28]) ? 12538 * (coeff[24] + coeff[28]) : 0);
  t = (base + val1 + val2 + val3) >> 17;
  out[0] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base - val1 - val2 + val3 - C4 - C20) >> 17;
  out[7] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base - val1 + val2 - val3 - C16 - C20) >> 17;
  out[24] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base + val1 - val2 - val3 - C4 - C16 - C20) >> 17;
  out[31] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  base = 0x1000000;
  base += coeff[0] - coeff[4] + coeff[16] - coeff[20];
  base += ((C2_18) ? 12538 * (C2_18) : 0);
  base -= ((C6_22) ? 30270 * (C6_22) : 0);
  val1 = ((coeff[9]) ? 35594 * (coeff[9]) : 0);
  val1 -= ((coeff[11]) ? 8351 * (coeff[11]) : 0);
  val1 -= ((coeff[13]) ? 41986 * (coeff[13]) : 0);
  val1 -= ((coeff[15]) ? 23783 * (coeff[15]) : 0);
  val1 -= ((coeff[25]) ? 14743 * (coeff[25]) : 0);
  val1 -= ((coeff[27]) ? 3459 * (coeff[27]) : 0);
  val1 -= ((coeff[29]) ? 17391 * (coeff[29]) : 0);
  val1 -= ((coeff[31]) ? 9851 * (coeff[31]) : 0);
  val2 = ((C1_17) ? 27242 * (C1_17) : 0);
  val2 -= ((C3_19) ? 6392 * (C3_19) : 0);
  val2 -= ((C5_21) ? 32134 * (C5_21) : 0);
  val2 -= ((C7_23) ? 18202 * (C7_23) : 0);
  val3 = ((coeff[10] - coeff[30]) ? 16382 * (coeff[10] - coeff[30]) : 0);
  val3 -= ((coeff[14]) ? 39550 * (coeff[14]) : 0);
  val3 += ((coeff[26]) ? 6785 * (coeff[26]) : 0);
  val3 += ((coeff[24] - coeff[28]) ? 12538 * (coeff[24] - coeff[28]) : 0);
  val3 += ((coeff[8] - coeff[12]) ? 30270 * (coeff[8] - coeff[12]) : 0);
  t = (base + val1 + val2 + val3 + C4 + C20) >> 17;
  out[1] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base - val1 - val2 + val3) >> 17;
  out[6] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base - val1 + val2 - val3 + C4 - C16 + C20) >> 17;
  out[25] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base + val1 - val2 - val3 + C20) >> 17;
  out[30] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  base = 0x1000000;
  base += coeff[0] - coeff[4] + coeff[16] - coeff[20];
  base -= ((C2_18) ? 12538 * (C2_18) : 0);
  base += ((C6_22) ? 30270 * (C6_22) : 0);
  val1 = ((coeff[9]) ? 23783 * (coeff[9]) : 0);
  val1 -= ((coeff[11]) ? 41986 * (coeff[11]) : 0);
  val1 += ((coeff[13]) ? 8351 * (coeff[13]) : 0);
  val1 += ((coeff[15]) ? 35594 * (coeff[15]) : 0);
  val1 += ((coeff[25]) ? 9851 * (coeff[25]) : 0);
  val1 -= ((coeff[27]) ? 17391 * (coeff[27]) : 0);
  val1 += ((coeff[29]) ? 3459 * (coeff[29]) : 0);
  val1 += ((coeff[31]) ? 14743 * (coeff[31]) : 0);
  val2 = ((C1_17) ? 18202 * (C1_17) : 0);
  val2 -= ((C3_19) ? 32134 * (C3_19) : 0);
  val2 += ((C5_21) ? 6392 * (C5_21) : 0);
  val2 += ((C7_23) ? 27242 * (C7_23) : 0);
  val3 = -((coeff[10] - coeff[30]) ? 16382 * (coeff[10] - coeff[30]) : 0);
  val3 += ((coeff[14]) ? 39550 * (coeff[14]) : 0);
  val3 -= ((coeff[26]) ? 6785 * (coeff[26]) : 0);
  val3 += ((coeff[24] - coeff[28]) ? 12538 * (coeff[24] - coeff[28]) : 0);
  val3 += ((coeff[8] - coeff[12]) ? 30270 * (coeff[8] - coeff[12]) : 0);
  t = (base + val1 + val2 + val3) >> 17;
  out[2] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base - val1 - val2 + val3) >> 17;
  out[5] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base - val1 + val2 - val3 - C16) >> 17;
  out[26] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base + val1 - val2 - val3 + C4 - C16 + C20) >> 17;
  out[29] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  base = 0x1000000;
  base += coeff[0] + coeff[4] + coeff[16] + coeff[20];
  base -= ((C2_18) ? 30270 * (C2_18) : 0);
  base -= ((C6_22) ? 12538 * (C6_22) : 0);
  val1 = ((coeff[9]) ? 8351 * (coeff[9]) : 0);
  val1 -= ((coeff[11]) ? 23783 * (coeff[11]) : 0);
  val1 += ((coeff[13]) ? 35594 * (coeff[13]) : 0);
  val1 += ((coeff[25]) ? 3459 * (coeff[25]) : 0);
  val1 -= ((coeff[27]) ? 9851 * (coeff[27]) : 0);
  val1 += ((coeff[29]) ? 14743 * (coeff[29]) : 0);
  val2 = ((C1_17) ? 6392 * (C1_17) : 0);
  val2 -= ((C3_19) ? 18202 * (C3_19) : 0);
  val2 += ((C5_21) ? 27242 * (C5_21) : 0);
  val3 = -((coeff[10]) ? 39550 * (coeff[10]) : 0);
  val3 += ((coeff[14] + coeff[26]) ? 16382 * (coeff[14] + coeff[26]) : 0);
  val3 -= ((coeff[30]) ? 6785 * (coeff[30]) : 0);
  val3 += ((coeff[8] + coeff[12]) ? 30270 * (coeff[8] + coeff[12]) : 0);
  val3 += ((coeff[24] + coeff[28]) ? 12538 * (coeff[24] + coeff[28]) : 0);
  tmp1 = ((C7_23) ? 32134 * (C7_23) : 0);
  tmp2 = ((coeff[15]) ? 41986 * (coeff[15]) : 0) + ((coeff[31]) ? 17391 * (coeff[31]) : 0);
  t = (base + val1 + val2 + val3 - tmp1 - tmp2 - C4 - C20) >> 17;
  out[3] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base - val1 - val2 + val3) >> 17;
  out[4] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base - val1 + val2 - val3 - tmp1 + tmp2) >> 17;
  out[27] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base + val1 - val2 - val3 - C16 - C20) >> 17;
  out[28] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  C2_18 = coeff[2] - coeff[18];
  C6_22 = coeff[6] - coeff[22];
  C1_17 = coeff[1] - coeff[17];
  C3_19 = coeff[3] - coeff[19];
  C5_21 = coeff[5] - coeff[21];
  C7_23 = coeff[7] - coeff[23];
  base = 0x1000000;
  base += coeff[0] + coeff[4] - coeff[16] - coeff[20];
  base += ((C2_18) ? 30270 * (C2_18) : 0);
  base += ((C6_22) ? 12538 * (C6_22) : 0);
  val1 = ((coeff[9]) ? 17391 * (coeff[9]) : 0);
  val1 += ((coeff[11]) ? 14743 * (coeff[11]) : 0);
  val1 += ((coeff[13]) ? 9851 * (coeff[13]) : 0);
  val1 += ((coeff[15]) ? 3459 * (coeff[15]) : 0);
  val1 -= ((coeff[25]) ? 41986 * (coeff[25]) : 0);
  val1 -= ((coeff[27]) ? 35594 * (coeff[27]) : 0);
  val1 -= ((coeff[29]) ? 23783 * (coeff[29]) : 0);
  val1 -= ((coeff[31]) ? 8351 * (coeff[31]) : 0);
  val2 = ((C1_17) ? 32134 * (C1_17) : 0);
  val2 += ((C3_19) ? 27242 * (C3_19) : 0);
  val2 += ((C5_21) ? 18202 * (C5_21) : 0);
  val2 += ((C7_23) ? 6392 * (C7_23) : 0);
  val3 = ((coeff[10] - coeff[30]) ? 16382 * (coeff[10] - coeff[30]) : 0);
  val3 += ((coeff[14]) ? 6785 * (coeff[14]) : 0);
  val3 -= ((coeff[26]) ? 39550 * (coeff[26]) : 0);
  val3 -= ((coeff[24] + coeff[28]) ? 30270 * (coeff[24] + coeff[28]) : 0);
  val3 += ((coeff[8] + coeff[12]) ? 12538 * (coeff[8] + coeff[12]) : 0);
  t = (base + val1 + val2 + val3) >> 17;
  out[8] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base - val1 - val2 + val3 - C4 + C16 + C20) >> 17;
  out[15] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base - val1 + val2 - val3) >> 17;
  out[16] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base + val1 - val2 - val3 - C4 + C20) >> 17;
  out[23] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  base = 0x1000000;
  base += coeff[0] - coeff[4] - coeff[16] + coeff[20];
  base += ((C2_18) ? 12538 * (C2_18) : 0);
  base -= ((C6_22) ? 30270 * (C6_22) : 0);
  val1 = ((coeff[9]) ? 14743 * (coeff[9]) : 0);
  val1 -= ((coeff[11]) ? 3459 * (coeff[11]) : 0);
  val1 -= ((coeff[13]) ? 17391 * (coeff[13]) : 0);
  val1 -= ((coeff[15]) ? 9851 * (coeff[15]) : 0);
  val1 -= ((coeff[25]) ? 35594 * (coeff[25]) : 0);
  val1 += ((coeff[27]) ? 8351 * (coeff[27]) : 0);
  val1 += ((coeff[29]) ? 41986 * (coeff[29]) : 0);
  val1 += ((coeff[31]) ? 23783 * (coeff[31]) : 0);
  val2 = ((C1_17) ? 27242 * (C1_17) : 0);
  val2 -= ((C3_19) ? 6392 * (C3_19) : 0);
  val2 -= ((C5_21) ? 32134 * (C5_21) : 0);
  val2 -= ((C7_23) ? 18202 * (C7_23) : 0);
  val3 = ((coeff[10]) ? 6785 * (coeff[10]) : 0);
  val3 -= ((coeff[14] + coeff[26]) ? 16382 * (coeff[14] + coeff[26]) : 0);
  val3 += ((coeff[30]) ? 39550 * (coeff[30]) : 0);
  val3 += ((coeff[8] - coeff[12]) ? 12538 * (coeff[8] - coeff[12]) : 0);
  val3 -= ((coeff[24] - coeff[28]) ? 30270 * (coeff[24] - coeff[28]) : 0);
  t = (base + val1 + val2 + val3 + C4 + C16 - C20) >> 17;
  out[9] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base - val1 - val2 + val3 + C16) >> 17;
  out[14] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base - val1 + val2 - val3 + C4) >> 17;
  out[17] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base + val1 - val2 - val3) >> 17;
  out[22] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  base = 0x1000000;
  base += coeff[0] - coeff[4] - coeff[16] + coeff[20];
  base -= ((C2_18) ? 12538 * (C2_18) : 0);
  base += ((C6_22) ? 30270 * (C6_22) : 0);
  val1 = ((coeff[9]) ? 9851 * (coeff[9]) : 0);
  val1 -= ((coeff[11]) ? 17391 * (coeff[11]) : 0);
  val1 += ((coeff[13]) ? 3459 * (coeff[13]) : 0);
  val1 += ((coeff[15]) ? 14743 * (coeff[15]) : 0);
  val1 -= ((coeff[25]) ? 23783 * (coeff[25]) : 0);
  val1 += ((coeff[27]) ? 41986 * (coeff[27]) : 0);
  val1 -= ((coeff[29]) ? 8351 * (coeff[29]) : 0);
  val1 -= ((coeff[31]) ? 35594 * (coeff[31]) : 0);
  val2 = ((C1_17) ? 18202 * (C1_17) : 0);
  val2 -= ((C3_19) ? 32134 * (C3_19) : 0);
  val2 += ((C5_21) ? 6392 * (C5_21) : 0);
  val2 += ((C7_23) ? 27242 * (C7_23) : 0);
  val3 = -((coeff[10]) ? 6785 * (coeff[10]) : 0);
  val3 += ((coeff[14] + coeff[26]) ? 16382 * (coeff[14] + coeff[26]) : 0);
  val3 -= ((coeff[30]) ? 39550 * (coeff[30]) : 0);
  val3 += ((coeff[8] - coeff[12]) ? 12538 * (coeff[8] - coeff[12]) : 0);
  val3 -= ((coeff[24] - coeff[28]) ? 30270 * (coeff[24] - coeff[28]) : 0);
  t = (base + val1 + val2 + val3) >> 17;
  out[10] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base - val1 - val2 + val3 + C4 + C16 - C20) >> 17;
  out[13] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base - val1 + val2 - val3) >> 17;
  out[18] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base + val1 - val2 - val3 + C4) >> 17;
  out[21] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  base = 0x1000000;
  base += coeff[0] + coeff[4] - coeff[16] - coeff[20];
  base -= ((C2_18) ? 30270 * (C2_18) : 0);
  base -= ((C6_22) ? 12538 * (C6_22) : 0);
  val1 = ((coeff[9]) ? 3459 * (coeff[9]) : 0);
  val1 -= ((coeff[11]) ? 9851 * (coeff[11]) : 0);
  val1 += ((coeff[13]) ? 14743 * (coeff[13]) : 0);
  val1 -= ((coeff[25]) ? 8351 * (coeff[25]) : 0);
  val1 += ((coeff[27]) ? 23783 * (coeff[27]) : 0);
  val1 -= ((coeff[29]) ? 35594 * (coeff[29]) : 0);
  val2 = ((C1_17) ? 6392 * (C1_17) : 0);
  val2 -= ((C3_19) ? 18202 * (C3_19) : 0);
  val2 += ((C5_21) ? 27242 * (C5_21) : 0);
  val3 = -((coeff[10] - coeff[30]) ? 16382 * (coeff[10] - coeff[30]) : 0);
  val3 -= ((coeff[14]) ? 6785 * (coeff[14]) : 0);
  val3 += ((coeff[26]) ? 39550 * (coeff[26]) : 0);
  val3 -= ((coeff[24] + coeff[28]) ? 30270 * (coeff[24] + coeff[28]) : 0);
  val3 += ((coeff[8] + coeff[12]) ? 12538 * (coeff[8] + coeff[12]) : 0);
  tmp1 = ((C7_23) ? 32134 * (C7_23) : 0);
  tmp2 = -((coeff[15]) ? 17391 * (coeff[15]) : 0) + ((coeff[31]) ? 41986 * (coeff[31]) : 0);
  t = (base + val1 + val2 + val3 - tmp1 + tmp2 + C16 + C20) >> 17;
  out[11] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base - val1 - val2 + val3 + C16 + C20) >> 17;
  out[12] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base - val1 + val2 - val3 - tmp1 - tmp2 - C4 + C20) >> 17;
  out[19] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
  t = (base + val1 - val2 - val3) >> 17;
  out[20] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
}
```