#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double exp(double);
double gaux(double, int);
double pow(double, double);
void gint2_nai_SP_SP(double *a, double a_a, double *b, double b_a, double *c,
                     double *out) {
  double ab_a, d_0, d_1, d_2, nai_000_000_1, p_0, p_1, p_2, tmp1, tmp10, tmp11,
      tmp4, tmp9, u_0, u_1, u_2, usq, v_0, v_1, v_2;
  ab_a = a_a + b_a;
  p_0 = (a[0] * a_a + b[0] * b_a) / ab_a;
  p_1 = (a[1] * a_a + b[1] * b_a) / ab_a;
  p_2 = (a[2] * a_a + b[2] * b_a) / ab_a;
  d_0 = a[0] - b[0];
  d_1 = a[1] - b[1];
  d_2 = a[2] - b[2];
  u_0 = p_0 - c[0];
  u_1 = p_1 - c[1];
  u_2 = p_2 - c[2];
  usq = ab_a * (u_0 * u_0 + u_1 * u_1 + u_2 * u_2);
  v_0 = p_0 - a[0];
  v_1 = p_1 - a[1];
  v_2 = p_2 - a[2];
  p_0 = p_0 - b[0];
  p_1 = p_1 - b[1];
  p_2 = p_2 - b[2];
  d_0 = exp(-a_a * b_a * (d_0 * d_0 + d_1 * d_1 + d_2 * d_2) / ab_a) / ab_a;
  d_1 = 6.28318530717959 * d_0 * gaux(usq, 0);
  d_2 = pow(b_a, 0.75);
  tmp4 = pow(a_a, 0.75);
  out[0] = 0.507949087473928 * d_1 * d_2 * tmp4;
  nai_000_000_1 = 6.28318530717959 * d_0 * gaux(usq, 1);
  tmp11 = nai_000_000_1 * u_0;
  tmp1 = pow(b_a, 1.25);
  tmp4 = tmp1 * tmp4;
  out[1] = 1.01589817494786 * tmp4 * (-tmp11 + d_1 * p_0);
  tmp10 = nai_000_000_1 * u_1;
  out[2] = 1.01589817494786 * tmp4 * (-tmp10 + d_1 * p_1);
  tmp9 = nai_000_000_1 * u_2;
  out[3] = 1.01589817494786 * tmp4 * (-tmp9 + d_1 * p_2);
  tmp11 = -tmp11 + d_1 * v_0;
  tmp4 = pow(a_a, 1.25);
  d_2 = d_2 * tmp4;
  out[4] = 1.01589817494786 * d_2 * tmp11;
  usq = 6.28318530717959 * d_0 * gaux(usq, 2);
  v_0 = nai_000_000_1 * v_0 - u_0 * usq;
  ab_a = (0.5 * d_1 - 0.5 * nai_000_000_1) / ab_a;
  d_0 = tmp1 * tmp4;
  out[5] = 2.03179634989571 * d_0 * (ab_a + p_0 * tmp11 - u_0 * v_0);
  out[6] = 2.03179634989571 * d_0 * (p_1 * tmp11 - u_1 * v_0);
  out[7] = 2.03179634989571 * d_0 * (p_2 * tmp11 - u_2 * v_0);
  tmp4 = -tmp10 + d_1 * v_1;
  out[8] = 1.01589817494786 * d_2 * tmp4;
  tmp10 = nai_000_000_1 * v_1 - u_1 * usq;
  out[9] = 2.03179634989571 * d_0 * (p_0 * tmp4 - tmp10 * u_0);
  out[10] = 2.03179634989571 * d_0 * (ab_a + p_1 * tmp4 - tmp10 * u_1);
  out[11] = 2.03179634989571 * d_0 * (p_2 * tmp4 - tmp10 * u_2);
  tmp9 = -tmp9 + d_1 * v_2;
  out[12] = 1.01589817494786 * d_2 * tmp9;
  nai_000_000_1 = nai_000_000_1 * v_2 - u_2 * usq;
  out[13] = 2.03179634989571 * d_0 * (p_0 * tmp9 - nai_000_000_1 * u_0);
  out[14] = 2.03179634989571 * d_0 * (p_1 * tmp9 - nai_000_000_1 * u_1);
  out[15] = 2.03179634989571 * d_0 * (ab_a + p_2 * tmp9 - nai_000_000_1 * u_2);
}


x86 assembly (clang, -O0):
<gint2_nai_SP_SP>:
push   %rbp
mov    %rsp,%rbp
sub    $0xf0,%rsp
mov    %rdi,-0x8(%rbp)
movsd  %xmm0,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
movsd  %xmm1,-0x20(%rbp)
mov    %rdx,-0x28(%rbp)
mov    %rcx,-0x30(%rbp)
movsd  -0x10(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x10(%rbp),%xmm2
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
mulsd  -0x20(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x10(%rbp),%xmm2
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm1
mulsd  -0x20(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x10(%rbp),%xmm2
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm1
mulsd  -0x20(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x18(%rbp),%rax
subsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x18(%rbp),%rax
subsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x28(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
mov    -0x28(%rbp),%rax
subsd  0x8(%rax),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mov    -0x28(%rbp),%rax
subsd  0x10(%rax),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0xa0(%rbp),%xmm2
ff
movsd  -0xa0(%rbp),%xmm3
ff
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0xb0(%rbp),%xmm3
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
mov    -0x8(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
mov    -0x8(%rbp),%rax
subsd  0x8(%rax),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mov    -0x8(%rbp),%rax
subsd  0x10(%rax),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
mov    -0x18(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x18(%rbp),%rax
subsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x70(%rbp),%xmm0
mov    -0x18(%rbp),%rax
subsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x10(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm1
mulsd  -0x48(%rbp),%xmm1
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  -0x50(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
divsd  -0x38(%rbp),%xmm0
call   1040 <exp@plt>
divsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xc6f(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
xor    %edi,%edi
call   1030 <gaux@plt>
movaps %xmm0,%xmm1
movsd  -0xe8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  0xc4a(%rip),%xmm1
call   1050 <pow@plt>
movsd  %xmm0,-0x50(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xc33(%rip),%xmm1
call   1050 <pow@plt>
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xc16(%rip),%xmm0
mulsd  -0x48(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  0xbe4(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
mov    $0x1,%edi
call   1030 <gaux@plt>
movaps %xmm0,%xmm1
movsd  -0xe0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
mulsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
movsd  0xb97(%rip),%xmm1
call   1050 <pow@plt>
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xb58(%rip),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
movsd  -0x48(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x58(%rbp),%xmm0
mulsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x80(%rbp)
movsd  0xaf8(%rip),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  -0x80(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
movsd  -0x48(%rbp),%xmm1
movsd  -0x68(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x58(%rbp),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0xa98(%rip),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
movsd  -0x48(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x88(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x48(%rbp),%xmm0
movsd  -0xc0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
movsd  0xa21(%rip),%xmm1
call   1050 <pow@plt>
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x50(%rbp)
movsd  0x9e2(%rip),%xmm0
mulsd  -0x50(%rbp),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  0x9d4(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
mov    $0x2,%edi
call   1030 <gaux@plt>
movaps %xmm0,%xmm1
movsd  -0xd8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0xc0(%rbp),%xmm2
ff
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0xb8(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  0x945(%rip),%xmm1
mulsd  -0x58(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0x921(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x78(%rbp),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x40(%rbp)
movsd  0x8e5(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm3
ff
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
movsd  -0xc0(%rbp),%xmm3
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  0x882(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
movsd  -0x88(%rbp),%xmm3
ff
movsd  -0xa8(%rbp),%xmm2
ff
mulsd  -0xc0(%rbp),%xmm2
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  0x82c(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
movsd  -0x88(%rbp),%xmm3
ff
movsd  -0xb0(%rbp),%xmm2
ff
mulsd  -0xc0(%rbp),%xmm2
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0x80(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x48(%rbp),%xmm0
movsd  -0xc8(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0x7a5(%rip),%xmm0
mulsd  -0x50(%rbp),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0x58(%rbp),%xmm0
movsd  -0xc8(%rbp),%xmm2
ff
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  -0xb8(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0x73e(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm1
movsd  -0x90(%rbp),%xmm3
ff
movsd  -0x80(%rbp),%xmm2
mulsd  -0xa0(%rbp),%xmm2
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  0x6eb(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
movsd  -0x68(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm3
ff
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  -0x80(%rbp),%xmm1
movsd  -0xa8(%rbp),%xmm3
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  0x68b(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
movsd  -0x90(%rbp),%xmm3
ff
movsd  -0x80(%rbp),%xmm2
mulsd  -0xb0(%rbp),%xmm2
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x58(%rax)
movsd  -0x98(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x48(%rbp),%xmm0
movsd  -0xd0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0x604(%rip),%xmm0
mulsd  -0x50(%rbp),%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0x58(%rbp),%xmm0
movsd  -0xd0(%rbp),%xmm2
ff
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  -0xb8(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0x59d(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm1
movsd  -0x98(%rbp),%xmm3
ff
movsd  -0x58(%rbp),%xmm2
mulsd  -0xa0(%rbp),%xmm2
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  0x54a(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
movsd  -0x98(%rbp),%xmm3
ff
movsd  -0x58(%rbp),%xmm2
mulsd  -0xa8(%rbp),%xmm2
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  0x4f7(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm3
ff
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  -0x58(%rbp),%xmm1
movsd  -0xb0(%rbp),%xmm3
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x78(%rax)
add    $0xf0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<gint2_nai_SP_SP>:
push   %rbx
sub    $0x110,%rsp
mov    %rcx,%rbx
movapd %xmm1,%xmm3
movapd %xmm0,%xmm1
addsd  %xmm3,%xmm1
movapd %xmm1,%xmm10
movupd (%rdi),%xmm1
movupd (%rsi),%xmm8
movapd %xmm3,%xmm2
movapd %xmm3,%xmm5
unpcklpd %xmm3,%xmm2
mulpd  %xmm8,%xmm2
movapd %xmm0,%xmm3
unpcklpd %xmm0,%xmm3
mulpd  %xmm1,%xmm3
addpd  %xmm2,%xmm3
movapd %xmm10,%xmm2
unpcklpd %xmm10,%xmm2
divpd  %xmm2,%xmm3
movapd %xmm3,%xmm9
movsd  0x10(%rdi),%xmm3
movsd  0x10(%rsi),%xmm2
movapd %xmm2,%xmm4
mulsd  %xmm5,%xmm4
movapd %xmm5,%xmm11
movapd %xmm5,0x10(%rsp)
movapd %xmm3,%xmm5
mulsd  %xmm0,%xmm5
movapd %xmm0,%xmm6
movapd %xmm0,0x30(%rsp)
addsd  %xmm4,%xmm5
divsd  %xmm10,%xmm5
movapd %xmm5,%xmm0
movupd (%rdx),%xmm4
movapd %xmm9,%xmm5
subpd  %xmm4,%xmm5
movapd %xmm5,0xb0(%rsp)
movapd %xmm0,%xmm7
subsd  0x10(%rdx),%xmm7
movsd  %xmm7,0x28(%rsp)
movapd %xmm5,%xmm4
unpckhpd %xmm5,%xmm4
movapd %xmm4,0x100(%rsp)
mulsd  %xmm4,%xmm4
mulsd  %xmm5,%xmm5
addsd  %xmm4,%xmm5
mulsd  %xmm7,%xmm7
addsd  %xmm5,%xmm7
movapd %xmm9,%xmm4
subpd  %xmm1,%xmm4
movapd %xmm4,%xmm5
movapd %xmm4,0x90(%rsp)
subpd  %xmm8,%xmm1
subpd  %xmm8,%xmm9
movapd %xmm9,0xc0(%rsp)
movapd %xmm0,%xmm4
subsd  %xmm3,%xmm0
movsd  %xmm0,0x88(%rsp)
movapd %xmm3,%xmm0
subsd  %xmm2,%xmm0
movapd %xmm10,0xa0(%rsp)
mulsd  %xmm10,%xmm7
movsd  %xmm7,0x8(%rsp)
subsd  %xmm2,%xmm4
movsd  %xmm4,0x20(%rsp)
movapd %xmm1,%xmm2
mulpd  %xmm1,%xmm2
unpckhpd %xmm2,%xmm2
mulsd  %xmm1,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movapd %xmm6,%xmm1
xorpd  0xd67(%rip),%xmm1
mulsd  %xmm11,%xmm1
mulsd  %xmm1,%xmm0
movapd %xmm5,%xmm1
unpckhpd %xmm5,%xmm1
movapd %xmm1,0xf0(%rsp)
divsd  %xmm10,%xmm0
call   1040 <exp@plt>
divsd  0xa0(%rsp),%xmm0
mulsd  0xd42(%rip),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x8(%rsp),%xmm0
xor    %edi,%edi
call   1030 <gaux@plt>
mulsd  (%rsp),%xmm0
movapd %xmm0,0x60(%rsp)
movsd  0xd25(%rip),%xmm1
movaps 0x10(%rsp),%xmm0
call   1050 <pow@plt>
movaps %xmm0,0x40(%rsp)
movapd 0x30(%rsp),%xmm0
movsd  0xd08(%rip),%xmm1
call   1050 <pow@plt>
movapd %xmm0,0x50(%rsp)
movsd  0xcfd(%rip),%xmm1
mulsd  0x60(%rsp),%xmm1
mulsd  0x40(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rbx)
movsd  0x8(%rsp),%xmm0
mov    $0x1,%edi
call   1030 <gaux@plt>
mulsd  (%rsp),%xmm0
movapd %xmm0,0x70(%rsp)
movsd  0xcce(%rip),%xmm1
movapd 0x10(%rsp),%xmm0
call   1050 <pow@plt>
movapd %xmm0,0xd0(%rsp)
movapd 0x50(%rsp),%xmm5
mulsd  %xmm0,%xmm5
mulsd  0xcb0(%rip),%xmm5
movdqa 0x70(%rsp),%xmm0
pxor   0xc72(%rip),%xmm0
pshufd $0x44,%xmm0,%xmm1
movdqa %xmm0,%xmm2
mulpd  0xb0(%rsp),%xmm1
movapd 0x60(%rsp),%xmm4
movapd %xmm4,%xmm0
unpcklpd %xmm4,%xmm0
mulpd  0xc0(%rsp),%xmm0
addpd  %xmm1,%xmm0
movapd %xmm1,%xmm3
movapd %xmm1,0xe0(%rsp)
movapd %xmm5,%xmm1
unpcklpd %xmm5,%xmm1
mulpd  %xmm0,%xmm1
movupd %xmm1,0x8(%rbx)
mulsd  0x28(%rsp),%xmm2
movapd %xmm2,0x50(%rsp)
movapd %xmm4,%xmm0
mulsd  0x20(%rsp),%xmm0
addsd  %xmm2,%xmm0
mulsd  %xmm5,%xmm0
movsd  %xmm0,0x18(%rbx)
movapd %xmm4,%xmm0
mulsd  0x90(%rsp),%xmm0
addsd  %xmm3,%xmm0
movapd %xmm0,0x10(%rsp)
movapd 0x30(%rsp),%xmm0
movsd  0xc07(%rip),%xmm1
call   1050 <pow@plt>
movsd  %xmm0,0x30(%rsp)
movapd 0x40(%rsp),%xmm1
mulsd  %xmm0,%xmm1
mulsd  0xbf2(%rip),%xmm1
movapd %xmm1,0x40(%rsp)
movapd 0x10(%rsp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x20(%rbx)
movsd  0x8(%rsp),%xmm0
mov    $0x2,%edi
call   1030 <gaux@plt>
mulsd  (%rsp),%xmm0
movapd %xmm0,%xmm1
movapd 0xb0(%rsp),%xmm9
mulsd  %xmm9,%xmm1
movapd 0x90(%rsp),%xmm5
movapd 0x70(%rsp),%xmm3
mulsd  %xmm3,%xmm5
subsd  %xmm1,%xmm5
movsd  0xb9e(%rip),%xmm2
mulsd  %xmm3,%xmm2
movsd  0xb9a(%rip),%xmm1
movapd 0x60(%rsp),%xmm15
mulsd  %xmm15,%xmm1
addsd  %xmm2,%xmm1
divsd  0xa0(%rsp),%xmm1
movapd 0xd0(%rsp),%xmm12
mulsd  0x30(%rsp),%xmm12
movapd 0xc0(%rsp),%xmm14
movapd %xmm14,%xmm2
movapd 0x10(%rsp),%xmm7
mulsd  %xmm7,%xmm2
addsd  %xmm1,%xmm2
movapd 0x100(%rsp),%xmm13
movapd %xmm13,%xmm3
movapd 0xafc(%rip),%xmm6
xorpd  %xmm6,%xmm3
mulsd  %xmm5,%xmm3
unpcklpd %xmm3,%xmm2
movapd %xmm9,%xmm3
xorpd  %xmm6,%xmm3
shufpd $0x2,%xmm14,%xmm3
movapd %xmm5,%xmm4
unpcklpd %xmm7,%xmm4
movapd %xmm7,%xmm8
mulpd  %xmm3,%xmm4
addpd  %xmm2,%xmm4
mulsd  0xb0b(%rip),%xmm12
movapd %xmm12,%xmm11
unpcklpd %xmm12,%xmm11
mulpd  %xmm11,%xmm4
movupd %xmm4,0x28(%rbx)
movsd  0x28(%rsp),%xmm7
mulsd  %xmm7,%xmm5
movsd  0x20(%rsp),%xmm10
movapd %xmm8,%xmm2
mulsd  %xmm10,%xmm2
subsd  %xmm5,%xmm2
movapd %xmm2,%xmm5
movapd 0xe0(%rsp),%xmm4
unpckhpd %xmm4,%xmm4
movapd %xmm15,%xmm3
movapd 0xf0(%rsp),%xmm2
mulsd  %xmm2,%xmm3
addsd  %xmm4,%xmm3
movapd %xmm12,%xmm4
unpcklpd %xmm3,%xmm4
movapd 0x40(%rsp),%xmm8
unpcklpd %xmm8,%xmm5
mulpd  %xmm4,%xmm5
movupd %xmm5,0x38(%rbx)
movapd %xmm13,%xmm4
mulsd  %xmm0,%xmm4
movapd 0x70(%rsp),%xmm13
mulsd  %xmm13,%xmm2
subsd  %xmm4,%xmm2
movapd %xmm14,%xmm4
unpckhpd %xmm14,%xmm4
xorpd  %xmm2,%xmm6
movapd %xmm9,%xmm5
mulsd  %xmm6,%xmm5
mulsd  %xmm3,%xmm4
addsd  %xmm1,%xmm4
unpcklpd %xmm4,%xmm5
movapd %xmm14,%xmm4
unpcklpd %xmm6,%xmm4
movapd %xmm9,%xmm6
movsd  %xmm3,%xmm6
mulpd  %xmm4,%xmm6
addpd  %xmm5,%xmm6
mulpd  %xmm11,%xmm6
movupd %xmm6,0x48(%rbx)
movapd %xmm7,%xmm5
mulsd  %xmm7,%xmm2
mulsd  %xmm10,%xmm3
subsd  %xmm2,%xmm3
movsd  0x88(%rsp),%xmm7
movapd %xmm15,%xmm2
mulsd  %xmm7,%xmm2
addsd  0x50(%rsp),%xmm2
unpcklpd %xmm8,%xmm3
movapd %xmm12,%xmm4
unpcklpd %xmm2,%xmm4
mulpd  %xmm4,%xmm3
movupd %xmm3,0x58(%rbx)
movapd %xmm13,%xmm3
mulsd  %xmm7,%xmm3
mulsd  %xmm5,%xmm0
subsd  %xmm0,%xmm3
movapd %xmm3,%xmm0
movapd %xmm3,%xmm7
unpcklpd %xmm3,%xmm0
mulpd  %xmm9,%xmm0
movapd %xmm10,%xmm3
movapd %xmm2,%xmm4
mulsd  %xmm2,%xmm3
unpcklpd %xmm2,%xmm4
mulpd  %xmm14,%xmm4
subpd  %xmm0,%xmm4
mulpd  %xmm11,%xmm4
movupd %xmm4,0x68(%rbx)
movapd %xmm3,%xmm0
addsd  %xmm1,%xmm0
mulsd  %xmm5,%xmm7
subsd  %xmm7,%xmm0
mulsd  %xmm12,%xmm0
movsd  %xmm0,0x78(%rbx)
add    $0x110,%rsp
pop    %rbx
ret

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

LLVM IR (-O2):
define void @gint2_nai_SP_SP(double* nocapture %0, double %1, double* nocapture %2, double %3, double* nocapture %4, double* nocapture writeonly %5) {
%7 = fadd double %1, %3
%8 = bitcast double* %0 to <2 x double>*
%9 = load <2 x double>, <2 x double>* %8
%10 = bitcast double* %2 to <2 x double>*
%11 = load <2 x double>, <2 x double>* %10
%12 = insertelement <2 x double> poison, double %3, i64 0
%13 = shufflevector <2 x double> %12, <2 x double> poison, <2 x i32> zeroinitializer
%14 = fmul <2 x double> %11, %13
%15 = insertelement <2 x double> poison, double %1, i64 0
%16 = shufflevector <2 x double> %15, <2 x double> poison, <2 x i32> zeroinitializer
%17 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %9, <2 x double> %16, <2 x double> %14)
%18 = insertelement <2 x double> poison, double %7, i64 0
%19 = shufflevector <2 x double> %18, <2 x double> poison, <2 x i32> zeroinitializer
%20 = fdiv <2 x double> %17, %19
%21 = getelementptr inbounds double, double* %0, i64 2
%22 = load double, double* %21
%23 = getelementptr inbounds double, double* %2, i64 2
%24 = load double, double* %23
%25 = fmul double %24, %3
%26 = tail call double @llvm.fmuladd.f64(double %22, double %1, double %25)
%27 = fdiv double %26, %7
%28 = fsub <2 x double> %9, %11
%29 = extractelement <2 x double> %28, i64 0
%30 = fsub <2 x double> %9, %11
%31 = fsub double %22, %24
%32 = bitcast double* %4 to <2 x double>*
%33 = load <2 x double>, <2 x double>* %32
%34 = fsub <2 x double> %20, %33
%35 = getelementptr inbounds double, double* %4, i64 2
%36 = load double, double* %35
%37 = fsub double %27, %36
%38 = extractelement <2 x double> %34, i64 1
%39 = fmul double %38, %38
%40 = extractelement <2 x double> %34, i64 0
%41 = tail call double @llvm.fmuladd.f64(double %40, double %40, double %39)
%42 = tail call double @llvm.fmuladd.f64(double %37, double %37, double %41)
%43 = fmul double %7, %42
%44 = fsub <2 x double> %20, %9
%45 = extractelement <2 x double> %44, i64 0
%46 = fsub <2 x double> %20, %9
%47 = extractelement <2 x double> %46, i64 1
%48 = fsub double %27, %22
%49 = fsub <2 x double> %20, %11
%50 = fsub double %27, %24
%51 = fneg double %1
%52 = fmul double %51, %3
%53 = fmul <2 x double> %30, %30
%54 = extractelement <2 x double> %53, i64 1
%55 = tail call double @llvm.fmuladd.f64(double %29, double %29, double %54)
%56 = tail call double @llvm.fmuladd.f64(double %31, double %31, double %55)
%57 = fmul double %52, %56
%58 = fdiv double %57, %7
%59 = tail call double @exp(double %58)
%60 = fdiv double %59, %7
%61 = fmul double %60, 0x401921FB54442D1C
%62 = tail call double @gaux(double %43, i32 0)
%63 = fmul double %62, %61
%64 = tail call double @pow(double %3, double 7.500000e-01)
%65 = tail call double @pow(double %1, double 7.500000e-01)
%66 = fmul double %63, 0x3FE0411E71D7795B
%67 = fmul double %64, %66
%68 = fmul double %65, %67
store double %68, double* %5
%69 = tail call double @gaux(double %43, i32 1)
%70 = fmul double %61, %69
%71 = tail call double @pow(double %3, double 1.250000e+00)
%72 = fmul double %65, %71
%73 = fmul double %72, 0x3FF0411E71D7796D
%74 = fneg double %70
%75 = getelementptr inbounds double, double* %5, i64 1
%76 = insertelement <2 x double> poison, double %74, i64 0
%77 = shufflevector <2 x double> %76, <2 x double> poison, <2 x i32> zeroinitializer
%78 = fmul <2 x double> %34, %77
%79 = insertelement <2 x double> poison, double %63, i64 0
%80 = shufflevector <2 x double> %79, <2 x double> poison, <2 x i32> zeroinitializer
%81 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %80, <2 x double> %49, <2 x double> %78)
%82 = insertelement <2 x double> poison, double %73, i64 0
%83 = shufflevector <2 x double> %82, <2 x double> poison, <2 x i32> zeroinitializer
%84 = fmul <2 x double> %83, %81
%85 = bitcast double* %75 to <2 x double>*
store <2 x double> %84, <2 x double>* %85
%86 = fmul double %37, %74
%87 = tail call double @llvm.fmuladd.f64(double %63, double %50, double %86)
%88 = fmul double %73, %87
%89 = getelementptr inbounds double, double* %5, i64 3
store double %88, double* %89
%90 = extractelement <2 x double> %78, i64 0
%91 = tail call double @llvm.fmuladd.f64(double %63, double %45, double %90)
%92 = tail call double @pow(double %1, double 1.250000e+00)
%93 = fmul double %64, %92
%94 = fmul double %93, 0x3FF0411E71D7796D
%95 = fmul double %91, %94
%96 = getelementptr inbounds double, double* %5, i64 4
store double %95, double* %96
%97 = tail call double @gaux(double %43, i32 2)
%98 = fmul double %61, %97
%99 = fneg double %40
%100 = fmul double %98, %99
%101 = tail call double @llvm.fmuladd.f64(double %70, double %45, double %100)
%102 = fmul double %70, -5.000000e-01
%103 = tail call double @llvm.fmuladd.f64(double %63, double 5.000000e-01, double %102)
%104 = fdiv double %103, %7
%105 = fmul double %71, %92
%106 = fmul double %105, 0x4000411E71D77957
%107 = extractelement <2 x double> %49, i64 0
%108 = tail call double @llvm.fmuladd.f64(double %107, double %91, double %104)
%109 = getelementptr inbounds double, double* %5, i64 5
%110 = fneg double %38
%111 = fmul double %101, %110
%112 = extractelement <2 x double> %49, i64 1
%113 = insertelement <2 x double> %49, double %99, i64 0
%114 = insertelement <2 x double> poison, double %101, i64 0
%115 = insertelement <2 x double> %114, double %91, i64 1
%116 = insertelement <2 x double> poison, double %108, i64 0
%117 = insertelement <2 x double> %116, double %111, i64 1
%118 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %113, <2 x double> %115, <2 x double> %117)
%119 = insertelement <2 x double> poison, double %106, i64 0
%120 = shufflevector <2 x double> %119, <2 x double> poison, <2 x i32> zeroinitializer
%121 = fmul <2 x double> %120, %118
%122 = bitcast double* %109 to <2 x double>*
store <2 x double> %121, <2 x double>* %122
%123 = fneg double %37
%124 = fmul double %101, %123
%125 = tail call double @llvm.fmuladd.f64(double %50, double %91, double %124)
%126 = getelementptr inbounds double, double* %5, i64 7
%127 = extractelement <2 x double> %78, i64 1
%128 = tail call double @llvm.fmuladd.f64(double %63, double %47, double %127)
%129 = insertelement <2 x double> %119, double %128, i64 1
%130 = insertelement <2 x double> poison, double %125, i64 0
%131 = insertelement <2 x double> %130, double %94, i64 1
%132 = fmul <2 x double> %129, %131
%133 = bitcast double* %126 to <2 x double>*
store <2 x double> %132, <2 x double>* %133
%134 = fmul double %98, %110
%135 = tail call double @llvm.fmuladd.f64(double %70, double %47, double %134)
%136 = fneg double %135
%137 = fmul double %40, %136
%138 = getelementptr inbounds double, double* %5, i64 9
%139 = tail call double @llvm.fmuladd.f64(double %112, double %128, double %104)
%140 = insertelement <2 x double> %49, double %136, i64 1
%141 = insertelement <2 x double> %34, double %128, i64 0
%142 = insertelement <2 x double> poison, double %137, i64 0
%143 = insertelement <2 x double> %142, double %139, i64 1
%144 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %140, <2 x double> %141, <2 x double> %143)
%145 = fmul <2 x double> %120, %144
%146 = bitcast double* %138 to <2 x double>*
store <2 x double> %145, <2 x double>* %146
%147 = fmul double %37, %136
%148 = tail call double @llvm.fmuladd.f64(double %50, double %128, double %147)
%149 = getelementptr inbounds double, double* %5, i64 11
%150 = tail call double @llvm.fmuladd.f64(double %63, double %48, double %86)
%151 = insertelement <2 x double> %119, double %150, i64 1
%152 = insertelement <2 x double> poison, double %148, i64 0
%153 = insertelement <2 x double> %152, double %94, i64 1
%154 = fmul <2 x double> %151, %153
%155 = bitcast double* %149 to <2 x double>*
store <2 x double> %154, <2 x double>* %155
%156 = fmul double %98, %123
%157 = tail call double @llvm.fmuladd.f64(double %70, double %48, double %156)
%158 = fneg double %157
%159 = getelementptr inbounds double, double* %5, i64 13
%160 = insertelement <2 x double> poison, double %158, i64 0
%161 = shufflevector <2 x double> %160, <2 x double> poison, <2 x i32> zeroinitializer
%162 = fmul <2 x double> %34, %161
%163 = insertelement <2 x double> poison, double %150, i64 0
%164 = shufflevector <2 x double> %163, <2 x double> poison, <2 x i32> zeroinitializer
%165 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %49, <2 x double> %164, <2 x double> %162)
%166 = fmul <2 x double> %120, %165
%167 = bitcast double* %159 to <2 x double>*
store <2 x double> %166, <2 x double>* %167
%168 = tail call double @llvm.fmuladd.f64(double %50, double %150, double %104)
%169 = tail call double @llvm.fmuladd.f64(double %158, double %37, double %168)
%170 = fmul double %106, %169
%171 = getelementptr inbounds double, double* %5, i64 15
store double %170, double* %171
ret void
}