void pet_c_oplem_dda(unsigned short int *X1, int nx1, unsigned short int *Y1,
                     int ny1, unsigned short int *Z1, int nz1,
                     unsigned short int *X2, int nx2, unsigned short int *Y2,
                     int ny2, unsigned short int *Z2, int nz2, float *im,
                     int nim1, int nim2, int nim3, float *NM, int nm1, int nm2,
                     int nm3, int nsub) {
  int length, lengthy, lengthz, ilor, n;
  float flength, Qi;
  float lx, ly, lz;
  int fxinc, fyinc, fzinc, fx, fy, fz;
  int x1, y1, z1, x2, y2, z2, diffx, diffy, diffz;
  int step = nim2 * nim3;
  int ndata, ind;
  if (nim1 > nim2) {
    ndata = nim1;
  }
  if (nim3 > ndata) {
    ndata = nim3;
  }
  ndata += ndata / 3;
  int *buf = (int *)malloc(ndata * sizeof(int));
  step = nim2 * nim3;
  int lor_start, lor_stop, nlor, isub;
  int nvox = step * nim1;
  unsigned int mem_size_F = nvox * sizeof(float);
  float *F = (float *)malloc(mem_size_F);
  for (n = 0; n < nvox; ++n) {
    NM[n] = 1.0f / NM[n];
  }
  for (isub = 0; isub < nsub; ++isub) {
    lor_start = (int)((float)nx1 / nsub * isub + 0.5f);
    lor_stop = (int)((float)nx1 / nsub * (isub + 1) + 0.5f);
    nlor = lor_stop - lor_start;
    memset(F, 0, mem_size_F);
    for (ilor = lor_start; ilor < lor_stop; ++ilor) {
      Qi = 0.0f;
      x1 = X1[ilor];
      x2 = X2[ilor];
      y1 = Y1[ilor];
      y2 = Y2[ilor];
      z1 = Z1[ilor];
      z2 = Z2[ilor];
      diffx = x2 - x1;
      diffy = y2 - y1;
      diffz = z2 - z1;
      lx = abs(diffx);
      ly = abs(diffy);
      lz = abs(diffz);
      length = ly;
      if (lx > length) {
        length = lx;
      }
      if (lz > length) {
        length = lz;
      }
      flength = 1.0f / (float)length;
      fxinc = ((int)diffx * flength * (int)(pow(2, 23)));
      fyinc = ((int)diffy * flength * (int)(pow(2, 23)));
      fzinc = ((int)diffz * flength * (int)(pow(2, 23)));
      fx = ((int)x1 * (int)(pow(2, 23)));
      fy = ((int)y1 * (int)(pow(2, 23)));
      fz = ((int)z1 * (int)(pow(2, 23)));
      for (n = 0; n < length; ++n) {
        ind = (fz >> 23) * step + (fy >> 23) * nim3 + (fx >> 23);
        buf[n] = ind;
        Qi += im[ind];
        fx = fx + fxinc;
        fy = fy + fyinc;
        fz = fz + fzinc;
      }
      if (Qi == 0.0f) {
        continue;
      }
      Qi = 1.0f / Qi;
      for (n = 0; n < length; ++n) {
        F[buf[n]] += Qi;
      }
    }
    for (n = 0; n < nvox; ++n) {
      im[n] = im[n] * F[n] * NM[n];
    }
  }
  free(buf);
  free(F);
}


x86 assembly (clang, -O0):
<pet_c_oplem_dda>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
mov    0x80(%rbp),%eax
mov    0x78(%rbp),%eax
mov    0x70(%rbp),%eax
mov    0x68(%rbp),%eax
mov    0x60(%rbp),%rax
mov    0x58(%rbp),%eax
mov    0x50(%rbp),%eax
mov    0x48(%rbp),%eax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%eax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9d,-0x2c(%rbp)
mov    0x50(%rbp),%eax
imul   0x58(%rbp),%eax
mov    %eax,-0x94(%rbp)
mov    0x48(%rbp),%eax
cmp    0x50(%rbp),%eax
jle    11c8 <pet_c_oplem_dda+0x78>
mov    0x48(%rbp),%eax
mov    %eax,-0x98(%rbp)
mov    0x58(%rbp),%eax
cmp    -0x98(%rbp),%eax
jle    11e0 <pet_c_oplem_dda+0x90>
mov    0x58(%rbp),%eax
mov    %eax,-0x98(%rbp)
mov    -0x98(%rbp),%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
add    -0x98(%rbp),%eax
mov    %eax,-0x98(%rbp)
movslq -0x98(%rbp),%rdi
shl    $0x2,%rdi
call   1060 <malloc@plt>
mov    %rax,-0xa8(%rbp)
mov    0x50(%rbp),%eax
imul   0x58(%rbp),%eax
mov    %eax,-0x94(%rbp)
mov    -0x94(%rbp),%eax
imul   0x48(%rbp),%eax
mov    %eax,-0xbc(%rbp)
movslq -0xbc(%rbp),%rax
shl    $0x2,%rax
mov    %eax,-0xc0(%rbp)
mov    -0xc0(%rbp),%eax
mov    %eax,%edi
call   1060 <malloc@plt>
mov    %rax,-0xc8(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0xbc(%rbp),%eax
jge    1299 <pet_c_oplem_dda+0x149>
mov    0x60(%rbp),%rax
movslq -0x40(%rbp),%rcx
movss  0xd8b(%rip),%xmm0
divss  (%rax,%rcx,4),%xmm0
mov    0x60(%rbp),%rax
movslq -0x40(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    125a <pet_c_oplem_dda+0x10a>
movl   $0x0,-0xb8(%rbp)
mov    -0xb8(%rbp),%eax
cmp    0x80(%rbp),%eax
jge    176a <pet_c_oplem_dda+0x61a>
cvtsi2ssl -0xc(%rbp),%xmm0
cvtsi2ssl 0x80(%rbp),%xmm1
divss  %xmm1,%xmm0
cvtsi2ssl -0xb8(%rbp),%xmm1
ff
mulss  %xmm1,%xmm0
movss  0xd26(%rip),%xmm1
addss  %xmm1,%xmm0
cvttss2si %xmm0,%eax
mov    %eax,-0xac(%rbp)
cvtsi2ssl -0xc(%rbp),%xmm0
cvtsi2ssl 0x80(%rbp),%xmm1
divss  %xmm1,%xmm0
mov    -0xb8(%rbp),%eax
add    $0x1,%eax
cvtsi2ss %eax,%xmm1
mulss  %xmm1,%xmm0
movss  0xcee(%rip),%xmm1
addss  %xmm1,%xmm0
cvttss2si %xmm0,%eax
mov    %eax,-0xb0(%rbp)
mov    -0xb0(%rbp),%eax
sub    -0xac(%rbp),%eax
mov    %eax,-0xb4(%rbp)
mov    -0xc8(%rbp),%rdi
mov    -0xc0(%rbp),%eax
mov    %eax,%edx
xor    %esi,%esi
call   1050 <memset@plt>
mov    -0xac(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0xb0(%rbp),%eax
jge    16f6 <pet_c_oplem_dda+0x5a6>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movzwl (%rax,%rcx,2),%eax
mov    %eax,-0x70(%rbp)
mov    0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movzwl (%rax,%rcx,2),%eax
mov    %eax,-0x7c(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movzwl (%rax,%rcx,2),%eax
mov    %eax,-0x74(%rbp)
mov    0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movzwl (%rax,%rcx,2),%eax
mov    %eax,-0x80(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movzwl (%rax,%rcx,2),%eax
mov    %eax,-0x78(%rbp)
mov    0x30(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movzwl (%rax,%rcx,2),%eax
mov    %eax,-0x84(%rbp)
mov    -0x7c(%rbp),%eax
sub    -0x70(%rbp),%eax
mov    %eax,-0x88(%rbp)
mov    -0x80(%rbp),%eax
sub    -0x74(%rbp),%eax
mov    %eax,-0x8c(%rbp)
mov    -0x84(%rbp),%eax
sub    -0x78(%rbp),%eax
mov    %eax,-0x90(%rbp)
mov    -0x88(%rbp),%edi
call   1040 <abs@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x8c(%rbp),%edi
call   1040 <abs@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x90(%rbp),%edi
call   1040 <abs@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x54(%rbp)
cvttss2si -0x50(%rbp),%eax
mov    %eax,-0x30(%rbp)
movss  -0x4c(%rbp),%xmm0
cvtsi2ssl -0x30(%rbp),%xmm1
ucomiss %xmm1,%xmm0
jbe    144b <pet_c_oplem_dda+0x2fb>
cvttss2si -0x4c(%rbp),%eax
mov    %eax,-0x30(%rbp)
movss  -0x54(%rbp),%xmm0
cvtsi2ssl -0x30(%rbp),%xmm1
ucomiss %xmm1,%xmm0
jbe    1466 <pet_c_oplem_dda+0x316>
cvttss2si -0x54(%rbp),%eax
mov    %eax,-0x30(%rbp)
cvtsi2ssl -0x30(%rbp),%xmm1
movss  0xb91(%rip),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,-0x44(%rbp)
cvtsi2ssl -0x88(%rbp),%xmm0
ff
mulss  -0x44(%rbp),%xmm0
movss  %xmm0,-0xe0(%rbp)
ff
movsd  0xb6f(%rip),%xmm0
movsd  0xb6f(%rip),%xmm1
call   1070 <pow@plt>
movaps %xmm0,%xmm1
movss  -0xe0(%rbp),%xmm0
ff
cvttsd2si %xmm1,%eax
cvtsi2ss %eax,%xmm1
mulss  %xmm1,%xmm0
cvttss2si %xmm0,%eax
mov    %eax,-0x58(%rbp)
cvtsi2ssl -0x8c(%rbp),%xmm0
ff
mulss  -0x44(%rbp),%xmm0
movss  %xmm0,-0xdc(%rbp)
ff
movsd  0xb27(%rip),%xmm0
movsd  0xb27(%rip),%xmm1
call   1070 <pow@plt>
movaps %xmm0,%xmm1
movss  -0xdc(%rbp),%xmm0
ff
cvttsd2si %xmm1,%eax
cvtsi2ss %eax,%xmm1
mulss  %xmm1,%xmm0
cvttss2si %xmm0,%eax
mov    %eax,-0x5c(%rbp)
cvtsi2ssl -0x90(%rbp),%xmm0
ff
mulss  -0x44(%rbp),%xmm0
movss  %xmm0,-0xd8(%rbp)
ff
movsd  0xadf(%rip),%xmm0
movsd  0xadf(%rip),%xmm1
call   1070 <pow@plt>
movaps %xmm0,%xmm1
movss  -0xd8(%rbp),%xmm0
ff
cvttsd2si %xmm1,%eax
cvtsi2ss %eax,%xmm1
mulss  %xmm1,%xmm0
cvttss2si %xmm0,%eax
mov    %eax,-0x60(%rbp)
mov    -0x70(%rbp),%eax
mov    %eax,-0xd4(%rbp)
movsd  0xaa3(%rip),%xmm0
movsd  0xaa3(%rip),%xmm1
call   1070 <pow@plt>
mov    -0xd4(%rbp),%eax
cvttsd2si %xmm0,%ecx
imul   %ecx,%eax
mov    %eax,-0x64(%rbp)
mov    -0x74(%rbp),%eax
mov    %eax,-0xd0(%rbp)
movsd  0xa75(%rip),%xmm0
movsd  0xa75(%rip),%xmm1
call   1070 <pow@plt>
mov    -0xd0(%rbp),%eax
cvttsd2si %xmm0,%ecx
imul   %ecx,%eax
mov    %eax,-0x68(%rbp)
mov    -0x78(%rbp),%eax
mov    %eax,-0xcc(%rbp)
movsd  0xa47(%rip),%xmm0
movsd  0xa47(%rip),%xmm1
call   1070 <pow@plt>
mov    -0xcc(%rbp),%eax
cvttsd2si %xmm0,%ecx
imul   %ecx,%eax
mov    %eax,-0x6c(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    166f <pet_c_oplem_dda+0x51f>
mov    -0x6c(%rbp),%eax
sar    $0x17,%eax
imul   -0x94(%rbp),%eax
mov    -0x68(%rbp),%ecx
sar    $0x17,%ecx
imul   0x58(%rbp),%ecx
add    %ecx,%eax
mov    -0x64(%rbp),%ecx
sar    $0x17,%ecx
add    %ecx,%eax
mov    %eax,-0x9c(%rbp)
mov    -0x9c(%rbp),%edx
mov    -0xa8(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    0x40(%rbp),%rax
movslq -0x9c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
addss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
mov    -0x64(%rbp),%eax
add    -0x58(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x68(%rbp),%eax
add    -0x5c(%rbp),%eax
mov    %eax,-0x68(%rbp)
mov    -0x6c(%rbp),%eax
add    -0x60(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    15e5 <pet_c_oplem_dda+0x495>
movss  -0x48(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    168b <pet_c_oplem_dda+0x53b>
jp     168b <pet_c_oplem_dda+0x53b>
jmp    16e8 <pet_c_oplem_dda+0x598>
movss  0x971(%rip),%xmm0
divss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    16e3 <pet_c_oplem_dda+0x593>
movss  -0x48(%rbp),%xmm0
mov    -0xc8(%rbp),%rax
mov    -0xa8(%rbp),%rcx
movslq -0x40(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    16a4 <pet_c_oplem_dda+0x554>
jmp    16e8 <pet_c_oplem_dda+0x598>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1351 <pet_c_oplem_dda+0x201>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0xbc(%rbp),%eax
jge    1751 <pet_c_oplem_dda+0x601>
mov    0x40(%rbp),%rax
movslq -0x40(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0xc8(%rbp),%rax
movslq -0x40(%rbp),%rcx
mulss  (%rax,%rcx,4),%xmm0
mov    0x60(%rbp),%rax
movslq -0x40(%rbp),%rcx
mulss  (%rax,%rcx,4),%xmm0
mov    0x40(%rbp),%rax
movslq -0x40(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    16fd <pet_c_oplem_dda+0x5ad>
jmp    1756 <pet_c_oplem_dda+0x606>
mov    -0xb8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xb8(%rbp)
jmp    12a3 <pet_c_oplem_dda+0x153>
mov    -0xa8(%rbp),%rdi
call   1030 <free@plt>
mov    -0xc8(%rbp),%rdi
call   1030 <free@plt>
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<pet_c_oplem_dda>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xd8,%rsp
mov    %r8,0xb0(%rsp)
mov    %rdx,0xa8(%rsp)
mov    %esi,0x20(%rsp)
mov    %rdi,0xa0(%rsp)
mov    0x180(%rsp),%eax
mov    %eax,0xc(%rsp)
mov    0x160(%rsp),%rbx
mov    0x158(%rsp),%r15d
mov    0x140(%rsp),%rbp
mov    0x130(%rsp),%rax
mov    %rax,0x98(%rsp)
mov    0x120(%rsp),%rax
mov    %rax,0x90(%rsp)
mov    0x110(%rsp),%rax
mov    %rax,0x88(%rsp)
mov    0x148(%rsp),%r12d
cmp    %r12d,%r15d
mov    %r12d,%eax
cmovg  %r15d,%eax
cltq
imul   $0x55555556,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
shr    $0x20,%rcx
add    %edx,%ecx
add    %ecx,%eax
movslq %eax,%rdi
shl    $0x2,%rdi
call   1050 <malloc@plt>
mov    %rax,%r14
mov    0x150(%rsp),%eax
imul   %r15d,%eax
mov    %eax,0x1c(%rsp)
imul   %eax,%r12d
lea    0x0(,%r12,4),%edi
mov    %rdi,0x70(%rsp)
call   1050 <malloc@plt>
mov    %rax,%r13
mov    %r12d,%edi
mov    %r12,0x10(%rsp)
test   %r12d,%r12d
jle    12c6 <pet_c_oplem_dda+0x196>
cmpl   $0x4,0x10(%rsp)
jae    122d <pet_c_oplem_dda+0xfd>
xor    %eax,%eax
jmp    12a4 <pet_c_oplem_dda+0x174>
mov    %edi,%eax
and    $0xfffffffc,%eax
lea    -0x4(%rax),%rdx
mov    %rdx,%rcx
shr    $0x2,%rcx
add    $0x1,%rcx
test   %rdx,%rdx
je     1822 <pet_c_oplem_dda+0x6f2>
mov    %rcx,%rsi
and    $0xfffffffffffffffe,%rsi
xor    %edx,%edx
movaps 0xda6(%rip),%xmm0
nopw   0x0(%rax,%rax,1)
movups (%rbx,%rdx,4),%xmm1
movups 0x10(%rbx,%rdx,4),%xmm2
movaps %xmm0,%xmm3
divps  %xmm1,%xmm3
movups %xmm3,(%rbx,%rdx,4)
movaps %xmm0,%xmm1
divps  %xmm2,%xmm1
movups %xmm1,0x10(%rbx,%rdx,4)
add    $0x8,%rdx
add    $0xfffffffffffffffe,%rsi
jne    1260 <pet_c_oplem_dda+0x130>
test   $0x1,%cl
je     129f <pet_c_oplem_dda+0x16f>
movups (%rbx,%rdx,4),%xmm0
movaps 0xd68(%rip),%xmm1
divps  %xmm0,%xmm1
movups %xmm1,(%rbx,%rdx,4)
cmp    %rdi,%rax
je     12c6 <pet_c_oplem_dda+0x196>
movss  0xd74(%rip),%xmm0
nopl   0x0(%rax)
movaps %xmm0,%xmm1
divss  (%rbx,%rax,4),%xmm1
movss  %xmm1,(%rbx,%rax,4)
add    $0x1,%rax
cmp    %rax,%rdi
jne    12b0 <pet_c_oplem_dda+0x180>
cmpl   $0x0,0xc(%rsp)
jle    1801 <pet_c_oplem_dda+0x6d1>
xorps  %xmm1,%xmm1
cvtsi2ssl 0x20(%rsp),%xmm1
xorps  %xmm0,%xmm0
cvtsi2ssl 0xc(%rsp),%xmm0
divss  %xmm0,%xmm1
lea    0x0(,%rdi,4),%rax
add    %rbp,%rax
lea    (%rbx,%rdi,4),%rcx
mov    %edi,%edx
and    $0xfffffff8,%edx
mov    %rdx,0x50(%rsp)
add    $0xfffffffffffffff8,%rdx
mov    %rdx,0x48(%rsp)
shr    $0x3,%rdx
add    $0x1,%rdx
cmp    %rbp,%rcx
seta   %cl
shufps $0x0,%xmm1,%xmm1
movaps %xmm1,0xc0(%rsp)
cmp    %rbx,%rax
seta   %al
and    %cl,%al
mov    %al,0xb(%rsp)
mov    %rdx,%rax
mov    %rdx,0x40(%rsp)
and    $0xfffffffffffffffe,%rdx
mov    %rdx,0x38(%rsp)
mov    %rdi,%rax
neg    %rax
mov    %rax,0x58(%rsp)
xor    %eax,%eax
mov    %rbx,0x68(%rsp)
mov    %r15d,0x18(%rsp)
mov    %rbp,0x30(%rsp)
mov    %r13,0x80(%rsp)
mov    %rdi,0x60(%rsp)
mov    0x18(%rsp),%r15d
jmp    137f <pet_c_oplem_dda+0x24f>
mov    0x78(%rsp),%rax
cmp    0xc(%rsp),%eax
je     1801 <pet_c_oplem_dda+0x6d1>
movd   %eax,%xmm0
add    $0x1,%eax
mov    %rax,0x78(%rsp)
movd   %eax,%xmm1
punpckldq %xmm1,%xmm0
cvtdq2ps %xmm0,%xmm0
mulps  0xc0(%rsp),%xmm0
addps  0xc6b(%rip),%xmm0
cvttps2dq %xmm0,%xmm0
movaps %xmm0,0x20(%rsp)
mov    %r13,%rdi
xor    %esi,%esi
mov    0x70(%rsp),%rdx
call   1040 <memset@plt>
xorps  %xmm5,%xmm5
movss  0xc5c(%rip),%xmm4
movss  0xc50(%rip),%xmm3
movdqa 0x20(%rsp),%xmm0
movd   %xmm0,%eax
pshufd $0x55,%xmm0,%xmm0
movd   %xmm0,%ecx
cmp    %ecx,%eax
jge    1660 <pet_c_oplem_dda+0x530>
movslq %eax,%r10
movslq %ecx,%rax
mov    %rax,0xb8(%rsp)
jmp    1412 <pet_c_oplem_dda+0x2e2>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r10
cmp    0xb8(%rsp),%r10
je     1660 <pet_c_oplem_dda+0x530>
mov    0xa0(%rsp),%rax
movzwl (%rax,%r10,2),%edx
mov    0x88(%rsp),%rax
movzwl (%rax,%r10,2),%ebx
mov    0xa8(%rsp),%rax
movzwl (%rax,%r10,2),%r12d
mov    0x90(%rsp),%rax
movzwl (%rax,%r10,2),%eax
mov    0xb0(%rsp),%rcx
movzwl (%rcx,%r10,2),%r8d
mov    0x98(%rsp),%rcx
movzwl (%rcx,%r10,2),%r11d
sub    %edx,%ebx
sub    %r12d,%eax
sub    %r8d,%r11d
mov    %ebx,%ebp
neg    %ebp
cmovs  %ebx,%ebp
xorps  %xmm0,%xmm0
cvtsi2ss %ebp,%xmm0
mov    %eax,%ecx
neg    %ecx
cmovs  %eax,%ecx
xorps  %xmm1,%xmm1
cvtsi2ss %ecx,%xmm1
mov    %r11d,%ecx
neg    %ecx
cmovs  %r11d,%ecx
xorps  %xmm2,%xmm2
cvtsi2ss %ecx,%xmm2
cvttss2si %xmm1,%ecx
cvttps2dq %xmm1,%xmm1
cvtdq2ps %xmm1,%xmm1
ucomiss %xmm1,%xmm0
cvttss2si %xmm0,%ebp
cmovbe %ecx,%ebp
xorps  %xmm0,%xmm0
cvtsi2ss %ebp,%xmm0
ucomiss %xmm0,%xmm2
cvttss2si %xmm2,%ecx
cmovbe %ebp,%ecx
test   %ecx,%ecx
jle    1400 <pet_c_oplem_dda+0x2d0>
xorps  %xmm0,%xmm0
cvtsi2ss %ecx,%xmm0
movaps %xmm3,%xmm1
divss  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsi2ss %ebx,%xmm0
mulss  %xmm1,%xmm0
mulss  %xmm4,%xmm0
cvttss2si %xmm0,%ebp
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
mulss  %xmm1,%xmm0
mulss  %xmm4,%xmm0
xorps  %xmm2,%xmm2
cvtsi2ss %r11d,%xmm2
cvttss2si %xmm0,%ebx
mulss  %xmm1,%xmm2
mulss  %xmm4,%xmm2
cvttss2si %xmm2,%eax
shl    $0x17,%r8d
shl    $0x17,%r12d
shl    $0x17,%edx
mov    %ecx,0x20(%rsp)
mov    %ecx,%r11d
xorps  %xmm1,%xmm1
xor    %ecx,%ecx
mov    0x30(%rsp),%r9
mov    0x1c(%rsp),%r13d
nopl   0x0(%rax,%rax,1)
mov    %r8d,%edi
sar    $0x17,%edi
imul   %r13d,%edi
mov    %r12d,%esi
sar    $0x17,%esi
imul   %r15d,%esi
add    %edi,%esi
mov    %edx,%edi
sar    $0x17,%edi
add    %esi,%edi
mov    %edi,(%r14,%rcx,4)
movslq %edi,%rsi
addss  (%r9,%rsi,4),%xmm1
add    %ebp,%edx
add    %ebx,%r12d
add    %eax,%r8d
add    $0x1,%rcx
cmp    %rcx,%r11
jne    1530 <pet_c_oplem_dda+0x400>
ucomiss %xmm5,%xmm1
mov    0x80(%rsp),%r13
mov    0x20(%rsp),%eax
jne    1582 <pet_c_oplem_dda+0x452>
jnp    1400 <pet_c_oplem_dda+0x2d0>
test   %eax,%eax
jle    1400 <pet_c_oplem_dda+0x2d0>
movaps %xmm3,%xmm0
divss  %xmm1,%xmm0
lea    -0x1(%r11),%rax
mov    %r11d,%edx
and    $0x3,%edx
cmp    $0x3,%rax
jae    15a5 <pet_c_oplem_dda+0x475>
xor    %eax,%eax
jmp    1614 <pet_c_oplem_dda+0x4e4>
and    $0xfffffffc,%r11d
xor    %eax,%eax
nopl   0x0(%rax,%rax,1)
movslq (%r14,%rax,4),%rcx
movss  0x0(%r13,%rcx,4),%xmm1
addss  %xmm0,%xmm1
movss  %xmm1,0x0(%r13,%rcx,4)
movslq 0x4(%r14,%rax,4),%rcx
movss  0x0(%r13,%rcx,4),%xmm1
addss  %xmm0,%xmm1
movss  %xmm1,0x0(%r13,%rcx,4)
movslq 0x8(%r14,%rax,4),%rcx
movss  0x0(%r13,%rcx,4),%xmm1
addss  %xmm0,%xmm1
movss  %xmm1,0x0(%r13,%rcx,4)
movslq 0xc(%r14,%rax,4),%rcx
movss  0x0(%r13,%rcx,4),%xmm1
addss  %xmm0,%xmm1
movss  %xmm1,0x0(%r13,%rcx,4)
add    $0x4,%rax
cmp    %rax,%r11
jne    15b0 <pet_c_oplem_dda+0x480>
test   %rdx,%rdx
je     1400 <pet_c_oplem_dda+0x2d0>
lea    (%r14,%rax,4),%rax
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movslq (%rax,%rcx,4),%rsi
movss  0x0(%r13,%rsi,4),%xmm1
addss  %xmm0,%xmm1
movss  %xmm1,0x0(%r13,%rsi,4)
add    $0x1,%rcx
cmp    %rcx,%rdx
jne    1630 <pet_c_oplem_dda+0x500>
jmp    1400 <pet_c_oplem_dda+0x2d0>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmpl   $0x0,0x10(%rsp)
mov    0x68(%rsp),%rbx
mov    0x30(%rsp),%rbp
mov    0x60(%rsp),%rdi
jle    1370 <pet_c_oplem_dda+0x240>
cmpl   $0x8,0x10(%rsp)
setb   %al
or     0xb(%rsp),%al
je     1690 <pet_c_oplem_dda+0x560>
xor    %ecx,%ecx
jmp    1772 <pet_c_oplem_dda+0x642>
nop
cmpq   $0x0,0x48(%rsp)
je     17ef <pet_c_oplem_dda+0x6bf>
mov    0x38(%rsp),%rcx
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movups 0x0(%r13,%rax,4),%xmm0
movups 0x10(%r13,%rax,4),%xmm1
movups 0x0(%rbp,%rax,4),%xmm2
mulps  %xmm0,%xmm2
movups 0x10(%rbp,%rax,4),%xmm0
mulps  %xmm1,%xmm0
movups 0x20(%rbp,%rax,4),%xmm1
movups 0x30(%rbp,%rax,4),%xmm3
movups (%rbx,%rax,4),%xmm4
mulps  %xmm2,%xmm4
movups 0x10(%rbx,%rax,4),%xmm2
mulps  %xmm0,%xmm2
movups %xmm4,0x0(%rbp,%rax,4)
movups %xmm2,0x10(%rbp,%rax,4)
movups 0x20(%r13,%rax,4),%xmm0
mulps  %xmm1,%xmm0
movups 0x30(%r13,%rax,4),%xmm1
mulps  %xmm3,%xmm1
movups 0x20(%rbx,%rax,4),%xmm2
mulps  %xmm0,%xmm2
movups 0x30(%rbx,%rax,4),%xmm0
mulps  %xmm1,%xmm0
movups %xmm2,0x20(%rbp,%rax,4)
movups %xmm0,0x30(%rbp,%rax,4)
add    $0x10,%rax
add    $0xfffffffffffffffe,%rcx
jne    16b0 <pet_c_oplem_dda+0x580>
testb  $0x1,0x40(%rsp)
je     1761 <pet_c_oplem_dda+0x631>
movups 0x0(%rbp,%rax,4),%xmm0
movups 0x10(%rbp,%rax,4),%xmm1
movups 0x0(%r13,%rax,4),%xmm2
mulps  %xmm0,%xmm2
movups 0x10(%r13,%rax,4),%xmm0
mulps  %xmm1,%xmm0
movups (%rbx,%rax,4),%xmm1
mulps  %xmm2,%xmm1
movups 0x10(%rbx,%rax,4),%xmm2
mulps  %xmm0,%xmm2
movups %xmm1,0x0(%rbp,%rax,4)
movups %xmm2,0x10(%rbp,%rax,4)
mov    0x50(%rsp),%rax
mov    %rax,%rcx
cmp    %rdi,%rax
je     1370 <pet_c_oplem_dda+0x240>
mov    %rcx,%rax
test   $0x1,%dil
je     179a <pet_c_oplem_dda+0x66a>
movss  0x0(%rbp,%rcx,4),%xmm0
mulss  0x0(%r13,%rcx,4),%xmm0
mulss  (%rbx,%rcx,4),%xmm0
movss  %xmm0,0x0(%rbp,%rcx,4)
mov    %rcx,%rax
or     $0x1,%rax
not    %rcx
cmp    0x58(%rsp),%rcx
je     1370 <pet_c_oplem_dda+0x240>
nopl   0x0(%rax,%rax,1)
movss  0x0(%rbp,%rax,4),%xmm0
mulss  0x0(%r13,%rax,4),%xmm0
movss  0x4(%rbp,%rax,4),%xmm1
mulss  (%rbx,%rax,4),%xmm0
movss  %xmm0,0x0(%rbp,%rax,4)
mulss  0x4(%r13,%rax,4),%xmm1
mulss  0x4(%rbx,%rax,4),%xmm1
movss  %xmm1,0x4(%rbp,%rax,4)
add    $0x2,%rax
cmp    %rax,%rdi
jne    17b0 <pet_c_oplem_dda+0x680>
jmp    1370 <pet_c_oplem_dda+0x240>
xor    %eax,%eax
testb  $0x1,0x40(%rsp)
jne    172c <pet_c_oplem_dda+0x5fc>
jmp    1761 <pet_c_oplem_dda+0x631>
mov    %r14,%rdi
call   1030 <free@plt>
mov    %r13,%rdi
add    $0xd8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <free@plt>
xor    %edx,%edx
test   $0x1,%cl
jne    128d <pet_c_oplem_dda+0x15d>
jmp    129f <pet_c_oplem_dda+0x16f>

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

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