void coreGTRGAMMAINVAR(double *invariants, double *frequencies,
                       double *gammaRates, double *EIGN, double *sumtable,
                       double *ext_dlnLdlz, double *ext_d2lnLdlz2, int *iptr,
                       int *wrptr, int lower, int upper, double lz) {
  double *sum, *diagptable, *diagptable_start;
  int i;
  double dlnLdlz = 0;
  double d2lnLdlz2 = 0;
  double ki, kisqr;
  double freqs[4];
  double scaler = 0.25 * (1.0 - invariants[0]);
  double tmp_1, tmp_2, tmp_3;
  double inv_Li, dlnLidlz, d2lnLidlz2;
  freqs[0] = frequencies[0] * invariants[0];
  freqs[1] = frequencies[1] * invariants[0];
  freqs[2] = frequencies[2] * invariants[0];
  freqs[3] = frequencies[3] * invariants[0];
  diagptable = diagptable_start = (double *)malloc(sizeof(double) * 36);
  for (i = 0; i < 4; i++) {
    ki = gammaRates[i];
    kisqr = ki * ki;
    *diagptable++ = exp(EIGN[0] * ki * lz);
    *diagptable++ = exp(EIGN[1] * ki * lz);
    *diagptable++ = exp(EIGN[2] * ki * lz);
    *diagptable++ = EIGN[0] * ki;
    *diagptable++ = EIGN[0] * EIGN[0] * kisqr;
    *diagptable++ = EIGN[1] * ki;
    *diagptable++ = EIGN[1] * EIGN[1] * kisqr;
    *diagptable++ = EIGN[2] * ki;
    *diagptable++ = EIGN[2] * EIGN[2] * kisqr;
  }
  for (i = lower; i < upper; i++) {
    diagptable = diagptable_start;
    sum = &(sumtable[i * 16]);
    inv_Li = *sum++;
    inv_Li += (tmp_1 = *diagptable++ * *sum++);
    inv_Li += (tmp_2 = *diagptable++ * *sum++);
    inv_Li += (tmp_3 = *diagptable++ * *sum++);
    dlnLidlz = tmp_1 * *diagptable++;
    d2lnLidlz2 = tmp_1 * *diagptable++;
    dlnLidlz += tmp_2 * *diagptable++;
    d2lnLidlz2 += tmp_2 * *diagptable++;
    dlnLidlz += tmp_3 * *diagptable++;
    d2lnLidlz2 += tmp_3 * *diagptable++;
    inv_Li += *sum++;
    inv_Li += (tmp_1 = *sum++ * *diagptable++);
    inv_Li += (tmp_2 = *sum++ * *diagptable++);
    inv_Li += (tmp_3 = *sum++ * *diagptable++);
    dlnLidlz += tmp_1 * *diagptable++;
    d2lnLidlz2 += tmp_1 * *diagptable++;
    dlnLidlz += tmp_2 * *diagptable++;
    d2lnLidlz2 += tmp_2 * *diagptable++;
    dlnLidlz += tmp_3 * *diagptable++;
    d2lnLidlz2 += tmp_3 * *diagptable++;
    inv_Li += *sum++;
    inv_Li += (tmp_1 = *sum++ * *diagptable++);
    inv_Li += (tmp_2 = *sum++ * *diagptable++);
    inv_Li += (tmp_3 = *sum++ * *diagptable++);
    dlnLidlz += tmp_1 * *diagptable++;
    d2lnLidlz2 += tmp_1 * *diagptable++;
    dlnLidlz += tmp_2 * *diagptable++;
    d2lnLidlz2 += tmp_2 * *diagptable++;
    dlnLidlz += tmp_3 * *diagptable++;
    d2lnLidlz2 += tmp_3 * *diagptable++;
    inv_Li += *sum++;
    inv_Li += (tmp_1 = *sum++ * *diagptable++);
    inv_Li += (tmp_2 = *sum++ * *diagptable++);
    inv_Li += (tmp_3 = *sum++ * *diagptable++);
    dlnLidlz += tmp_1 * *diagptable++;
    d2lnLidlz2 += tmp_1 * *diagptable++;
    dlnLidlz += tmp_2 * *diagptable++;
    d2lnLidlz2 += tmp_2 * *diagptable++;
    dlnLidlz += tmp_3 * *diagptable++;
    d2lnLidlz2 += tmp_3 * *diagptable++;
    inv_Li *= scaler;
    if (iptr[i] < 4)
      inv_Li += freqs[iptr[i]];
    inv_Li = 1.0 / inv_Li;
    dlnLidlz *= inv_Li;
    d2lnLidlz2 *= inv_Li;
    dlnLidlz *= scaler;
    d2lnLidlz2 *= scaler;
    dlnLdlz += wrptr[i] * dlnLidlz;
    d2lnLdlz2 += wrptr[i] * (d2lnLidlz2 - dlnLidlz * dlnLidlz);
  }
  *ext_dlnLdlz = dlnLdlz;
  *ext_d2lnLdlz2 = d2lnLdlz2;
  free(diagptable_start);
}


x86 assembly (clang, -O0):
<coreGTRGAMMAINVAR>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
mov    0x30(%rbp),%eax
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x8(%rbp),%rax
movsd  0xe82(%rip),%xmm1
subsd  (%rax),%xmm1
movsd  0xe6e(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x88(%rbp)
mov    $0x120,%edi
call   1040 <malloc@plt>
mov    %rax,-0x50(%rbp)
mov    %rax,-0x48(%rbp)
movl   $0x0,-0x54(%rbp)
cmpl   $0x4,-0x54(%rbp)
jge    13b1 <coreGTRGAMMAINVAR+0x281>
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x70(%rbp),%xmm0
mulsd  -0x38(%rbp),%xmm0
call   1050 <exp@plt>
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
mulsd  -0x70(%rbp),%xmm0
mulsd  -0x38(%rbp),%xmm0
call   1050 <exp@plt>
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
mulsd  -0x70(%rbp),%xmm0
mulsd  -0x38(%rbp),%xmm0
call   1050 <exp@plt>
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x70(%rbp),%xmm0
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
mulsd  (%rax),%xmm0
mulsd  -0x78(%rbp),%xmm0
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
mulsd  -0x70(%rbp),%xmm0
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  -0x78(%rbp),%xmm0
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
mulsd  -0x70(%rbp),%xmm0
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mulsd  -0x78(%rbp),%xmm0
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  %xmm0,(%rax)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    121a <coreGTRGAMMAINVAR+0xea>
mov    0x28(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    0x30(%rbp),%eax
jge    1d49 <coreGTRGAMMAINVAR+0xc19>
mov    -0x50(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
shl    $0x4,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
addsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
addsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
addsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm0
addsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm0
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
addsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm0
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
addsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm0
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
addsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm0
addsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm0
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
addsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm0
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
addsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm0
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
addsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm0
addsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm0
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
addsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm0
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
addsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm0
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
addsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x48(%rbp)
movsd  (%rax),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
mov    0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
cmpl   $0x4,(%rax,%rcx,4)
jge    1c46 <coreGTRGAMMAINVAR+0xb16>
mov    0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movslq (%rax,%rcx,4),%rax
movsd  -0xa0(%rbp,%rax,8),%xmm0
ff ff
addsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  0x3ba(%rip),%xmm0
divsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
mulsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
mov    0x20(%rbp),%rax
movslq -0x54(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
movsd  -0xd0(%rbp),%xmm2
ff
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    0x20(%rbp),%rax
movslq -0x54(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
movsd  -0xd8(%rbp),%xmm1
ff
movsd  -0xd0(%rbp),%xmm2
ff
movsd  -0xd0(%rbp),%xmm3
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    13b7 <coreGTRGAMMAINVAR+0x287>
movsd  -0x60(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x68(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x50(%rbp),%rdi
call   1030 <free@plt>
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<coreGTRGAMMAINVAR>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x1a8,%rsp
movsd  %xmm0,0x10(%rsp)
mov    %r9,0x68(%rsp)
mov    %r8,%rbx
mov    %rcx,%r12
mov    %rdx,%rbp
mov    0x200(%rsp),%eax
mov    %eax,0x38(%rsp)
mov    0x1f8(%rsp),%r14d
mov    0x1f0(%rsp),%rax
mov    %rax,0x58(%rsp)
mov    0x1e8(%rsp),%r13
mov    0x1e0(%rsp),%rax
mov    %rax,0x60(%rsp)
movsd  (%rdi),%xmm1
movupd (%rsi),%xmm0
movapd %xmm1,0x40(%rsp)
unpcklpd %xmm1,%xmm1
mulpd  %xmm1,%xmm0
movapd %xmm0,0x180(%rsp)
movupd 0x10(%rsi),%xmm0
mulpd  %xmm1,%xmm0
movapd %xmm0,0x190(%rsp)
mov    $0x120,%edi
call   1040 <malloc@plt>
mov    %rax,%r15
movsd  0x0(%rbp),%xmm1
movapd %xmm1,(%rsp)
movapd %xmm1,%xmm0
mulsd  %xmm1,%xmm0
movapd %xmm0,0x20(%rsp)
movsd  (%r12),%xmm0
mulsd  %xmm1,%xmm0
mulsd  0x10(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,(%r15)
movsd  0x8(%r12),%xmm0
mulsd  (%rsp),%xmm0
mulsd  0x10(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x8(%r15)
movsd  0x10(%r12),%xmm0
mulsd  (%rsp),%xmm0
mulsd  0x10(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x10(%r15)
movsd  (%r12),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movapd (%rsp),%xmm3
unpcklpd 0x20(%rsp),%xmm3
movapd %xmm0,%xmm2
unpcklpd %xmm1,%xmm2
mulpd  %xmm3,%xmm2
movupd %xmm2,0x18(%r15)
movsd  0x8(%r12),%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
unpcklpd %xmm2,%xmm1
mulpd  %xmm3,%xmm1
movupd %xmm1,0x28(%r15)
movsd  0x10(%r12),%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
unpcklpd %xmm2,%xmm1
mulpd  %xmm3,%xmm1
movupd %xmm1,0x38(%r15)
movsd  0x8(%rbp),%xmm1
movapd %xmm1,(%rsp)
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm2,0x20(%rsp)
mulsd  %xmm1,%xmm0
mulsd  0x10(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x48(%r15)
movsd  0x8(%r12),%xmm0
mulsd  (%rsp),%xmm0
mulsd  0x10(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x50(%r15)
movsd  0x10(%r12),%xmm0
mulsd  (%rsp),%xmm0
mulsd  0x10(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x58(%r15)
movsd  (%r12),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movapd (%rsp),%xmm3
unpcklpd 0x20(%rsp),%xmm3
movapd %xmm0,%xmm2
unpcklpd %xmm1,%xmm2
mulpd  %xmm3,%xmm2
movupd %xmm2,0x60(%r15)
movsd  0x8(%r12),%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
unpcklpd %xmm2,%xmm1
mulpd  %xmm3,%xmm1
movupd %xmm1,0x70(%r15)
movsd  0x10(%r12),%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
unpcklpd %xmm2,%xmm1
mulpd  %xmm3,%xmm1
movupd %xmm1,0x80(%r15)
movsd  0x10(%rbp),%xmm1
movapd %xmm1,(%rsp)
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm2,0x20(%rsp)
mulsd  %xmm1,%xmm0
mulsd  0x10(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x90(%r15)
movsd  0x8(%r12),%xmm0
mulsd  (%rsp),%xmm0
mulsd  0x10(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x98(%r15)
movsd  0x10(%r12),%xmm0
mulsd  (%rsp),%xmm0
mulsd  0x10(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0xa0(%r15)
movsd  (%r12),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movapd (%rsp),%xmm3
unpcklpd 0x20(%rsp),%xmm3
movapd %xmm0,%xmm2
unpcklpd %xmm1,%xmm2
mulpd  %xmm3,%xmm2
movupd %xmm2,0xa8(%r15)
movsd  0x8(%r12),%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
unpcklpd %xmm2,%xmm1
mulpd  %xmm3,%xmm1
movupd %xmm1,0xb8(%r15)
movsd  0x10(%r12),%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
unpcklpd %xmm2,%xmm1
mulpd  %xmm3,%xmm1
movupd %xmm1,0xc8(%r15)
movsd  0x18(%rbp),%xmm1
movapd %xmm1,(%rsp)
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm2,0x20(%rsp)
mulsd  %xmm1,%xmm0
mulsd  0x10(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0xd8(%r15)
movsd  0x8(%r12),%xmm0
mulsd  (%rsp),%xmm0
mulsd  0x10(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0xe0(%r15)
movsd  0x10(%r12),%xmm0
mulsd  (%rsp),%xmm0
mulsd  0x10(%rsp),%xmm0
call   1050 <exp@plt>
mov    0x38(%rsp),%ecx
movsd  %xmm0,0xe8(%r15)
movsd  (%r12),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movapd (%rsp),%xmm2
unpcklpd 0x20(%rsp),%xmm2
unpcklpd %xmm1,%xmm0
mulpd  %xmm2,%xmm0
movupd %xmm0,0xf0(%r15)
movsd  0x8(%r12),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
unpcklpd %xmm1,%xmm0
mulpd  %xmm2,%xmm0
movupd %xmm0,0x100(%r15)
movsd  0x10(%r12),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
unpcklpd %xmm1,%xmm0
mulpd  %xmm2,%xmm0
movupd %xmm0,0x110(%r15)
xorpd  %xmm0,%xmm0
cmp    %ecx,%r14d
jge    1a8d <coreGTRGAMMAINVAR+0x95d>
movsd  0xac7(%rip),%xmm7
subsd  0x40(%rsp),%xmm7
mulsd  0xac1(%rip),%xmm7
movsd  (%r15),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x8(%r15),%xmm0
movsd  %xmm0,0x40(%rsp)
movsd  0x10(%r15),%xmm0
movsd  %xmm0,0x148(%rsp)
movsd  0x18(%r15),%xmm0
movsd  %xmm0,0x140(%rsp)
movsd  0x20(%r15),%xmm0
movsd  %xmm0,0x138(%rsp)
movsd  0x28(%r15),%xmm0
movsd  %xmm0,0x130(%rsp)
movsd  0x30(%r15),%xmm0
movsd  %xmm0,0x128(%rsp)
movsd  0x38(%r15),%xmm0
movsd  %xmm0,0x120(%rsp)
movsd  0x40(%r15),%xmm0
movsd  %xmm0,0x118(%rsp)
movsd  0x48(%r15),%xmm0
movsd  %xmm0,0x110(%rsp)
movups 0x50(%r15),%xmm0
movaps %xmm0,0x170(%rsp)
movsd  0x60(%r15),%xmm0
movsd  %xmm0,0x108(%rsp)
movsd  0x68(%r15),%xmm0
movsd  %xmm0,0x100(%rsp)
movsd  0x70(%r15),%xmm0
movsd  %xmm0,0xf8(%rsp)
movslq %r14d,%rax
movslq %ecx,%rcx
shl    $0x4,%r14d
movsd  0x78(%r15),%xmm0
movsd  %xmm0,0xf0(%rsp)
movsd  0x80(%r15),%xmm0
movsd  %xmm0,0xe8(%rsp)
movsd  0x88(%r15),%xmm0
movsd  %xmm0,0xe0(%rsp)
movsd  0x90(%r15),%xmm0
movsd  %xmm0,0xd8(%rsp)
movups 0x98(%r15),%xmm0
movaps %xmm0,0x160(%rsp)
movsd  0xa8(%r15),%xmm0
movsd  %xmm0,0xd0(%rsp)
movsd  0xb0(%r15),%xmm0
movsd  %xmm0,0xc8(%rsp)
movsd  0xb8(%r15),%xmm0
movsd  %xmm0,0xc0(%rsp)
movsd  0xc0(%r15),%xmm0
movsd  %xmm0,0xb8(%rsp)
movsd  0xc8(%r15),%xmm0
movsd  %xmm0,0xb0(%rsp)
movsd  0xd0(%r15),%xmm0
movsd  %xmm0,0xa8(%rsp)
movsd  0xd8(%r15),%xmm0
movsd  %xmm0,0xa0(%rsp)
movups 0xe0(%r15),%xmm0
movaps %xmm0,0x150(%rsp)
movsd  0xf0(%r15),%xmm0
movsd  %xmm0,0x98(%rsp)
movsd  0xf8(%r15),%xmm0
movsd  %xmm0,0x90(%rsp)
movsd  0x100(%r15),%xmm0
movsd  %xmm0,0x88(%rsp)
movsd  0x108(%r15),%xmm0
movsd  %xmm0,0x80(%rsp)
movsd  0x110(%r15),%xmm0
movsd  %xmm0,0x78(%rsp)
movsd  0x118(%r15),%xmm0
movsd  %xmm0,0x70(%rsp)
xorpd  %xmm2,%xmm2
movsd  %xmm7,0x38(%rsp)
mov    0x58(%rsp),%rsi
jmp    1956 <coreGTRGAMMAINVAR+0x826>
nopw   0x0(%rax,%rax,1)
movapd %xmm11,%xmm10
mulsd  0x140(%rsp),%xmm10
movapd %xmm12,%xmm9
mulsd  0x130(%rsp),%xmm9
addsd  %xmm10,%xmm9
mulsd  0x138(%rsp),%xmm11
mulsd  0x128(%rsp),%xmm12
addsd  %xmm11,%xmm12
movapd %xmm8,%xmm1
mulsd  0x120(%rsp),%xmm1
addsd  %xmm9,%xmm1
mulsd  0x118(%rsp),%xmm8
addsd  %xmm12,%xmm8
movapd %xmm2,%xmm7
mulsd  0x108(%rsp),%xmm7
addsd  %xmm1,%xmm7
mulsd  0x100(%rsp),%xmm2
addsd  %xmm8,%xmm2
movapd %xmm5,%xmm1
mulsd  0xf8(%rsp),%xmm1
addsd  %xmm7,%xmm1
mulsd  0xf0(%rsp),%xmm5
addsd  %xmm2,%xmm5
movapd %xmm0,%xmm2
mulsd  0xe8(%rsp),%xmm2
addsd  %xmm1,%xmm2
mulsd  0xe0(%rsp),%xmm0
addsd  %xmm5,%xmm0
movapd %xmm6,%xmm1
mulsd  0xd0(%rsp),%xmm1
addsd  %xmm2,%xmm1
mulsd  0xc8(%rsp),%xmm6
addsd  %xmm0,%xmm6
movapd %xmm15,%xmm0
mulsd  0xc0(%rsp),%xmm0
addsd  %xmm1,%xmm0
mulsd  0xb8(%rsp),%xmm15
addsd  %xmm6,%xmm15
movapd %xmm4,%xmm1
mulsd  0xb0(%rsp),%xmm1
addsd  %xmm0,%xmm1
mulsd  0xa8(%rsp),%xmm4
addsd  %xmm15,%xmm4
movapd %xmm3,%xmm0
mulsd  0x98(%rsp),%xmm0
addsd  %xmm1,%xmm0
mulsd  0x90(%rsp),%xmm3
addsd  %xmm4,%xmm3
movapd (%rsp),%xmm4
movapd %xmm4,%xmm1
mulsd  0x88(%rsp),%xmm1
addsd  %xmm0,%xmm1
mulsd  0x80(%rsp),%xmm4
addsd  %xmm3,%xmm4
movapd %xmm14,%xmm2
mulsd  0x78(%rsp),%xmm2
addsd  %xmm1,%xmm2
mulsd  0x70(%rsp),%xmm14
addsd  %xmm4,%xmm14
movsd  0x705(%rip),%xmm0
divsd  %xmm13,%xmm0
mulsd  %xmm0,%xmm2
mulsd  %xmm14,%xmm0
movsd  0x38(%rsp),%xmm7
mulsd  %xmm7,%xmm2
mulsd  %xmm7,%xmm0
movapd %xmm2,%xmm1
mulsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
unpcklpd %xmm2,%xmm0
xorps  %xmm1,%xmm1
cvtsi2sdl (%rsi,%rax,4),%xmm1
unpcklpd %xmm1,%xmm1
mulpd  %xmm1,%xmm0
movapd %xmm0,%xmm2
movapd 0x10(%rsp),%xmm1
addpd  %xmm1,%xmm2
add    $0x1,%rax
add    $0x10,%r14d
cmp    %rax,%rcx
je     1a89 <coreGTRGAMMAINVAR+0x959>
movslq %r14d,%rdx
movsd  0x8(%rbx,%rdx,8),%xmm11
mulsd  0x20(%rsp),%xmm11
movsd  (%rbx,%rdx,8),%xmm13
addsd  %xmm11,%xmm13
movsd  0x10(%rbx,%rdx,8),%xmm12
mulsd  0x40(%rsp),%xmm12
addsd  %xmm12,%xmm13
movsd  0x18(%rbx,%rdx,8),%xmm8
mulsd  0x148(%rsp),%xmm8
addsd  %xmm8,%xmm13
addsd  0x20(%rbx,%rdx,8),%xmm13
movapd %xmm2,%xmm9
movsd  0x28(%rbx,%rdx,8),%xmm2
mulsd  0x110(%rsp),%xmm2
addsd  %xmm2,%xmm13
movupd 0x30(%rbx,%rdx,8),%xmm5
mulpd  0x170(%rsp),%xmm5
movupd 0x50(%rbx,%rdx,8),%xmm15
mulpd  0x160(%rsp),%xmm15
movupd 0x70(%rbx,%rdx,8),%xmm1
mulpd  0x150(%rsp),%xmm1
addsd  %xmm5,%xmm13
movapd %xmm5,%xmm0
unpckhpd %xmm5,%xmm0
addsd  %xmm0,%xmm13
addsd  0x40(%rbx,%rdx,8),%xmm13
movsd  0x48(%rbx,%rdx,8),%xmm6
mulsd  0xd8(%rsp),%xmm6
addsd  %xmm6,%xmm13
addsd  %xmm15,%xmm13
movapd %xmm15,%xmm4
unpckhpd %xmm15,%xmm4
addsd  %xmm4,%xmm13
addsd  0x60(%rbx,%rdx,8),%xmm13
movsd  0x68(%rbx,%rdx,8),%xmm3
mulsd  0xa0(%rsp),%xmm3
addsd  %xmm3,%xmm13
addsd  %xmm1,%xmm13
movapd %xmm1,%xmm14
unpckhpd %xmm1,%xmm14
addsd  %xmm14,%xmm13
mulsd  %xmm7,%xmm13
movslq 0x0(%r13,%rax,4),%rdx
cmp    $0x3,%rdx
movapd %xmm9,0x10(%rsp)
movapd %xmm1,(%rsp)
jg     1780 <coreGTRGAMMAINVAR+0x650>
addsd  0x180(%rsp,%rdx,8),%xmm13
jmp    1780 <coreGTRGAMMAINVAR+0x650>
addpd  %xmm1,%xmm0
mov    0x68(%rsp),%rax
movhpd %xmm0,(%rax)
mov    0x60(%rsp),%rax
movlpd %xmm0,(%rax)
mov    %r15,%rdi
add    $0x1a8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <free@plt>

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

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