void dct_inverse(register int *block_p) {
  int *data_p;
  int d0, d1, d2, d3, d4, d5, d6, d7, tmp;
  for (data_p = block_p; data_p < block_p + 8; data_p++) {
    d0 = data_p[0 * 8];
    d4 = data_p[4 * 8];
    {
      d4 += d0;
      d0 += d0;
      d0 -= d4;
    }
    d1 = data_p[1 * 8];
    d7 = data_p[7 * 8];
    {
      d7 += d1;
      d1 += d1;
      d1 -= d7;
    }
    d2 = data_p[2 * 8];
    d6 = data_p[6 * 8];
    {
      d6 += d2;
      d2 += d2;
      d2 -= d6;
    }
    d5 = data_p[5 * 8];
    d3 = data_p[3 * 8];
    {
      d3 += d5;
      d5 += d5;
      d5 -= d3;
    }
    {
      d2 = (short)(d2) * (short)(((46341 + 2) / 4));
      d2 = ((d2) + (1l << (13 - 1))) >> 13;
    }
    d2 -= d6;
    {
      d2 += d0;
      d0 += d0;
      d0 -= d2;
    }
    {
      d6 += d4;
      d4 += d4;
      d4 -= d6;
    }
    {
      d3 += d7;
      d7 += d7;
      d7 -= d3;
    }
    tmp = d3;
    {
      d3 += d6;
      d6 += d6;
      d6 -= d3;
    }
    data_p[7 * 8] = d6;
    data_p[0 * 8] = d3;
    d6 = d5 - d1;
    {
      d6 = (short)(d6) * (short)(((25080 + 2) / 4));
      d6 = ((d6) + (1l << (13 - 1))) >> 13;
    };
    {
      d1 = (short)(d1) * (short)(((35468 + 2) / 4));
      d1 = ((d1) + (1l << (13 - 1))) >> 13;
    }
    d1 -= d6;
    d1 -= tmp;
    {
      d7 = (short)(d7) * (short)(((46341 + 2) / 4));
      d7 = ((d7) + (1l << (13 - 1))) >> 13;
    }
    d7 -= d1;
    {
      d5 = (short)(d5) * (short)(((85627 + 2) / 4));
      d5 = ((d5) + (1l << (13 - 1))) >> 13;
    }
    d6 -= d5;
    d6 += d7;
    {
      d1 += d2;
      d2 += d2;
      d2 -= d1;
    }
    data_p[6 * 8] = d2;
    data_p[1 * 8] = d1;
    {
      d7 += d0;
      d0 += d0;
      d0 -= d7;
    }
    data_p[5 * 8] = d0;
    data_p[2 * 8] = d7;
    {
      d6 += d4;
      d4 += d4;
      d4 -= d6;
    }
    data_p[3 * 8] = d4;
    data_p[4 * 8] = d6;
  }
  for (data_p = block_p; data_p < block_p + 64; data_p += 8) {
    d0 = data_p[0];
    d1 = data_p[1];
    d2 = data_p[2];
    d3 = data_p[3];
    d4 = data_p[4];
    d5 = data_p[5];
    d6 = data_p[6];
    d7 = data_p[7];
    {
      d4 += d0;
      d0 += d0;
      d0 -= d4;
    }
    {
      d7 += d1;
      d1 += d1;
      d1 -= d7;
    }
    {
      d6 += d2;
      d2 += d2;
      d2 -= d6;
    }
    {
      d3 += d5;
      d5 += d5;
      d5 -= d3;
    }
    {
      d2 = (short)(d2) * (short)(((46341 + 2) / 4));
      d2 = ((d2) + (1l << (13 - 1))) >> 13;
    }
    d2 -= d6;
    {
      d2 += d0;
      d0 += d0;
      d0 -= d2;
    }
    {
      d6 += d4;
      d4 += d4;
      d4 -= d6;
    }
    {
      d3 += d7;
      d7 += d7;
      d7 -= d3;
    }
    tmp = d3;
    {
      d3 += d6;
      d6 += d6;
      d6 -= d3;
    }
    data_p[7] = d6;
    data_p[0] = d3;
    d6 = d5 - d1;
    {
      d6 = (short)(d6) * (short)(((25080 + 2) / 4));
      d6 = ((d6) + (1l << (13 - 1))) >> 13;
    }
    {
      d1 = (short)(d1) * (short)(((35468 + 2) / 4));
      d1 = ((d1) + (1l << (13 - 1))) >> 13;
    }
    d1 -= d6;
    d1 -= tmp;
    {
      d7 = (short)(d7) * (short)(((46341 + 2) / 4));
      d7 = ((d7) + (1l << (13 - 1))) >> 13;
    }
    d7 -= d1;
    {
      d5 = (short)(d5) * (short)(((85627 + 2) / 4));
      d5 = ((d5) + (1l << (13 - 1))) >> 13;
    }
    d6 -= d5;
    d6 += d7;
    {
      d1 += d2;
      d2 += d2;
      d2 -= d1;
    }
    data_p[6] = d2;
    data_p[1] = d1;
    {
      d7 += d0;
      d0 += d0;
      d0 -= d7;
    }
    data_p[5] = d0;
    data_p[2] = d7;
    {
      d6 += d4;
      d4 += d4;
      d4 -= d6;
    }
    data_p[3] = d4;
    data_p[4] = d6;
  }
}


x86 assembly (clang, -O0):
<dct_inverse>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x8(%rbp),%rcx
add    $0x20,%rcx
cmp    %rcx,%rax
jae    1410 <dct_inverse+0x310>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    0x80(%rax),%eax
mov    %eax,-0x24(%rbp)
mov    -0x14(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x14(%rbp),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x24(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    0x20(%rax),%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    0xe0(%rax),%eax
mov    %eax,-0x30(%rbp)
mov    -0x18(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x18(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    0x40(%rax),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
mov    0xc0(%rax),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x2c(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
mov    0xa0(%rax),%eax
mov    %eax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    0x60(%rax),%eax
mov    %eax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x20(%rbp),%ecx
mov    -0x28(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
cwtl
imul   $0x2d41,%eax,%eax
mov    %eax,-0x1c(%rbp)
movslq -0x1c(%rbp),%rax
add    $0x1000,%rax
sar    $0xd,%rax
mov    %eax,-0x1c(%rbp)
mov    -0x2c(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x24(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x24(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x2c(%rbp),%ecx
mov    -0x24(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x30(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x30(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%ecx
mov    -0x30(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x20(%rbp),%ecx
mov    -0x2c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0xe0(%rax)
mov    -0x20(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x28(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cwtl
imul   $0x187e,%eax,%eax
mov    %eax,-0x2c(%rbp)
movslq -0x2c(%rbp),%rax
add    $0x1000,%rax
sar    $0xd,%rax
mov    %eax,-0x2c(%rbp)
mov    -0x18(%rbp),%eax
cwtl
imul   $0x22a3,%eax,%eax
mov    %eax,-0x18(%rbp)
movslq -0x18(%rbp),%rax
add    $0x1000,%rax
sar    $0xd,%rax
mov    %eax,-0x18(%rbp)
mov    -0x2c(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x34(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x30(%rbp),%eax
cwtl
imul   $0x2d41,%eax,%eax
mov    %eax,-0x30(%rbp)
movslq -0x30(%rbp),%rax
add    $0x1000,%rax
sar    $0xd,%rax
mov    %eax,-0x30(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x30(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x30(%rbp)
mov    -0x28(%rbp),%eax
cwtl
imul   $0x539f,%eax,%eax
mov    %eax,-0x28(%rbp)
movslq -0x28(%rbp),%rax
add    $0x1000,%rax
sar    $0xd,%rax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%ecx
mov    -0x2c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0xc0(%rax)
mov    -0x18(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x20(%rax)
mov    -0x14(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x14(%rbp),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0xa0(%rax)
mov    -0x30(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x40(%rax)
mov    -0x24(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x24(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x2c(%rbp),%ecx
mov    -0x24(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x60(%rax)
mov    -0x2c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x80(%rax)
mov    -0x10(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x10(%rbp)
jmp    1110 <dct_inverse+0x10>
mov    -0x8(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x8(%rbp),%rcx
add    $0x100,%rcx
cmp    %rcx,%rax
jae    1703 <dct_inverse+0x603>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
mov    0xc(%rax),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%eax
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%rax
mov    0x14(%rax),%eax
mov    %eax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x10(%rbp),%rax
mov    0x1c(%rax),%eax
mov    %eax,-0x30(%rbp)
mov    -0x14(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x14(%rbp),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x24(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x18(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x18(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x2c(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x28(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x20(%rbp),%ecx
mov    -0x28(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
cwtl
imul   $0x2d41,%eax,%eax
mov    %eax,-0x1c(%rbp)
movslq -0x1c(%rbp),%rax
add    $0x1000,%rax
sar    $0xd,%rax
mov    %eax,-0x1c(%rbp)
mov    -0x2c(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x24(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x24(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x2c(%rbp),%ecx
mov    -0x24(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x30(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x30(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%ecx
mov    -0x30(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x20(%rbp),%ecx
mov    -0x2c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x1c(%rax)
mov    -0x20(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x28(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cwtl
imul   $0x187e,%eax,%eax
mov    %eax,-0x2c(%rbp)
movslq -0x2c(%rbp),%rax
add    $0x1000,%rax
sar    $0xd,%rax
mov    %eax,-0x2c(%rbp)
mov    -0x18(%rbp),%eax
cwtl
imul   $0x22a3,%eax,%eax
mov    %eax,-0x18(%rbp)
movslq -0x18(%rbp),%rax
add    $0x1000,%rax
sar    $0xd,%rax
mov    %eax,-0x18(%rbp)
mov    -0x2c(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x34(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x30(%rbp),%eax
cwtl
imul   $0x2d41,%eax,%eax
mov    %eax,-0x30(%rbp)
movslq -0x30(%rbp),%rax
add    $0x1000,%rax
sar    $0xd,%rax
mov    %eax,-0x30(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x30(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x30(%rbp)
mov    -0x28(%rbp),%eax
cwtl
imul   $0x539f,%eax,%eax
mov    %eax,-0x28(%rbp)
movslq -0x28(%rbp),%rax
add    $0x1000,%rax
sar    $0xd,%rax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%ecx
mov    -0x2c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x18(%rax)
mov    -0x18(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x14(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x14(%rbp),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x14(%rax)
mov    -0x30(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x8(%rax)
mov    -0x24(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x24(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x2c(%rbp),%ecx
mov    -0x24(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0xc(%rax)
mov    -0x2c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x10(%rax)
mov    -0x10(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x10(%rbp)
jmp    1418 <dct_inverse+0x318>
pop    %rbp
ret

x86 assembly (clang, -O2):
<dct_inverse>:
push   %rbp
push   %r15
push   %r14
push   %rbx
mov    $0xfffffffffffffff8,%rax
movdqa 0xeea(%rip),%xmm11
movdqa 0xef1(%rip),%xmm13
movdqa 0xef8(%rip),%xmm8
movdqa 0xeff(%rip),%xmm9
movdqa 0xf06(%rip),%xmm10
movdqa 0xf0d(%rip),%xmm12
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movdqu 0xa0(%rdi,%rax,4),%xmm14
movdqu 0x20(%rdi,%rax,4),%xmm7
movdqu 0x40(%rdi,%rax,4),%xmm3
movdqu 0x60(%rdi,%rax,4),%xmm4
movdqu 0x80(%rdi,%rax,4),%xmm6
paddd  %xmm7,%xmm14
paddd  %xmm7,%xmm7
psubd  %xmm14,%xmm7
movdqu 0x100(%rdi,%rax,4),%xmm2
paddd  %xmm3,%xmm2
paddd  %xmm3,%xmm3
psubd  %xmm2,%xmm3
movdqu 0xe0(%rdi,%rax,4),%xmm0
paddd  %xmm4,%xmm0
paddd  %xmm4,%xmm4
psubd  %xmm0,%xmm4
movdqu 0xc0(%rdi,%rax,4),%xmm1
paddd  %xmm1,%xmm6
paddd  %xmm1,%xmm1
psubd  %xmm6,%xmm1
pmaddwd %xmm11,%xmm4
paddd  %xmm13,%xmm4
psrad  $0xd,%xmm4
psubd  %xmm0,%xmm4
paddd  %xmm7,%xmm4
paddd  %xmm7,%xmm7
psubd  %xmm4,%xmm7
paddd  %xmm14,%xmm0
paddd  %xmm14,%xmm14
psubd  %xmm0,%xmm14
paddd  %xmm2,%xmm6
paddd  %xmm2,%xmm2
psubd  %xmm6,%xmm2
movdqa %xmm6,%xmm5
paddd  %xmm0,%xmm5
paddd  %xmm0,%xmm0
psubd  %xmm5,%xmm0
movdqu %xmm0,0x100(%rdi,%rax,4)
movdqu %xmm5,0x20(%rdi,%rax,4)
movdqa %xmm1,%xmm0
psubd  %xmm3,%xmm0
pmaddwd %xmm8,%xmm0
paddd  %xmm13,%xmm0
psrad  $0xd,%xmm0
pmaddwd %xmm9,%xmm3
paddd  %xmm13,%xmm3
psrad  $0xd,%xmm3
paddd  %xmm0,%xmm6
psubd  %xmm6,%xmm3
pmaddwd %xmm11,%xmm2
paddd  %xmm13,%xmm2
psrad  $0xd,%xmm2
psubd  %xmm3,%xmm2
pmaddwd %xmm10,%xmm1
pxor   %xmm5,%xmm5
pcmpgtd %xmm1,%xmm5
pshufd $0xee,%xmm1,%xmm6
punpckldq %xmm5,%xmm1
pxor   %xmm5,%xmm5
pcmpgtd %xmm6,%xmm5
punpckldq %xmm5,%xmm6
paddq  %xmm12,%xmm6
paddq  %xmm12,%xmm1
psrlq  $0xd,%xmm1
psrlq  $0xd,%xmm6
shufps $0x88,%xmm6,%xmm1
paddd  %xmm4,%xmm3
paddd  %xmm4,%xmm4
psubd  %xmm3,%xmm4
movdqu %xmm4,0xe0(%rdi,%rax,4)
movdqu %xmm3,0x40(%rdi,%rax,4)
paddd  %xmm14,%xmm0
psubd  %xmm1,%xmm0
paddd  %xmm2,%xmm0
paddd  %xmm7,%xmm2
paddd  %xmm7,%xmm7
psubd  %xmm2,%xmm7
movdqu %xmm7,0xc0(%rdi,%rax,4)
movdqu %xmm2,0x60(%rdi,%rax,4)
paddd  %xmm14,%xmm14
psubd  %xmm0,%xmm14
movdqu %xmm14,0x80(%rdi,%rax,4)
movdqu %xmm0,0xa0(%rdi,%rax,4)
add    $0x4,%rax
jne    1150 <dct_inverse+0x50>
mov    $0xfffffffffffffff8,%rax
nopw   0x0(%rax,%rax,1)
mov    0x20(%rdi,%rax,4),%r15d
mov    0x24(%rdi,%rax,4),%r8d
mov    0x28(%rdi,%rax,4),%esi
mov    0x34(%rdi,%rax,4),%r9d
mov    0x30(%rdi,%rax,4),%r11d
add    %r15d,%r11d
add    %r15d,%r15d
sub    %r11d,%r15d
mov    0x3c(%rdi,%rax,4),%r10d
add    %r8d,%r10d
add    %r8d,%r8d
sub    %r10d,%r8d
mov    0x38(%rdi,%rax,4),%ebx
add    %esi,%ebx
add    %esi,%esi
sub    %ebx,%esi
mov    0x2c(%rdi,%rax,4),%ecx
add    %r9d,%ecx
add    %r9d,%r9d
sub    %ecx,%r9d
movswl %si,%esi
imul   $0x2d41,%esi,%esi
add    $0x1000,%esi
sar    $0xd,%esi
sub    %ebx,%esi
add    %r15d,%esi
add    %r15d,%r15d
sub    %esi,%r15d
add    %r11d,%ebx
add    %r11d,%r11d
sub    %ebx,%r11d
add    %r10d,%ecx
add    %r10d,%r10d
sub    %ecx,%r10d
lea    (%rcx,%rbx,1),%ebp
add    %ebx,%ebx
sub    %ebp,%ebx
mov    %ebx,0x3c(%rdi,%rax,4)
mov    %ebp,0x20(%rdi,%rax,4)
movswl %r9w,%r14d
sub    %r8d,%r9d
movswl %r9w,%ebp
imul   $0x187e,%ebp,%ebp
add    $0x1000,%ebp
sar    $0xd,%ebp
movswl %r8w,%ebx
imul   $0x22a3,%ebx,%ebx
add    $0x1000,%ebx
sar    $0xd,%ebx
add    %ebp,%ecx
sub    %ecx,%ebx
movswl %r10w,%ecx
imul   $0x2d41,%ecx,%ecx
add    $0x1000,%ecx
sar    $0xd,%ecx
sub    %ebx,%ecx
imul   $0x539f,%r14d,%edx
movslq %edx,%rdx
add    $0x1000,%rdx
shr    $0xd,%rdx
add    %esi,%ebx
add    %esi,%esi
sub    %ebx,%esi
mov    %esi,0x38(%rdi,%rax,4)
mov    %ebx,0x24(%rdi,%rax,4)
lea    (%rcx,%r15,1),%esi
add    %r15d,%r15d
sub    %esi,%r15d
mov    %r15d,0x34(%rdi,%rax,4)
mov    %esi,0x28(%rdi,%rax,4)
mov    %r11d,%esi
sub    %edx,%esi
add    %ebp,%esi
add    %ecx,%esi
add    %r11d,%r11d
sub    %esi,%r11d
mov    %r11d,0x2c(%rdi,%rax,4)
mov    %esi,0x30(%rdi,%rax,4)
add    $0x8,%rax
cmp    $0x38,%rax
jb     1310 <dct_inverse+0x210>
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

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

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