void rescale(short const *in, int count, short *out) {
  do {
    int const accuracy = 16;
    int const unit = 1 << accuracy;
    int const step = unit / 8;
    int left = unit - step;
    int right = step;
    int n = 7;
    while (n--) {
      int r = (in[0] * left + in[3] * right) >> accuracy;
      int g = (in[1] * left + in[4] * right) >> accuracy;
      int b = (in[2] * left + in[5] * right) >> accuracy;
      *out++ = r;
      *out++ = g;
      *out++ = b;
      left -= step;
      right += step;
      in += 3;
    }
    in += 3;
  } while ((count -= 7) > 0);
}


x86 assembly (clang, -O0):
<rescale>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
movl   $0x10,-0x1c(%rbp)
movl   $0x10000,-0x20(%rbp)
movl   $0x2000,-0x24(%rbp)
movl   $0xe000,-0x28(%rbp)
movl   $0x2000,-0x2c(%rbp)
movl   $0x7,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x30(%rbp)
cmp    $0x0,%eax
je     121b <rescale+0x11b>
mov    -0x8(%rbp),%rax
movswl (%rax),%eax
imul   -0x28(%rbp),%eax
mov    -0x8(%rbp),%rcx
movswl 0x6(%rcx),%ecx
imul   -0x2c(%rbp),%ecx
add    %ecx,%eax
sar    $0x10,%eax
mov    %eax,-0x34(%rbp)
mov    -0x8(%rbp),%rax
movswl 0x2(%rax),%eax
imul   -0x28(%rbp),%eax
mov    -0x8(%rbp),%rcx
movswl 0x8(%rcx),%ecx
imul   -0x2c(%rbp),%ecx
add    %ecx,%eax
sar    $0x10,%eax
mov    %eax,-0x38(%rbp)
mov    -0x8(%rbp),%rax
movswl 0x4(%rax),%eax
imul   -0x28(%rbp),%eax
mov    -0x8(%rbp),%rcx
movswl 0xa(%rcx),%ecx
imul   -0x2c(%rbp),%ecx
add    %ecx,%eax
sar    $0x10,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x34(%rbp),%eax
mov    %ax,%cx
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cx,(%rax)
mov    -0x38(%rbp),%eax
mov    %ax,%cx
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
mov    %ax,%cx
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cx,(%rax)
mov    -0x28(%rbp),%eax
sub    $0x2000,%eax
mov    %eax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x2000,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
add    $0x6,%rax
mov    %rax,-0x8(%rbp)
jmp    1139 <rescale+0x39>
mov    -0x8(%rbp),%rax
add    $0x6,%rax
mov    %rax,-0x8(%rbp)
mov    -0xc(%rbp),%eax
sub    $0x7,%eax
mov    %eax,-0xc(%rbp)
cmp    $0x0,%eax
jg     110f <rescale+0xf>
pop    %rbp
ret

x86 assembly (clang, -O2):
<rescale>:
add    $0x7,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movswl (%rdi),%eax
movswl 0x6(%rdi),%r10d
imul   $0xe000,%eax,%r8d
shl    $0xd,%r10d
movswl 0x2(%rdi),%eax
imul   $0xe000,%eax,%r9d
add    %r8d,%r10d
movswl 0x8(%rdi),%eax
shl    $0xd,%eax
add    %r9d,%eax
shr    $0x10,%r10d
movswl 0x4(%rdi),%ecx
imul   $0xe000,%ecx,%r8d
movswl 0xa(%rdi),%ecx
shr    $0x10,%eax
shl    $0xd,%ecx
add    %r8d,%ecx
shr    $0x10,%ecx
mov    %r10w,(%rdx)
mov    %ax,0x2(%rdx)
mov    %cx,0x4(%rdx)
movswl 0x6(%rdi),%eax
lea    (%rax,%rax,2),%r9d
movswl 0xc(%rdi),%r10d
shl    $0xe,%r10d
movswl 0x8(%rdi),%r8d
shl    $0xe,%r9d
lea    (%r8,%r8,2),%r8d
shl    $0xe,%r8d
movswl 0xe(%rdi),%ecx
add    %r9d,%r10d
shl    $0xe,%ecx
add    %r8d,%ecx
movswl 0xa(%rdi),%r8d
shr    $0x10,%r10d
lea    (%r8,%r8,2),%r8d
shl    $0xe,%r8d
movswl 0x10(%rdi),%eax
shr    $0x10,%ecx
shl    $0xe,%eax
add    %r8d,%eax
shr    $0x10,%eax
mov    %r10w,0x6(%rdx)
mov    %cx,0x8(%rdx)
mov    %ax,0xa(%rdx)
movswl 0xc(%rdi),%eax
lea    (%rax,%rax,4),%r8d
shl    $0xd,%r8d
movswl 0x12(%rdi),%eax
lea    (%rax,%rax,2),%r10d
shl    $0xd,%r10d
movswl 0xe(%rdi),%ecx
lea    (%rcx,%rcx,4),%r9d
shl    $0xd,%r9d
add    %r8d,%r10d
movswl 0x14(%rdi),%ecx
lea    (%rcx,%rcx,2),%ecx
shl    $0xd,%ecx
add    %r9d,%ecx
movswl 0x10(%rdi),%eax
lea    (%rax,%rax,4),%r8d
shl    $0xd,%r8d
shr    $0x10,%r10d
movswl 0x16(%rdi),%eax
lea    (%rax,%rax,2),%eax
shl    $0xd,%eax
shr    $0x10,%ecx
add    %r8d,%eax
shr    $0x10,%eax
mov    %r10w,0xc(%rdx)
mov    %cx,0xe(%rdx)
mov    %ax,0x10(%rdx)
movswl 0x12(%rdi),%eax
movswl 0x18(%rdi),%r9d
add    %eax,%r9d
movswl 0x14(%rdi),%r8d
movswl 0x1a(%rdi),%eax
add    %r8d,%eax
shr    %r9d
movswl 0x16(%rdi),%r8d
movswl 0x1c(%rdi),%ecx
add    %r8d,%ecx
shr    %eax
shr    %ecx
mov    %r9w,0x12(%rdx)
mov    %ax,0x14(%rdx)
mov    %cx,0x16(%rdx)
movswl 0x18(%rdi),%eax
lea    (%rax,%rax,2),%r8d
movswl 0x1e(%rdi),%eax
shl    $0xd,%r8d
lea    (%rax,%rax,4),%r10d
movswl 0x1a(%rdi),%ecx
lea    (%rcx,%rcx,2),%r9d
shl    $0xd,%r10d
shl    $0xd,%r9d
movswl 0x20(%rdi),%ecx
lea    (%rcx,%rcx,4),%ecx
add    %r8d,%r10d
shl    $0xd,%ecx
add    %r9d,%ecx
movswl 0x1c(%rdi),%r8d
shr    $0x10,%r10d
lea    (%r8,%r8,2),%r8d
shl    $0xd,%r8d
movswl 0x22(%rdi),%r9d
shr    $0x10,%ecx
lea    (%r9,%r9,4),%eax
shl    $0xd,%eax
add    %r8d,%eax
shr    $0x10,%eax
mov    %r10w,0x18(%rdx)
mov    %cx,0x1a(%rdx)
mov    %ax,0x1c(%rdx)
movswl 0x1e(%rdi),%r8d
shl    $0xe,%r8d
movswl 0x24(%rdi),%eax
lea    (%rax,%rax,2),%r11d
shl    $0xe,%r11d
movswl 0x20(%rdi),%r10d
shl    $0xe,%r10d
movswl 0x26(%rdi),%r9d
add    %r8d,%r11d
lea    (%r9,%r9,2),%ecx
shl    $0xe,%ecx
add    %r10d,%ecx
shr    $0x10,%r11d
movswl 0x22(%rdi),%r8d
shl    $0xe,%r8d
movswl 0x28(%rdi),%r9d
shr    $0x10,%ecx
lea    (%r9,%r9,2),%eax
shl    $0xe,%eax
add    %r8d,%eax
shr    $0x10,%eax
mov    %r11w,0x1e(%rdx)
mov    %cx,0x20(%rdx)
mov    %ax,0x22(%rdx)
movswl 0x24(%rdi),%r9d
shl    $0xd,%r9d
movswl 0x2a(%rdi),%r8d
movswl 0x26(%rdi),%r10d
imul   $0xe000,%r8d,%r11d
shl    $0xd,%r10d
movswl 0x2c(%rdi),%ecx
imul   $0xe000,%ecx,%ecx
add    %r9d,%r11d
add    %r10d,%ecx
movswl 0x28(%rdi),%r8d
shl    $0xd,%r8d
shr    $0x10,%r11d
movswl 0x2e(%rdi),%eax
imul   $0xe000,%eax,%eax
add    %r8d,%eax
shr    $0x10,%ecx
shr    $0x10,%eax
mov    %r11w,0x24(%rdx)
mov    %cx,0x26(%rdx)
mov    %ax,0x28(%rdx)
add    $0xfffffff9,%esi
add    $0x30,%rdi
add    $0x2a,%rdx
cmp    $0x7,%esi
jg     1110 <rescale+0x10>
ret

LLVM IR (-O0):
define void @rescale(i16* %0, i32 %1, i16* %2) {
%4 = alloca i16*
%5 = alloca i32
%6 = alloca i16*
%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
store i16* %0, i16** %4
store i32 %1, i32* %5
store i16* %2, i16** %6
br label %16
16: ; preds = %85, %3
store i32 16, i32* %7
store i32 65536, i32* %8
store i32 8192, i32* %9
store i32 57344, i32* %10
store i32 8192, i32* %11
store i32 7, i32* %12
br label %17
17: ; preds = %21, %16
%18 = load i32, i32* %12
%19 = add nsw i32 %18, -1
store i32 %19, i32* %12
%20 = icmp ne i32 %18, 0
br i1 %20, label %21, label %82
21: ; preds = %17
%22 = load i16*, i16** %4
%23 = getelementptr inbounds i16, i16* %22, i64 0
%24 = load i16, i16* %23
%25 = sext i16 %24 to i32
%26 = load i32, i32* %10
%27 = mul nsw i32 %25, %26
%28 = load i16*, i16** %4
%29 = getelementptr inbounds i16, i16* %28, i64 3
%30 = load i16, i16* %29
%31 = sext i16 %30 to i32
%32 = load i32, i32* %11
%33 = mul nsw i32 %31, %32
%34 = add nsw i32 %27, %33
%35 = ashr i32 %34, 16
store i32 %35, i32* %13
%36 = load i16*, i16** %4
%37 = getelementptr inbounds i16, i16* %36, i64 1
%38 = load i16, i16* %37
%39 = sext i16 %38 to i32
%40 = load i32, i32* %10
%41 = mul nsw i32 %39, %40
%42 = load i16*, i16** %4
%43 = getelementptr inbounds i16, i16* %42, i64 4
%44 = load i16, i16* %43
%45 = sext i16 %44 to i32
%46 = load i32, i32* %11
%47 = mul nsw i32 %45, %46
%48 = add nsw i32 %41, %47
%49 = ashr i32 %48, 16
store i32 %49, i32* %14
%50 = load i16*, i16** %4
%51 = getelementptr inbounds i16, i16* %50, i64 2
%52 = load i16, i16* %51
%53 = sext i16 %52 to i32
%54 = load i32, i32* %10
%55 = mul nsw i32 %53, %54
%56 = load i16*, i16** %4
%57 = getelementptr inbounds i16, i16* %56, i64 5
%58 = load i16, i16* %57
%59 = sext i16 %58 to i32
%60 = load i32, i32* %11
%61 = mul nsw i32 %59, %60
%62 = add nsw i32 %55, %61
%63 = ashr i32 %62, 16
store i32 %63, i32* %15
%64 = load i32, i32* %13
%65 = trunc i32 %64 to i16
%66 = load i16*, i16** %6
%67 = getelementptr inbounds i16, i16* %66, i32 1
store i16* %67, i16** %6
store i16 %65, i16* %66
%68 = load i32, i32* %14
%69 = trunc i32 %68 to i16
%70 = load i16*, i16** %6
%71 = getelementptr inbounds i16, i16* %70, i32 1
store i16* %71, i16** %6
store i16 %69, i16* %70
%72 = load i32, i32* %15
%73 = trunc i32 %72 to i16
%74 = load i16*, i16** %6
%75 = getelementptr inbounds i16, i16* %74, i32 1
store i16* %75, i16** %6
store i16 %73, i16* %74
%76 = load i32, i32* %10
%77 = sub nsw i32 %76, 8192
store i32 %77, i32* %10
%78 = load i32, i32* %11
%79 = add nsw i32 %78, 8192
store i32 %79, i32* %11
%80 = load i16*, i16** %4
%81 = getelementptr inbounds i16, i16* %80, i64 3
store i16* %81, i16** %4
br label %17
82: ; preds = %17
%83 = load i16*, i16** %4
%84 = getelementptr inbounds i16, i16* %83, i64 3
store i16* %84, i16** %4
br label %85
85: ; preds = %82
%86 = load i32, i32* %5
%87 = sub nsw i32 %86, 7
store i32 %87, i32* %5
%88 = icmp sgt i32 %87, 0
br i1 %88, label %16, label %89
89: ; preds = %85
ret void
}

LLVM IR (-O2):
define void @rescale(i16* nocapture %0, i32 %1, i16* nocapture writeonly %2) {
br label %4
4: ; preds = %4, %3
%5 = phi i16* [ %2, %3 ], [ %246, %4 ]
%6 = phi i32 [ %1, %3 ], [ %248, %4 ]
%7 = phi i16* [ %0, %3 ], [ %247, %4 ]
%8 = load i16, i16* %7
%9 = sext i16 %8 to i32
%10 = mul nsw i32 %9, 57344
%11 = getelementptr inbounds i16, i16* %7, i64 3
%12 = load i16, i16* %11
%13 = sext i16 %12 to i32
%14 = shl nsw i32 %13, 13
%15 = add nsw i32 %14, %10
%16 = lshr i32 %15, 16
%17 = getelementptr inbounds i16, i16* %7, i64 1
%18 = load i16, i16* %17
%19 = sext i16 %18 to i32
%20 = mul nsw i32 %19, 57344
%21 = getelementptr inbounds i16, i16* %7, i64 4
%22 = load i16, i16* %21
%23 = sext i16 %22 to i32
%24 = shl nsw i32 %23, 13
%25 = add nsw i32 %24, %20
%26 = lshr i32 %25, 16
%27 = getelementptr inbounds i16, i16* %7, i64 2
%28 = load i16, i16* %27
%29 = sext i16 %28 to i32
%30 = mul nsw i32 %29, 57344
%31 = getelementptr inbounds i16, i16* %7, i64 5
%32 = load i16, i16* %31
%33 = sext i16 %32 to i32
%34 = shl nsw i32 %33, 13
%35 = add nsw i32 %34, %30
%36 = lshr i32 %35, 16
%37 = trunc i32 %16 to i16
%38 = getelementptr inbounds i16, i16* %5, i64 1
store i16 %37, i16* %5
%39 = trunc i32 %26 to i16
%40 = getelementptr inbounds i16, i16* %5, i64 2
store i16 %39, i16* %38
%41 = trunc i32 %36 to i16
%42 = getelementptr inbounds i16, i16* %5, i64 3
store i16 %41, i16* %40
%43 = load i16, i16* %11
%44 = sext i16 %43 to i32
%45 = mul nsw i32 %44, 49152
%46 = getelementptr inbounds i16, i16* %7, i64 6
%47 = load i16, i16* %46
%48 = sext i16 %47 to i32
%49 = shl nsw i32 %48, 14
%50 = add nsw i32 %49, %45
%51 = lshr i32 %50, 16
%52 = getelementptr inbounds i16, i16* %7, i64 4
%53 = load i16, i16* %52
%54 = sext i16 %53 to i32
%55 = mul nsw i32 %54, 49152
%56 = getelementptr inbounds i16, i16* %7, i64 7
%57 = load i16, i16* %56
%58 = sext i16 %57 to i32
%59 = shl nsw i32 %58, 14
%60 = add nsw i32 %59, %55
%61 = lshr i32 %60, 16
%62 = getelementptr inbounds i16, i16* %7, i64 5
%63 = load i16, i16* %62
%64 = sext i16 %63 to i32
%65 = mul nsw i32 %64, 49152
%66 = getelementptr inbounds i16, i16* %7, i64 8
%67 = load i16, i16* %66
%68 = sext i16 %67 to i32
%69 = shl nsw i32 %68, 14
%70 = add nsw i32 %69, %65
%71 = lshr i32 %70, 16
%72 = trunc i32 %51 to i16
%73 = getelementptr inbounds i16, i16* %5, i64 4
store i16 %72, i16* %42
%74 = trunc i32 %61 to i16
%75 = getelementptr inbounds i16, i16* %5, i64 5
store i16 %74, i16* %73
%76 = trunc i32 %71 to i16
%77 = getelementptr inbounds i16, i16* %5, i64 6
store i16 %76, i16* %75
%78 = load i16, i16* %46
%79 = sext i16 %78 to i32
%80 = mul nsw i32 %79, 40960
%81 = getelementptr inbounds i16, i16* %7, i64 9
%82 = load i16, i16* %81
%83 = sext i16 %82 to i32
%84 = mul nsw i32 %83, 24576
%85 = add nsw i32 %84, %80
%86 = lshr i32 %85, 16
%87 = getelementptr inbounds i16, i16* %7, i64 7
%88 = load i16, i16* %87
%89 = sext i16 %88 to i32
%90 = mul nsw i32 %89, 40960
%91 = getelementptr inbounds i16, i16* %7, i64 10
%92 = load i16, i16* %91
%93 = sext i16 %92 to i32
%94 = mul nsw i32 %93, 24576
%95 = add nsw i32 %94, %90
%96 = lshr i32 %95, 16
%97 = getelementptr inbounds i16, i16* %7, i64 8
%98 = load i16, i16* %97
%99 = sext i16 %98 to i32
%100 = mul nsw i32 %99, 40960
%101 = getelementptr inbounds i16, i16* %7, i64 11
%102 = load i16, i16* %101
%103 = sext i16 %102 to i32
%104 = mul nsw i32 %103, 24576
%105 = add nsw i32 %104, %100
%106 = lshr i32 %105, 16
%107 = trunc i32 %86 to i16
%108 = getelementptr inbounds i16, i16* %5, i64 7
store i16 %107, i16* %77
%109 = trunc i32 %96 to i16
%110 = getelementptr inbounds i16, i16* %5, i64 8
store i16 %109, i16* %108
%111 = trunc i32 %106 to i16
%112 = getelementptr inbounds i16, i16* %5, i64 9
store i16 %111, i16* %110
%113 = load i16, i16* %81
%114 = sext i16 %113 to i32
%115 = getelementptr inbounds i16, i16* %7, i64 12
%116 = load i16, i16* %115
%117 = sext i16 %116 to i32
%118 = add nsw i32 %117, %114
%119 = lshr i32 %118, 1
%120 = getelementptr inbounds i16, i16* %7, i64 10
%121 = load i16, i16* %120
%122 = sext i16 %121 to i32
%123 = getelementptr inbounds i16, i16* %7, i64 13
%124 = load i16, i16* %123
%125 = sext i16 %124 to i32
%126 = add nsw i32 %125, %122
%127 = lshr i32 %126, 1
%128 = getelementptr inbounds i16, i16* %7, i64 11
%129 = load i16, i16* %128
%130 = sext i16 %129 to i32
%131 = getelementptr inbounds i16, i16* %7, i64 14
%132 = load i16, i16* %131
%133 = sext i16 %132 to i32
%134 = add nsw i32 %133, %130
%135 = lshr i32 %134, 1
%136 = trunc i32 %119 to i16
%137 = getelementptr inbounds i16, i16* %5, i64 10
store i16 %136, i16* %112
%138 = trunc i32 %127 to i16
%139 = getelementptr inbounds i16, i16* %5, i64 11
store i16 %138, i16* %137
%140 = trunc i32 %135 to i16
%141 = getelementptr inbounds i16, i16* %5, i64 12
store i16 %140, i16* %139
%142 = load i16, i16* %115
%143 = sext i16 %142 to i32
%144 = mul nsw i32 %143, 24576
%145 = getelementptr inbounds i16, i16* %7, i64 15
%146 = load i16, i16* %145
%147 = sext i16 %146 to i32
%148 = mul nsw i32 %147, 40960
%149 = add nsw i32 %148, %144
%150 = lshr i32 %149, 16
%151 = getelementptr inbounds i16, i16* %7, i64 13
%152 = load i16, i16* %151
%153 = sext i16 %152 to i32
%154 = mul nsw i32 %153, 24576
%155 = getelementptr inbounds i16, i16* %7, i64 16
%156 = load i16, i16* %155
%157 = sext i16 %156 to i32
%158 = mul nsw i32 %157, 40960
%159 = add nsw i32 %158, %154
%160 = lshr i32 %159, 16
%161 = getelementptr inbounds i16, i16* %7, i64 14
%162 = load i16, i16* %161
%163 = sext i16 %162 to i32
%164 = mul nsw i32 %163, 24576
%165 = getelementptr inbounds i16, i16* %7, i64 17
%166 = load i16, i16* %165
%167 = sext i16 %166 to i32
%168 = mul nsw i32 %167, 40960
%169 = add nsw i32 %168, %164
%170 = lshr i32 %169, 16
%171 = trunc i32 %150 to i16
%172 = getelementptr inbounds i16, i16* %5, i64 13
store i16 %171, i16* %141
%173 = trunc i32 %160 to i16
%174 = getelementptr inbounds i16, i16* %5, i64 14
store i16 %173, i16* %172
%175 = trunc i32 %170 to i16
%176 = getelementptr inbounds i16, i16* %5, i64 15
store i16 %175, i16* %174
%177 = load i16, i16* %145
%178 = sext i16 %177 to i32
%179 = shl nsw i32 %178, 14
%180 = getelementptr inbounds i16, i16* %7, i64 18
%181 = load i16, i16* %180
%182 = sext i16 %181 to i32
%183 = mul nsw i32 %182, 49152
%184 = add nsw i32 %183, %179
%185 = lshr i32 %184, 16
%186 = getelementptr inbounds i16, i16* %7, i64 16
%187 = load i16, i16* %186
%188 = sext i16 %187 to i32
%189 = shl nsw i32 %188, 14
%190 = getelementptr inbounds i16, i16* %7, i64 19
%191 = load i16, i16* %190
%192 = sext i16 %191 to i32
%193 = mul nsw i32 %192, 49152
%194 = add nsw i32 %193, %189
%195 = lshr i32 %194, 16
%196 = getelementptr inbounds i16, i16* %7, i64 17
%197 = load i16, i16* %196
%198 = sext i16 %197 to i32
%199 = shl nsw i32 %198, 14
%200 = getelementptr inbounds i16, i16* %7, i64 20
%201 = load i16, i16* %200
%202 = sext i16 %201 to i32
%203 = mul nsw i32 %202, 49152
%204 = add nsw i32 %203, %199
%205 = lshr i32 %204, 16
%206 = trunc i32 %185 to i16
%207 = getelementptr inbounds i16, i16* %5, i64 16
store i16 %206, i16* %176
%208 = trunc i32 %195 to i16
%209 = getelementptr inbounds i16, i16* %5, i64 17
store i16 %208, i16* %207
%210 = trunc i32 %205 to i16
%211 = getelementptr inbounds i16, i16* %5, i64 18
store i16 %210, i16* %209
%212 = load i16, i16* %180
%213 = sext i16 %212 to i32
%214 = shl nsw i32 %213, 13
%215 = getelementptr inbounds i16, i16* %7, i64 21
%216 = load i16, i16* %215
%217 = sext i16 %216 to i32
%218 = mul nsw i32 %217, 57344
%219 = add nsw i32 %218, %214
%220 = lshr i32 %219, 16
%221 = getelementptr inbounds i16, i16* %7, i64 19
%222 = load i16, i16* %221
%223 = sext i16 %222 to i32
%224 = shl nsw i32 %223, 13
%225 = getelementptr inbounds i16, i16* %7, i64 22
%226 = load i16, i16* %225
%227 = sext i16 %226 to i32
%228 = mul nsw i32 %227, 57344
%229 = add nsw i32 %228, %224
%230 = lshr i32 %229, 16
%231 = getelementptr inbounds i16, i16* %7, i64 20
%232 = load i16, i16* %231
%233 = sext i16 %232 to i32
%234 = shl nsw i32 %233, 13
%235 = getelementptr inbounds i16, i16* %7, i64 23
%236 = load i16, i16* %235
%237 = sext i16 %236 to i32
%238 = mul nsw i32 %237, 57344
%239 = add nsw i32 %238, %234
%240 = lshr i32 %239, 16
%241 = trunc i32 %220 to i16
%242 = getelementptr inbounds i16, i16* %5, i64 19
store i16 %241, i16* %211
%243 = trunc i32 %230 to i16
%244 = getelementptr inbounds i16, i16* %5, i64 20
store i16 %243, i16* %242
%245 = trunc i32 %240 to i16
%246 = getelementptr inbounds i16, i16* %5, i64 21
store i16 %245, i16* %244
%247 = getelementptr inbounds i16, i16* %7, i64 24
%248 = add nsw i32 %6, -7
%249 = icmp sgt i32 %6, 7
br i1 %249, label %4, label %250
250: ; preds = %4
ret void
}