void scale_volume_image_box(unsigned char *dst, int dw, int dh, int dd,
                            unsigned char *src, int sw, int sh, int sd, int bpp,
                            int gc, float gamma) {
  int n, x, y, z, v;
  int ix, iy, iz;
  unsigned char *s1, *s2, *d = dst;
  float invgamma;
  if (gc) {
    invgamma = 1.0 / gamma;
    for (z = 0; z < dd; ++z) {
      iz = ((z * sd + sd / 2) / dd) - 1;
      if (iz < 0)
        iz = 0;
      for (y = 0; y < dh; ++y) {
        iy = ((y * sh + sh / 2) / dh) - 1;
        if (iy < 0)
          iy = 0;
        for (x = 0; x < dw; ++x) {
          ix = ((x * sw + sw / 2) / dw) - 1;
          if (ix < 0)
            ix = 0;
          s1 = src + ((iz * (sw * sh)) + (iy * sw) + ix) * bpp;
          if (iz < dd - 1)
            s2 = src + (((iz + 1) * (sw * sh)) + (iy * sw) + ix) * bpp;
          else
            s2 = src;
          for (n = 0; n < bpp; ++n) {
            v = (gamma_correct(s1[0], gamma) + gamma_correct(s2[0], gamma) +
                 gamma_correct(s1[bpp], gamma) + gamma_correct(s2[bpp], gamma) +
                 gamma_correct(s1[sw * bpp], gamma) +
                 gamma_correct(s2[sw * bpp], gamma) +
                 gamma_correct(s1[(sw + 1) * bpp], gamma) +
                 gamma_correct(s2[(sw + 1) * bpp], gamma)) >>
                3;
            *d++ = gamma_correct(v, invgamma);
            ++s1;
            ++s2;
          }
        }
      }
    }
  } else {
    for (z = 0; z < dd; ++z) {
      iz = ((z * sd + sd / 2) / dd) - 1;
      if (iz < 0)
        iz = 0;
      for (y = 0; y < dh; ++y) {
        iy = ((y * sh + sh / 2) / dh) - 1;
        if (iy < 0)
          iy = 0;
        for (x = 0; x < dw; ++x) {
          ix = ((x * sw + sw / 2) / dw) - 1;
          if (ix < 0)
            ix = 0;
          s1 = src + ((iz * (sw * sh)) + (iy * sw) + ix) * bpp;
          if (iz < dd - 1)
            s2 = src + (((iz + 1) * (sw * sh)) + (iy * sw) + ix) * bpp;
          else
            s2 = src;
          for (n = 0; n < bpp; ++n) {
            v = ((s1[0] + s1[bpp] + s1[sw * bpp] + s1[(sw + 1) * bpp]) +
                 (s2[0] + s2[bpp] + s2[sw * bpp] + s2[(sw + 1) * bpp])) >>
                3;
            *d++ = v;
            ++s1;
            ++s2;
          }
        }
      }
    }
  }
}


x86 assembly (clang, -O0):
<scale_volume_image_box>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9d,-0x24(%rbp)
movss  %xmm0,-0x28(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x60(%rbp)
cmpl   $0x0,0x28(%rbp)
je     14b5 <scale_volume_image_box+0x3a5>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe9c(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x64(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    14b0 <scale_volume_image_box+0x3a0>
mov    -0x38(%rbp),%eax
imul   0x18(%rbp),%eax
mov    %eax,-0x68(%rbp)
mov    0x18(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x68(%rbp),%eax
add    %ecx,%eax
cltd
idivl  -0x14(%rbp)
sub    $0x1,%eax
mov    %eax,-0x48(%rbp)
cmpl   $0x0,-0x48(%rbp)
jge    11bb <scale_volume_image_box+0xab>
movl   $0x0,-0x48(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    149d <scale_volume_image_box+0x38d>
mov    -0x34(%rbp),%eax
imul   0x10(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    0x10(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x6c(%rbp),%eax
add    %ecx,%eax
cltd
idivl  -0x10(%rbp)
sub    $0x1,%eax
mov    %eax,-0x44(%rbp)
cmpl   $0x0,-0x44(%rbp)
jge    1205 <scale_volume_image_box+0xf5>
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    148a <scale_volume_image_box+0x37a>
mov    -0x30(%rbp),%eax
imul   -0x24(%rbp),%eax
mov    %eax,-0x70(%rbp)
mov    -0x24(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x70(%rbp),%eax
add    %ecx,%eax
cltd
idivl  -0xc(%rbp)
sub    $0x1,%eax
mov    %eax,-0x40(%rbp)
cmpl   $0x0,-0x40(%rbp)
jge    124f <scale_volume_image_box+0x13f>
movl   $0x0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x48(%rbp),%ecx
mov    -0x24(%rbp),%edx
imul   0x10(%rbp),%edx
imul   %edx,%ecx
mov    -0x44(%rbp),%edx
imul   -0x24(%rbp),%edx
add    %edx,%ecx
add    -0x40(%rbp),%ecx
imul   0x20(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
mov    -0x48(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    12be <scale_volume_image_box+0x1ae>
mov    -0x20(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    $0x1,%ecx
mov    -0x24(%rbp),%edx
imul   0x10(%rbp),%edx
imul   %edx,%ecx
mov    -0x44(%rbp),%edx
imul   -0x24(%rbp),%edx
add    %edx,%ecx
add    -0x40(%rbp),%ecx
imul   0x20(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x58(%rbp)
jmp    12c6 <scale_volume_image_box+0x1b6>
mov    -0x20(%rbp),%rax
mov    %rax,-0x58(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    0x20(%rbp),%eax
jge    1477 <scale_volume_image_box+0x367>
mov    -0x50(%rbp),%rax
movzbl (%rax),%edi
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   1030 <gamma_correct@plt>
mov    %eax,-0x8c(%rbp)
mov    -0x58(%rbp),%rax
movzbl (%rax),%edi
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   1030 <gamma_correct@plt>
mov    %eax,%ecx
mov    -0x8c(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x88(%rbp)
mov    -0x50(%rbp),%rax
movslq 0x20(%rbp),%rcx
movzbl (%rax,%rcx,1),%edi
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   1030 <gamma_correct@plt>
mov    %eax,%ecx
mov    -0x88(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x84(%rbp)
mov    -0x58(%rbp),%rax
movslq 0x20(%rbp),%rcx
movzbl (%rax,%rcx,1),%edi
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   1030 <gamma_correct@plt>
mov    %eax,%ecx
mov    -0x84(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x80(%rbp)
mov    -0x50(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   0x20(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edi
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   1030 <gamma_correct@plt>
mov    %eax,%ecx
mov    -0x80(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x7c(%rbp)
mov    -0x58(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   0x20(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edi
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   1030 <gamma_correct@plt>
mov    %eax,%ecx
mov    -0x7c(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x78(%rbp)
mov    -0x50(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
imul   0x20(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edi
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   1030 <gamma_correct@plt>
mov    %eax,%ecx
mov    -0x78(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x74(%rbp)
mov    -0x58(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
imul   0x20(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edi
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   1030 <gamma_correct@plt>
mov    %eax,%ecx
mov    -0x74(%rbp),%eax
add    %ecx,%eax
sar    $0x3,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%edi
movss  -0x64(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   1030 <gamma_correct@plt>
mov    %al,%cl
mov    -0x60(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x60(%rbp)
mov    %cl,(%rax)
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
mov    -0x58(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x58(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    12cd <scale_volume_image_box+0x1bd>
jmp    147c <scale_volume_image_box+0x36c>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    120c <scale_volume_image_box+0xfc>
jmp    148f <scale_volume_image_box+0x37f>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    11c2 <scale_volume_image_box+0xb2>
jmp    14a2 <scale_volume_image_box+0x392>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1178 <scale_volume_image_box+0x68>
jmp    1731 <scale_volume_image_box+0x621>
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    172c <scale_volume_image_box+0x61c>
mov    -0x38(%rbp),%eax
imul   0x18(%rbp),%eax
mov    %eax,-0x90(%rbp)
mov    0x18(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x90(%rbp),%eax
add    %ecx,%eax
cltd
idivl  -0x14(%rbp)
sub    $0x1,%eax
mov    %eax,-0x48(%rbp)
cmpl   $0x0,-0x48(%rbp)
jge    1505 <scale_volume_image_box+0x3f5>
movl   $0x0,-0x48(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    1719 <scale_volume_image_box+0x609>
mov    -0x34(%rbp),%eax
imul   0x10(%rbp),%eax
mov    %eax,-0x94(%rbp)
mov    0x10(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x94(%rbp),%eax
add    %ecx,%eax
cltd
idivl  -0x10(%rbp)
sub    $0x1,%eax
mov    %eax,-0x44(%rbp)
cmpl   $0x0,-0x44(%rbp)
jge    1555 <scale_volume_image_box+0x445>
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1706 <scale_volume_image_box+0x5f6>
mov    -0x30(%rbp),%eax
imul   -0x24(%rbp),%eax
mov    %eax,-0x98(%rbp)
mov    -0x24(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x98(%rbp),%eax
add    %ecx,%eax
cltd
idivl  -0xc(%rbp)
sub    $0x1,%eax
mov    %eax,-0x40(%rbp)
cmpl   $0x0,-0x40(%rbp)
jge    15a5 <scale_volume_image_box+0x495>
movl   $0x0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x48(%rbp),%ecx
mov    -0x24(%rbp),%edx
imul   0x10(%rbp),%edx
imul   %edx,%ecx
mov    -0x44(%rbp),%edx
imul   -0x24(%rbp),%edx
add    %edx,%ecx
add    -0x40(%rbp),%ecx
imul   0x20(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
mov    -0x48(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1614 <scale_volume_image_box+0x504>
mov    -0x20(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    $0x1,%ecx
mov    -0x24(%rbp),%edx
imul   0x10(%rbp),%edx
imul   %edx,%ecx
mov    -0x44(%rbp),%edx
imul   -0x24(%rbp),%edx
add    %edx,%ecx
add    -0x40(%rbp),%ecx
imul   0x20(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x58(%rbp)
jmp    161c <scale_volume_image_box+0x50c>
mov    -0x20(%rbp),%rax
mov    %rax,-0x58(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    0x20(%rbp),%eax
jge    16f3 <scale_volume_image_box+0x5e3>
mov    -0x50(%rbp),%rax
movzbl (%rax),%eax
mov    -0x50(%rbp),%rcx
movslq 0x20(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x50(%rbp),%rcx
mov    -0x24(%rbp),%edx
imul   0x20(%rbp),%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x50(%rbp),%rcx
mov    -0x24(%rbp),%edx
add    $0x1,%edx
imul   0x20(%rbp),%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x58(%rbp),%rcx
movzbl (%rcx),%ecx
mov    -0x58(%rbp),%rdx
movslq 0x20(%rbp),%rsi
movzbl (%rdx,%rsi,1),%edx
add    %edx,%ecx
mov    -0x58(%rbp),%rdx
mov    -0x24(%rbp),%esi
imul   0x20(%rbp),%esi
movslq %esi,%rsi
movzbl (%rdx,%rsi,1),%edx
add    %edx,%ecx
mov    -0x58(%rbp),%rdx
mov    -0x24(%rbp),%esi
add    $0x1,%esi
imul   0x20(%rbp),%esi
movslq %esi,%rsi
movzbl (%rdx,%rsi,1),%edx
add    %edx,%ecx
add    %ecx,%eax
sar    $0x3,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
mov    %al,%cl
mov    -0x60(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x60(%rbp)
mov    %cl,(%rax)
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
mov    -0x58(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x58(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1623 <scale_volume_image_box+0x513>
jmp    16f8 <scale_volume_image_box+0x5e8>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    155c <scale_volume_image_box+0x44c>
jmp    170b <scale_volume_image_box+0x5fb>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    150c <scale_volume_image_box+0x3fc>
jmp    171e <scale_volume_image_box+0x60e>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    14bc <scale_volume_image_box+0x3ac>
jmp    1731 <scale_volume_image_box+0x621>
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<scale_volume_image_box>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x148,%rsp
mov    %r8,0x70(%rsp)
mov    %edx,%r12d
mov    %rdi,%r13
mov    0x190(%rsp),%r14d
cmpl   $0x0,0x198(%rsp)
mov    %r9,0x88(%rsp)
mov    %ecx,0xc(%rsp)
mov    %edx,0x6c(%rsp)
mov    %esi,0x34(%rsp)
je     14c4 <scale_volume_image_box+0x3b4>
test   %ecx,%ecx
jle    1b16 <scale_volume_image_box+0xa06>
cvtss2sd %xmm0,%xmm2
movss  0xe96(%rip),%xmm1
divss  %xmm0,%xmm1
mov    0x188(%rsp),%eax
mov    %eax,%edx
shr    $0x1f,%edx
add    %eax,%edx
sar    %edx
mov    %edx,0x28(%rsp)
mov    0x180(%rsp),%eax
mov    %eax,%edx
shr    $0x1f,%edx
add    %eax,%edx
sar    %edx
mov    %edx,0x2c(%rsp)
mov    %r9d,%edx
shr    $0x1f,%edx
add    %r9d,%edx
sar    %edx
mov    %edx,0x60(%rsp)
imul   %r9d,%eax
mov    %eax,0x24(%rsp)
movslq %r14d,%rdx
mov    %r14d,%eax
imul   %r9d,%eax
movslq %eax,%r8
lea    0x1(%r9),%eax
imul   %r14d,%eax
movslq %eax,%r10
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
mov    %edx,%ebp
mov    0x70(%rsp),%rax
add    %rax,%rdx
mov    %rdx,0x80(%rsp)
add    %rax,%r8
mov    %r8,0x78(%rsp)
add    %rax,%r10
mov    %r10,0x18(%rsp)
xor    %r8d,%r8d
movsd  %xmm2,0x10(%rsp)
movsd  %xmm0,0x98(%rsp)
jmp    121d <scale_volume_image_box+0x10d>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x1,%r8d
cmp    %ecx,%r8d
je     1b16 <scale_volume_image_box+0xa06>
mov    %r8d,%eax
imul   0x188(%rsp),%eax
add    0x28(%rsp),%eax
cltd
idiv   %ecx
mov    %eax,%r10d
test   %eax,%eax
mov    $0x1,%eax
cmovle %eax,%r10d
test   %r12d,%r12d
jle    1210 <scale_volume_image_box+0x100>
lea    -0x1(%r10),%edx
mov    0x24(%rsp),%eax
imul   %eax,%edx
mov    %edx,0x40(%rsp)
mov    %r10d,%edx
imul   %eax,%edx
mov    %rdx,0x38(%rsp)
xor    %r11d,%r11d
mov    %r8d,0x50(%rsp)
mov    %r10,0x48(%rsp)
jmp    1279 <scale_volume_image_box+0x169>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r11d
cmp    %r12d,%r11d
je     1210 <scale_volume_image_box+0x100>
mov    %r11d,%eax
imul   0x180(%rsp),%eax
add    0x2c(%rsp),%eax
cltd
idiv   %r12d
test   %esi,%esi
jle    1270 <scale_volume_image_box+0x160>
mov    %eax,%r15d
test   %eax,%eax
mov    $0x1,%eax
cmovle %eax,%r15d
add    $0xffffffff,%r15d
imul   %r9d,%r15d
xor    %ebx,%ebx
mov    %r11d,0x30(%rsp)
mov    %r15,0x58(%rsp)
jmp    12c7 <scale_volume_image_box+0x1b7>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%ebx
cmp    %esi,%ebx
je     1270 <scale_volume_image_box+0x160>
mov    %ebx,%eax
imul   %r9d,%eax
add    0x60(%rsp),%eax
cltd
idiv   %esi
test   %eax,%eax
mov    $0x1,%edx
cmovle %edx,%eax
test   %r14d,%r14d
jle    12c0 <scale_volume_image_box+0x1b0>
mov    %ebx,0x90(%rsp)
add    %r15d,%eax
add    $0xffffffff,%eax
mov    0x38(%rsp),%rdx
add    %eax,%edx
imul   %r14d,%edx
cmp    %ecx,%r10d
mov    $0x0,%ecx
cmovge %ecx,%edx
movslq %edx,%r15
mov    0x70(%rsp),%rcx
lea    (%rcx,%r15,1),%rdx
mov    %rdx,0xc8(%rsp)
add    0x40(%rsp),%eax
imul   %r14d,%eax
movslq %eax,%rbx
lea    (%rcx,%rbx,1),%rax
mov    %rax,0xc0(%rsp)
mov    0x80(%rsp),%rax
lea    (%rax,%r15,1),%rcx
mov    %rcx,0xb8(%rsp)
mov    0x78(%rsp),%rcx
lea    (%rcx,%r15,1),%rdx
mov    %rdx,0xb0(%rsp)
mov    0x18(%rsp),%rdx
add    %rdx,%r15
add    %rbx,%rax
mov    %rax,0xa8(%rsp)
lea    (%rcx,%rbx,1),%rax
mov    %rax,0xa0(%rsp)
add    %rdx,%rbx
xor    %r12d,%r12d
nopl   0x0(%rax,%rax,1)
mov    0xc0(%rsp),%rax
movzbl (%rax,%r12,1),%edi
movaps %xmm2,%xmm0
mov    $0x1,%al
call   1030 <gamma_correct@plt>
mov    %eax,%r14d
mov    0xc8(%rsp),%rax
movzbl (%rax,%r12,1),%edi
movsd  0x10(%rsp),%xmm0
mov    $0x1,%al
call   1030 <gamma_correct@plt>
add    %eax,%r14d
mov    0xa8(%rsp),%rax
movzbl (%rax,%r12,1),%edi
movsd  0x10(%rsp),%xmm0
mov    $0x1,%al
call   1030 <gamma_correct@plt>
add    %eax,%r14d
mov    0xb8(%rsp),%rax
movzbl (%rax,%r12,1),%edi
movsd  0x10(%rsp),%xmm0
mov    $0x1,%al
call   1030 <gamma_correct@plt>
add    %eax,%r14d
mov    0xa0(%rsp),%rax
movzbl (%rax,%r12,1),%edi
movsd  0x10(%rsp),%xmm0
mov    $0x1,%al
call   1030 <gamma_correct@plt>
add    %eax,%r14d
mov    0xb0(%rsp),%rax
movzbl (%rax,%r12,1),%edi
movsd  0x10(%rsp),%xmm0
mov    $0x1,%al
call   1030 <gamma_correct@plt>
add    %eax,%r14d
movzbl (%rbx,%r12,1),%edi
movsd  0x10(%rsp),%xmm0
mov    $0x1,%al
call   1030 <gamma_correct@plt>
add    %eax,%r14d
movzbl (%r15,%r12,1),%edi
movsd  0x10(%rsp),%xmm0
mov    $0x1,%al
call   1030 <gamma_correct@plt>
add    %eax,%r14d
sar    $0x3,%r14d
mov    %r14d,%edi
movsd  0x98(%rsp),%xmm0
mov    $0x1,%al
call   1030 <gamma_correct@plt>
movsd  0x10(%rsp),%xmm2
mov    %al,0x0(%r13,%r12,1)
add    $0x1,%r12
cmp    %r12d,%ebp
jne    1380 <scale_volume_image_box+0x270>
add    %r12,%r13
mov    0x88(%rsp),%r9
mov    0xc(%rsp),%ecx
mov    0x6c(%rsp),%r12d
mov    0x34(%rsp),%esi
mov    0x190(%rsp),%r14d
mov    0x50(%rsp),%r8d
mov    0x48(%rsp),%r10
mov    0x30(%rsp),%r11d
mov    0x58(%rsp),%r15
mov    0x90(%rsp),%ebx
jmp    12c0 <scale_volume_image_box+0x1b0>
test   %ecx,%ecx
jle    1b16 <scale_volume_image_box+0xa06>
mov    0x188(%rsp),%eax
mov    %eax,%edx
shr    $0x1f,%edx
add    %eax,%edx
sar    %edx
mov    %edx,0xd4(%rsp)
mov    0x180(%rsp),%eax
mov    %eax,%edx
shr    $0x1f,%edx
add    %eax,%edx
sar    %edx
mov    %edx,0xd8(%rsp)
mov    %r9d,%edx
shr    $0x1f,%edx
add    %r9d,%edx
sar    %edx
mov    %edx,0xc8(%rsp)
imul   %r9d,%eax
mov    %eax,0xd0(%rsp)
movslq %r14d,%r8
mov    %r14d,%eax
imul   %r9d,%eax
movslq %eax,%r10
lea    0x1(%r9),%eax
imul   %r14d,%eax
movslq %eax,%r15
lea    -0x1(%r14),%ebp
lea    0x1(%rbp),%r11
mov    0x70(%rsp),%rdx
lea    (%rdx,%r15,1),%rax
mov    %rax,0x128(%rsp)
mov    %r15,0x130(%rsp)
lea    (%r15,%rbp,1),%rax
lea    0x1(%rdx,%rax,1),%rax
mov    %rax,0x120(%rsp)
lea    (%rdx,%r10,1),%rax
mov    %rax,0x118(%rsp)
mov    %r10,0x138(%rsp)
lea    (%r10,%rbp,1),%rax
lea    0x1(%rdx,%rax,1),%rax
mov    %rax,0x110(%rsp)
lea    (%r8,%rbp,1),%rax
lea    0x1(%rdx,%rax,1),%rax
mov    %rax,0x108(%rsp)
mov    %r11,%rax
mov    %r11,0xe0(%rsp)
and    $0xfffffffffffffff0,%r11
mov    %r11,0xf0(%rsp)
pxor   %xmm0,%xmm0
movdqa 0xa56(%rip),%xmm1
mov    %r8,0x140(%rsp)
lea    (%rdx,%r8,1),%rax
mov    %rax,0x100(%rsp)
mov    %rbp,0xa0(%rsp)
lea    (%rdx,%rbp,1),%rax
add    $0x1,%rax
mov    %rax,0xf8(%rsp)
xor    %eax,%eax
jmp    1609 <scale_volume_image_box+0x4f9>
nopw   0x0(%rax,%rax,1)
mov    %r13,%r15
mov    0xe8(%rsp),%rax
add    $0x1,%eax
mov    %r15,%r13
cmp    %ecx,%eax
je     1b16 <scale_volume_image_box+0xa06>
mov    %rax,0xe8(%rsp)
imul   0x188(%rsp),%eax
add    0xd4(%rsp),%eax
cltd
idiv   %ecx
mov    %eax,%edx
test   %eax,%eax
mov    $0x1,%eax
cmovle %eax,%edx
test   %r12d,%r12d
jle    15f0 <scale_volume_image_box+0x4e0>
lea    -0x1(%rdx),%ebp
mov    0xd0(%rsp),%eax
imul   %eax,%ebp
mov    %ebp,0xb0(%rsp)
mov    %rdx,0xb8(%rsp)
imul   %eax,%edx
mov    %rdx,0xa8(%rsp)
xor    %eax,%eax
jmp    167e <scale_volume_image_box+0x56e>
nop
mov    %r13,%r15
mov    0xdc(%rsp),%eax
add    $0x1,%eax
mov    %r15,%r13
mov    0x6c(%rsp),%r12d
cmp    %r12d,%eax
je     15f3 <scale_volume_image_box+0x4e3>
mov    %eax,0xdc(%rsp)
imul   0x180(%rsp),%eax
add    0xd8(%rsp),%eax
cltd
idiv   %r12d
test   %esi,%esi
jle    1660 <scale_volume_image_box+0x550>
mov    %eax,%edx
test   %eax,%eax
mov    $0x1,%eax
cmovle %eax,%edx
add    $0xffffffff,%edx
imul   %r9d,%edx
mov    %rdx,0xc0(%rsp)
xor    %ebx,%ebx
jmp    16cd <scale_volume_image_box+0x5bd>
nopl   0x0(%rax,%rax,1)
mov    %r13,%r15
add    $0x1,%ebx
mov    %r15,%r13
cmp    %esi,%ebx
je     1663 <scale_volume_image_box+0x553>
mov    %ebx,%eax
imul   %r9d,%eax
add    0xc8(%rsp),%eax
cltd
idiv   %esi
test   %eax,%eax
mov    $0x1,%edx
cmovle %edx,%eax
test   %r14d,%r14d
jle    16c0 <scale_volume_image_box+0x5b0>
mov    %r13,0x10(%rsp)
mov    0xc0(%rsp),%rdx
add    %edx,%eax
add    $0xffffffff,%eax
mov    0xa8(%rsp),%rdx
add    %eax,%edx
imul   %r14d,%edx
xor    %edi,%edi
cmp    %ecx,0xb8(%rsp)
cmovge %edi,%edx
movslq %edx,%rbp
mov    0x70(%rsp),%rdx
lea    (%rdx,%rbp,1),%r12
add    0xb0(%rsp),%eax
imul   %r14d,%eax
cltq
lea    (%rdx,%rax,1),%r11
cmpl   $0xf,0xa0(%rsp)
0f
jae    1750 <scale_volume_image_box+0x640>
mov    0x10(%rsp),%r15
jmp    1a6f <scale_volume_image_box+0x95f>
nopl   0x0(%rax)
mov    %ebx,0x18(%rsp)
mov    0x10(%rsp),%rcx
mov    0xe0(%rsp),%rdx
add    %rcx,%rdx
mov    0x128(%rsp),%rsi
lea    (%rsi,%rbp,1),%rdi
mov    %rdi,0x78(%rsp)
mov    0x120(%rsp),%r10
lea    (%r10,%rbp,1),%rdi
mov    %rdi,0x60(%rsp)
mov    %r11,0x98(%rsp)
mov    0x118(%rsp),%r8
lea    (%r8,%rbp,1),%rdi
mov    %rdi,0x80(%rsp)
mov    %r12,0x90(%rsp)
mov    0x110(%rsp),%r15
lea    (%r15,%rbp,1),%rdi
mov    %rdi,0x38(%rsp)
mov    0x100(%rsp),%r11
lea    (%r11,%rbp,1),%r14
mov    0x108(%rsp),%rbx
lea    (%rbx,%rbp,1),%rdi
mov    %rdi,0x40(%rsp)
mov    0xf8(%rsp),%r12
add    %r12,%rbp
lea    (%rsi,%rax,1),%r9
lea    (%r10,%rax,1),%rsi
mov    %rsi,0x48(%rsp)
lea    (%r8,%rax,1),%r13
mov    0x98(%rsp),%r10
lea    (%r15,%rax,1),%rsi
mov    %rsi,0x50(%rsp)
mov    0x78(%rsp),%rdi
mov    0x90(%rsp),%r8
lea    (%r11,%rax,1),%rsi
add    %rax,%rbx
mov    %rbx,0x58(%rsp)
mov    0x80(%rsp),%rbx
add    %r12,%rax
cmp    0x60(%rsp),%rcx
setb   0x60(%rsp)
cmp    %rdx,%rdi
setb   0x30(%rsp)
cmp    0x38(%rsp),%rcx
setb   %r12b
cmp    %rdx,%rbx
setb   0x38(%rsp)
cmp    0x40(%rsp),%rcx
setb   %r15b
cmp    %rdx,%r14
setb   0x40(%rsp)
cmp    %rbp,%rcx
setb   %r11b
cmp    %rdx,%r8
setb   0x2c(%rsp)
cmp    0x48(%rsp),%rcx
setb   %bpl
cmp    %rdx,%r9
setb   0x48(%rsp)
cmp    0x50(%rsp),%rcx
setb   0x50(%rsp)
cmp    %rdx,%r13
setb   0x28(%rsp)
cmp    0x58(%rsp),%rcx
setb   0x58(%rsp)
cmp    %rdx,%rsi
setb   0x24(%rsp)
cmp    %rax,%rcx
setb   %al
cmp    %rdx,%r10
setb   %dl
mov    0x30(%rsp),%cl
test   %cl,0x60(%rsp)
jne    1a52 <scale_volume_image_box+0x942>
and    0x38(%rsp),%r12b
jne    1a52 <scale_volume_image_box+0x942>
and    0x40(%rsp),%r15b
jne    1a52 <scale_volume_image_box+0x942>
and    0x2c(%rsp),%r11b
jne    1a52 <scale_volume_image_box+0x942>
and    0x48(%rsp),%bpl
jne    1a52 <scale_volume_image_box+0x942>
mov    0x28(%rsp),%cl
and    %cl,0x50(%rsp)
jne    1a52 <scale_volume_image_box+0x942>
mov    0x24(%rsp),%cl
and    %cl,0x58(%rsp)
mov    0x10(%rsp),%rbp
jne    1a4d <scale_volume_image_box+0x93d>
and    %dl,%al
jne    1a4d <scale_volume_image_box+0x93d>
mov    0xf0(%rsp),%rax
lea    (%rax,%rbp,1),%r15
lea    (%r8,%rax,1),%r12
lea    (%r10,%rax,1),%r11
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
movdqu (%r10,%rcx,1),%xmm2
movdqa %xmm2,%xmm3
punpcklbw %xmm0,%xmm3
punpckhbw %xmm0,%xmm2
movdqu (%rsi,%rcx,1),%xmm4
movdqa %xmm4,%xmm5
punpcklbw %xmm0,%xmm5
paddw  %xmm3,%xmm5
punpckhbw %xmm0,%xmm4
paddw  %xmm2,%xmm4
movdqu 0x0(%r13,%rcx,1),%xmm6
movdqa %xmm6,%xmm7
punpckhbw %xmm0,%xmm7
punpcklbw %xmm0,%xmm6
movdqu (%r9,%rcx,1),%xmm3
movdqa %xmm3,%xmm2
punpcklbw %xmm0,%xmm2
paddw  %xmm6,%xmm2
paddw  %xmm5,%xmm2
punpckhbw %xmm0,%xmm3
paddw  %xmm7,%xmm3
paddw  %xmm4,%xmm3
movdqu (%r8,%rcx,1),%xmm4
movdqa %xmm4,%xmm5
punpckhbw %xmm0,%xmm5
punpcklbw %xmm0,%xmm4
movdqu (%r14,%rcx,1),%xmm6
movdqa %xmm6,%xmm7
punpcklbw %xmm0,%xmm7
paddw  %xmm4,%xmm7
punpckhbw %xmm0,%xmm6
paddw  %xmm5,%xmm6
movdqu (%rbx,%rcx,1),%xmm4
movdqa %xmm4,%xmm5
punpckhbw %xmm0,%xmm5
paddw  %xmm6,%xmm5
paddw  %xmm3,%xmm5
punpcklbw %xmm0,%xmm4
paddw  %xmm7,%xmm4
paddw  %xmm2,%xmm4
movdqu (%rdi,%rcx,1),%xmm2
movdqa %xmm2,%xmm3
punpcklbw %xmm0,%xmm3
paddw  %xmm4,%xmm3
punpckhbw %xmm0,%xmm2
paddw  %xmm5,%xmm2
psrlw  $0x3,%xmm3
psrlw  $0x3,%xmm2
pand   %xmm1,%xmm2
pand   %xmm1,%xmm3
packuswb %xmm2,%xmm3
movdqu %xmm3,0x0(%rbp,%rcx,1)
add    $0x10,%rcx
cmp    %rcx,%rax
jne    1930 <scale_volume_image_box+0x820>
mov    %eax,%edi
cmp    %rax,0xe0(%rsp)
mov    0x88(%rsp),%r9
mov    0xc(%rsp),%ecx
mov    0x34(%rsp),%esi
mov    0x190(%rsp),%r14d
mov    0x18(%rsp),%ebx
je     16c3 <scale_volume_image_box+0x5b3>
jmp    1a6f <scale_volume_image_box+0x95f>
mov    %rbp,%r15
jmp    1a57 <scale_volume_image_box+0x947>
mov    0x10(%rsp),%r15
mov    %r8,%r12
mov    %r10,%r11
mov    0xc(%rsp),%ecx
mov    0x190(%rsp),%r14d
mov    0x18(%rsp),%ebx
xor    %edi,%edi
mov    %ecx,%r9d
mov    %ebx,%ecx
sub    %edi,%r14d
mov    0x140(%rsp),%rax
lea    (%r12,%rax,1),%r8
mov    0x138(%rsp),%rdx
lea    (%r12,%rdx,1),%r10
mov    0x130(%rsp),%rsi
lea    (%r12,%rsi,1),%r13
add    %r11,%rax
lea    (%r11,%rdx,1),%rbp
lea    (%r11,%rsi,1),%rbx
xor    %edx,%edx
nopl   0x0(%rax,%rax,1)
movzbl (%r11,%rdx,1),%edi
movzbl (%rax,%rdx,1),%esi
add    %edi,%esi
movzbl 0x0(%rbp,%rdx,1),%edi
add    %esi,%edi
movzbl (%rbx,%rdx,1),%esi
add    %edi,%esi
movzbl (%r12,%rdx,1),%edi
add    %esi,%edi
movzbl (%r8,%rdx,1),%esi
add    %edi,%esi
movzbl (%r10,%rdx,1),%edi
add    %esi,%edi
movzbl 0x0(%r13,%rdx,1),%esi
add    %edi,%esi
shr    $0x3,%esi
mov    %sil,(%r15,%rdx,1)
add    $0x1,%rdx
cmp    %edx,%r14d
jne    1ab0 <scale_volume_image_box+0x9a0>
add    %rdx,%r15
mov    0x34(%rsp),%esi
mov    0x190(%rsp),%r14d
mov    %ecx,%ebx
mov    %r9d,%ecx
mov    0x88(%rsp),%r9
jmp    16c3 <scale_volume_image_box+0x5b3>
add    $0x148,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @scale_volume_image_box(i8* nocapture writeonly %0, i32 %1, i32 %2, i32 %3, i8* nocapture %4, i32 %5, i32 %6, i32 %7, i32 %8, i32 %9, float %10) {
%12 = icmp eq i32 %9, 0
br i1 %12, label %13, label %59
13: ; preds = %11
%14 = icmp sgt i32 %3, 0
br i1 %14, label %15, label %385
15: ; preds = %13
%16 = sdiv i32 %7, 2
%17 = icmp sgt i32 %2, 0
%18 = sdiv i32 %6, 2
%19 = icmp sgt i32 %1, 0
%20 = sdiv i32 %5, 2
%21 = mul nsw i32 %6, %5
%22 = icmp sgt i32 %8, 0
%23 = sext i32 %8 to i64
%24 = mul nsw i32 %8, %5
%25 = sext i32 %24 to i64
%26 = add nsw i32 %5, 1
%27 = mul nsw i32 %26, %8
%28 = sext i32 %27 to i64
%29 = add i32 %8, -1
%30 = zext i32 %29 to i64
%31 = add nuw nsw i64 %30, 1
%32 = getelementptr i8, i8* %4, i64 %28
%33 = add nsw i64 %28, %30
%34 = add nsw i64 %33, 1
%35 = getelementptr i8, i8* %4, i64 %34
%36 = getelementptr i8, i8* %4, i64 %25
%37 = add nsw i64 %25, %30
%38 = add nsw i64 %37, 1
%39 = getelementptr i8, i8* %4, i64 %38
%40 = getelementptr i8, i8* %4, i64 %23
%41 = add nsw i64 %23, %30
%42 = add nsw i64 %41, 1
%43 = getelementptr i8, i8* %4, i64 %42
%44 = getelementptr i8, i8* %4, i64 %31
%45 = getelementptr i8, i8* %4, i64 %28
%46 = getelementptr i8, i8* %4, i64 %34
%47 = getelementptr i8, i8* %4, i64 %25
%48 = getelementptr i8, i8* %4, i64 %38
%49 = getelementptr i8, i8* %4, i64 %23
%50 = getelementptr i8, i8* %4, i64 %42
%51 = getelementptr i8, i8* %4, i64 %31
%52 = add i32 %8, -1
%53 = zext i32 %52 to i64
%54 = add nuw nsw i64 %53, 1
%55 = icmp ult i32 %52, 15
%56 = and i64 %54, 8589934576
%57 = trunc i64 %56 to i32
%58 = icmp eq i64 %54, %56
br label %184
59: ; preds = %11
%60 = fpext float %10 to double
%61 = icmp sgt i32 %3, 0
br i1 %61, label %62, label %385
62: ; preds = %59
%63 = fdiv float 1.000000e+00, %10
%64 = sdiv i32 %7, 2
%65 = icmp sgt i32 %2, 0
%66 = sdiv i32 %6, 2
%67 = icmp sgt i32 %1, 0
%68 = sdiv i32 %5, 2
%69 = mul nsw i32 %6, %5
%70 = icmp sgt i32 %8, 0
%71 = sext i32 %8 to i64
%72 = mul nsw i32 %8, %5
%73 = sext i32 %72 to i64
%74 = add nsw i32 %5, 1
%75 = mul nsw i32 %74, %8
%76 = sext i32 %75 to i64
%77 = fpext float %63 to double
br label %78
78: ; preds = %62, %180
%79 = phi i8* [ %0, %62 ], [ %181, %180 ]
%80 = phi i32 [ 0, %62 ], [ %182, %180 ]
%81 = mul nsw i32 %80, %7
%82 = add nsw i32 %81, %64
%83 = sdiv i32 %82, %3
%84 = icmp sgt i32 %83, 1
%85 = select i1 %84, i32 %83, i32 1
br i1 %65, label %86, label %180
86: ; preds = %78
%87 = add nsw i32 %85, -1
%88 = mul nsw i32 %87, %69
%89 = icmp slt i32 %85, %3
%90 = mul nsw i32 %85, %69
br label %91
91: ; preds = %86, %176
%92 = phi i8* [ %79, %86 ], [ %177, %176 ]
%93 = phi i32 [ 0, %86 ], [ %178, %176 ]
%94 = mul nsw i32 %93, %6
%95 = add nsw i32 %94, %66
%96 = sdiv i32 %95, %2
br i1 %67, label %97, label %176
97: ; preds = %91
%98 = icmp sgt i32 %96, 1
%99 = select i1 %98, i32 %96, i32 1
%100 = add nsw i32 %99, -1
%101 = mul nsw i32 %100, %5
br label %102
102: ; preds = %97, %172
%103 = phi i8* [ %92, %97 ], [ %173, %172 ]
%104 = phi i32 [ 0, %97 ], [ %174, %172 ]
%105 = mul nsw i32 %104, %5
%106 = add nsw i32 %105, %68
%107 = sdiv i32 %106, %1
%108 = icmp sgt i32 %107, 1
%109 = select i1 %108, i32 %107, i32 1
%110 = add nsw i32 %109, -1
%111 = add i32 %110, %101
br i1 %70, label %112, label %172
112: ; preds = %102
%113 = add i32 %111, %90
%114 = mul nsw i32 %113, %8
%115 = select i1 %89, i32 %114, i32 0
%116 = sext i32 %115 to i64
%117 = getelementptr i8, i8* %4, i64 %116
%118 = add i32 %111, %88
%119 = mul nsw i32 %118, %8
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds i8, i8* %4, i64 %120
br label %122
122: ; preds = %112, %122
%123 = phi i32 [ %170, %122 ], [ 0, %112 ]
%124 = phi i8* [ %167, %122 ], [ %103, %112 ]
%125 = phi i8* [ %169, %122 ], [ %117, %112 ]
%126 = phi i8* [ %168, %122 ], [ %121, %112 ]
%127 = load i8, i8* %126
%128 = zext i8 %127 to i32
%129 = tail call i32 (i32, double, ...) bitcast (i32 (...)* @gamma_correct to i32 (i32, double, ...)*)(i32 %128, double %60)
%130 = load i8, i8* %125
%131 = zext i8 %130 to i32
%132 = tail call i32 (i32, double, ...) bitcast (i32 (...)* @gamma_correct to i32 (i32, double, ...)*)(i32 %131, double %60)
%133 = add nsw i32 %132, %129
%134 = getelementptr inbounds i8, i8* %126, i64 %71
%135 = load i8, i8* %134
%136 = zext i8 %135 to i32
%137 = tail call i32 (i32, double, ...) bitcast (i32 (...)* @gamma_correct to i32 (i32, double, ...)*)(i32 %136, double %60)
%138 = add nsw i32 %133, %137
%139 = getelementptr inbounds i8, i8* %125, i64 %71
%140 = load i8, i8* %139
%141 = zext i8 %140 to i32
%142 = tail call i32 (i32, double, ...) bitcast (i32 (...)* @gamma_correct to i32 (i32, double, ...)*)(i32 %141, double %60)
%143 = add nsw i32 %138, %142
%144 = getelementptr inbounds i8, i8* %126, i64 %73
%145 = load i8, i8* %144
%146 = zext i8 %145 to i32
%147 = tail call i32 (i32, double, ...) bitcast (i32 (...)* @gamma_correct to i32 (i32, double, ...)*)(i32 %146, double %60)
%148 = add nsw i32 %143, %147
%149 = getelementptr inbounds i8, i8* %125, i64 %73
%150 = load i8, i8* %149
%151 = zext i8 %150 to i32
%152 = tail call i32 (i32, double, ...) bitcast (i32 (...)* @gamma_correct to i32 (i32, double, ...)*)(i32 %151, double %60)
%153 = add nsw i32 %148, %152
%154 = getelementptr inbounds i8, i8* %126, i64 %76
%155 = load i8, i8* %154
%156 = zext i8 %155 to i32
%157 = tail call i32 (i32, double, ...) bitcast (i32 (...)* @gamma_correct to i32 (i32, double, ...)*)(i32 %156, double %60)
%158 = add nsw i32 %153, %157
%159 = getelementptr inbounds i8, i8* %125, i64 %76
%160 = load i8, i8* %159
%161 = zext i8 %160 to i32
%162 = tail call i32 (i32, double, ...) bitcast (i32 (...)* @gamma_correct to i32 (i32, double, ...)*)(i32 %161, double %60)
%163 = add nsw i32 %158, %162
%164 = ashr i32 %163, 3
%165 = tail call i32 (i32, double, ...) bitcast (i32 (...)* @gamma_correct to i32 (i32, double, ...)*)(i32 %164, double %77)
%166 = trunc i32 %165 to i8
%167 = getelementptr inbounds i8, i8* %124, i64 1
store i8 %166, i8* %124
%168 = getelementptr inbounds i8, i8* %126, i64 1
%169 = getelementptr inbounds i8, i8* %125, i64 1
%170 = add nuw nsw i32 %123, 1
%171 = icmp eq i32 %170, %8
br i1 %171, label %172, label %122
172: ; preds = %122, %102
%173 = phi i8* [ %103, %102 ], [ %167, %122 ]
%174 = add nuw nsw i32 %104, 1
%175 = icmp eq i32 %174, %1
br i1 %175, label %176, label %102
176: ; preds = %172, %91
%177 = phi i8* [ %92, %91 ], [ %173, %172 ]
%178 = add nuw nsw i32 %93, 1
%179 = icmp eq i32 %178, %2
br i1 %179, label %180, label %91
180: ; preds = %176, %78
%181 = phi i8* [ %79, %78 ], [ %177, %176 ]
%182 = add nuw nsw i32 %80, 1
%183 = icmp eq i32 %182, %3
br i1 %183, label %385, label %78
184: ; preds = %15, %381
%185 = phi i8* [ %0, %15 ], [ %382, %381 ]
%186 = phi i32 [ 0, %15 ], [ %383, %381 ]
%187 = mul nsw i32 %186, %7
%188 = add nsw i32 %187, %16
%189 = sdiv i32 %188, %3
%190 = icmp sgt i32 %189, 1
%191 = select i1 %190, i32 %189, i32 1
br i1 %17, label %192, label %381
192: ; preds = %184
%193 = add nsw i32 %191, -1
%194 = mul nsw i32 %193, %21
%195 = icmp slt i32 %191, %3
%196 = mul nsw i32 %191, %21
br label %197
197: ; preds = %192, %377
%198 = phi i8* [ %185, %192 ], [ %378, %377 ]
%199 = phi i32 [ 0, %192 ], [ %379, %377 ]
%200 = mul nsw i32 %199, %6
%201 = add nsw i32 %200, %18
%202 = sdiv i32 %201, %2
br i1 %19, label %203, label %377
203: ; preds = %197
%204 = icmp sgt i32 %202, 1
%205 = select i1 %204, i32 %202, i32 1
%206 = add nsw i32 %205, -1
%207 = mul nsw i32 %206, %5
br label %208
208: ; preds = %203, %373
%209 = phi i8* [ %198, %203 ], [ %374, %373 ]
%210 = phi i32 [ 0, %203 ], [ %375, %373 ]
%211 = mul nsw i32 %210, %5
%212 = add nsw i32 %211, %20
%213 = sdiv i32 %212, %1
%214 = icmp sgt i32 %213, 1
%215 = select i1 %214, i32 %213, i32 1
%216 = add nsw i32 %215, -1
%217 = add i32 %216, %207
br i1 %22, label %218, label %373
218: ; preds = %208
%219 = add i32 %217, %196
%220 = mul nsw i32 %219, %8
%221 = select i1 %195, i32 %220, i32 0
%222 = sext i32 %221 to i64
%223 = getelementptr i8, i8* %4, i64 %222
%224 = add i32 %217, %194
%225 = mul nsw i32 %224, %8
%226 = sext i32 %225 to i64
%227 = getelementptr i8, i8* %4, i64 %226
br i1 %55, label %327, label %228
228: ; preds = %218
%229 = getelementptr i8, i8* %209, i64 %31
%230 = getelementptr i8, i8* %32, i64 %222
%231 = getelementptr i8, i8* %35, i64 %222
%232 = getelementptr i8, i8* %36, i64 %222
%233 = getelementptr i8, i8* %39, i64 %222
%234 = getelementptr i8, i8* %40, i64 %222
%235 = getelementptr i8, i8* %43, i64 %222
%236 = getelementptr i8, i8* %44, i64 %222
%237 = getelementptr i8, i8* %45, i64 %226
%238 = getelementptr i8, i8* %46, i64 %226
%239 = getelementptr i8, i8* %47, i64 %226
%240 = getelementptr i8, i8* %48, i64 %226
%241 = getelementptr i8, i8* %49, i64 %226
%242 = getelementptr i8, i8* %50, i64 %226
%243 = getelementptr i8, i8* %51, i64 %226
%244 = icmp ult i8* %209, %231
%245 = icmp ult i8* %230, %229
%246 = and i1 %244, %245
%247 = icmp ult i8* %209, %233
%248 = icmp ult i8* %232, %229
%249 = and i1 %247, %248
%250 = or i1 %246, %249
%251 = icmp ult i8* %209, %235
%252 = icmp ult i8* %234, %229
%253 = and i1 %251, %252
%254 = or i1 %250, %253
%255 = icmp ult i8* %209, %236
%256 = icmp ult i8* %223, %229
%257 = and i1 %255, %256
%258 = or i1 %254, %257
%259 = icmp ult i8* %209, %238
%260 = icmp ult i8* %237, %229
%261 = and i1 %259, %260
%262 = or i1 %258, %261
%263 = icmp ult i8* %209, %240
%264 = icmp ult i8* %239, %229
%265 = and i1 %263, %264
%266 = or i1 %262, %265
%267 = icmp ult i8* %209, %242
%268 = icmp ult i8* %241, %229
%269 = and i1 %267, %268
%270 = or i1 %266, %269
%271 = icmp ult i8* %209, %243
%272 = icmp ult i8* %227, %229
%273 = and i1 %271, %272
%274 = or i1 %270, %273
br i1 %274, label %327, label %275
275: ; preds = %228
%276 = getelementptr i8, i8* %209, i64 %56
%277 = getelementptr i8, i8* %223, i64 %56
%278 = getelementptr i8, i8* %227, i64 %56
br label %279
279: ; preds = %279, %275
%280 = phi i64 [ 0, %275 ], [ %324, %279 ]
%281 = getelementptr i8, i8* %209, i64 %280
%282 = getelementptr i8, i8* %223, i64 %280
%283 = getelementptr i8, i8* %227, i64 %280
%284 = bitcast i8* %283 to <16 x i8>*
%285 = load <16 x i8>, <16 x i8>* %284
%286 = zext <16 x i8> %285 to <16 x i16>
%287 = getelementptr inbounds i8, i8* %283, i64 %23
%288 = bitcast i8* %287 to <16 x i8>*
%289 = load <16 x i8>, <16 x i8>* %288
%290 = zext <16 x i8> %289 to <16 x i16>
%291 = getelementptr inbounds i8, i8* %283, i64 %25
%292 = bitcast i8* %291 to <16 x i8>*
%293 = load <16 x i8>, <16 x i8>* %292
%294 = zext <16 x i8> %293 to <16 x i16>
%295 = getelementptr inbounds i8, i8* %283, i64 %28
%296 = bitcast i8* %295 to <16 x i8>*
%297 = load <16 x i8>, <16 x i8>* %296
%298 = zext <16 x i8> %297 to <16 x i16>
%299 = bitcast i8* %282 to <16 x i8>*
%300 = load <16 x i8>, <16 x i8>* %299
%301 = zext <16 x i8> %300 to <16 x i16>
%302 = getelementptr inbounds i8, i8* %282, i64 %23
%303 = bitcast i8* %302 to <16 x i8>*
%304 = load <16 x i8>, <16 x i8>* %303
%305 = zext <16 x i8> %304 to <16 x i16>
%306 = getelementptr inbounds i8, i8* %282, i64 %25
%307 = bitcast i8* %306 to <16 x i8>*
%308 = load <16 x i8>, <16 x i8>* %307
%309 = zext <16 x i8> %308 to <16 x i16>
%310 = getelementptr inbounds i8, i8* %282, i64 %28
%311 = bitcast i8* %310 to <16 x i8>*
%312 = load <16 x i8>, <16 x i8>* %311
%313 = zext <16 x i8> %312 to <16 x i16>
%314 = add nuw nsw <16 x i16> %290, %286
%315 = add nuw nsw <16 x i16> %314, %294
%316 = add nuw nsw <16 x i16> %315, %298
%317 = add nuw nsw <16 x i16> %316, %301
%318 = add nuw nsw <16 x i16> %317, %305
%319 = add nuw nsw <16 x i16> %318, %309
%320 = add nuw nsw <16 x i16> %319, %313
%321 = lshr <16 x i16> %320, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
%322 = trunc <16 x i16> %321 to <16 x i8>
%323 = bitcast i8* %281 to <16 x i8>*
store <16 x i8> %322, <16 x i8>* %323
%324 = add nuw i64 %280, 16
%325 = icmp eq i64 %324, %56
br i1 %325, label %326, label %279
326: ; preds = %279
br i1 %58, label %373, label %327
327: ; preds = %228, %218, %326
%328 = phi i32 [ 0, %228 ], [ 0, %218 ], [ %57, %326 ]
%329 = phi i8* [ %209, %228 ], [ %209, %218 ], [ %276, %326 ]
%330 = phi i8* [ %223, %228 ], [ %223, %218 ], [ %277, %326 ]
%331 = phi i8* [ %227, %228 ], [ %227, %218 ], [ %278, %326 ]
br label %332
332: ; preds = %327, %332
%333 = phi i32 [ %371, %332 ], [ %328, %327 ]
%334 = phi i8* [ %368, %332 ], [ %329, %327 ]
%335 = phi i8* [ %370, %332 ], [ %330, %327 ]
%336 = phi i8* [ %369, %332 ], [ %331, %327 ]
%337 = load i8, i8* %336
%338 = zext i8 %337 to i16
%339 = getelementptr inbounds i8, i8* %336, i64 %23
%340 = load i8, i8* %339
%341 = zext i8 %340 to i16
%342 = getelementptr inbounds i8, i8* %336, i64 %25
%343 = load i8, i8* %342
%344 = zext i8 %343 to i16
%345 = getelementptr inbounds i8, i8* %336, i64 %28
%346 = load i8, i8* %345
%347 = zext i8 %346 to i16
%348 = load i8, i8* %335
%349 = zext i8 %348 to i16
%350 = getelementptr inbounds i8, i8* %335, i64 %23
%351 = load i8, i8* %350
%352 = zext i8 %351 to i16
%353 = getelementptr inbounds i8, i8* %335, i64 %25
%354 = load i8, i8* %353
%355 = zext i8 %354 to i16
%356 = getelementptr inbounds i8, i8* %335, i64 %28
%357 = load i8, i8* %356
%358 = zext i8 %357 to i16
%359 = add nuw nsw i16 %341, %338
%360 = add nuw nsw i16 %359, %344
%361 = add nuw nsw i16 %360, %347
%362 = add nuw nsw i16 %361, %349
%363 = add nuw nsw i16 %362, %352
%364 = add nuw nsw i16 %363, %355
%365 = add nuw nsw i16 %364, %358
%366 = lshr i16 %365, 3
%367 = trunc i16 %366 to i8
%368 = getelementptr inbounds i8, i8* %334, i64 1
store i8 %367, i8* %334
%369 = getelementptr inbounds i8, i8* %336, i64 1
%370 = getelementptr inbounds i8, i8* %335, i64 1
%371 = add nuw nsw i32 %333, 1
%372 = icmp eq i32 %371, %8
br i1 %372, label %373, label %332
373: ; preds = %332, %326, %208
%374 = phi i8* [ %209, %208 ], [ %276, %326 ], [ %368, %332 ]
%375 = add nuw nsw i32 %210, 1
%376 = icmp eq i32 %375, %1
br i1 %376, label %377, label %208
377: ; preds = %373, %197
%378 = phi i8* [ %198, %197 ], [ %374, %373 ]
%379 = add nuw nsw i32 %199, 1
%380 = icmp eq i32 %379, %2
br i1 %380, label %381, label %197
381: ; preds = %377, %184
%382 = phi i8* [ %185, %184 ], [ %378, %377 ]
%383 = add nuw nsw i32 %186, 1
%384 = icmp eq i32 %383, %3
br i1 %384, label %385, label %184
385: ; preds = %180, %381, %59, %13
ret void
}