void PDJPG_TransIDCT_Horiz(short *iblk, int *oblk) {
  int a, b, c, d, e, f;
  int i, j, k, l;
  int m, n, o, p;
  a = iblk[0] * 91;
  b = iblk[4] * 91;
  c = iblk[2] * 118;
  d = iblk[2] * 49;
  e = iblk[6] * 118;
  f = iblk[6] * 49;
  i = a + c + b + f;
  j = a + d - b - e;
  k = a - d - b + e;
  l = a - c + b - f;
  m = iblk[1] * 126 + iblk[3] * 106 + iblk[5] * 71 + iblk[7] * 25;
  n = iblk[1] * 106 - iblk[3] * 25 - iblk[5] * 126 - iblk[7] * 71;
  o = iblk[1] * 71 - iblk[3] * 126 + iblk[5] * 25 + iblk[7] * 106;
  p = iblk[1] * 25 - iblk[3] * 71 + iblk[5] * 106 - iblk[7] * 126;
  oblk[0] = i + m;
  oblk[1] = j + n;
  oblk[2] = k + o;
  oblk[3] = l + p;
  oblk[4] = l - p;
  oblk[5] = k - o;
  oblk[6] = j - n;
  oblk[7] = i - m;
}


x86 assembly (clang, -O0):
<PDJPG_TransIDCT_Horiz>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movswl (%rax),%eax
imul   $0x5b,%eax,%eax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rax
movswl 0x8(%rax),%eax
imul   $0x5b,%eax,%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movswl 0x4(%rax),%eax
imul   $0x76,%eax,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
movswl 0x4(%rax),%eax
imul   $0x31,%eax,%eax
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
movswl 0xc(%rax),%eax
imul   $0x76,%eax,%eax
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%rax
movswl 0xc(%rax),%eax
imul   $0x31,%eax,%eax
mov    %eax,-0x28(%rbp)
mov    -0x14(%rbp),%eax
add    -0x1c(%rbp),%eax
add    -0x18(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x14(%rbp),%eax
add    -0x20(%rbp),%eax
sub    -0x18(%rbp),%eax
sub    -0x24(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x20(%rbp),%eax
sub    -0x18(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x1c(%rbp),%eax
add    -0x18(%rbp),%eax
sub    -0x28(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x8(%rbp),%rax
movswl 0x2(%rax),%eax
imul   $0x7e,%eax,%eax
mov    -0x8(%rbp),%rcx
movswl 0x6(%rcx),%ecx
imul   $0x6a,%ecx,%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
movswl 0xa(%rcx),%ecx
imul   $0x47,%ecx,%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
movswl 0xe(%rcx),%ecx
imul   $0x19,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x8(%rbp),%rax
movswl 0x2(%rax),%eax
imul   $0x6a,%eax,%eax
mov    -0x8(%rbp),%rcx
movswl 0x6(%rcx),%ecx
imul   $0x19,%ecx,%ecx
sub    %ecx,%eax
mov    -0x8(%rbp),%rcx
movswl 0xa(%rcx),%ecx
imul   $0x7e,%ecx,%ecx
sub    %ecx,%eax
mov    -0x8(%rbp),%rcx
movswl 0xe(%rcx),%ecx
imul   $0x47,%ecx,%ecx
sub    %ecx,%eax
mov    %eax,-0x40(%rbp)
mov    -0x8(%rbp),%rax
movswl 0x2(%rax),%eax
imul   $0x47,%eax,%eax
mov    -0x8(%rbp),%rcx
movswl 0x6(%rcx),%ecx
imul   $0x7e,%ecx,%ecx
sub    %ecx,%eax
mov    -0x8(%rbp),%rcx
movswl 0xa(%rcx),%ecx
imul   $0x19,%ecx,%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
movswl 0xe(%rcx),%ecx
imul   $0x6a,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x44(%rbp)
mov    -0x8(%rbp),%rax
movswl 0x2(%rax),%eax
imul   $0x19,%eax,%eax
mov    -0x8(%rbp),%rcx
movswl 0x6(%rcx),%ecx
imul   $0x47,%ecx,%ecx
sub    %ecx,%eax
mov    -0x8(%rbp),%rcx
movswl 0xa(%rcx),%ecx
imul   $0x6a,%ecx,%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
movswl 0xe(%rcx),%ecx
imul   $0x7e,%ecx,%ecx
sub    %ecx,%eax
mov    %eax,-0x48(%rbp)
mov    -0x2c(%rbp),%ecx
add    -0x3c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x30(%rbp),%ecx
add    -0x40(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x34(%rbp),%ecx
add    -0x44(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x8(%rax)
mov    -0x38(%rbp),%ecx
add    -0x48(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0xc(%rax)
mov    -0x38(%rbp),%ecx
sub    -0x48(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x10(%rax)
mov    -0x34(%rbp),%ecx
sub    -0x44(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x14(%rax)
mov    -0x30(%rbp),%ecx
sub    -0x40(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x18(%rax)
mov    -0x2c(%rbp),%ecx
sub    -0x3c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x1c(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<PDJPG_TransIDCT_Horiz>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
movswl (%rdi),%eax
imul   $0x5b,%eax,%eax
movswl 0x8(%rdi),%ecx
imul   $0x5b,%ecx,%ecx
movswl 0x4(%rdi),%edx
imul   $0x76,%edx,%ebp
imul   $0x31,%edx,%edx
movswl 0xc(%rdi),%ebx
imul   $0x76,%ebx,%r9d
imul   $0x31,%ebx,%r14d
lea    (%rcx,%rax,1),%r11d
lea    (%r11,%rbp,1),%r8d
add    %r14d,%r8d
lea    (%rax,%rdx,1),%r10d
sub    %ecx,%r10d
sub    %r9d,%r10d
add    %edx,%ecx
sub    %ecx,%eax
add    %r9d,%eax
add    %r14d,%ebp
sub    %ebp,%r11d
movswl 0x2(%rdi),%ecx
mov    %ecx,%edx
shl    $0x7,%edx
sub    %ecx,%edx
sub    %ecx,%edx
movswl 0x6(%rdi),%r15d
imul   $0x6a,%r15d,%ebp
add    %edx,%ebp
movswl 0xa(%rdi),%r12d
imul   $0x47,%r12d,%edx
add    %ebp,%edx
movswl 0xe(%rdi),%edi
lea    (%rdi,%rdi,4),%ebp
lea    0x0(%rbp,%rbp,4),%r9d
add    %edx,%r9d
imul   $0x6a,%ecx,%edx
imul   $0xffffffe7,%r15d,%ebp
add    %edx,%ebp
imul   $0xffffff82,%r12d,%edx
add    %ebp,%edx
imul   $0xffffffb9,%edi,%r14d
add    %edx,%r14d
imul   $0x47,%ecx,%edx
imul   $0xffffff82,%r15d,%ebp
add    %edx,%ebp
lea    (%r12,%r12,4),%edx
lea    (%rdx,%rdx,4),%ebx
add    %ebp,%ebx
imul   $0x6a,%edi,%edx
add    %ebx,%edx
lea    (%rcx,%rcx,4),%ecx
lea    (%rcx,%rcx,4),%ecx
imul   $0xffffffb9,%r15d,%ebx
add    %ecx,%ebx
imul   $0x6a,%r12d,%ecx
add    %ebx,%ecx
imul   $0xffffff82,%edi,%edi
add    %ecx,%edi
lea    (%r9,%r8,1),%ecx
mov    %ecx,(%rsi)
lea    (%r14,%r10,1),%ecx
mov    %ecx,0x4(%rsi)
lea    (%rdx,%rax,1),%ecx
mov    %ecx,0x8(%rsi)
lea    (%rdi,%r11,1),%ecx
mov    %ecx,0xc(%rsi)
sub    %edi,%r11d
mov    %r11d,0x10(%rsi)
sub    %edx,%eax
mov    %eax,0x14(%rsi)
sub    %r14d,%r10d
mov    %r10d,0x18(%rsi)
sub    %r9d,%r8d
mov    %r8d,0x1c(%rsi)
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @PDJPG_TransIDCT_Horiz(i16* nocapture %0, i32* nocapture writeonly %1) {
%3 = load i16, i16* %0
%4 = sext i16 %3 to i32
%5 = mul nsw i32 %4, 91
%6 = getelementptr inbounds i16, i16* %0, i64 4
%7 = load i16, i16* %6
%8 = sext i16 %7 to i32
%9 = mul nsw i32 %8, 91
%10 = getelementptr inbounds i16, i16* %0, i64 2
%11 = load i16, i16* %10
%12 = sext i16 %11 to i32
%13 = mul nsw i32 %12, 118
%14 = mul nsw i32 %12, 49
%15 = getelementptr inbounds i16, i16* %0, i64 6
%16 = load i16, i16* %15
%17 = sext i16 %16 to i32
%18 = mul nsw i32 %17, 118
%19 = mul nsw i32 %17, 49
%20 = add nsw i32 %9, %5
%21 = add nsw i32 %20, %13
%22 = add nsw i32 %21, %19
%23 = add nsw i32 %5, %14
%24 = add nsw i32 %9, %18
%25 = sub nsw i32 %23, %24
%26 = add nsw i32 %9, %14
%27 = sub nsw i32 %5, %26
%28 = add nsw i32 %27, %18
%29 = add nsw i32 %13, %19
%30 = sub nsw i32 %20, %29
%31 = getelementptr inbounds i16, i16* %0, i64 1
%32 = load i16, i16* %31
%33 = sext i16 %32 to i32
%34 = mul nsw i32 %33, 126
%35 = getelementptr inbounds i16, i16* %0, i64 3
%36 = load i16, i16* %35
%37 = sext i16 %36 to i32
%38 = mul nsw i32 %37, 106
%39 = add nsw i32 %38, %34
%40 = getelementptr inbounds i16, i16* %0, i64 5
%41 = load i16, i16* %40
%42 = sext i16 %41 to i32
%43 = mul nsw i32 %42, 71
%44 = add nsw i32 %39, %43
%45 = getelementptr inbounds i16, i16* %0, i64 7
%46 = load i16, i16* %45
%47 = sext i16 %46 to i32
%48 = mul nsw i32 %47, 25
%49 = add nsw i32 %44, %48
%50 = mul nsw i32 %33, 106
%51 = mul nsw i32 %37, -25
%52 = add nsw i32 %51, %50
%53 = mul nsw i32 %42, -126
%54 = add nsw i32 %52, %53
%55 = mul nsw i32 %47, -71
%56 = add nsw i32 %54, %55
%57 = mul nsw i32 %33, 71
%58 = mul nsw i32 %37, -126
%59 = add nsw i32 %58, %57
%60 = mul nsw i32 %42, 25
%61 = add nsw i32 %59, %60
%62 = mul nsw i32 %47, 106
%63 = add nsw i32 %61, %62
%64 = mul nsw i32 %33, 25
%65 = mul nsw i32 %37, -71
%66 = add nsw i32 %65, %64
%67 = mul nsw i32 %42, 106
%68 = add nsw i32 %66, %67
%69 = mul nsw i32 %47, -126
%70 = add nsw i32 %68, %69
%71 = add nsw i32 %49, %22
store i32 %71, i32* %1
%72 = add nsw i32 %56, %25
%73 = getelementptr inbounds i32, i32* %1, i64 1
store i32 %72, i32* %73
%74 = add nsw i32 %63, %28
%75 = getelementptr inbounds i32, i32* %1, i64 2
store i32 %74, i32* %75
%76 = add nsw i32 %70, %30
%77 = getelementptr inbounds i32, i32* %1, i64 3
store i32 %76, i32* %77
%78 = sub nsw i32 %30, %70
%79 = getelementptr inbounds i32, i32* %1, i64 4
store i32 %78, i32* %79
%80 = sub nsw i32 %28, %63
%81 = getelementptr inbounds i32, i32* %1, i64 5
store i32 %80, i32* %81
%82 = sub nsw i32 %25, %56
%83 = getelementptr inbounds i32, i32* %1, i64 6
store i32 %82, i32* %83
%84 = sub nsw i32 %22, %49
%85 = getelementptr inbounds i32, i32* %1, i64 7
store i32 %84, i32* %85
ret void
}