int BGBMID_ScaleSample2H(short *d, int dl, short *s, int sl) {
  int i, j, k, s1, s2, v;
  float av0, av1, av2, av3, av4;
  float w0, w1, w2, w3, w4, wt;
  float r, p1, p2;
  float f, g;
  if (dl == sl) {
    for (i = 0; i < sl; i++)
      d[i * 2] = s[i * 2];
    return (0);
  }
  if (dl > sl) {
    r = (((float)(sl - 1)) / ((float)dl));
    for (i = 0; i < dl; i++) {
      p1 = i * r;
      j = floor(p1);
      p2 = p1 - j;
      s1 = s[(j)*2];
      s2 = s[(j + 1) * 2];
      v = (s1 * (1 - p2)) + (s2 * p2);
      d[i * 2] = v;
    }
    return (0);
  }
  if (1) {
    s1 = s[0];
    av0 = s1;
    av1 = s1;
    av2 = s1;
    av3 = s1;
    av4 = s1;
    r = (((float)(sl - 1)) / ((float)dl));
    f = (r - 1.0) / 0.5;
    w0 = 1.0 - (f * f);
    f = (r - 2.0) / 1.0;
    w1 = 1.0 - (f * f);
    f = (r - 4.0) / 2.0;
    w2 = 1.0 - (f * f);
    f = (r - 8.0) / 4.0;
    w3 = 1.0 - (f * f);
    f = (r - 16.0) / 8.0;
    w4 = 1.0 - (f * f);
    if (w0 < 0)
      w0 = 0;
    if (w1 < 0)
      w1 = 0;
    if (w2 < 0)
      w2 = 0;
    if (w3 < 0)
      w3 = 0;
    if (w4 < 0)
      w4 = 0;
    wt = w0 + w1 + w2 + w3 + w4;
    if (wt > 0)
      wt = 1.0 / wt;
    for (i = 0; i < dl; i++) {
      p1 = i * r;
      j = floor(p1);
      p2 = p1 - j;
      s1 = s[(j)*2];
      s2 = s[(j + 1) * 2];
      v = (s1 * (1 - p2)) + (s2 * p2);
      av0 = v;
      av1 = (av1 + av0) / 2.0;
      av2 = (av2 + av1) / 2.0;
      av3 = (av3 + av2) / 2.0;
      av4 = (av4 + av3) / 2.0;
      v = (av0 * w0 + av1 * w1 + av2 * w2 + av3 * w3 + av4 * w4) * wt;
      d[i * 2] = v;
    }
    return (0);
  }
  return (0);
}


x86 assembly (clang, -O0):
<BGBMID_ScaleSample2H>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x24(%rbp),%eax
jne    1184 <BGBMID_ScaleSample2H+0x74>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1178 <BGBMID_ScaleSample2H+0x68>
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,2),%dx
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    113c <BGBMID_ScaleSample2H+0x2c>
movl   $0x0,-0x4(%rbp)
jmp    16c4 <BGBMID_ScaleSample2H+0x5b4>
mov    -0x14(%rbp),%eax
cmp    -0x24(%rbp),%eax
jle    1279 <BGBMID_ScaleSample2H+0x169>
mov    -0x24(%rbp),%eax
sub    $0x1,%eax
cvtsi2ss %eax,%xmm0
cvtsi2ssl -0x14(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x6c(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    126d <BGBMID_ScaleSample2H+0x15d>
cvtsi2ssl -0x28(%rbp),%xmm0
mulss  -0x6c(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x70(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1030 <floor@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x2c(%rbp)
movss  -0x70(%rbp),%xmm0
cvtsi2ssl -0x2c(%rbp),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x74(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    %eax,-0x34(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    %eax,-0x38(%rbp)
cvtsi2ssl -0x34(%rbp),%xmm0
movss  0xe06(%rip),%xmm2
subss  -0x74(%rbp),%xmm2
cvtsi2ssl -0x38(%rbp),%xmm1
mulss  -0x74(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
cvttss2si %xmm0,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    11af <BGBMID_ScaleSample2H+0x9f>
movl   $0x0,-0x4(%rbp)
jmp    16c4 <BGBMID_ScaleSample2H+0x5b4>
mov    -0x20(%rbp),%rax
movswl (%rax),%eax
mov    %eax,-0x34(%rbp)
cvtsi2ssl -0x34(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
cvtsi2ssl -0x34(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
cvtsi2ssl -0x34(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
cvtsi2ssl -0x34(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
cvtsi2ssl -0x34(%rbp),%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x24(%rbp),%eax
sub    $0x1,%eax
cvtsi2ss %eax,%xmm0
cvtsi2ssl -0x14(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x6c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd22(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xd3e(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x78(%rbp),%xmm0
mulss  -0x78(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xcf3(%rip),%xmm0
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x6c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xcf5(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xcc9(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x78(%rbp),%xmm0
mulss  -0x78(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xca6(%rip),%xmm0
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x6c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xca0(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xc9c(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x78(%rbp),%xmm0
mulss  -0x78(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xc59(%rip),%xmm0
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  -0x6c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc43(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xc47(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x78(%rbp),%xmm0
mulss  -0x78(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xc0c(%rip),%xmm0
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x6c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xbfe(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xbea(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x78(%rbp),%xmm0
mulss  -0x78(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xbbf(%rip),%xmm0
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x64(%rbp)
xorps  %xmm0,%xmm0
ucomiss -0x54(%rbp),%xmm0
jbe    1463 <BGBMID_ScaleSample2H+0x353>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x54(%rbp)
xorps  %xmm0,%xmm0
ucomiss -0x58(%rbp),%xmm0
jbe    1478 <BGBMID_ScaleSample2H+0x368>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x58(%rbp)
xorps  %xmm0,%xmm0
ucomiss -0x5c(%rbp),%xmm0
jbe    148d <BGBMID_ScaleSample2H+0x37d>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x5c(%rbp)
xorps  %xmm0,%xmm0
ucomiss -0x60(%rbp),%xmm0
jbe    14a2 <BGBMID_ScaleSample2H+0x392>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x60(%rbp)
xorps  %xmm0,%xmm0
ucomiss -0x64(%rbp),%xmm0
jbe    14b7 <BGBMID_ScaleSample2H+0x3a7>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x54(%rbp),%xmm0
addss  -0x58(%rbp),%xmm0
addss  -0x5c(%rbp),%xmm0
addss  -0x60(%rbp),%xmm0
addss  -0x64(%rbp),%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x68(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jbe    1504 <BGBMID_ScaleSample2H+0x3f4>
movss  -0x68(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xb09(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x68(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    16bd <BGBMID_ScaleSample2H+0x5ad>
cvtsi2ssl -0x28(%rbp),%xmm0
mulss  -0x6c(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x70(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1030 <floor@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x2c(%rbp)
movss  -0x70(%rbp),%xmm0
cvtsi2ssl -0x2c(%rbp),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x74(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    %eax,-0x34(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    %eax,-0x38(%rbp)
cvtsi2ssl -0x34(%rbp),%xmm0
movss  0xaaa(%rip),%xmm2
subss  -0x74(%rbp),%xmm2
cvtsi2ssl -0x38(%rbp),%xmm1
mulss  -0x74(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
cvttss2si %xmm0,%eax
mov    %eax,-0x3c(%rbp)
cvtsi2ssl -0x3c(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x44(%rbp),%xmm0
addss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xa5c(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x48(%rbp),%xmm0
addss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xa39(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x4c(%rbp),%xmm0
addss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xa16(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x50(%rbp),%xmm0
addss  -0x4c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x9f3(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x40(%rbp),%xmm1
movss  -0x54(%rbp),%xmm2
movss  -0x44(%rbp),%xmm0
mulss  -0x58(%rbp),%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x48(%rbp),%xmm0
movss  -0x5c(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  -0x4c(%rbp),%xmm1
movss  -0x60(%rbp),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x50(%rbp),%xmm0
movss  -0x64(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mulss  -0x68(%rbp),%xmm0
cvttss2si %xmm0,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    150b <BGBMID_ScaleSample2H+0x3fb>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<BGBMID_ScaleSample2H>:
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x68,%rsp
mov    %rdx,%r12
mov    %rdi,%r14
cmp    %ecx,%esi
jne    1149 <BGBMID_ScaleSample2H+0x39>
test   %esi,%esi
jle    1511 <BGBMID_ScaleSample2H+0x401>
mov    %esi,%ecx
lea    -0x1(%rcx),%rdx
mov    %ecx,%eax
and    $0x3,%eax
cmp    $0x3,%rdx
jae    14ab <BGBMID_ScaleSample2H+0x39b>
xor    %edx,%edx
jmp    14e7 <BGBMID_ScaleSample2H+0x3d7>
jle    1200 <BGBMID_ScaleSample2H+0xf0>
test   %esi,%esi
jle    1511 <BGBMID_ScaleSample2H+0x401>
add    $0xffffffff,%ecx
cvtsi2ss %ecx,%xmm1
cvtsi2ss %esi,%xmm0
divss  %xmm0,%xmm1
movss  %xmm1,0xc(%rsp)
mov    %esi,%r15d
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2ss %ebx,%xmm0
mulss  0xc(%rsp),%xmm0
movss  %xmm0,0x10(%rsp)
call   1030 <floorf@plt>
cvttss2si %xmm0,%eax
cvttps2dq %xmm0,%xmm0
cvtdq2ps %xmm0,%xmm0
movss  0x10(%rsp),%xmm2
subss  %xmm0,%xmm2
lea    (%rax,%rax,1),%ecx
movslq %ecx,%rcx
movswl (%r12,%rcx,2),%ecx
lea    0x2(%rax,%rax,1),%eax
cltq
movswl (%r12,%rax,2),%eax
xorps  %xmm0,%xmm0
cvtsi2ss %ecx,%xmm0
movss  0xe6a(%rip),%xmm1
subss  %xmm2,%xmm1
mulss  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
cvttss2si %xmm0,%eax
mov    %ax,(%r14,%rbx,4)
add    $0x1,%rbx
cmp    %rbx,%r15
jne    1180 <BGBMID_ScaleSample2H+0x70>
jmp    1511 <BGBMID_ScaleSample2H+0x401>
add    $0xffffffff,%ecx
cvtsi2ss %ecx,%xmm9
cvtsi2ss %esi,%xmm0
divss  %xmm0,%xmm9
cvtss2sd %xmm9,%xmm5
movsd  0xde2(%rip),%xmm1
addsd  %xmm5,%xmm1
addsd  %xmm1,%xmm1
cvtsd2ss %xmm1,%xmm1
movss  0xe06(%rip),%xmm2
addss  %xmm9,%xmm2
unpcklps %xmm1,%xmm2
mulps  %xmm2,%xmm2
movaps 0xe0c(%rip),%xmm4
movsd  0xdbc(%rip),%xmm3
addsd  %xmm5,%xmm3
mulsd  0xdb8(%rip),%xmm3
cvtsd2ss %xmm3,%xmm3
subps  %xmm2,%xmm4
mulss  %xmm3,%xmm3
movss  0xdd1(%rip),%xmm0
movaps %xmm0,%xmm8
subss  %xmm3,%xmm8
movsd  0xd9c(%rip),%xmm3
addsd  %xmm5,%xmm3
mulsd  0xd98(%rip),%xmm3
cvtsd2ss %xmm3,%xmm3
mulss  %xmm3,%xmm3
movaps %xmm0,%xmm1
subss  %xmm3,%xmm1
addsd  0xd89(%rip),%xmm5
mulsd  0xd89(%rip),%xmm5
xorps  %xmm3,%xmm3
cvtsd2ss %xmm5,%xmm3
mulss  %xmm3,%xmm3
movaps %xmm0,%xmm2
subss  %xmm3,%xmm2
xorps  %xmm11,%xmm11
maxps  %xmm4,%xmm11
xorps  %xmm10,%xmm10
xorps  %xmm12,%xmm12
maxss  %xmm8,%xmm12
xorps  %xmm8,%xmm8
maxss  %xmm1,%xmm8
xorps  %xmm13,%xmm13
maxss  %xmm2,%xmm13
movaps %xmm11,%xmm14
shufps $0x55,%xmm11,%xmm14
movaps %xmm11,%xmm2
addss  %xmm14,%xmm2
addss  %xmm12,%xmm2
addss  %xmm8,%xmm2
addss  %xmm13,%xmm2
ucomiss %xmm10,%xmm2
jbe    130e <BGBMID_ScaleSample2H+0x1fe>
divss  %xmm2,%xmm0
movaps %xmm0,%xmm2
test   %esi,%esi
jle    1511 <BGBMID_ScaleSample2H+0x401>
movswl (%r12),%eax
xorps  %xmm5,%xmm5
cvtsi2ss %eax,%xmm5
mov    %esi,%r15d
xor    %ebx,%ebx
movaps %xmm5,%xmm6
movaps %xmm5,%xmm4
movaps %xmm5,%xmm3
movss  %xmm9,0x20(%rsp)
movaps %xmm11,0x50(%rsp)
movss  %xmm12,0x1c(%rsp)
movss  %xmm8,0x18(%rsp)
movss  %xmm13,0x14(%rsp)
movaps %xmm14,0x40(%rsp)
movaps %xmm2,0x30(%rsp)
nopl   (%rax)
movss  %xmm3,0x28(%rsp)
movss  %xmm4,0x2c(%rsp)
movss  %xmm6,0xc(%rsp)
movss  %xmm5,0x10(%rsp)
xorps  %xmm0,%xmm0
cvtsi2ss %ebx,%xmm0
mulss  %xmm9,%xmm0
movss  %xmm0,0x24(%rsp)
call   1030 <floorf@plt>
movss  0x28(%rsp),%xmm3
movss  0x2c(%rsp),%xmm4
movss  0xc(%rsp),%xmm6
movss  0x10(%rsp),%xmm5
movaps 0x40(%rsp),%xmm14
movss  0x14(%rsp),%xmm13
movss  0x18(%rsp),%xmm8
movss  0x1c(%rsp),%xmm12
movaps 0x50(%rsp),%xmm11
movss  0xc6c(%rip),%xmm1
movss  0x20(%rsp),%xmm9
cvttss2si %xmm0,%eax
cvttps2dq %xmm0,%xmm0
cvtdq2ps %xmm0,%xmm0
lea    (%rax,%rax,1),%ecx
movslq %ecx,%rcx
movswl (%r12,%rcx,2),%ecx
lea    0x2(%rax,%rax,1),%eax
cltq
movswl (%r12,%rax,2),%eax
movss  0x24(%rsp),%xmm2
subss  %xmm0,%xmm2
movaps %xmm1,%xmm0
subss  %xmm2,%xmm0
movaps %xmm2,%xmm7
xorps  %xmm1,%xmm1
cvtsi2ss %ecx,%xmm1
xorps  %xmm2,%xmm2
cvtsi2ss %eax,%xmm2
mulss  %xmm1,%xmm0
mulss  %xmm7,%xmm2
addss  %xmm0,%xmm2
cvttps2dq %xmm2,%xmm0
cvtdq2ps %xmm0,%xmm0
addss  %xmm0,%xmm3
movss  0xc07(%rip),%xmm2
mulss  %xmm2,%xmm3
addss  %xmm3,%xmm4
mulss  %xmm2,%xmm4
addss  %xmm4,%xmm6
mulss  %xmm2,%xmm6
addss  %xmm6,%xmm5
movaps %xmm11,%xmm1
mulss  %xmm2,%xmm5
mulss  %xmm3,%xmm1
mulss  %xmm14,%xmm0
movaps %xmm4,%xmm2
mulss  %xmm12,%xmm2
addss  %xmm1,%xmm0
addss  %xmm0,%xmm2
movaps %xmm6,%xmm0
mulss  %xmm8,%xmm0
movaps %xmm5,%xmm1
mulss  %xmm13,%xmm1
addss  %xmm2,%xmm0
movaps 0x30(%rsp),%xmm2
addss  %xmm0,%xmm1
mulss  %xmm2,%xmm1
cvttss2si %xmm1,%eax
mov    %ax,(%r14,%rbx,4)
add    $0x1,%rbx
cmp    %rbx,%r15
jne    1360 <BGBMID_ScaleSample2H+0x250>
jmp    1511 <BGBMID_ScaleSample2H+0x401>
and    $0xfffffffc,%ecx
xor    %edx,%edx
movzwl (%r12,%rdx,4),%esi
mov    %si,(%r14,%rdx,4)
movzwl 0x4(%r12,%rdx,4),%esi
mov    %si,0x4(%r14,%rdx,4)
movzwl 0x8(%r12,%rdx,4),%esi
mov    %si,0x8(%r14,%rdx,4)
movzwl 0xc(%r12,%rdx,4),%esi
mov    %si,0xc(%r14,%rdx,4)
add    $0x4,%rdx
cmp    %rdx,%rcx
jne    14b0 <BGBMID_ScaleSample2H+0x3a0>
test   %rax,%rax
je     1511 <BGBMID_ScaleSample2H+0x401>
lea    (%r14,%rdx,4),%rcx
lea    (%r12,%rdx,4),%rdx
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
movzwl (%rdx,%rsi,4),%edi
mov    %di,(%rcx,%rsi,4)
add    $0x1,%rsi
cmp    %rsi,%rax
jne    1500 <BGBMID_ScaleSample2H+0x3f0>
xor    %eax,%eax
add    $0x68,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
define i32 @BGBMID_ScaleSample2H(i16* %0, i32 %1, i16* %2, i32 %3) {
%5 = alloca i32
%6 = alloca i16*
%7 = alloca i32
%8 = alloca i16*
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca float
%17 = alloca float
%18 = alloca float
%19 = alloca float
%20 = alloca float
%21 = alloca float
%22 = alloca float
%23 = alloca float
%24 = alloca float
%25 = alloca float
%26 = alloca float
%27 = alloca float
%28 = alloca float
%29 = alloca float
%30 = alloca float
%31 = alloca float
store i16* %0, i16** %6
store i32 %1, i32* %7
store i16* %2, i16** %8
store i32 %3, i32* %9
%32 = load i32, i32* %7
%33 = load i32, i32* %9
%34 = icmp eq i32 %32, %33
br i1 %34, label %35, label %56
35: ; preds = %4
store i32 0, i32* %10
br label %36
36: ; preds = %52, %35
%37 = load i32, i32* %10
%38 = load i32, i32* %9
%39 = icmp slt i32 %37, %38
br i1 %39, label %40, label %55
40: ; preds = %36
%41 = load i16*, i16** %8
%42 = load i32, i32* %10
%43 = mul nsw i32 %42, 2
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds i16, i16* %41, i64 %44
%46 = load i16, i16* %45
%47 = load i16*, i16** %6
%48 = load i32, i32* %10
%49 = mul nsw i32 %48, 2
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds i16, i16* %47, i64 %50
store i16 %46, i16* %51
br label %52
52: ; preds = %40
%53 = load i32, i32* %10
%54 = add nsw i32 %53, 1
store i32 %54, i32* %10
br label %36
55: ; preds = %36
store i32 0, i32* %5
br label %330
56: ; preds = %4
%57 = load i32, i32* %7
%58 = load i32, i32* %9
%59 = icmp sgt i32 %57, %58
br i1 %59, label %60, label %120
60: ; preds = %56
%61 = load i32, i32* %9
%62 = sub nsw i32 %61, 1
%63 = sitofp i32 %62 to float
%64 = load i32, i32* %7
%65 = sitofp i32 %64 to float
%66 = fdiv float %63, %65
store float %66, float* %27
store i32 0, i32* %10
br label %67
67: ; preds = %116, %60
%68 = load i32, i32* %10
%69 = load i32, i32* %7
%70 = icmp slt i32 %68, %69
br i1 %70, label %71, label %119
71: ; preds = %67
%72 = load i32, i32* %10
%73 = sitofp i32 %72 to float
%74 = load float, float* %27
%75 = fmul float %73, %74
store float %75, float* %28
%76 = load float, float* %28
%77 = fpext float %76 to double
%78 = call double @llvm.floor.f64(double %77)
%79 = fptosi double %78 to i32
store i32 %79, i32* %11
%80 = load float, float* %28
%81 = load i32, i32* %11
%82 = sitofp i32 %81 to float
%83 = fsub float %80, %82
store float %83, float* %29
%84 = load i16*, i16** %8
%85 = load i32, i32* %11
%86 = mul nsw i32 %85, 2
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds i16, i16* %84, i64 %87
%89 = load i16, i16* %88
%90 = sext i16 %89 to i32
store i32 %90, i32* %13
%91 = load i16*, i16** %8
%92 = load i32, i32* %11
%93 = add nsw i32 %92, 1
%94 = mul nsw i32 %93, 2
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds i16, i16* %91, i64 %95
%97 = load i16, i16* %96
%98 = sext i16 %97 to i32
store i32 %98, i32* %14
%99 = load i32, i32* %13
%100 = sitofp i32 %99 to float
%101 = load float, float* %29
%102 = fsub float 1.000000e+00, %101
%103 = load i32, i32* %14
%104 = sitofp i32 %103 to float
%105 = load float, float* %29
%106 = fmul float %104, %105
%107 = call float @llvm.fmuladd.f32(float %100, float %102, float %106)
%108 = fptosi float %107 to i32
store i32 %108, i32* %15
%109 = load i32, i32* %15
%110 = trunc i32 %109 to i16
%111 = load i16*, i16** %6
%112 = load i32, i32* %10
%113 = mul nsw i32 %112, 2
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds i16, i16* %111, i64 %114
store i16 %110, i16* %115
br label %116
116: ; preds = %71
%117 = load i32, i32* %10
%118 = add nsw i32 %117, 1
store i32 %118, i32* %10
br label %67
119: ; preds = %67
store i32 0, i32* %5
br label %330
120: ; preds = %56
%121 = load i16*, i16** %8
%122 = getelementptr inbounds i16, i16* %121, i64 0
%123 = load i16, i16* %122
%124 = sext i16 %123 to i32
store i32 %124, i32* %13
%125 = load i32, i32* %13
%126 = sitofp i32 %125 to float
store float %126, float* %16
%127 = load i32, i32* %13
%128 = sitofp i32 %127 to float
store float %128, float* %17
%129 = load i32, i32* %13
%130 = sitofp i32 %129 to float
store float %130, float* %18
%131 = load i32, i32* %13
%132 = sitofp i32 %131 to float
store float %132, float* %19
%133 = load i32, i32* %13
%134 = sitofp i32 %133 to float
store float %134, float* %20
%135 = load i32, i32* %9
%136 = sub nsw i32 %135, 1
%137 = sitofp i32 %136 to float
%138 = load i32, i32* %7
%139 = sitofp i32 %138 to float
%140 = fdiv float %137, %139
store float %140, float* %27
%141 = load float, float* %27
%142 = fpext float %141 to double
%143 = fsub double %142, 1.000000e+00
%144 = fdiv double %143, 5.000000e-01
%145 = fptrunc double %144 to float
store float %145, float* %30
%146 = load float, float* %30
%147 = load float, float* %30
%148 = fmul float %146, %147
%149 = fpext float %148 to double
%150 = fsub double 1.000000e+00, %149
%151 = fptrunc double %150 to float
store float %151, float* %21
%152 = load float, float* %27
%153 = fpext float %152 to double
%154 = fsub double %153, 2.000000e+00
%155 = fdiv double %154, 1.000000e+00
%156 = fptrunc double %155 to float
store float %156, float* %30
%157 = load float, float* %30
%158 = load float, float* %30
%159 = fmul float %157, %158
%160 = fpext float %159 to double
%161 = fsub double 1.000000e+00, %160
%162 = fptrunc double %161 to float
store float %162, float* %22
%163 = load float, float* %27
%164 = fpext float %163 to double
%165 = fsub double %164, 4.000000e+00
%166 = fdiv double %165, 2.000000e+00
%167 = fptrunc double %166 to float
store float %167, float* %30
%168 = load float, float* %30
%169 = load float, float* %30
%170 = fmul float %168, %169
%171 = fpext float %170 to double
%172 = fsub double 1.000000e+00, %171
%173 = fptrunc double %172 to float
store float %173, float* %23
%174 = load float, float* %27
%175 = fpext float %174 to double
%176 = fsub double %175, 8.000000e+00
%177 = fdiv double %176, 4.000000e+00
%178 = fptrunc double %177 to float
store float %178, float* %30
%179 = load float, float* %30
%180 = load float, float* %30
%181 = fmul float %179, %180
%182 = fpext float %181 to double
%183 = fsub double 1.000000e+00, %182
%184 = fptrunc double %183 to float
store float %184, float* %24
%185 = load float, float* %27
%186 = fpext float %185 to double
%187 = fsub double %186, 1.600000e+01
%188 = fdiv double %187, 8.000000e+00
%189 = fptrunc double %188 to float
store float %189, float* %30
%190 = load float, float* %30
%191 = load float, float* %30
%192 = fmul float %190, %191
%193 = fpext float %192 to double
%194 = fsub double 1.000000e+00, %193
%195 = fptrunc double %194 to float
store float %195, float* %25
%196 = load float, float* %21
%197 = fcmp olt float %196, 0.000000e+00
br i1 %197, label %198, label %199
198: ; preds = %120
store float 0.000000e+00, float* %21
br label %199
199: ; preds = %198, %120
%200 = load float, float* %22
%201 = fcmp olt float %200, 0.000000e+00
br i1 %201, label %202, label %203
202: ; preds = %199
store float 0.000000e+00, float* %22
br label %203
203: ; preds = %202, %199
%204 = load float, float* %23
%205 = fcmp olt float %204, 0.000000e+00
br i1 %205, label %206, label %207
206: ; preds = %203
store float 0.000000e+00, float* %23
br label %207
207: ; preds = %206, %203
%208 = load float, float* %24
%209 = fcmp olt float %208, 0.000000e+00
br i1 %209, label %210, label %211
210: ; preds = %207
store float 0.000000e+00, float* %24
br label %211
211: ; preds = %210, %207
%212 = load float, float* %25
%213 = fcmp olt float %212, 0.000000e+00
br i1 %213, label %214, label %215
214: ; preds = %211
store float 0.000000e+00, float* %25
br label %215
215: ; preds = %214, %211
%216 = load float, float* %21
%217 = load float, float* %22
%218 = fadd float %216, %217
%219 = load float, float* %23
%220 = fadd float %218, %219
%221 = load float, float* %24
%222 = fadd float %220, %221
%223 = load float, float* %25
%224 = fadd float %222, %223
store float %224, float* %26
%225 = load float, float* %26
%226 = fcmp ogt float %225, 0.000000e+00
br i1 %226, label %227, label %232
227: ; preds = %215
%228 = load float, float* %26
%229 = fpext float %228 to double
%230 = fdiv double 1.000000e+00, %229
%231 = fptrunc double %230 to float
store float %231, float* %26
br label %232
232: ; preds = %227, %215
store i32 0, i32* %10
br label %233
233: ; preds = %326, %232
%234 = load i32, i32* %10
%235 = load i32, i32* %7
%236 = icmp slt i32 %234, %235
br i1 %236, label %237, label %329
237: ; preds = %233
%238 = load i32, i32* %10
%239 = sitofp i32 %238 to float
%240 = load float, float* %27
%241 = fmul float %239, %240
store float %241, float* %28
%242 = load float, float* %28
%243 = fpext float %242 to double
%244 = call double @llvm.floor.f64(double %243)
%245 = fptosi double %244 to i32
store i32 %245, i32* %11
%246 = load float, float* %28
%247 = load i32, i32* %11
%248 = sitofp i32 %247 to float
%249 = fsub float %246, %248
store float %249, float* %29
%250 = load i16*, i16** %8
%251 = load i32, i32* %11
%252 = mul nsw i32 %251, 2
%253 = sext i32 %252 to i64
%254 = getelementptr inbounds i16, i16* %250, i64 %253
%255 = load i16, i16* %254
%256 = sext i16 %255 to i32
store i32 %256, i32* %13
%257 = load i16*, i16** %8
%258 = load i32, i32* %11
%259 = add nsw i32 %258, 1
%260 = mul nsw i32 %259, 2
%261 = sext i32 %260 to i64
%262 = getelementptr inbounds i16, i16* %257, i64 %261
%263 = load i16, i16* %262
%264 = sext i16 %263 to i32
store i32 %264, i32* %14
%265 = load i32, i32* %13
%266 = sitofp i32 %265 to float
%267 = load float, float* %29
%268 = fsub float 1.000000e+00, %267
%269 = load i32, i32* %14
%270 = sitofp i32 %269 to float
%271 = load float, float* %29
%272 = fmul float %270, %271
%273 = call float @llvm.fmuladd.f32(float %266, float %268, float %272)
%274 = fptosi float %273 to i32
store i32 %274, i32* %15
%275 = load i32, i32* %15
%276 = sitofp i32 %275 to float
store float %276, float* %16
%277 = load float, float* %17
%278 = load float, float* %16
%279 = fadd float %277, %278
%280 = fpext float %279 to double
%281 = fdiv double %280, 2.000000e+00
%282 = fptrunc double %281 to float
store float %282, float* %17
%283 = load float, float* %18
%284 = load float, float* %17
%285 = fadd float %283, %284
%286 = fpext float %285 to double
%287 = fdiv double %286, 2.000000e+00
%288 = fptrunc double %287 to float
store float %288, float* %18
%289 = load float, float* %19
%290 = load float, float* %18
%291 = fadd float %289, %290
%292 = fpext float %291 to double
%293 = fdiv double %292, 2.000000e+00
%294 = fptrunc double %293 to float
store float %294, float* %19
%295 = load float, float* %20
%296 = load float, float* %19
%297 = fadd float %295, %296
%298 = fpext float %297 to double
%299 = fdiv double %298, 2.000000e+00
%300 = fptrunc double %299 to float
store float %300, float* %20
%301 = load float, float* %16
%302 = load float, float* %21
%303 = load float, float* %17
%304 = load float, float* %22
%305 = fmul float %303, %304
%306 = call float @llvm.fmuladd.f32(float %301, float %302, float %305)
%307 = load float, float* %18
%308 = load float, float* %23
%309 = call float @llvm.fmuladd.f32(float %307, float %308, float %306)
%310 = load float, float* %19
%311 = load float, float* %24
%312 = call float @llvm.fmuladd.f32(float %310, float %311, float %309)
%313 = load float, float* %20
%314 = load float, float* %25
%315 = call float @llvm.fmuladd.f32(float %313, float %314, float %312)
%316 = load float, float* %26
%317 = fmul float %315, %316
%318 = fptosi float %317 to i32
store i32 %318, i32* %15
%319 = load i32, i32* %15
%320 = trunc i32 %319 to i16
%321 = load i16*, i16** %6
%322 = load i32, i32* %10
%323 = mul nsw i32 %322, 2
%324 = sext i32 %323 to i64
%325 = getelementptr inbounds i16, i16* %321, i64 %324
store i16 %320, i16* %325
br label %326
326: ; preds = %237
%327 = load i32, i32* %10
%328 = add nsw i32 %327, 1
store i32 %328, i32* %10
br label %233
329: ; preds = %233
store i32 0, i32* %5
br label %330
330: ; preds = %329, %119, %55
%331 = load i32, i32* %5
ret i32 %331
}

LLVM IR (-O2):
define i32 @BGBMID_ScaleSample2H(i16* nocapture writeonly %0, i32 %1, i16* nocapture %2, i32 %3) {
%5 = icmp eq i32 %1, %3
br i1 %5, label %6, label %40
6: ; preds = %4
%7 = icmp sgt i32 %1, 0
br i1 %7, label %8, label %190
8: ; preds = %6
%9 = zext i32 %1 to i64
%10 = add nsw i64 %9, -1
%11 = and i64 %9, 3
%12 = icmp ult i64 %10, 3
br i1 %12, label %177, label %13
13: ; preds = %8
%14 = and i64 %9, 4294967292
br label %15
15: ; preds = %15, %13
%16 = phi i64 [ 0, %13 ], [ %37, %15 ]
%17 = phi i64 [ 0, %13 ], [ %38, %15 ]
%18 = shl nuw nsw i64 %16, 1
%19 = getelementptr inbounds i16, i16* %2, i64 %18
%20 = load i16, i16* %19
%21 = getelementptr inbounds i16, i16* %0, i64 %18
store i16 %20, i16* %21
%22 = shl nuw i64 %16, 1
%23 = or i64 %22, 2
%24 = getelementptr inbounds i16, i16* %2, i64 %23
%25 = load i16, i16* %24
%26 = getelementptr inbounds i16, i16* %0, i64 %23
store i16 %25, i16* %26
%27 = shl nuw i64 %16, 1
%28 = or i64 %27, 4
%29 = getelementptr inbounds i16, i16* %2, i64 %28
%30 = load i16, i16* %29
%31 = getelementptr inbounds i16, i16* %0, i64 %28
store i16 %30, i16* %31
%32 = shl nuw i64 %16, 1
%33 = or i64 %32, 6
%34 = getelementptr inbounds i16, i16* %2, i64 %33
%35 = load i16, i16* %34
%36 = getelementptr inbounds i16, i16* %0, i64 %33
store i16 %35, i16* %36
%37 = add nuw nsw i64 %16, 4
%38 = add i64 %17, 4
%39 = icmp eq i64 %38, %14
br i1 %39, label %177, label %15
40: ; preds = %4
%41 = icmp sgt i32 %1, %3
br i1 %41, label %42, label %78
42: ; preds = %40
%43 = add nsw i32 %3, -1
%44 = sitofp i32 %43 to float
%45 = sitofp i32 %1 to float
%46 = fdiv float %44, %45
%47 = icmp sgt i32 %1, 0
br i1 %47, label %48, label %190
48: ; preds = %42
%49 = zext i32 %1 to i64
br label %50
50: ; preds = %48, %50
%51 = phi i64 [ 0, %48 ], [ %76, %50 ]
%52 = trunc i64 %51 to i32
%53 = sitofp i32 %52 to float
%54 = fmul float %46, %53
%55 = tail call float @llvm.floor.f32(float %54)
%56 = fptosi float %55 to i32
%57 = sitofp i32 %56 to float
%58 = fsub float %54, %57
%59 = shl nsw i32 %56, 1
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds i16, i16* %2, i64 %60
%62 = load i16, i16* %61
%63 = add i32 %59, 2
%64 = sext i32 %63 to i64
%65 = getelementptr inbounds i16, i16* %2, i64 %64
%66 = load i16, i16* %65
%67 = sitofp i16 %62 to float
%68 = fsub float 1.000000e+00, %58
%69 = sitofp i16 %66 to float
%70 = fmul float %58, %69
%71 = tail call float @llvm.fmuladd.f32(float %67, float %68, float %70)
%72 = fptosi float %71 to i32
%73 = trunc i32 %72 to i16
%74 = shl nuw nsw i64 %51, 1
%75 = getelementptr inbounds i16, i16* %0, i64 %74
store i16 %73, i16* %75
%76 = add nuw nsw i64 %51, 1
%77 = icmp eq i64 %76, %49
br i1 %77, label %190, label %50
78: ; preds = %40
%79 = load i16, i16* %2
%80 = sitofp i16 %79 to float
%81 = add nsw i32 %3, -1
%82 = sitofp i32 %81 to float
%83 = sitofp i32 %1 to float
%84 = fdiv float %82, %83
%85 = fpext float %84 to double
%86 = fadd double %85, -1.000000e+00
%87 = fmul double %86, 2.000000e+00
%88 = fptrunc double %87 to float
%89 = fadd float %84, -2.000000e+00
%90 = insertelement <2 x float> poison, float %89, i64 0
%91 = insertelement <2 x float> %90, float %88, i64 1
%92 = fmul <2 x float> %91, %91
%93 = fsub <2 x float> <float 1.000000e+00, float 1.000000e+00>, %92
%94 = fadd double %85, -4.000000e+00
%95 = fmul double %94, 5.000000e-01
%96 = fptrunc double %95 to float
%97 = fmul float %96, %96
%98 = fsub float 1.000000e+00, %97
%99 = fadd double %85, -8.000000e+00
%100 = fmul double %99, 2.500000e-01
%101 = fptrunc double %100 to float
%102 = fmul float %101, %101
%103 = fsub float 1.000000e+00, %102
%104 = fadd double %85, -1.600000e+01
%105 = fmul double %104, 1.250000e-01
%106 = fptrunc double %105 to float
%107 = fmul float %106, %106
%108 = fsub float 1.000000e+00, %107
%109 = fcmp olt <2 x float> %93, zeroinitializer
%110 = select <2 x i1> %109, <2 x float> zeroinitializer, <2 x float> %93
%111 = fcmp olt float %98, 0.000000e+00
%112 = select i1 %111, float 0.000000e+00, float %98
%113 = fcmp olt float %103, 0.000000e+00
%114 = select i1 %113, float 0.000000e+00, float %103
%115 = fcmp olt float %108, 0.000000e+00
%116 = select i1 %115, float 0.000000e+00, float %108
%117 = extractelement <2 x float> %110, i64 0
%118 = extractelement <2 x float> %110, i64 1
%119 = fadd float %117, %118
%120 = fadd float %112, %119
%121 = fadd float %114, %120
%122 = fadd float %116, %121
%123 = fcmp ogt float %122, 0.000000e+00
%124 = fdiv float 1.000000e+00, %122
%125 = select i1 %123, float %124, float %122
%126 = icmp sgt i32 %1, 0
br i1 %126, label %127, label %190
127: ; preds = %78
%128 = zext i32 %1 to i64
br label %129
129: ; preds = %127, %129
%130 = phi i64 [ 0, %127 ], [ %175, %129 ]
%131 = phi float [ %80, %127 ], [ %164, %129 ]
%132 = phi float [ %80, %127 ], [ %162, %129 ]
%133 = phi float [ %80, %127 ], [ %160, %129 ]
%134 = phi float [ %80, %127 ], [ %158, %129 ]
%135 = trunc i64 %130 to i32
%136 = sitofp i32 %135 to float
%137 = fmul float %84, %136
%138 = tail call float @llvm.floor.f32(float %137)
%139 = fptosi float %138 to i32
%140 = sitofp i32 %139 to float
%141 = fsub float %137, %140
%142 = shl nsw i32 %139, 1
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds i16, i16* %2, i64 %143
%145 = load i16, i16* %144
%146 = add i32 %142, 2
%147 = sext i32 %146 to i64
%148 = getelementptr inbounds i16, i16* %2, i64 %147
%149 = load i16, i16* %148
%150 = sitofp i16 %145 to float
%151 = fsub float 1.000000e+00, %141
%152 = sitofp i16 %149 to float
%153 = fmul float %141, %152
%154 = tail call float @llvm.fmuladd.f32(float %150, float %151, float %153)
%155 = fptosi float %154 to i32
%156 = sitofp i32 %155 to float
%157 = fadd float %134, %156
%158 = fmul float %157, 5.000000e-01
%159 = fadd float %133, %158
%160 = fmul float %159, 5.000000e-01
%161 = fadd float %132, %160
%162 = fmul float %161, 5.000000e-01
%163 = fadd float %131, %162
%164 = fmul float %163, 5.000000e-01
%165 = fmul float %117, %158
%166 = tail call float @llvm.fmuladd.f32(float %156, float %118, float %165)
%167 = tail call float @llvm.fmuladd.f32(float %160, float %112, float %166)
%168 = tail call float @llvm.fmuladd.f32(float %162, float %114, float %167)
%169 = tail call float @llvm.fmuladd.f32(float %164, float %116, float %168)
%170 = fmul float %125, %169
%171 = fptosi float %170 to i32
%172 = trunc i32 %171 to i16
%173 = shl nuw nsw i64 %130, 1
%174 = getelementptr inbounds i16, i16* %0, i64 %173
store i16 %172, i16* %174
%175 = add nuw nsw i64 %130, 1
%176 = icmp eq i64 %175, %128
br i1 %176, label %190, label %129
177: ; preds = %15, %8
%178 = phi i64 [ 0, %8 ], [ %37, %15 ]
%179 = icmp eq i64 %11, 0
br i1 %179, label %190, label %180
180: ; preds = %177, %180
%181 = phi i64 [ %187, %180 ], [ %178, %177 ]
%182 = phi i64 [ %188, %180 ], [ 0, %177 ]
%183 = shl nuw nsw i64 %181, 1
%184 = getelementptr inbounds i16, i16* %2, i64 %183
%185 = load i16, i16* %184
%186 = getelementptr inbounds i16, i16* %0, i64 %183
store i16 %185, i16* %186
%187 = add nuw nsw i64 %181, 1
%188 = add i64 %182, 1
%189 = icmp eq i64 %188, %11
br i1 %189, label %190, label %180
190: ; preds = %129, %50, %177, %180, %78, %42, %6
ret i32 0
}