void fdct(short int *blk, int lx) {
  int tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
  int tmp10, tmp11, tmp12, tmp13;
  int z1, z2, z3, z4, z5;
  int i;
  short int *block;
  int constant;
  block = blk;
  for (i = 0; i < 8; i++) {
    tmp0 = block[0] + block[7];
    tmp7 = block[0] - block[7];
    tmp1 = block[1] + block[6];
    tmp6 = block[1] - block[6];
    tmp2 = block[2] + block[5];
    tmp5 = block[2] - block[5];
    tmp3 = block[3] + block[4];
    tmp4 = block[3] - block[4];
    tmp10 = tmp0 + tmp3;
    tmp13 = tmp0 - tmp3;
    tmp11 = tmp1 + tmp2;
    tmp12 = tmp1 - tmp2;
    block[0] = ((tmp10 + tmp11) << 2);
    block[4] = ((tmp10 - tmp11) << 2);
    constant = 4433;
    z1 = (tmp12 + tmp13) * constant;
    constant = 6270;
    block[2] = (z1 + (tmp13 * constant)) >> (13 - 2);
    constant = -15137;
    block[6] = (z1 + (tmp12 * constant)) >> (13 - 2);
    z1 = tmp4 + tmp7;
    z2 = tmp5 + tmp6;
    z3 = tmp4 + tmp6;
    z4 = tmp5 + tmp7;
    constant = 9633;
    z5 = ((z3 + z4) * constant);
    constant = 2446;
    tmp4 = (tmp4 * constant);
    constant = 16819;
    tmp5 = (tmp5 * constant);
    constant = 25172;
    tmp6 = (tmp6 * constant);
    constant = 12299;
    tmp7 = (tmp7 * constant);
    constant = -7373;
    z1 = (z1 * constant);
    constant = -20995;
    z2 = (z2 * constant);
    constant = -16069;
    z3 = (z3 * constant);
    constant = -3196;
    z4 = (z4 * constant);
    z3 += z5;
    z4 += z5;
    block[7] = (tmp4 + z1 + z3) >> (13 - 2);
    block[5] = (tmp5 + z2 + z4) >> (13 - 2);
    block[3] = (tmp6 + z2 + z3) >> (13 - 2);
    block[1] = (tmp7 + z1 + z4) >> (13 - 2);
    block += lx;
  }
  block = blk;
  for (i = 0; i < 8; i++) {
    tmp0 = block[0] + block[7 * lx];
    tmp7 = block[0] - block[7 * lx];
    tmp1 = block[lx] + block[6 * lx];
    tmp6 = block[lx] - block[6 * lx];
    tmp2 = block[2 * lx] + block[5 * lx];
    tmp5 = block[2 * lx] - block[5 * lx];
    tmp3 = block[3 * lx] + block[4 * lx];
    tmp4 = block[3 * lx] - block[4 * lx];
    tmp10 = tmp0 + tmp3;
    tmp13 = tmp0 - tmp3;
    tmp11 = tmp1 + tmp2;
    tmp12 = tmp1 - tmp2;
    block[0] = (tmp10 + tmp11) >> (2 + 3);
    block[4 * lx] = (tmp10 - tmp11) >> (2 + 3);
    constant = 4433;
    z1 = ((tmp12 + tmp13) * constant);
    constant = 6270;
    block[2 * lx] = (z1 + (tmp13 * constant)) >> (13 + 2 + 3);
    constant = -15137;
    block[6 * lx] = (z1 + (tmp12 * constant)) >> (13 + 2 + 3);
    z1 = tmp4 + tmp7;
    z2 = tmp5 + tmp6;
    z3 = tmp4 + tmp6;
    z4 = tmp5 + tmp7;
    constant = 9633;
    z5 = ((z3 + z4) * constant);
    constant = 2446;
    tmp4 = (tmp4 * constant);
    constant = 16819;
    tmp5 = (tmp5 * constant);
    constant = 25172;
    tmp6 = (tmp6 * constant);
    constant = 12299;
    tmp7 = (tmp7 * constant);
    constant = -7373;
    z1 = (z1 * constant);
    constant = -20995;
    z2 = (z2 * constant);
    constant = -16069;
    z3 = (z3 * constant);
    constant = -3196;
    z4 = (z4 * constant);
    z3 += z5;
    z4 += z5;
    block[7 * lx] = (tmp4 + z1 + z3) >> (13 + 2 + 3);
    block[5 * lx] = (tmp5 + z2 + z4) >> (13 + 2 + 3);
    block[3 * lx] = (tmp6 + z2 + z3) >> (13 + 2 + 3);
    block[lx] = (tmp7 + z1 + z4) >> (13 + 2 + 3);
    block++;
  }
}


x86 assembly (clang, -O0):
<fdct>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x60(%rbp)
movl   $0x0,-0x54(%rbp)
cmpl   $0x8,-0x54(%rbp)
jge    13bc <fdct+0x2bc>
mov    -0x60(%rbp),%rax
movswl (%rax),%eax
mov    -0x60(%rbp),%rcx
movswl 0xe(%rcx),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
mov    -0x60(%rbp),%rax
movswl (%rax),%eax
mov    -0x60(%rbp),%rcx
movswl 0xe(%rcx),%ecx
sub    %ecx,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x60(%rbp),%rax
movswl 0x2(%rax),%eax
mov    -0x60(%rbp),%rcx
movswl 0xc(%rcx),%ecx
add    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x60(%rbp),%rax
movswl 0x2(%rax),%eax
mov    -0x60(%rbp),%rcx
movswl 0xc(%rcx),%ecx
sub    %ecx,%eax
mov    %eax,-0x28(%rbp)
mov    -0x60(%rbp),%rax
movswl 0x4(%rax),%eax
mov    -0x60(%rbp),%rcx
movswl 0xa(%rcx),%ecx
add    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x60(%rbp),%rax
movswl 0x4(%rax),%eax
mov    -0x60(%rbp),%rcx
movswl 0xa(%rcx),%ecx
sub    %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x60(%rbp),%rax
movswl 0x6(%rax),%eax
mov    -0x60(%rbp),%rcx
movswl 0x8(%rcx),%ecx
add    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x60(%rbp),%rax
movswl 0x6(%rax),%eax
mov    -0x60(%rbp),%rcx
movswl 0x8(%rcx),%ecx
sub    %ecx,%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x10(%rbp),%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x14(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x30(%rbp),%eax
add    -0x34(%rbp),%eax
shl    $0x2,%eax
mov    %ax,%cx
mov    -0x60(%rbp),%rax
mov    %cx,(%rax)
mov    -0x30(%rbp),%eax
sub    -0x34(%rbp),%eax
shl    $0x2,%eax
mov    %ax,%cx
mov    -0x60(%rbp),%rax
mov    %cx,0x8(%rax)
movl   $0x1151,-0x64(%rbp)
mov    -0x38(%rbp),%eax
add    -0x3c(%rbp),%eax
imul   -0x64(%rbp),%eax
mov    %eax,-0x40(%rbp)
movl   $0x187e,-0x64(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x3c(%rbp),%ecx
imul   -0x64(%rbp),%ecx
add    %ecx,%eax
sar    $0xb,%eax
mov    %ax,%cx
mov    -0x60(%rbp),%rax
mov    %cx,0x4(%rax)
movl   $0xffffc4df,-0x64(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x38(%rbp),%ecx
imul   -0x64(%rbp),%ecx
add    %ecx,%eax
sar    $0xb,%eax
mov    %ax,%cx
mov    -0x60(%rbp),%rax
mov    %cx,0xc(%rax)
mov    -0x20(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x24(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x20(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x24(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
movl   $0x25a1,-0x64(%rbp)
mov    -0x48(%rbp),%eax
add    -0x4c(%rbp),%eax
imul   -0x64(%rbp),%eax
mov    %eax,-0x50(%rbp)
movl   $0x98e,-0x64(%rbp)
mov    -0x20(%rbp),%eax
imul   -0x64(%rbp),%eax
mov    %eax,-0x20(%rbp)
movl   $0x41b3,-0x64(%rbp)
mov    -0x24(%rbp),%eax
imul   -0x64(%rbp),%eax
mov    %eax,-0x24(%rbp)
movl   $0x6254,-0x64(%rbp)
mov    -0x28(%rbp),%eax
imul   -0x64(%rbp),%eax
mov    %eax,-0x28(%rbp)
movl   $0x300b,-0x64(%rbp)
mov    -0x2c(%rbp),%eax
imul   -0x64(%rbp),%eax
mov    %eax,-0x2c(%rbp)
movl   $0xffffe333,-0x64(%rbp)
mov    -0x40(%rbp),%eax
imul   -0x64(%rbp),%eax
mov    %eax,-0x40(%rbp)
movl   $0xffffadfd,-0x64(%rbp)
mov    -0x44(%rbp),%eax
imul   -0x64(%rbp),%eax
mov    %eax,-0x44(%rbp)
movl   $0xffffc13b,-0x64(%rbp)
mov    -0x48(%rbp),%eax
imul   -0x64(%rbp),%eax
mov    %eax,-0x48(%rbp)
movl   $0xfffff384,-0x64(%rbp)
mov    -0x4c(%rbp),%eax
imul   -0x64(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x50(%rbp),%eax
add    -0x48(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x50(%rbp),%eax
add    -0x4c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x20(%rbp),%eax
add    -0x40(%rbp),%eax
add    -0x48(%rbp),%eax
sar    $0xb,%eax
mov    %ax,%cx
mov    -0x60(%rbp),%rax
mov    %cx,0xe(%rax)
mov    -0x24(%rbp),%eax
add    -0x44(%rbp),%eax
add    -0x4c(%rbp),%eax
sar    $0xb,%eax
mov    %ax,%cx
mov    -0x60(%rbp),%rax
mov    %cx,0xa(%rax)
mov    -0x28(%rbp),%eax
add    -0x44(%rbp),%eax
add    -0x48(%rbp),%eax
sar    $0xb,%eax
mov    %ax,%cx
mov    -0x60(%rbp),%rax
mov    %cx,0x6(%rax)
mov    -0x2c(%rbp),%eax
add    -0x40(%rbp),%eax
add    -0x4c(%rbp),%eax
sar    $0xb,%eax
mov    %ax,%cx
mov    -0x60(%rbp),%rax
mov    %cx,0x2(%rax)
mov    -0xc(%rbp),%ecx
mov    -0x60(%rbp),%rax
movslq %ecx,%rcx
shl    $0x1,%rcx
add    %rcx,%rax
mov    %rax,-0x60(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    111a <fdct+0x1a>
mov    -0x8(%rbp),%rax
mov    %rax,-0x60(%rbp)
movl   $0x0,-0x54(%rbp)
cmpl   $0x8,-0x54(%rbp)
jge    16fa <fdct+0x5fa>
mov    -0x60(%rbp),%rax
movswl (%rax),%eax
mov    -0x60(%rbp),%rcx
imul   $0x7,-0xc(%rbp),%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
mov    -0x60(%rbp),%rax
movswl (%rax),%eax
mov    -0x60(%rbp),%rcx
imul   $0x7,-0xc(%rbp),%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
sub    %ecx,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x60(%rbp),%rax
movslq -0xc(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
mov    -0x60(%rbp),%rcx
imul   $0x6,-0xc(%rbp),%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x60(%rbp),%rax
movslq -0xc(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
mov    -0x60(%rbp),%rcx
imul   $0x6,-0xc(%rbp),%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
sub    %ecx,%eax
mov    %eax,-0x28(%rbp)
mov    -0x60(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    -0x60(%rbp),%rcx
imul   $0x5,-0xc(%rbp),%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x60(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    -0x60(%rbp),%rcx
imul   $0x5,-0xc(%rbp),%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
sub    %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x60(%rbp),%rax
imul   $0x3,-0xc(%rbp),%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    -0x60(%rbp),%rcx
mov    -0xc(%rbp),%edx
shl    $0x2,%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x60(%rbp),%rax
imul   $0x3,-0xc(%rbp),%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    -0x60(%rbp),%rcx
mov    -0xc(%rbp),%edx
shl    $0x2,%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
sub    %ecx,%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x10(%rbp),%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x14(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x30(%rbp),%eax
add    -0x34(%rbp),%eax
sar    $0x5,%eax
mov    %ax,%cx
mov    -0x60(%rbp),%rax
mov    %cx,(%rax)
mov    -0x30(%rbp),%eax
sub    -0x34(%rbp),%eax
sar    $0x5,%eax
mov    %ax,%dx
mov    -0x60(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
movl   $0x1151,-0x64(%rbp)
mov    -0x38(%rbp),%eax
add    -0x3c(%rbp),%eax
imul   -0x64(%rbp),%eax
mov    %eax,-0x40(%rbp)
movl   $0x187e,-0x64(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x3c(%rbp),%ecx
imul   -0x64(%rbp),%ecx
add    %ecx,%eax
sar    $0x12,%eax
mov    %ax,%dx
mov    -0x60(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
movl   $0xffffc4df,-0x64(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x38(%rbp),%ecx
imul   -0x64(%rbp),%ecx
add    %ecx,%eax
sar    $0x12,%eax
mov    %ax,%dx
mov    -0x60(%rbp),%rax
imul   $0x6,-0xc(%rbp),%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x20(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x24(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x20(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x24(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
movl   $0x25a1,-0x64(%rbp)
mov    -0x48(%rbp),%eax
add    -0x4c(%rbp),%eax
imul   -0x64(%rbp),%eax
mov    %eax,-0x50(%rbp)
movl   $0x98e,-0x64(%rbp)
mov    -0x20(%rbp),%eax
imul   -0x64(%rbp),%eax
mov    %eax,-0x20(%rbp)
movl   $0x41b3,-0x64(%rbp)
mov    -0x24(%rbp),%eax
imul   -0x64(%rbp),%eax
mov    %eax,-0x24(%rbp)
movl   $0x6254,-0x64(%rbp)
mov    -0x28(%rbp),%eax
imul   -0x64(%rbp),%eax
mov    %eax,-0x28(%rbp)
movl   $0x300b,-0x64(%rbp)
mov    -0x2c(%rbp),%eax
imul   -0x64(%rbp),%eax
mov    %eax,-0x2c(%rbp)
movl   $0xffffe333,-0x64(%rbp)
mov    -0x40(%rbp),%eax
imul   -0x64(%rbp),%eax
mov    %eax,-0x40(%rbp)
movl   $0xffffadfd,-0x64(%rbp)
mov    -0x44(%rbp),%eax
imul   -0x64(%rbp),%eax
mov    %eax,-0x44(%rbp)
movl   $0xffffc13b,-0x64(%rbp)
mov    -0x48(%rbp),%eax
imul   -0x64(%rbp),%eax
mov    %eax,-0x48(%rbp)
movl   $0xfffff384,-0x64(%rbp)
mov    -0x4c(%rbp),%eax
imul   -0x64(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x50(%rbp),%eax
add    -0x48(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x50(%rbp),%eax
add    -0x4c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x20(%rbp),%eax
add    -0x40(%rbp),%eax
add    -0x48(%rbp),%eax
sar    $0x12,%eax
mov    %ax,%dx
mov    -0x60(%rbp),%rax
imul   $0x7,-0xc(%rbp),%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x24(%rbp),%eax
add    -0x44(%rbp),%eax
add    -0x4c(%rbp),%eax
sar    $0x12,%eax
mov    %ax,%dx
mov    -0x60(%rbp),%rax
imul   $0x5,-0xc(%rbp),%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x28(%rbp),%eax
add    -0x44(%rbp),%eax
add    -0x48(%rbp),%eax
sar    $0x12,%eax
mov    %ax,%dx
mov    -0x60(%rbp),%rax
imul   $0x3,-0xc(%rbp),%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x2c(%rbp),%eax
add    -0x40(%rbp),%eax
add    -0x4c(%rbp),%eax
sar    $0x12,%eax
mov    %ax,%dx
mov    -0x60(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x60(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x60(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    13cb <fdct+0x2cb>
pop    %rbp
ret

x86 assembly (clang, -O2):
<fdct>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
movslq %esi,%rax
mov    %rdi,-0x38(%rsp)
lea    0xe(%rdi),%r8
mov    %rax,%rdi
add    %rax,%rax
mov    %rax,-0x40(%rsp)
mov    $0x8,%r10d
nopw   0x0(%rax,%rax,1)
movswl -0xe(%r8),%r11d
movswl (%r8),%edx
lea    (%rdx,%r11,1),%eax
sub    %edx,%r11d
movswl -0xc(%r8),%r14d
movswl -0x2(%r8),%edx
lea    (%rdx,%r14,1),%ebx
sub    %edx,%r14d
movswl -0xa(%r8),%r12d
movswl -0x4(%r8),%esi
lea    (%rsi,%r12,1),%r15d
sub    %esi,%r12d
movswl -0x8(%r8),%r13d
movswl -0x6(%r8),%ebp
lea    0x0(%rbp,%r13,1),%edx
sub    %ebp,%r13d
lea    (%rdx,%rax,1),%ebp
sub    %edx,%eax
lea    (%r15,%rbx,1),%edx
sub    %r15d,%ebx
lea    (%rdx,%rbp,1),%esi
shl    $0x2,%esi
mov    %si,-0xe(%r8)
sub    %edx,%ebp
shl    $0x2,%ebp
mov    %bp,-0x6(%r8)
lea    (%rax,%rbx,1),%edx
imul   $0x1151,%edx,%edx
imul   $0x187e,%eax,%eax
add    %edx,%eax
shr    $0xb,%eax
mov    %ax,-0xa(%r8)
imul   $0xffffc4df,%ebx,%eax
add    %edx,%eax
shr    $0xb,%eax
mov    %ax,-0x2(%r8)
lea    (%r11,%r13,1),%edx
lea    (%r12,%r14,1),%r15d
lea    (%r14,%r13,1),%ebp
lea    (%r12,%r11,1),%ebx
lea    (%rbx,%rbp,1),%eax
imul   $0x25a1,%eax,%r9d
imul   $0x98e,%r13d,%eax
imul   $0x41b3,%r12d,%ecx
imul   $0x6254,%r14d,%esi
imul   $0x300b,%r11d,%r11d
imul   $0xffffe333,%edx,%r14d
imul   $0xffffadfd,%r15d,%r15d
imul   $0xffffc13b,%ebp,%edx
imul   $0xfffff384,%ebx,%ebp
add    %r9d,%edx
add    %r9d,%ebp
add    %r14d,%eax
add    %edx,%eax
shr    $0xb,%eax
mov    %ax,(%r8)
add    %r15d,%ecx
add    %ebp,%ecx
shr    $0xb,%ecx
mov    %cx,-0x4(%r8)
add    %r15d,%esi
add    %edx,%esi
shr    $0xb,%esi
mov    %si,-0x8(%r8)
add    %r14d,%r11d
add    %ebp,%r11d
shr    $0xb,%r11d
mov    %r11w,-0xc(%r8)
add    -0x40(%rsp),%r8
add    $0xffffffff,%r10d
jne    1130 <fdct+0x30>
lea    0x0(,%rdi,8),%eax
sub    %edi,%eax
cltq
lea    (%rdi,%rdi,1),%ecx
lea    (%rcx,%rcx,2),%edx
movslq %edx,%rdx
movslq %ecx,%rcx
lea    (%rdi,%rdi,4),%esi
movslq %esi,%rsi
lea    (%rdi,%rdi,2),%ebp
movslq %ebp,%rbx
lea    0x0(,%rdi,4),%ebp
movslq %ebp,%rbp
mov    -0x38(%rsp),%r8
lea    (%r8,%rax,2),%rax
mov    %rax,-0x40(%rsp)
lea    (%r8,%rdi,2),%rax
mov    %rax,-0x28(%rsp)
lea    (%r8,%rdx,2),%rax
mov    %rax,-0x8(%rsp)
lea    (%r8,%rcx,2),%rax
mov    %rax,-0x10(%rsp)
lea    (%r8,%rsi,2),%rax
mov    %rax,-0x18(%rsp)
lea    (%r8,%rbx,2),%rax
mov    %rax,-0x30(%rsp)
lea    (%r8,%rbp,2),%rax
mov    %rax,-0x20(%rsp)
xor    %esi,%esi
mov    -0x8(%rsp),%r15
mov    -0x10(%rsp),%r12
mov    -0x18(%rsp),%r14
mov    -0x20(%rsp),%r10
nop
movswl (%r8,%rsi,1),%r13d
mov    -0x40(%rsp),%rax
movswl (%rax,%rsi,1),%eax
lea    (%rax,%r13,1),%ebp
sub    %eax,%r13d
mov    -0x28(%rsp),%rax
movswl (%rax,%rsi,1),%r11d
movswl (%r15,%rsi,1),%eax
lea    (%rax,%r11,1),%ebx
sub    %eax,%r11d
movswl (%r12,%rsi,1),%eax
movswl (%r14,%rsi,1),%edx
lea    (%rdx,%rax,1),%r8d
sub    %edx,%eax
mov    -0x30(%rsp),%rcx
movswl (%rcx,%rsi,1),%edx
movswl (%r10,%rsi,1),%edi
lea    (%rdi,%rdx,1),%r9d
sub    %edi,%edx
lea    (%r9,%rbp,1),%edi
sub    %r9d,%ebp
lea    (%r8,%rbx,1),%r9d
sub    %r8d,%ebx
mov    -0x38(%rsp),%r8
lea    (%rdi,%r9,1),%ecx
shr    $0x5,%ecx
mov    %cx,(%r8,%rsi,1)
sub    %r9d,%edi
shr    $0x5,%edi
mov    %di,(%r10,%rsi,1)
lea    (%rbx,%rbp,1),%ecx
imul   $0x1151,%ecx,%ecx
imul   $0x187e,%ebp,%edi
add    %ecx,%edi
sar    $0x12,%edi
mov    %di,(%r12,%rsi,1)
imul   $0xffffc4df,%ebx,%edi
add    %ecx,%edi
sar    $0x12,%edi
mov    %di,(%r15,%rsi,1)
lea    (%rdx,%r11,1),%ecx
lea    (%rax,%r13,1),%edi
lea    (%rcx,%rdi,1),%ebp
imul   $0x25a1,%ebp,%ebp
imul   $0xffffc13b,%ecx,%ecx
imul   $0xfffff384,%edi,%ebx
add    %ebp,%ecx
add    %ebp,%ebx
lea    (%rdx,%r13,1),%edi
imul   $0x98e,%edx,%edx
imul   $0xffffe333,%edi,%edi
add    %edi,%edx
add    %ecx,%edx
sar    $0x12,%edx
mov    -0x40(%rsp),%rbp
mov    %dx,0x0(%rbp,%rsi,1)
lea    (%rax,%r11,1),%edx
imul   $0x41b3,%eax,%eax
imul   $0xffffadfd,%edx,%edx
add    %edx,%eax
add    %ebx,%eax
sar    $0x12,%eax
mov    %ax,(%r14,%rsi,1)
imul   $0x6254,%r11d,%eax
add    %edx,%eax
add    %ecx,%eax
sar    $0x12,%eax
mov    -0x30(%rsp),%rcx
mov    %ax,(%rcx,%rsi,1)
imul   $0x300b,%r13d,%eax
add    %edi,%eax
add    %ebx,%eax
sar    $0x12,%eax
mov    -0x28(%rsp),%rcx
mov    %ax,(%rcx,%rsi,1)
add    $0x2,%rsi
cmp    $0x10,%esi
jne    12e0 <fdct+0x1e0>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @fdct(i16* %0, i32 %1) {
%3 = alloca i16*
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca i16*
%24 = alloca i32
store i16* %0, i16** %3
store i32 %1, i32* %4
%25 = load i16*, i16** %3
store i16* %25, i16** %23
store i32 0, i32* %22
br label %26
26: ; preds = %238, %2
%27 = load i32, i32* %22
%28 = icmp slt i32 %27, 8
br i1 %28, label %29, label %241
29: ; preds = %26
%30 = load i16*, i16** %23
%31 = getelementptr inbounds i16, i16* %30, i64 0
%32 = load i16, i16* %31
%33 = sext i16 %32 to i32
%34 = load i16*, i16** %23
%35 = getelementptr inbounds i16, i16* %34, i64 7
%36 = load i16, i16* %35
%37 = sext i16 %36 to i32
%38 = add nsw i32 %33, %37
store i32 %38, i32* %5
%39 = load i16*, i16** %23
%40 = getelementptr inbounds i16, i16* %39, i64 0
%41 = load i16, i16* %40
%42 = sext i16 %41 to i32
%43 = load i16*, i16** %23
%44 = getelementptr inbounds i16, i16* %43, i64 7
%45 = load i16, i16* %44
%46 = sext i16 %45 to i32
%47 = sub nsw i32 %42, %46
store i32 %47, i32* %12
%48 = load i16*, i16** %23
%49 = getelementptr inbounds i16, i16* %48, i64 1
%50 = load i16, i16* %49
%51 = sext i16 %50 to i32
%52 = load i16*, i16** %23
%53 = getelementptr inbounds i16, i16* %52, i64 6
%54 = load i16, i16* %53
%55 = sext i16 %54 to i32
%56 = add nsw i32 %51, %55
store i32 %56, i32* %6
%57 = load i16*, i16** %23
%58 = getelementptr inbounds i16, i16* %57, i64 1
%59 = load i16, i16* %58
%60 = sext i16 %59 to i32
%61 = load i16*, i16** %23
%62 = getelementptr inbounds i16, i16* %61, i64 6
%63 = load i16, i16* %62
%64 = sext i16 %63 to i32
%65 = sub nsw i32 %60, %64
store i32 %65, i32* %11
%66 = load i16*, i16** %23
%67 = getelementptr inbounds i16, i16* %66, i64 2
%68 = load i16, i16* %67
%69 = sext i16 %68 to i32
%70 = load i16*, i16** %23
%71 = getelementptr inbounds i16, i16* %70, i64 5
%72 = load i16, i16* %71
%73 = sext i16 %72 to i32
%74 = add nsw i32 %69, %73
store i32 %74, i32* %7
%75 = load i16*, i16** %23
%76 = getelementptr inbounds i16, i16* %75, i64 2
%77 = load i16, i16* %76
%78 = sext i16 %77 to i32
%79 = load i16*, i16** %23
%80 = getelementptr inbounds i16, i16* %79, i64 5
%81 = load i16, i16* %80
%82 = sext i16 %81 to i32
%83 = sub nsw i32 %78, %82
store i32 %83, i32* %10
%84 = load i16*, i16** %23
%85 = getelementptr inbounds i16, i16* %84, i64 3
%86 = load i16, i16* %85
%87 = sext i16 %86 to i32
%88 = load i16*, i16** %23
%89 = getelementptr inbounds i16, i16* %88, i64 4
%90 = load i16, i16* %89
%91 = sext i16 %90 to i32
%92 = add nsw i32 %87, %91
store i32 %92, i32* %8
%93 = load i16*, i16** %23
%94 = getelementptr inbounds i16, i16* %93, i64 3
%95 = load i16, i16* %94
%96 = sext i16 %95 to i32
%97 = load i16*, i16** %23
%98 = getelementptr inbounds i16, i16* %97, i64 4
%99 = load i16, i16* %98
%100 = sext i16 %99 to i32
%101 = sub nsw i32 %96, %100
store i32 %101, i32* %9
%102 = load i32, i32* %5
%103 = load i32, i32* %8
%104 = add nsw i32 %102, %103
store i32 %104, i32* %13
%105 = load i32, i32* %5
%106 = load i32, i32* %8
%107 = sub nsw i32 %105, %106
store i32 %107, i32* %16
%108 = load i32, i32* %6
%109 = load i32, i32* %7
%110 = add nsw i32 %108, %109
store i32 %110, i32* %14
%111 = load i32, i32* %6
%112 = load i32, i32* %7
%113 = sub nsw i32 %111, %112
store i32 %113, i32* %15
%114 = load i32, i32* %13
%115 = load i32, i32* %14
%116 = add nsw i32 %114, %115
%117 = shl i32 %116, 2
%118 = trunc i32 %117 to i16
%119 = load i16*, i16** %23
%120 = getelementptr inbounds i16, i16* %119, i64 0
store i16 %118, i16* %120
%121 = load i32, i32* %13
%122 = load i32, i32* %14
%123 = sub nsw i32 %121, %122
%124 = shl i32 %123, 2
%125 = trunc i32 %124 to i16
%126 = load i16*, i16** %23
%127 = getelementptr inbounds i16, i16* %126, i64 4
store i16 %125, i16* %127
store i32 4433, i32* %24
%128 = load i32, i32* %15
%129 = load i32, i32* %16
%130 = add nsw i32 %128, %129
%131 = load i32, i32* %24
%132 = mul nsw i32 %130, %131
store i32 %132, i32* %17
store i32 6270, i32* %24
%133 = load i32, i32* %17
%134 = load i32, i32* %16
%135 = load i32, i32* %24
%136 = mul nsw i32 %134, %135
%137 = add nsw i32 %133, %136
%138 = ashr i32 %137, 11
%139 = trunc i32 %138 to i16
%140 = load i16*, i16** %23
%141 = getelementptr inbounds i16, i16* %140, i64 2
store i16 %139, i16* %141
store i32 -15137, i32* %24
%142 = load i32, i32* %17
%143 = load i32, i32* %15
%144 = load i32, i32* %24
%145 = mul nsw i32 %143, %144
%146 = add nsw i32 %142, %145
%147 = ashr i32 %146, 11
%148 = trunc i32 %147 to i16
%149 = load i16*, i16** %23
%150 = getelementptr inbounds i16, i16* %149, i64 6
store i16 %148, i16* %150
%151 = load i32, i32* %9
%152 = load i32, i32* %12
%153 = add nsw i32 %151, %152
store i32 %153, i32* %17
%154 = load i32, i32* %10
%155 = load i32, i32* %11
%156 = add nsw i32 %154, %155
store i32 %156, i32* %18
%157 = load i32, i32* %9
%158 = load i32, i32* %11
%159 = add nsw i32 %157, %158
store i32 %159, i32* %19
%160 = load i32, i32* %10
%161 = load i32, i32* %12
%162 = add nsw i32 %160, %161
store i32 %162, i32* %20
store i32 9633, i32* %24
%163 = load i32, i32* %19
%164 = load i32, i32* %20
%165 = add nsw i32 %163, %164
%166 = load i32, i32* %24
%167 = mul nsw i32 %165, %166
store i32 %167, i32* %21
store i32 2446, i32* %24
%168 = load i32, i32* %9
%169 = load i32, i32* %24
%170 = mul nsw i32 %168, %169
store i32 %170, i32* %9
store i32 16819, i32* %24
%171 = load i32, i32* %10
%172 = load i32, i32* %24
%173 = mul nsw i32 %171, %172
store i32 %173, i32* %10
store i32 25172, i32* %24
%174 = load i32, i32* %11
%175 = load i32, i32* %24
%176 = mul nsw i32 %174, %175
store i32 %176, i32* %11
store i32 12299, i32* %24
%177 = load i32, i32* %12
%178 = load i32, i32* %24
%179 = mul nsw i32 %177, %178
store i32 %179, i32* %12
store i32 -7373, i32* %24
%180 = load i32, i32* %17
%181 = load i32, i32* %24
%182 = mul nsw i32 %180, %181
store i32 %182, i32* %17
store i32 -20995, i32* %24
%183 = load i32, i32* %18
%184 = load i32, i32* %24
%185 = mul nsw i32 %183, %184
store i32 %185, i32* %18
store i32 -16069, i32* %24
%186 = load i32, i32* %19
%187 = load i32, i32* %24
%188 = mul nsw i32 %186, %187
store i32 %188, i32* %19
store i32 -3196, i32* %24
%189 = load i32, i32* %20
%190 = load i32, i32* %24
%191 = mul nsw i32 %189, %190
store i32 %191, i32* %20
%192 = load i32, i32* %21
%193 = load i32, i32* %19
%194 = add nsw i32 %193, %192
store i32 %194, i32* %19
%195 = load i32, i32* %21
%196 = load i32, i32* %20
%197 = add nsw i32 %196, %195
store i32 %197, i32* %20
%198 = load i32, i32* %9
%199 = load i32, i32* %17
%200 = add nsw i32 %198, %199
%201 = load i32, i32* %19
%202 = add nsw i32 %200, %201
%203 = ashr i32 %202, 11
%204 = trunc i32 %203 to i16
%205 = load i16*, i16** %23
%206 = getelementptr inbounds i16, i16* %205, i64 7
store i16 %204, i16* %206
%207 = load i32, i32* %10
%208 = load i32, i32* %18
%209 = add nsw i32 %207, %208
%210 = load i32, i32* %20
%211 = add nsw i32 %209, %210
%212 = ashr i32 %211, 11
%213 = trunc i32 %212 to i16
%214 = load i16*, i16** %23
%215 = getelementptr inbounds i16, i16* %214, i64 5
store i16 %213, i16* %215
%216 = load i32, i32* %11
%217 = load i32, i32* %18
%218 = add nsw i32 %216, %217
%219 = load i32, i32* %19
%220 = add nsw i32 %218, %219
%221 = ashr i32 %220, 11
%222 = trunc i32 %221 to i16
%223 = load i16*, i16** %23
%224 = getelementptr inbounds i16, i16* %223, i64 3
store i16 %222, i16* %224
%225 = load i32, i32* %12
%226 = load i32, i32* %17
%227 = add nsw i32 %225, %226
%228 = load i32, i32* %20
%229 = add nsw i32 %227, %228
%230 = ashr i32 %229, 11
%231 = trunc i32 %230 to i16
%232 = load i16*, i16** %23
%233 = getelementptr inbounds i16, i16* %232, i64 1
store i16 %231, i16* %233
%234 = load i32, i32* %4
%235 = load i16*, i16** %23
%236 = sext i32 %234 to i64
%237 = getelementptr inbounds i16, i16* %235, i64 %236
store i16* %237, i16** %23
br label %238
238: ; preds = %29
%239 = load i32, i32* %22
%240 = add nsw i32 %239, 1
store i32 %240, i32* %22
br label %26
241: ; preds = %26
%242 = load i16*, i16** %3
store i16* %242, i16** %23
store i32 0, i32* %22
br label %243
243: ; preds = %513, %241
%244 = load i32, i32* %22
%245 = icmp slt i32 %244, 8
br i1 %245, label %246, label %516
246: ; preds = %243
%247 = load i16*, i16** %23
%248 = getelementptr inbounds i16, i16* %247, i64 0
%249 = load i16, i16* %248
%250 = sext i16 %249 to i32
%251 = load i16*, i16** %23
%252 = load i32, i32* %4
%253 = mul nsw i32 7, %252
%254 = sext i32 %253 to i64
%255 = getelementptr inbounds i16, i16* %251, i64 %254
%256 = load i16, i16* %255
%257 = sext i16 %256 to i32
%258 = add nsw i32 %250, %257
store i32 %258, i32* %5
%259 = load i16*, i16** %23
%260 = getelementptr inbounds i16, i16* %259, i64 0
%261 = load i16, i16* %260
%262 = sext i16 %261 to i32
%263 = load i16*, i16** %23
%264 = load i32, i32* %4
%265 = mul nsw i32 7, %264
%266 = sext i32 %265 to i64
%267 = getelementptr inbounds i16, i16* %263, i64 %266
%268 = load i16, i16* %267
%269 = sext i16 %268 to i32
%270 = sub nsw i32 %262, %269
store i32 %270, i32* %12
%271 = load i16*, i16** %23
%272 = load i32, i32* %4
%273 = sext i32 %272 to i64
%274 = getelementptr inbounds i16, i16* %271, i64 %273
%275 = load i16, i16* %274
%276 = sext i16 %275 to i32
%277 = load i16*, i16** %23
%278 = load i32, i32* %4
%279 = mul nsw i32 6, %278
%280 = sext i32 %279 to i64
%281 = getelementptr inbounds i16, i16* %277, i64 %280
%282 = load i16, i16* %281
%283 = sext i16 %282 to i32
%284 = add nsw i32 %276, %283
store i32 %284, i32* %6
%285 = load i16*, i16** %23
%286 = load i32, i32* %4
%287 = sext i32 %286 to i64
%288 = getelementptr inbounds i16, i16* %285, i64 %287
%289 = load i16, i16* %288
%290 = sext i16 %289 to i32
%291 = load i16*, i16** %23
%292 = load i32, i32* %4
%293 = mul nsw i32 6, %292
%294 = sext i32 %293 to i64
%295 = getelementptr inbounds i16, i16* %291, i64 %294
%296 = load i16, i16* %295
%297 = sext i16 %296 to i32
%298 = sub nsw i32 %290, %297
store i32 %298, i32* %11
%299 = load i16*, i16** %23
%300 = load i32, i32* %4
%301 = mul nsw i32 2, %300
%302 = sext i32 %301 to i64
%303 = getelementptr inbounds i16, i16* %299, i64 %302
%304 = load i16, i16* %303
%305 = sext i16 %304 to i32
%306 = load i16*, i16** %23
%307 = load i32, i32* %4
%308 = mul nsw i32 5, %307
%309 = sext i32 %308 to i64
%310 = getelementptr inbounds i16, i16* %306, i64 %309
%311 = load i16, i16* %310
%312 = sext i16 %311 to i32
%313 = add nsw i32 %305, %312
store i32 %313, i32* %7
%314 = load i16*, i16** %23
%315 = load i32, i32* %4
%316 = mul nsw i32 2, %315
%317 = sext i32 %316 to i64
%318 = getelementptr inbounds i16, i16* %314, i64 %317
%319 = load i16, i16* %318
%320 = sext i16 %319 to i32
%321 = load i16*, i16** %23
%322 = load i32, i32* %4
%323 = mul nsw i32 5, %322
%324 = sext i32 %323 to i64
%325 = getelementptr inbounds i16, i16* %321, i64 %324
%326 = load i16, i16* %325
%327 = sext i16 %326 to i32
%328 = sub nsw i32 %320, %327
store i32 %328, i32* %10
%329 = load i16*, i16** %23
%330 = load i32, i32* %4
%331 = mul nsw i32 3, %330
%332 = sext i32 %331 to i64
%333 = getelementptr inbounds i16, i16* %329, i64 %332
%334 = load i16, i16* %333
%335 = sext i16 %334 to i32
%336 = load i16*, i16** %23
%337 = load i32, i32* %4
%338 = mul nsw i32 4, %337
%339 = sext i32 %338 to i64
%340 = getelementptr inbounds i16, i16* %336, i64 %339
%341 = load i16, i16* %340
%342 = sext i16 %341 to i32
%343 = add nsw i32 %335, %342
store i32 %343, i32* %8
%344 = load i16*, i16** %23
%345 = load i32, i32* %4
%346 = mul nsw i32 3, %345
%347 = sext i32 %346 to i64
%348 = getelementptr inbounds i16, i16* %344, i64 %347
%349 = load i16, i16* %348
%350 = sext i16 %349 to i32
%351 = load i16*, i16** %23
%352 = load i32, i32* %4
%353 = mul nsw i32 4, %352
%354 = sext i32 %353 to i64
%355 = getelementptr inbounds i16, i16* %351, i64 %354
%356 = load i16, i16* %355
%357 = sext i16 %356 to i32
%358 = sub nsw i32 %350, %357
store i32 %358, i32* %9
%359 = load i32, i32* %5
%360 = load i32, i32* %8
%361 = add nsw i32 %359, %360
store i32 %361, i32* %13
%362 = load i32, i32* %5
%363 = load i32, i32* %8
%364 = sub nsw i32 %362, %363
store i32 %364, i32* %16
%365 = load i32, i32* %6
%366 = load i32, i32* %7
%367 = add nsw i32 %365, %366
store i32 %367, i32* %14
%368 = load i32, i32* %6
%369 = load i32, i32* %7
%370 = sub nsw i32 %368, %369
store i32 %370, i32* %15
%371 = load i32, i32* %13
%372 = load i32, i32* %14
%373 = add nsw i32 %371, %372
%374 = ashr i32 %373, 5
%375 = trunc i32 %374 to i16
%376 = load i16*, i16** %23
%377 = getelementptr inbounds i16, i16* %376, i64 0
store i16 %375, i16* %377
%378 = load i32, i32* %13
%379 = load i32, i32* %14
%380 = sub nsw i32 %378, %379
%381 = ashr i32 %380, 5
%382 = trunc i32 %381 to i16
%383 = load i16*, i16** %23
%384 = load i32, i32* %4
%385 = mul nsw i32 4, %384
%386 = sext i32 %385 to i64
%387 = getelementptr inbounds i16, i16* %383, i64 %386
store i16 %382, i16* %387
store i32 4433, i32* %24
%388 = load i32, i32* %15
%389 = load i32, i32* %16
%390 = add nsw i32 %388, %389
%391 = load i32, i32* %24
%392 = mul nsw i32 %390, %391
store i32 %392, i32* %17
store i32 6270, i32* %24
%393 = load i32, i32* %17
%394 = load i32, i32* %16
%395 = load i32, i32* %24
%396 = mul nsw i32 %394, %395
%397 = add nsw i32 %393, %396
%398 = ashr i32 %397, 18
%399 = trunc i32 %398 to i16
%400 = load i16*, i16** %23
%401 = load i32, i32* %4
%402 = mul nsw i32 2, %401
%403 = sext i32 %402 to i64
%404 = getelementptr inbounds i16, i16* %400, i64 %403
store i16 %399, i16* %404
store i32 -15137, i32* %24
%405 = load i32, i32* %17
%406 = load i32, i32* %15
%407 = load i32, i32* %24
%408 = mul nsw i32 %406, %407
%409 = add nsw i32 %405, %408
%410 = ashr i32 %409, 18
%411 = trunc i32 %410 to i16
%412 = load i16*, i16** %23
%413 = load i32, i32* %4
%414 = mul nsw i32 6, %413
%415 = sext i32 %414 to i64
%416 = getelementptr inbounds i16, i16* %412, i64 %415
store i16 %411, i16* %416
%417 = load i32, i32* %9
%418 = load i32, i32* %12
%419 = add nsw i32 %417, %418
store i32 %419, i32* %17
%420 = load i32, i32* %10
%421 = load i32, i32* %11
%422 = add nsw i32 %420, %421
store i32 %422, i32* %18
%423 = load i32, i32* %9
%424 = load i32, i32* %11
%425 = add nsw i32 %423, %424
store i32 %425, i32* %19
%426 = load i32, i32* %10
%427 = load i32, i32* %12
%428 = add nsw i32 %426, %427
store i32 %428, i32* %20
store i32 9633, i32* %24
%429 = load i32, i32* %19
%430 = load i32, i32* %20
%431 = add nsw i32 %429, %430
%432 = load i32, i32* %24
%433 = mul nsw i32 %431, %432
store i32 %433, i32* %21
store i32 2446, i32* %24
%434 = load i32, i32* %9
%435 = load i32, i32* %24
%436 = mul nsw i32 %434, %435
store i32 %436, i32* %9
store i32 16819, i32* %24
%437 = load i32, i32* %10
%438 = load i32, i32* %24
%439 = mul nsw i32 %437, %438
store i32 %439, i32* %10
store i32 25172, i32* %24
%440 = load i32, i32* %11
%441 = load i32, i32* %24
%442 = mul nsw i32 %440, %441
store i32 %442, i32* %11
store i32 12299, i32* %24
%443 = load i32, i32* %12
%444 = load i32, i32* %24
%445 = mul nsw i32 %443, %444
store i32 %445, i32* %12
store i32 -7373, i32* %24
%446 = load i32, i32* %17
%447 = load i32, i32* %24
%448 = mul nsw i32 %446, %447
store i32 %448, i32* %17
store i32 -20995, i32* %24
%449 = load i32, i32* %18
%450 = load i32, i32* %24
%451 = mul nsw i32 %449, %450
store i32 %451, i32* %18
store i32 -16069, i32* %24
%452 = load i32, i32* %19
%453 = load i32, i32* %24
%454 = mul nsw i32 %452, %453
store i32 %454, i32* %19
store i32 -3196, i32* %24
%455 = load i32, i32* %20
%456 = load i32, i32* %24
%457 = mul nsw i32 %455, %456
store i32 %457, i32* %20
%458 = load i32, i32* %21
%459 = load i32, i32* %19
%460 = add nsw i32 %459, %458
store i32 %460, i32* %19
%461 = load i32, i32* %21
%462 = load i32, i32* %20
%463 = add nsw i32 %462, %461
store i32 %463, i32* %20
%464 = load i32, i32* %9
%465 = load i32, i32* %17
%466 = add nsw i32 %464, %465
%467 = load i32, i32* %19
%468 = add nsw i32 %466, %467
%469 = ashr i32 %468, 18
%470 = trunc i32 %469 to i16
%471 = load i16*, i16** %23
%472 = load i32, i32* %4
%473 = mul nsw i32 7, %472
%474 = sext i32 %473 to i64
%475 = getelementptr inbounds i16, i16* %471, i64 %474
store i16 %470, i16* %475
%476 = load i32, i32* %10
%477 = load i32, i32* %18
%478 = add nsw i32 %476, %477
%479 = load i32, i32* %20
%480 = add nsw i32 %478, %479
%481 = ashr i32 %480, 18
%482 = trunc i32 %481 to i16
%483 = load i16*, i16** %23
%484 = load i32, i32* %4
%485 = mul nsw i32 5, %484
%486 = sext i32 %485 to i64
%487 = getelementptr inbounds i16, i16* %483, i64 %486
store i16 %482, i16* %487
%488 = load i32, i32* %11
%489 = load i32, i32* %18
%490 = add nsw i32 %488, %489
%491 = load i32, i32* %19
%492 = add nsw i32 %490, %491
%493 = ashr i32 %492, 18
%494 = trunc i32 %493 to i16
%495 = load i16*, i16** %23
%496 = load i32, i32* %4
%497 = mul nsw i32 3, %496
%498 = sext i32 %497 to i64
%499 = getelementptr inbounds i16, i16* %495, i64 %498
store i16 %494, i16* %499
%500 = load i32, i32* %12
%501 = load i32, i32* %17
%502 = add nsw i32 %500, %501
%503 = load i32, i32* %20
%504 = add nsw i32 %502, %503
%505 = ashr i32 %504, 18
%506 = trunc i32 %505 to i16
%507 = load i16*, i16** %23
%508 = load i32, i32* %4
%509 = sext i32 %508 to i64
%510 = getelementptr inbounds i16, i16* %507, i64 %509
store i16 %506, i16* %510
%511 = load i16*, i16** %23
%512 = getelementptr inbounds i16, i16* %511, i32 1
store i16* %512, i16** %23
br label %513
513: ; preds = %246
%514 = load i32, i32* %22
%515 = add nsw i32 %514, 1
store i32 %515, i32* %22
br label %243
516: ; preds = %243
ret void
}

LLVM IR (-O2):
define void @fdct(i16* nocapture %0, i32 %1) {
%3 = sext i32 %1 to i64
br label %17
4: ; preds = %17
%5 = mul nsw i32 %1, 7
%6 = sext i32 %5 to i64
%7 = mul nsw i32 %1, 6
%8 = sext i32 %7 to i64
%9 = shl nsw i32 %1, 1
%10 = sext i32 %9 to i64
%11 = mul nsw i32 %1, 5
%12 = sext i32 %11 to i64
%13 = mul nsw i32 %1, 3
%14 = sext i32 %13 to i64
%15 = shl nsw i32 %1, 2
%16 = sext i32 %15 to i64
br label %106
17: ; preds = %2, %17
%18 = phi i16* [ %0, %2 ], [ %103, %17 ]
%19 = phi i32 [ 0, %2 ], [ %104, %17 ]
%20 = load i16, i16* %18
%21 = sext i16 %20 to i32
%22 = getelementptr inbounds i16, i16* %18, i64 7
%23 = load i16, i16* %22
%24 = sext i16 %23 to i32
%25 = add nsw i32 %24, %21
%26 = sub nsw i32 %21, %24
%27 = getelementptr inbounds i16, i16* %18, i64 1
%28 = load i16, i16* %27
%29 = sext i16 %28 to i32
%30 = getelementptr inbounds i16, i16* %18, i64 6
%31 = load i16, i16* %30
%32 = sext i16 %31 to i32
%33 = add nsw i32 %32, %29
%34 = sub nsw i32 %29, %32
%35 = getelementptr inbounds i16, i16* %18, i64 2
%36 = load i16, i16* %35
%37 = sext i16 %36 to i32
%38 = getelementptr inbounds i16, i16* %18, i64 5
%39 = load i16, i16* %38
%40 = sext i16 %39 to i32
%41 = add nsw i32 %40, %37
%42 = sub nsw i32 %37, %40
%43 = getelementptr inbounds i16, i16* %18, i64 3
%44 = load i16, i16* %43
%45 = sext i16 %44 to i32
%46 = getelementptr inbounds i16, i16* %18, i64 4
%47 = load i16, i16* %46
%48 = sext i16 %47 to i32
%49 = add nsw i32 %48, %45
%50 = sub nsw i32 %45, %48
%51 = add nsw i32 %49, %25
%52 = sub nsw i32 %25, %49
%53 = add nsw i32 %41, %33
%54 = sub nsw i32 %33, %41
%55 = add nsw i32 %51, %53
%56 = trunc i32 %55 to i16
%57 = shl i16 %56, 2
store i16 %57, i16* %18
%58 = sub nsw i32 %51, %53
%59 = trunc i32 %58 to i16
%60 = shl i16 %59, 2
store i16 %60, i16* %46
%61 = add nsw i32 %52, %54
%62 = mul nsw i32 %61, 4433
%63 = mul nsw i32 %52, 6270
%64 = add nsw i32 %62, %63
%65 = lshr i32 %64, 11
%66 = trunc i32 %65 to i16
store i16 %66, i16* %35
%67 = mul nsw i32 %54, -15137
%68 = add nsw i32 %62, %67
%69 = lshr i32 %68, 11
%70 = trunc i32 %69 to i16
store i16 %70, i16* %30
%71 = add nsw i32 %50, %26
%72 = add nsw i32 %42, %34
%73 = add nsw i32 %50, %34
%74 = add nsw i32 %42, %26
%75 = add nsw i32 %73, %74
%76 = mul nsw i32 %75, 9633
%77 = mul nsw i32 %50, 2446
%78 = mul nsw i32 %42, 16819
%79 = mul nsw i32 %34, 25172
%80 = mul nsw i32 %26, 12299
%81 = mul nsw i32 %71, -7373
%82 = mul nsw i32 %72, -20995
%83 = mul nsw i32 %73, -16069
%84 = mul nsw i32 %74, -3196
%85 = add nsw i32 %76, %83
%86 = add nsw i32 %76, %84
%87 = add nsw i32 %81, %77
%88 = add nsw i32 %87, %85
%89 = lshr i32 %88, 11
%90 = trunc i32 %89 to i16
store i16 %90, i16* %22
%91 = add nsw i32 %82, %78
%92 = add nsw i32 %91, %86
%93 = lshr i32 %92, 11
%94 = trunc i32 %93 to i16
store i16 %94, i16* %38
%95 = add nsw i32 %82, %79
%96 = add nsw i32 %95, %85
%97 = lshr i32 %96, 11
%98 = trunc i32 %97 to i16
store i16 %98, i16* %43
%99 = add nsw i32 %81, %80
%100 = add nsw i32 %99, %86
%101 = lshr i32 %100, 11
%102 = trunc i32 %101 to i16
store i16 %102, i16* %27
%103 = getelementptr inbounds i16, i16* %18, i64 %3
%104 = add nuw nsw i32 %19, 1
%105 = icmp eq i32 %104, 8
br i1 %105, label %4, label %17
106: ; preds = %4, %106
%107 = phi i16* [ %0, %4 ], [ %192, %106 ]
%108 = phi i32 [ 0, %4 ], [ %193, %106 ]
%109 = load i16, i16* %107
%110 = sext i16 %109 to i32
%111 = getelementptr inbounds i16, i16* %107, i64 %6
%112 = load i16, i16* %111
%113 = sext i16 %112 to i32
%114 = add nsw i32 %113, %110
%115 = sub nsw i32 %110, %113
%116 = getelementptr inbounds i16, i16* %107, i64 %3
%117 = load i16, i16* %116
%118 = sext i16 %117 to i32
%119 = getelementptr inbounds i16, i16* %107, i64 %8
%120 = load i16, i16* %119
%121 = sext i16 %120 to i32
%122 = add nsw i32 %121, %118
%123 = sub nsw i32 %118, %121
%124 = getelementptr inbounds i16, i16* %107, i64 %10
%125 = load i16, i16* %124
%126 = sext i16 %125 to i32
%127 = getelementptr inbounds i16, i16* %107, i64 %12
%128 = load i16, i16* %127
%129 = sext i16 %128 to i32
%130 = add nsw i32 %129, %126
%131 = sub nsw i32 %126, %129
%132 = getelementptr inbounds i16, i16* %107, i64 %14
%133 = load i16, i16* %132
%134 = sext i16 %133 to i32
%135 = getelementptr inbounds i16, i16* %107, i64 %16
%136 = load i16, i16* %135
%137 = sext i16 %136 to i32
%138 = add nsw i32 %137, %134
%139 = sub nsw i32 %134, %137
%140 = add nsw i32 %138, %114
%141 = sub nsw i32 %114, %138
%142 = add nsw i32 %130, %122
%143 = sub nsw i32 %122, %130
%144 = add nsw i32 %140, %142
%145 = ashr i32 %144, 5
%146 = trunc i32 %145 to i16
store i16 %146, i16* %107
%147 = sub nsw i32 %140, %142
%148 = ashr i32 %147, 5
%149 = trunc i32 %148 to i16
store i16 %149, i16* %135
%150 = add nsw i32 %141, %143
%151 = mul nsw i32 %150, 4433
%152 = mul nsw i32 %141, 6270
%153 = add nsw i32 %151, %152
%154 = ashr i32 %153, 18
%155 = trunc i32 %154 to i16
store i16 %155, i16* %124
%156 = mul nsw i32 %143, -15137
%157 = add nsw i32 %151, %156
%158 = ashr i32 %157, 18
%159 = trunc i32 %158 to i16
store i16 %159, i16* %119
%160 = add nsw i32 %139, %115
%161 = add nsw i32 %131, %123
%162 = add nsw i32 %139, %123
%163 = add nsw i32 %131, %115
%164 = add nsw i32 %162, %163
%165 = mul nsw i32 %164, 9633
%166 = mul nsw i32 %139, 2446
%167 = mul nsw i32 %131, 16819
%168 = mul nsw i32 %123, 25172
%169 = mul nsw i32 %115, 12299
%170 = mul nsw i32 %160, -7373
%171 = mul nsw i32 %161, -20995
%172 = mul nsw i32 %162, -16069
%173 = mul nsw i32 %163, -3196
%174 = add nsw i32 %165, %172
%175 = add nsw i32 %165, %173
%176 = add nsw i32 %170, %166
%177 = add nsw i32 %176, %174
%178 = ashr i32 %177, 18
%179 = trunc i32 %178 to i16
store i16 %179, i16* %111
%180 = add nsw i32 %171, %167
%181 = add nsw i32 %180, %175
%182 = ashr i32 %181, 18
%183 = trunc i32 %182 to i16
store i16 %183, i16* %127
%184 = add nsw i32 %171, %168
%185 = add nsw i32 %184, %174
%186 = ashr i32 %185, 18
%187 = trunc i32 %186 to i16
store i16 %187, i16* %132
%188 = add nsw i32 %170, %169
%189 = add nsw i32 %188, %175
%190 = ashr i32 %189, 18
%191 = trunc i32 %190 to i16
store i16 %191, i16* %116
%192 = getelementptr inbounds i16, i16* %107, i64 1
%193 = add nuw nsw i32 %108, 1
%194 = icmp eq i32 %193, 8
br i1 %194, label %195, label %106
195: ; preds = %106
ret void
}