// File: /workspace/github_c_makefile_star2_O0/zpole[P]IICV/vl/gmm.c
// Function: vl_gmm_maximization_f
static void
VL_XCAT(_vl_gmm_maximization_, SFX)
(VlGMM * self,
 TYPE * posteriors,
 TYPE * priors,
 TYPE * covariances,
 TYPE * means,
 TYPE const * data,
 vl_size numData)
{
  vl_size numClusters = self->numClusters;
  vl_index i_d, i_cl;
  vl_size dim ;
  TYPE * oldMeans ;
  double time = 0 ;

  if (self->verbosity > 1) {
    VL_PRINTF("gmm: em: entering maximization step\n") ;
    time = vl_get_cpu_time() ;
  }

  oldMeans = vl_malloc(sizeof(TYPE) * self->dimension * numClusters) ;
  memcpy(oldMeans, means, sizeof(TYPE) * self->dimension * numClusters) ;

  memset(priors, 0, sizeof(TYPE) * numClusters) ;
  memset(means, 0, sizeof(TYPE) * self->dimension * numClusters) ;
  memset(covariances, 0, sizeof(TYPE) * self->dimension * numClusters) ;

#if defined(_OPENMP)
#pragma omp parallel default(shared) private(i_d, i_cl, dim) \
                     num_threads(vl_get_max_threads())
#endif
  {
    TYPE * clusterPosteriorSum_, * means_, * covariances_ ;

#if defined(_OPENMP)
#pragma omp critical
#endif
    {
      clusterPosteriorSum_ = vl_calloc(sizeof(TYPE), numClusters) ;
      means_ = vl_calloc(sizeof(TYPE), self->dimension * numClusters) ;
      covariances_ = vl_calloc(sizeof(TYPE), self->dimension * numClusters) ;
    }

    /*
      Accumulate weighted sums and sum of square differences. Once normalized,
      these become the means and covariances of each Gaussian mode.

      The squared differences will be taken w.r.t. the old means however. In this manner,
      one avoids doing two passes across the data. Eventually, these are corrected to account
      for the new means properly. In principle, one could set the old means to zero, but
      this may cause numerical instabilities (by accumulating large squares).
    */

#if defined(_OPENMP)
#pragma omp for
#endif
    for (i_d = 0 ; i_d < (signed)numData ; ++i_d) {
      for (i_cl = 0 ; i_cl < (signed)numClusters ; ++i_cl) {
        TYPE p = posteriors[i_cl + i_d * self->numClusters] ;
        vl_bool calculated = VL_FALSE ;

        /* skip very small associations for speed */
        if (p < VL_GMM_MIN_POSTERIOR / numClusters) { continue ; }

        clusterPosteriorSum_ [i_cl] += p ;

        #ifndef VL_DISABLE_AVX
        if (vl_get_simd_enabled() && vl_cpu_has_avx()) {
          VL_XCAT(_vl_weighted_mean_sse2_, SFX)
          (self->dimension,
           means_+ i_cl * self->dimension,
           data + i_d * self->dimension,
           p) ;

          VL_XCAT(_vl_weighted_sigma_sse2_, SFX)
          (self->dimension,
           covariances_ + i_cl * self->dimension,
           data + i_d * self->dimension,
           oldMeans + i_cl * self->dimension,
           p) ;

          calculated = VL_TRUE;
        }
        #endif
        #ifndef VL_DISABLE_SSE2
        if (vl_get_simd_enabled() && vl_cpu_has_sse2() && !calculated) {
          VL_XCAT(_vl_weighted_mean_sse2_, SFX)
          (self->dimension,
           means_+ i_cl * self->dimension,
           data + i_d * self->dimension,
           p) ;

           VL_XCAT(_vl_weighted_sigma_sse2_, SFX)
          (self->dimension,
           covariances_ + i_cl * self->dimension,
           data + i_d * self->dimension,
           oldMeans + i_cl * self->dimension,
           p) ;

          calculated = VL_TRUE;
        }
        #endif
        if(!calculated) {
          for (dim = 0 ; dim < self->dimension ; ++dim) {
            TYPE x = data[i_d * self->dimension + dim] ;
            TYPE mu = oldMeans[i_cl * self->dimension + dim] ;
            TYPE diff = x - mu ;
            means_ [i_cl * self->dimension + dim] += p * x ;
            covariances_ [i_cl * self->dimension + dim] += p * (diff*diff) ;
          }
        }
      }
    }

    /* accumulate */
#if defined(_OPENMP)
#pragma omp critical
#endif
    {
      for (i_cl = 0 ; i_cl < (signed)numClusters ; ++i_cl) {
        priors [i_cl] += clusterPosteriorSum_ [i_cl];
        for (dim = 0 ; dim < self->dimension ; ++dim) {
          means [i_cl * self->dimension + dim] += means_ [i_cl * self->dimension + dim] ;
          covariances [i_cl * self->dimension + dim] += covariances_ [i_cl * self->dimension + dim] ;
        }
      }
      vl_free(means_);
      vl_free(covariances_);
      vl_free(clusterPosteriorSum_);
    }
  } /* parallel section */

  /* at this stage priors[] contains the total mass of each cluster */
  for (i_cl = 0 ; i_cl < (signed)numClusters ; ++ i_cl) {
    TYPE mass = priors[i_cl] ;
    /* do not update modes that do not recieve mass */
    if (mass >= 1e-6 / numClusters) {
      for (dim = 0 ; dim < self->dimension ; ++dim) {
        means[i_cl * self->dimension + dim] /= mass ;
        covariances[i_cl * self->dimension + dim] /= mass ;
      }
    }
  }

  /* apply old to new means correction */
  for (i_cl = 0 ; i_cl < (signed)numClusters ; ++ i_cl) {
    TYPE mass = priors[i_cl] ;
    if (mass >= 1e-6 / numClusters) {
      for (dim = 0 ; dim < self->dimension ; ++dim) {
        TYPE mu = means[i_cl * self->dimension + dim] ;
        TYPE oldMu = oldMeans[i_cl * self->dimension + dim] ;
        TYPE diff = mu - oldMu ;
        covariances[i_cl * self->dimension + dim] -= diff * diff ;
      }
    }
  }

  VL_XCAT(_vl_gmm_apply_bounds_,SFX)(self) ;

  {
    TYPE sum = 0;
    for (i_cl = 0 ; i_cl < (signed)numClusters ; ++i_cl) {
      sum += priors[i_cl] ;
    }
    sum = VL_MAX(sum, 1e-12) ;
    for (i_cl = 0 ; i_cl < (signed)numClusters ; ++i_cl) {
      priors[i_cl] /= sum ;
    }
  }

  if (self->verbosity > 1) {
    VL_PRINTF("gmm: em: maximization step completed in %.2f s\n",
              vl_get_cpu_time() - time) ;
  }

  vl_free(oldMeans);
}

// Assembly:
subq $0xb8, %rsp
movq 0xc0(%rsp), %rax
movq %rdi, 0xb0(%rsp)
movq %rsi, 0xa8(%rsp)
movq %rdx, 0xa0(%rsp)
movq %rcx, 0x98(%rsp)
movq %r8, 0x90(%rsp)
movq %r9, 0x88(%rsp)
movq 0xb0(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x80(%rsp)
xorps %xmm0, %xmm0
movsd %xmm0, 0x58(%rsp)
movq 0xb0(%rsp), %rax
cmpl $0x1, 0x30(%rax)
jle 0x1ad58
callq 0x91a0
movq %rax, %rcx
leaq 0x3e70b(%rip), %rdi     # 0x59454
movb $0x0, %al
callq *%rcx
callq 0x93b0
movsd %xmm0, 0x58(%rsp)
movq 0xb0(%rsp), %rax
movq 0x8(%rax), %rdi
shlq $0x2, %rdi
imulq 0x80(%rsp), %rdi
callq 0x9660
movq %rax, 0x60(%rsp)
movq 0x60(%rsp), %rdi
movq 0x90(%rsp), %rsi
movq 0xb0(%rsp), %rax
movq 0x8(%rax), %rdx
shlq $0x2, %rdx
imulq 0x80(%rsp), %rdx
callq 0x9640
movq 0xa0(%rsp), %rdi
movq 0x80(%rsp), %rdx
shlq $0x2, %rdx
xorl %esi, %esi
callq 0x9480
movq 0x90(%rsp), %rdi
movq 0xb0(%rsp), %rax
movq 0x8(%rax), %rdx
shlq $0x2, %rdx
imulq 0x80(%rsp), %rdx
xorl %esi, %esi
callq 0x9480
movq 0x98(%rsp), %rdi
movq 0xb0(%rsp), %rax
movq 0x8(%rax), %rdx
shlq $0x2, %rdx
imulq 0x80(%rsp), %rdx
xorl %esi, %esi
callq 0x9480
movq 0x80(%rsp), %rsi
movl $0x4, %edi
callq 0x9a70
movq %rax, 0x50(%rsp)
movq 0xb0(%rsp), %rax
movq 0x8(%rax), %rsi
imulq 0x80(%rsp), %rsi
movl $0x4, %edi
callq 0x9a70
movq %rax, 0x48(%rsp)
movq 0xb0(%rsp), %rax
movq 0x8(%rax), %rsi
imulq 0x80(%rsp), %rsi
movl $0x4, %edi
callq 0x9a70
movq %rax, 0x40(%rsp)
movq $0x0, 0x78(%rsp)
movq 0x78(%rsp), %rax
movq 0xc0(%rsp), %rcx
movslq %ecx, %rcx
cmpq %rcx, %rax
jge 0x1b280
movq $0x0, 0x70(%rsp)
movq 0x70(%rsp), %rax
movq 0x80(%rsp), %rcx
movslq %ecx, %rcx
cmpq %rcx, %rax
jge 0x1b26b
movq 0xa8(%rsp), %rax
movq 0x70(%rsp), %rcx
movq 0x78(%rsp), %rdx
movq 0xb0(%rsp), %rsi
movq 0x10(%rsi), %rsi
imulq %rsi, %rdx
addq %rdx, %rcx
movss (%rax,%rcx,4), %xmm0
movss %xmm0, 0x3c(%rsp)
movl $0x0, 0x38(%rsp)
movss 0x3c(%rsp), %xmm0
cvtss2sd %xmm0, %xmm1
movaps 0x3e263(%rip), %xmm0    # 0x59160
movq 0x80(%rsp), %xmm2
punpckldq %xmm0, %xmm2    # xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
movapd 0x3e25e(%rip), %xmm0    # 0x59170
subpd %xmm0, %xmm2
movaps %xmm2, %xmm0
unpckhpd %xmm2, %xmm2            # xmm2 = xmm2[1,1]
addsd %xmm0, %xmm2
movsd 0x3e17f(%rip), %xmm0    # 0x590a8
divsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jbe 0x1af38
jmp 0x1b258
movss 0x3c(%rsp), %xmm0
movq 0x50(%rsp), %rax
movq 0x70(%rsp), %rcx
addss (%rax,%rcx,4), %xmm0
movss %xmm0, (%rax,%rcx,4)
callq 0x9240
cmpl $0x0, %eax
je 0x1b040
callq 0x9330
cmpl $0x0, %eax
je 0x1b040
movq 0xb0(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x48(%rsp), %rsi
movq 0x70(%rsp), %rax
movq 0xb0(%rsp), %rcx
imulq 0x8(%rcx), %rax
shlq $0x2, %rax
addq %rax, %rsi
movq 0x88(%rsp), %rdx
movq 0x78(%rsp), %rax
movq 0xb0(%rsp), %rcx
imulq 0x8(%rcx), %rax
shlq $0x2, %rax
addq %rax, %rdx
movss 0x3c(%rsp), %xmm0
callq 0x99f0
movq 0xb0(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x40(%rsp), %rsi
movq 0x70(%rsp), %rax
movq 0xb0(%rsp), %rcx
imulq 0x8(%rcx), %rax
shlq $0x2, %rax
addq %rax, %rsi
movq 0x88(%rsp), %rdx
movq 0x78(%rsp), %rax
movq 0xb0(%rsp), %rcx
imulq 0x8(%rcx), %rax
shlq $0x2, %rax
addq %rax, %rdx
movq 0x60(%rsp), %rcx
movq 0x70(%rsp), %rax
movq 0xb0(%rsp), %r8
imulq 0x8(%r8), %rax
shlq $0x2, %rax
addq %rax, %rcx
movss 0x3c(%rsp), %xmm0
callq 0x9510
movl $0x1, 0x38(%rsp)
callq 0x9240
cmpl $0x0, %eax
je 0x1b139
callq 0x96f0
cmpl $0x0, %eax
je 0x1b139
cmpl $0x0, 0x38(%rsp)
jne 0x1b139
movq 0xb0(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x48(%rsp), %rsi
movq 0x70(%rsp), %rax
movq 0xb0(%rsp), %rcx
imulq 0x8(%rcx), %rax
shlq $0x2, %rax
addq %rax, %rsi
movq 0x88(%rsp), %rdx
movq 0x78(%rsp), %rax
movq 0xb0(%rsp), %rcx
imulq 0x8(%rcx), %rax
shlq $0x2, %rax
addq %rax, %rdx
movss 0x3c(%rsp), %xmm0
callq 0x99f0
movq 0xb0(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x40(%rsp), %rsi
movq 0x70(%rsp), %rax
movq 0xb0(%rsp), %rcx
imulq 0x8(%rcx), %rax
shlq $0x2, %rax
addq %rax, %rsi
movq 0x88(%rsp), %rdx
movq 0x78(%rsp), %rax
movq 0xb0(%rsp), %rcx
imulq 0x8(%rcx), %rax
shlq $0x2, %rax
addq %rax, %rdx
movq 0x60(%rsp), %rcx
movq 0x70(%rsp), %rax
movq 0xb0(%rsp), %r8
imulq 0x8(%r8), %rax
shlq $0x2, %rax
addq %rax, %rcx
movss 0x3c(%rsp), %xmm0
callq 0x9510
movl $0x1, 0x38(%rsp)
cmpl $0x0, 0x38(%rsp)
jne 0x1b256
movq $0x0, 0x68(%rsp)
movq 0x68(%rsp), %rax
movq 0xb0(%rsp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x1b254
movq 0x88(%rsp), %rax
movq 0x78(%rsp), %rcx
movq 0xb0(%rsp), %rdx
imulq 0x8(%rdx), %rcx
addq 0x68(%rsp), %rcx
movss (%rax,%rcx,4), %xmm0
movss %xmm0, 0x34(%rsp)
movq 0x60(%rsp), %rax
movq 0x70(%rsp), %rcx
movq 0xb0(%rsp), %rdx
imulq 0x8(%rdx), %rcx
addq 0x68(%rsp), %rcx
movss (%rax,%rcx,4), %xmm0
movss %xmm0, 0x30(%rsp)
movss 0x34(%rsp), %xmm0
subss 0x30(%rsp), %xmm0
movss %xmm0, 0x2c(%rsp)
movss 0x3c(%rsp), %xmm0
movss 0x34(%rsp), %xmm2
movq 0x48(%rsp), %rax
movq 0x70(%rsp), %rcx
movq 0xb0(%rsp), %rdx
imulq 0x8(%rdx), %rcx
addq 0x68(%rsp), %rcx
movss (%rax,%rcx,4), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, (%rax,%rcx,4)
movss 0x3c(%rsp), %xmm0
movss 0x2c(%rsp), %xmm2
mulss 0x2c(%rsp), %xmm2
movq 0x40(%rsp), %rax
movq 0x70(%rsp), %rcx
movq 0xb0(%rsp), %rdx
imulq 0x8(%rdx), %rcx
addq 0x68(%rsp), %rcx
movss (%rax,%rcx,4), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, (%rax,%rcx,4)
movq 0x68(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x68(%rsp)
jmp 0x1b14d
jmp 0x1b256
jmp 0x1b258
movq 0x70(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x70(%rsp)
jmp 0x1ae9b
jmp 0x1b26d
movq 0x78(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x78(%rsp)
jmp 0x1ae79
movq $0x0, 0x70(%rsp)
movq 0x70(%rsp), %rax
movq 0x80(%rsp), %rcx
movslq %ecx, %rcx
cmpq %rcx, %rax
jge 0x1b3a4
movq 0x50(%rsp), %rax
movq 0x70(%rsp), %rcx
movss (%rax,%rcx,4), %xmm0
movq 0xa0(%rsp), %rax
movq 0x70(%rsp), %rcx
addss (%rax,%rcx,4), %xmm0
movss %xmm0, (%rax,%rcx,4)
movq $0x0, 0x68(%rsp)
movq 0x68(%rsp), %rax
movq 0xb0(%rsp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x1b38f
movq 0x48(%rsp), %rax
movq 0x70(%rsp), %rcx
movq 0xb0(%rsp), %rdx
imulq 0x8(%rdx), %rcx
addq 0x68(%rsp), %rcx
movss (%rax,%rcx,4), %xmm0
movq 0x90(%rsp), %rax
movq 0x70(%rsp), %rcx
movq 0xb0(%rsp), %rdx
imulq 0x8(%rdx), %rcx
addq 0x68(%rsp), %rcx
addss (%rax,%rcx,4), %xmm0
movss %xmm0, (%rax,%rcx,4)
movq 0x40(%rsp), %rax
movq 0x70(%rsp), %rcx
movq 0xb0(%rsp), %rdx
imulq 0x8(%rdx), %rcx
addq 0x68(%rsp), %rcx
movss (%rax,%rcx,4), %xmm0
movq 0x98(%rsp), %rax
movq 0x70(%rsp), %rcx
movq 0xb0(%rsp), %rdx
imulq 0x8(%rdx), %rcx
addq 0x68(%rsp), %rcx
addss (%rax,%rcx,4), %xmm0
movss %xmm0, (%rax,%rcx,4)
movq 0x68(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x68(%rsp)
jmp 0x1b2d1
jmp 0x1b391
movq 0x70(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x70(%rsp)
jmp 0x1b289
movq 0x48(%rsp), %rdi
callq 0x9620
movq 0x40(%rsp), %rdi
callq 0x9620
movq 0x50(%rsp), %rdi
callq 0x9620
movq $0x0, 0x70(%rsp)
movq 0x70(%rsp), %rax
movq 0x80(%rsp), %rcx
movslq %ecx, %rcx
cmpq %rcx, %rax
jge 0x1b4f3
movq 0xa0(%rsp), %rax
movq 0x70(%rsp), %rcx
movss (%rax,%rcx,4), %xmm0
movss %xmm0, 0x28(%rsp)
movss 0x28(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movaps 0x3dd53(%rip), %xmm1    # 0x59160
movq 0x80(%rsp), %xmm2
punpckldq %xmm1, %xmm2    # xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
movapd 0x3dd4e(%rip), %xmm1    # 0x59170
subpd %xmm1, %xmm2
movaps %xmm2, %xmm1
unpckhpd %xmm2, %xmm2            # xmm2 = xmm2[1,1]
addsd %xmm1, %xmm2
movsd 0x3de0f(%rip), %xmm1    # 0x59248
divsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jb 0x1b4de
movq $0x0, 0x68(%rsp)
movq 0x68(%rsp), %rax
movq 0xb0(%rsp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x1b4dc
movss 0x28(%rsp), %xmm1
movq 0x90(%rsp), %rax
movq 0x70(%rsp), %rcx
movq 0xb0(%rsp), %rdx
imulq 0x8(%rdx), %rcx
addq 0x68(%rsp), %rcx
movss (%rax,%rcx,4), %xmm0
divss %xmm1, %xmm0
movss %xmm0, (%rax,%rcx,4)
movss 0x28(%rsp), %xmm1
movq 0x98(%rsp), %rax
movq 0x70(%rsp), %rcx
movq 0xb0(%rsp), %rdx
imulq 0x8(%rdx), %rcx
addq 0x68(%rsp), %rcx
movss (%rax,%rcx,4), %xmm0
divss %xmm1, %xmm0
movss %xmm0, (%rax,%rcx,4)
movq 0x68(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x68(%rsp)
jmp 0x1b450
jmp 0x1b4de
jmp 0x1b4e0
movq 0x70(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x70(%rsp)
jmp 0x1b3cb
movq $0x0, 0x70(%rsp)
movq 0x70(%rsp), %rax
movq 0x80(%rsp), %rcx
movslq %ecx, %rcx
cmpq %rcx, %rax
jge 0x1b670
movq 0xa0(%rsp), %rax
movq 0x70(%rsp), %rcx
movss (%rax,%rcx,4), %xmm0
movss %xmm0, 0x24(%rsp)
movss 0x24(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movaps 0x3dc22(%rip), %xmm1    # 0x59160
movq 0x80(%rsp), %xmm2
punpckldq %xmm1, %xmm2    # xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
movapd 0x3dc1d(%rip), %xmm1    # 0x59170
subpd %xmm1, %xmm2
movaps %xmm2, %xmm1
unpckhpd %xmm2, %xmm2            # xmm2 = xmm2[1,1]
addsd %xmm1, %xmm2
movsd 0x3dcde(%rip), %xmm1    # 0x59248
divsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jb 0x1b65b
movq $0x0, 0x68(%rsp)
movq 0x68(%rsp), %rax
movq 0xb0(%rsp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x1b659
movq 0x90(%rsp), %rax
movq 0x70(%rsp), %rcx
movq 0xb0(%rsp), %rdx
imulq 0x8(%rdx), %rcx
addq 0x68(%rsp), %rcx
movss (%rax,%rcx,4), %xmm0
movss %xmm0, 0x20(%rsp)
movq 0x60(%rsp), %rax
movq 0x70(%rsp), %rcx
movq 0xb0(%rsp), %rdx
imulq 0x8(%rdx), %rcx
addq 0x68(%rsp), %rcx
movss (%rax,%rcx,4), %xmm0
movss %xmm0, 0x1c(%rsp)
movss 0x20(%rsp), %xmm0
subss 0x1c(%rsp), %xmm0
movss %xmm0, 0x18(%rsp)
movss 0x18(%rsp), %xmm0
movss 0x18(%rsp), %xmm2
movq 0x98(%rsp), %rax
movq 0x70(%rsp), %rcx
movq 0xb0(%rsp), %rdx
imulq 0x8(%rdx), %rcx
addq 0x68(%rsp), %rcx
movss (%rax,%rcx,4), %xmm1
movd %xmm0, %edx
xorl $0x80000000, %edx       # imm = 0x80000000
movd %edx, %xmm0
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, (%rax,%rcx,4)
movq 0x68(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x68(%rsp)
jmp 0x1b581
jmp 0x1b65b
jmp 0x1b65d
movq 0x70(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x70(%rsp)
jmp 0x1b4fc
movq 0xb0(%rsp), %rdi
callq 0x1b7b0
xorps %xmm0, %xmm0
movss %xmm0, 0x14(%rsp)
movq $0x0, 0x70(%rsp)
movq 0x70(%rsp), %rax
movq 0x80(%rsp), %rcx
movslq %ecx, %rcx
cmpq %rcx, %rax
jge 0x1b6d2
movq 0xa0(%rsp), %rax
movq 0x70(%rsp), %rcx
movss (%rax,%rcx,4), %xmm0
addss 0x14(%rsp), %xmm0
movss %xmm0, 0x14(%rsp)
movq 0x70(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x70(%rsp)
jmp 0x1b68f
movss 0x14(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x3db5c(%rip), %xmm1    # 0x59240
ucomisd %xmm1, %xmm0
jbe 0x1b6fc
movss 0x14(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0x8(%rsp)
jmp 0x1b70c
movsd 0x3db3c(%rip), %xmm0    # 0x59240
movsd %xmm0, 0x8(%rsp)
jmp 0x1b70c
movsd 0x8(%rsp), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x14(%rsp)
movq $0x0, 0x70(%rsp)
movq 0x70(%rsp), %rax
movq 0x80(%rsp), %rcx
movslq %ecx, %rcx
cmpq %rcx, %rax
jge 0x1b76b
movss 0x14(%rsp), %xmm1
movq 0xa0(%rsp), %rax
movq 0x70(%rsp), %rcx
movss (%rax,%rcx,4), %xmm0
divss %xmm1, %xmm0
movss %xmm0, (%rax,%rcx,4)
movq 0x70(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x70(%rsp)
jmp 0x1b725
movq 0xb0(%rsp), %rax
cmpl $0x1, 0x30(%rax)
jle 0x1b79c
callq 0x91a0
movq %rax, (%rsp)
callq 0x93b0
movq (%rsp), %rcx
subsd 0x58(%rsp), %xmm0
leaq 0x3dce1(%rip), %rdi     # 0x59479
movb $0x1, %al
callq *%rcx
movq 0x60(%rsp), %rdi
callq 0x9620
addq $0xb8, %rsp
retq
nop