void fdct(short int *blk, int lx) {
  long int tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
  long int tmp10, tmp11, tmp12, tmp13;
  long int z1, z2, z3, z4, z5;
  int i;
  short int *block;
  long 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
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0xa8(%rbp)
movl   $0x0,-0x9c(%rbp)
cmpl   $0x8,-0x9c(%rbp)
jge    1520 <fdct+0x420>
mov    -0xa8(%rbp),%rax
movswl (%rax),%eax
mov    -0xa8(%rbp),%rcx
movswl 0xe(%rcx),%ecx
add    %ecx,%eax
cltq
mov    %rax,-0x18(%rbp)
mov    -0xa8(%rbp),%rax
movswl (%rax),%eax
mov    -0xa8(%rbp),%rcx
movswl 0xe(%rcx),%ecx
sub    %ecx,%eax
cltq
mov    %rax,-0x50(%rbp)
mov    -0xa8(%rbp),%rax
movswl 0x2(%rax),%eax
mov    -0xa8(%rbp),%rcx
movswl 0xc(%rcx),%ecx
add    %ecx,%eax
cltq
mov    %rax,-0x20(%rbp)
mov    -0xa8(%rbp),%rax
movswl 0x2(%rax),%eax
mov    -0xa8(%rbp),%rcx
movswl 0xc(%rcx),%ecx
sub    %ecx,%eax
cltq
mov    %rax,-0x48(%rbp)
mov    -0xa8(%rbp),%rax
movswl 0x4(%rax),%eax
mov    -0xa8(%rbp),%rcx
movswl 0xa(%rcx),%ecx
add    %ecx,%eax
cltq
mov    %rax,-0x28(%rbp)
mov    -0xa8(%rbp),%rax
movswl 0x4(%rax),%eax
mov    -0xa8(%rbp),%rcx
movswl 0xa(%rcx),%ecx
sub    %ecx,%eax
cltq
mov    %rax,-0x40(%rbp)
mov    -0xa8(%rbp),%rax
movswl 0x6(%rax),%eax
mov    -0xa8(%rbp),%rcx
movswl 0x8(%rcx),%ecx
add    %ecx,%eax
cltq
mov    %rax,-0x30(%rbp)
mov    -0xa8(%rbp),%rax
movswl 0x6(%rax),%eax
mov    -0xa8(%rbp),%rcx
movswl 0x8(%rcx),%ecx
sub    %ecx,%eax
cltq
mov    %rax,-0x38(%rbp)
mov    -0x18(%rbp),%rax
add    -0x30(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x18(%rbp),%rax
sub    -0x30(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x20(%rbp),%rax
add    -0x28(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x20(%rbp),%rax
sub    -0x28(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0x58(%rbp),%rax
add    -0x60(%rbp),%rax
shl    $0x2,%rax
mov    %ax,%cx
mov    -0xa8(%rbp),%rax
mov    %cx,(%rax)
mov    -0x58(%rbp),%rax
sub    -0x60(%rbp),%rax
shl    $0x2,%rax
mov    %ax,%cx
mov    -0xa8(%rbp),%rax
mov    %cx,0x8(%rax)
movq   $0x1151,-0xb0(%rbp)
mov    -0x68(%rbp),%rax
add    -0x70(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0x78(%rbp)
movq   $0x187e,-0xb0(%rbp)
mov    -0x78(%rbp),%rax
mov    -0x70(%rbp),%rcx
imul   -0xb0(%rbp),%rcx
ff
add    %rcx,%rax
sar    $0xb,%rax
mov    %ax,%cx
mov    -0xa8(%rbp),%rax
mov    %cx,0x4(%rax)
movq   $0xffffffffffffc4df,-0xb0(%rbp)
df c4 ff ff
mov    -0x78(%rbp),%rax
mov    -0x68(%rbp),%rcx
imul   -0xb0(%rbp),%rcx
ff
add    %rcx,%rax
sar    $0xb,%rax
mov    %ax,%cx
mov    -0xa8(%rbp),%rax
mov    %cx,0xc(%rax)
mov    -0x38(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    -0x40(%rbp),%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x80(%rbp)
mov    -0x38(%rbp),%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x88(%rbp)
mov    -0x40(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x90(%rbp)
movq   $0x25a1,-0xb0(%rbp)
mov    -0x88(%rbp),%rax
add    -0x90(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0x98(%rbp)
movq   $0x98e,-0xb0(%rbp)
mov    -0x38(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0x38(%rbp)
movq   $0x41b3,-0xb0(%rbp)
mov    -0x40(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0x40(%rbp)
movq   $0x6254,-0xb0(%rbp)
mov    -0x48(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0x48(%rbp)
movq   $0x300b,-0xb0(%rbp)
mov    -0x50(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0x50(%rbp)
movq   $0xffffffffffffe333,-0xb0(%rbp)
33 e3 ff ff
mov    -0x78(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0x78(%rbp)
movq   $0xffffffffffffadfd,-0xb0(%rbp)
fd ad ff ff
mov    -0x80(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0x80(%rbp)
movq   $0xffffffffffffc13b,-0xb0(%rbp)
3b c1 ff ff
mov    -0x88(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0x88(%rbp)
movq   $0xfffffffffffff384,-0xb0(%rbp)
84 f3 ff ff
mov    -0x90(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0x90(%rbp)
mov    -0x98(%rbp),%rax
add    -0x88(%rbp),%rax
mov    %rax,-0x88(%rbp)
mov    -0x98(%rbp),%rax
add    -0x90(%rbp),%rax
mov    %rax,-0x90(%rbp)
mov    -0x38(%rbp),%rax
add    -0x78(%rbp),%rax
add    -0x88(%rbp),%rax
sar    $0xb,%rax
mov    %ax,%cx
mov    -0xa8(%rbp),%rax
mov    %cx,0xe(%rax)
mov    -0x40(%rbp),%rax
add    -0x80(%rbp),%rax
add    -0x90(%rbp),%rax
sar    $0xb,%rax
mov    %ax,%cx
mov    -0xa8(%rbp),%rax
mov    %cx,0xa(%rax)
mov    -0x48(%rbp),%rax
add    -0x80(%rbp),%rax
add    -0x88(%rbp),%rax
sar    $0xb,%rax
mov    %ax,%cx
mov    -0xa8(%rbp),%rax
mov    %cx,0x6(%rax)
mov    -0x50(%rbp),%rax
add    -0x78(%rbp),%rax
add    -0x90(%rbp),%rax
sar    $0xb,%rax
mov    %ax,%cx
mov    -0xa8(%rbp),%rax
mov    %cx,0x2(%rax)
mov    -0xc(%rbp),%ecx
mov    -0xa8(%rbp),%rax
movslq %ecx,%rcx
shl    $0x1,%rcx
add    %rcx,%rax
mov    %rax,-0xa8(%rbp)
mov    -0x9c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x9c(%rbp)
jmp    1124 <fdct+0x24>
mov    -0x8(%rbp),%rax
mov    %rax,-0xa8(%rbp)
movl   $0x0,-0x9c(%rbp)
cmpl   $0x8,-0x9c(%rbp)
jge    19be <fdct+0x8be>
mov    -0xa8(%rbp),%rax
movswl (%rax),%eax
mov    -0xa8(%rbp),%rcx
imul   $0x7,-0xc(%rbp),%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
cltq
mov    %rax,-0x18(%rbp)
mov    -0xa8(%rbp),%rax
movswl (%rax),%eax
mov    -0xa8(%rbp),%rcx
imul   $0x7,-0xc(%rbp),%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
sub    %ecx,%eax
cltq
mov    %rax,-0x50(%rbp)
mov    -0xa8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
mov    -0xa8(%rbp),%rcx
imul   $0x6,-0xc(%rbp),%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
cltq
mov    %rax,-0x20(%rbp)
mov    -0xa8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
mov    -0xa8(%rbp),%rcx
imul   $0x6,-0xc(%rbp),%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
sub    %ecx,%eax
cltq
mov    %rax,-0x48(%rbp)
mov    -0xa8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    -0xa8(%rbp),%rcx
imul   $0x5,-0xc(%rbp),%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
cltq
mov    %rax,-0x28(%rbp)
mov    -0xa8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    -0xa8(%rbp),%rcx
imul   $0x5,-0xc(%rbp),%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
sub    %ecx,%eax
cltq
mov    %rax,-0x40(%rbp)
mov    -0xa8(%rbp),%rax
imul   $0x3,-0xc(%rbp),%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    -0xa8(%rbp),%rcx
mov    -0xc(%rbp),%edx
shl    $0x2,%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
cltq
mov    %rax,-0x30(%rbp)
mov    -0xa8(%rbp),%rax
imul   $0x3,-0xc(%rbp),%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    -0xa8(%rbp),%rcx
mov    -0xc(%rbp),%edx
shl    $0x2,%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
sub    %ecx,%eax
cltq
mov    %rax,-0x38(%rbp)
mov    -0x18(%rbp),%rax
add    -0x30(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x18(%rbp),%rax
sub    -0x30(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x20(%rbp),%rax
add    -0x28(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x20(%rbp),%rax
sub    -0x28(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0x58(%rbp),%rax
add    -0x60(%rbp),%rax
sar    $0x5,%rax
mov    %ax,%cx
mov    -0xa8(%rbp),%rax
mov    %cx,(%rax)
mov    -0x58(%rbp),%rax
sub    -0x60(%rbp),%rax
sar    $0x5,%rax
mov    %ax,%dx
mov    -0xa8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
movq   $0x1151,-0xb0(%rbp)
mov    -0x68(%rbp),%rax
add    -0x70(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0x78(%rbp)
movq   $0x187e,-0xb0(%rbp)
mov    -0x78(%rbp),%rax
mov    -0x70(%rbp),%rcx
imul   -0xb0(%rbp),%rcx
ff
add    %rcx,%rax
sar    $0x12,%rax
mov    %ax,%dx
mov    -0xa8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
movq   $0xffffffffffffc4df,-0xb0(%rbp)
df c4 ff ff
mov    -0x78(%rbp),%rax
mov    -0x68(%rbp),%rcx
imul   -0xb0(%rbp),%rcx
ff
add    %rcx,%rax
sar    $0x12,%rax
mov    %ax,%dx
mov    -0xa8(%rbp),%rax
imul   $0x6,-0xc(%rbp),%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x38(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    -0x40(%rbp),%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x80(%rbp)
mov    -0x38(%rbp),%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x88(%rbp)
mov    -0x40(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x90(%rbp)
movq   $0x25a1,-0xb0(%rbp)
mov    -0x88(%rbp),%rax
add    -0x90(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0x98(%rbp)
movq   $0x98e,-0xb0(%rbp)
mov    -0x38(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0x38(%rbp)
movq   $0x41b3,-0xb0(%rbp)
mov    -0x40(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0x40(%rbp)
movq   $0x6254,-0xb0(%rbp)
mov    -0x48(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0x48(%rbp)
movq   $0x300b,-0xb0(%rbp)
mov    -0x50(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0x50(%rbp)
movq   $0xffffffffffffe333,-0xb0(%rbp)
33 e3 ff ff
mov    -0x78(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0x78(%rbp)
movq   $0xffffffffffffadfd,-0xb0(%rbp)
fd ad ff ff
mov    -0x80(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0x80(%rbp)
movq   $0xffffffffffffc13b,-0xb0(%rbp)
3b c1 ff ff
mov    -0x88(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0x88(%rbp)
movq   $0xfffffffffffff384,-0xb0(%rbp)
84 f3 ff ff
mov    -0x90(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0x90(%rbp)
mov    -0x98(%rbp),%rax
add    -0x88(%rbp),%rax
mov    %rax,-0x88(%rbp)
mov    -0x98(%rbp),%rax
add    -0x90(%rbp),%rax
mov    %rax,-0x90(%rbp)
mov    -0x38(%rbp),%rax
add    -0x78(%rbp),%rax
add    -0x88(%rbp),%rax
sar    $0x12,%rax
mov    %ax,%dx
mov    -0xa8(%rbp),%rax
imul   $0x7,-0xc(%rbp),%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x40(%rbp),%rax
add    -0x80(%rbp),%rax
add    -0x90(%rbp),%rax
sar    $0x12,%rax
mov    %ax,%dx
mov    -0xa8(%rbp),%rax
imul   $0x5,-0xc(%rbp),%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x48(%rbp),%rax
add    -0x80(%rbp),%rax
add    -0x88(%rbp),%rax
sar    $0x12,%rax
mov    %ax,%dx
mov    -0xa8(%rbp),%rax
imul   $0x3,-0xc(%rbp),%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x50(%rbp),%rax
add    -0x78(%rbp),%rax
add    -0x90(%rbp),%rax
sar    $0x12,%rax
mov    %ax,%dx
mov    -0xa8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0xa8(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0xa8(%rbp)
mov    -0x9c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x9c(%rbp)
jmp    1535 <fdct+0x435>
add    $0x30,%rsp
pop    %rbp
ret

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