#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 */
int M_PI;
double exp(double);
double rec_saha_xe_H(double, double, double);
double sqrt(int);
double rec_helium_dxedt(double xe, double nH0, double Tr0, double fHe, double H,
                        double z) {
  double Tr, nH, ainv, s, s0;
  double xHeI, xHeII, y2s, y2p, xHII;
  double etacinv, g2pinc, dnuline, tau2p, pesc, tauc;
  double xdown, xup, ydown, enh;
  Tr = Tr0 * (ainv = 1 + z);
  nH = nH0 * ainv * ainv * ainv;
  s0 = 2.414194e21 * Tr * sqrt(Tr) / nH * 4.;
  s = s0 * exp(-285325. / Tr);
  xHII = rec_saha_xe_H(nH0, Tr0, z);
  xHeII = xe - xHII;
  xHeI = fHe - xHeII;
  y2s = exp(46090. / Tr) / s0;
  y2p = exp(39101. / Tr) / s0 * 3.;
  etacinv =
      H / (nH * nH * xe) * Tr * sqrt(Tr) * exp(115.920 - 157801.37882 / Tr);
  g2pinc = 1.976e6 / (1. - exp(-6989. / Tr)) +
           6.03e6 / (exp(19754. / Tr) - 1.) + 1.06e8 / (exp(21539. / Tr) - 1.) +
           2.18e6 / (exp(28496. / Tr) - 1.) + 3.37e7 / (exp(29224. / Tr) - 1.) +
           1.04e6 / (exp(32414. / Tr) - 1.) + 1.51e7 / (exp(32781. / Tr) - 1.);
  tau2p = 4.277e-14 * nH / H * xHeI;
  dnuline = g2pinc * tau2p / (4. * M_PI * M_PI);
  tauc = dnuline / etacinv;
  enh = sqrt(1. + M_PI * M_PI * tauc) + 7.74 * tauc / (1. + 70. * tauc);
  pesc = enh / tau2p;
  pesc =
      pesc + (1. - exp(-1.023e-7 * tau2p)) *
                 (0.964525 * exp(2947. / Tr) - enh * exp(-6.14e13 / etacinv)) /
                 tau2p;
  ydown = 50.94 * y2s + 1.7989e9 * y2p * pesc;
  xdown = ydown * xHeII * xe;
  xup = ydown * xHeI * s;
  return (xup - xdown +
          H * (1. + z) *
              (rec_saha_xe_H(nH0, Tr0, z - 0.5) -
               rec_saha_xe_H(nH0, Tr0, z + 0.5)));
}


x86 assembly (clang, -O0):
<rec_helium_dxedt>:
push   %rbp
mov    %rsp,%rbp
sub    $0x160,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  %xmm3,-0x20(%rbp)
movsd  %xmm4,-0x28(%rbp)
movsd  %xmm5,-0x30(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  0xea2(%rip),%xmm1
addsd  -0x30(%rbp),%xmm1
movsd  %xmm1,-0x48(%rbp)
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x10(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xf66(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
cvttsd2si -0x38(%rbp),%edi
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x158(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
divsd  -0x40(%rbp),%xmm0
movsd  0xe83(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
movsd  0xf0d(%rip),%xmm0
divsd  -0x38(%rbp),%xmm0
call   1040 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x150(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm2
call   1030 <rec_saha_xe_H@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0x8(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x20(%rbp),%xmm0
subsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xea8(%rip),%xmm0
divsd  -0x38(%rbp),%xmm0
call   1040 <exp@plt>
divsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xe84(%rip),%xmm0
divsd  -0x38(%rbp),%xmm0
call   1040 <exp@plt>
divsd  -0x58(%rbp),%xmm0
movsd  0xe65(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm1
mulsd  -0x40(%rbp),%xmm1
mulsd  -0x8(%rbp),%xmm1
divsd  %xmm1,%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
cvttsd2si -0x38(%rbp),%edi
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x148(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  0xe06(%rip),%xmm1
divsd  -0x38(%rbp),%xmm1
movsd  0xdf1(%rip),%xmm0
subsd  %xmm1,%xmm0
call   1040 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x140(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0xdc1(%rip),%xmm0
divsd  -0x38(%rbp),%xmm0
call   1040 <exp@plt>
movsd  0xcef(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  0xd9b(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
movsd  0xd7f(%rip),%xmm0
divsd  -0x38(%rbp),%xmm0
call   1040 <exp@plt>
movaps %xmm0,%xmm2
movsd  -0x138(%rbp),%xmm0
ff
movsd  0xcb2(%rip),%xmm1
subsd  %xmm1,%xmm2
movsd  0xd4e(%rip),%xmm1
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  0xd2e(%rip),%xmm0
divsd  -0x38(%rbp),%xmm0
call   1040 <exp@plt>
movaps %xmm0,%xmm2
movsd  -0x130(%rbp),%xmm0
ff
movsd  0xc71(%rip),%xmm1
subsd  %xmm1,%xmm2
movsd  0xcfd(%rip),%xmm1
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  0xcdd(%rip),%xmm0
divsd  -0x38(%rbp),%xmm0
call   1040 <exp@plt>
movaps %xmm0,%xmm2
movsd  -0x128(%rbp),%xmm0
ff
movsd  0xc30(%rip),%xmm1
subsd  %xmm1,%xmm2
movsd  0xcac(%rip),%xmm1
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  0xc8c(%rip),%xmm0
divsd  -0x38(%rbp),%xmm0
call   1040 <exp@plt>
movaps %xmm0,%xmm2
movsd  -0x120(%rbp),%xmm0
ff
movsd  0xbef(%rip),%xmm1
subsd  %xmm1,%xmm2
movsd  0xc5b(%rip),%xmm1
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  0xc3b(%rip),%xmm0
divsd  -0x38(%rbp),%xmm0
call   1040 <exp@plt>
movaps %xmm0,%xmm2
movsd  -0x118(%rbp),%xmm0
ff
movsd  0xbae(%rip),%xmm1
subsd  %xmm1,%xmm2
movsd  0xc0a(%rip),%xmm1
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  0xbea(%rip),%xmm0
divsd  -0x38(%rbp),%xmm0
call   1040 <exp@plt>
movaps %xmm0,%xmm2
movsd  -0x110(%rbp),%xmm0
ff
movsd  0xb6d(%rip),%xmm1
subsd  %xmm1,%xmm2
movsd  0xbb9(%rip),%xmm1
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xb99(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
divsd  -0x28(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
mulsd  -0xa0(%rbp),%xmm0
ff
mov    0x2afb(%rip),%rax
cvtsi2sdl (%rax),%xmm2
movsd  0xb57(%rip),%xmm1
mulsd  %xmm2,%xmm1
mov    0x2ae4(%rip),%rax
cvtsi2sdl (%rax),%xmm2
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
divsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
mov    0x2ab1(%rip),%rax
mov    (%rax),%eax
mov    0x2aa8(%rip),%rcx
imul   (%rcx),%eax
cvtsi2sd %eax,%xmm0
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  0xaad(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1050 <sqrt@plt>
movsd  0xad8(%rip),%xmm1
mulsd  -0xb0(%rbp),%xmm1
ff
movsd  -0xb0(%rbp),%xmm2
ff
movsd  0xab8(%rip),%xmm3
mulsd  %xmm3,%xmm2
movsd  0xa74(%rip),%xmm3
addsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
divsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  0xa60(%rip),%xmm0
mulsd  -0xa0(%rbp),%xmm0
ff
call   1040 <exp@plt>
movaps %xmm0,%xmm1
movsd  0xa18(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  0xa2c(%rip),%xmm0
divsd  -0x38(%rbp),%xmm0
call   1040 <exp@plt>
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
movsd  0x9fa(%rip),%xmm0
divsd  -0x88(%rbp),%xmm0
ff
call   1040 <exp@plt>
movsd  -0x108(%rbp),%xmm3
ff
movsd  -0x100(%rbp),%xmm2
ff
movsd  -0xf8(%rbp),%xmm1
ff
movaps %xmm0,%xmm4
movsd  -0xf0(%rbp),%xmm0
ff
mulsd  %xmm4,%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
movsd  0x99f(%rip),%xmm4
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
divsd  -0xa0(%rbp),%xmm1
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  0x96a(%rip),%xmm1
mulsd  -0x78(%rbp),%xmm1
mulsd  -0xa8(%rbp),%xmm1
ff
movsd  0x94d(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
mulsd  -0x68(%rbp),%xmm0
mulsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
mulsd  -0x60(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
subsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
movsd  0x8dc(%rip),%xmm1
addsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm2
movsd  0x8ac(%rip),%xmm3
subsd  %xmm3,%xmm2
call   1030 <rec_saha_xe_H@plt>
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  0x889(%rip),%xmm2
addsd  -0x30(%rbp),%xmm2
call   1030 <rec_saha_xe_H@plt>
movsd  -0xe8(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm1
ff
movaps %xmm0,%xmm3
movsd  -0xd8(%rbp),%xmm0
ff
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
add    $0x160,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<rec_helium_dxedt>:
push   %rbx
sub    $0x100,%rsp
movsd  %xmm5,0x48(%rsp)
movaps %xmm4,0xc0(%rsp)
movaps %xmm3,0xb0(%rsp)
movapd %xmm2,0xe0(%rsp)
movapd %xmm1,%xmm3
movapd %xmm1,0xd0(%rsp)
movsd  %xmm0,0x40(%rsp)
movsd  0xe8e(%rip),%xmm0
movsd  %xmm0,0x38(%rsp)
movapd %xmm5,%xmm1
addsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
movapd %xmm1,0x70(%rsp)
unpcklpd %xmm1,%xmm0
unpcklpd %xmm3,%xmm2
mulpd  %xmm0,%xmm2
movapd %xmm2,(%rsp)
movapd 0xf6d(%rip),%xmm0
unpcklpd %xmm1,%xmm0
mulpd  %xmm2,%xmm0
movapd %xmm0,0x60(%rsp)
cvttsd2si %xmm2,%ebx
mov    %ebx,%edi
call   1050 <sqrt@plt>
unpcklpd 0x70(%rsp),%xmm0
mulpd  0x60(%rsp),%xmm0
movapd %xmm0,0x50(%rsp)
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
movapd %xmm1,0x20(%rsp)
movsd  0xe24(%rip),%xmm0
divsd  (%rsp),%xmm0
call   1040 <exp@plt>
movsd  %xmm0,0x60(%rsp)
movapd 0xd0(%rsp),%xmm0
movaps 0xe0(%rsp),%xmm1
movsd  0x48(%rsp),%xmm2
call   1030 <rec_saha_xe_H@plt>
movsd  0x40(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0xf8(%rsp)
movapd 0xb0(%rsp),%xmm2
subsd  %xmm1,%xmm2
movapd %xmm2,0xb0(%rsp)
movsd  0xdcf(%rip),%xmm0
mulsd  0x20(%rsp),%xmm0
movapd 0x50(%rsp),%xmm3
movapd %xmm3,%xmm1
unpcklpd %xmm0,%xmm1
shufpd $0x1,0xc0(%rsp),%xmm3
divpd  %xmm3,%xmm1
movapd 0xeb5(%rip),%xmm3
unpcklpd %xmm2,%xmm3
mulpd  %xmm1,%xmm3
movapd %xmm3,0xa0(%rsp)
movsd  0x60(%rsp),%xmm0
mulsd  %xmm3,%xmm0
movsd  %xmm0,0x60(%rsp)
movsd  0xd84(%rip),%xmm0
divsd  (%rsp),%xmm0
call   1040 <exp@plt>
divsd  0xa0(%rsp),%xmm0
movsd  %xmm0,0x50(%rsp)
movsd  0xd6b(%rip),%xmm0
divsd  (%rsp),%xmm0
call   1040 <exp@plt>
movapd %xmm0,0x90(%rsp)
movapd 0x20(%rsp),%xmm0
mulsd  %xmm0,%xmm0
mulsd  0x40(%rsp),%xmm0
movapd 0xc0(%rsp),%xmm1
divsd  %xmm0,%xmm1
mulsd  (%rsp),%xmm1
movapd %xmm1,0x20(%rsp)
mov    %ebx,%edi
call   1050 <sqrt@plt>
mulsd  0x20(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0xd1d(%rip),%xmm0
divsd  (%rsp),%xmm0
addsd  0xd18(%rip),%xmm0
call   1040 <exp@plt>
mulsd  0x20(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0xd07(%rip),%xmm0
divsd  (%rsp),%xmm0
call   1040 <exp@plt>
movsd  0xcbd(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  0xcf1(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0xce7(%rip),%xmm0
divsd  (%rsp),%xmm0
call   1040 <exp@plt>
addsd  0xcdd(%rip),%xmm0
movsd  0xcdd(%rip),%xmm1
divsd  %xmm0,%xmm1
addsd  0x10(%rsp),%xmm1
movsd  %xmm1,0x10(%rsp)
movsd  0xccd(%rip),%xmm0
divsd  (%rsp),%xmm0
call   1040 <exp@plt>
addsd  0xcab(%rip),%xmm0
movsd  0xcbb(%rip),%xmm1
divsd  %xmm0,%xmm1
addsd  0x10(%rsp),%xmm1
movsd  %xmm1,0x10(%rsp)
movsd  0xcab(%rip),%xmm0
divsd  (%rsp),%xmm0
call   1040 <exp@plt>
addsd  0xc79(%rip),%xmm0
movsd  0xc99(%rip),%xmm1
divsd  %xmm0,%xmm1
addsd  0x10(%rsp),%xmm1
movsd  %xmm1,0x10(%rsp)
movsd  0xc89(%rip),%xmm0
divsd  (%rsp),%xmm0
call   1040 <exp@plt>
addsd  0xc47(%rip),%xmm0
movsd  0xc77(%rip),%xmm1
divsd  %xmm0,%xmm1
addsd  0x10(%rsp),%xmm1
movsd  %xmm1,0x10(%rsp)
movsd  0xc67(%rip),%xmm0
divsd  (%rsp),%xmm0
call   1040 <exp@plt>
addsd  0xc15(%rip),%xmm0
movsd  0xc55(%rip),%xmm1
divsd  %xmm0,%xmm1
addsd  0x10(%rsp),%xmm1
movsd  %xmm1,0x10(%rsp)
movsd  0xc45(%rip),%xmm0
divsd  (%rsp),%xmm0
call   1040 <exp@plt>
addsd  0xbe3(%rip),%xmm0
movsd  0xc33(%rip),%xmm2
divsd  %xmm0,%xmm2
addsd  0x10(%rsp),%xmm2
movapd 0xa0(%rsp),%xmm0
unpckhpd %xmm0,%xmm0
movapd %xmm0,0x10(%rsp)
mulsd  %xmm0,%xmm2
mov    0x2b4b(%rip),%rax
mov    (%rax),%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0xc02(%rip),%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm1
divsd  %xmm1,%xmm2
divsd  0x20(%rsp),%xmm2
movsd  %xmm2,0x80(%rsp)
imul   %eax,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  %xmm2,%xmm0
addsd  0xb21(%rip),%xmm0
cvttsd2si %xmm0,%edi
call   1050 <sqrt@plt>
movsd  0xbc8(%rip),%xmm2
movsd  0x80(%rsp),%xmm1
mulsd  %xmm1,%xmm2
mulsd  0xbbb(%rip),%xmm1
addsd  0xaf3(%rip),%xmm1
divsd  %xmm1,%xmm2
addsd  %xmm0,%xmm2
movapd %xmm2,0x80(%rsp)
movapd 0x90(%rsp),%xmm0
unpcklpd %xmm2,%xmm0
divpd  0xa0(%rsp),%xmm0
movapd %xmm0,0x90(%rsp)
movsd  0xb83(%rip),%xmm0
mulsd  0x10(%rsp),%xmm0
call   1040 <exp@plt>
movsd  0x38(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x38(%rsp)
movsd  0xb68(%rip),%xmm0
divsd  (%rsp),%xmm0
call   1040 <exp@plt>
movsd  %xmm0,(%rsp)
movsd  0xb59(%rip),%xmm0
divsd  0x20(%rsp),%xmm0
call   1040 <exp@plt>
mulsd  0x80(%rsp),%xmm0
movsd  (%rsp),%xmm1
mulsd  0xb40(%rip),%xmm1
subsd  %xmm0,%xmm1
mulsd  0x38(%rsp),%xmm1
divsd  0x10(%rsp),%xmm1
movapd %xmm1,%xmm2
movsd  0xb2c(%rip),%xmm0
movapd 0x90(%rsp),%xmm1
mulsd  %xmm1,%xmm0
mulsd  0xb1f(%rip),%xmm0
unpckhpd %xmm1,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm0,%xmm1
movsd  0x50(%rsp),%xmm0
mulsd  0xb0d(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  0xf8(%rsp),%xmm1
mulsd  %xmm0,%xmm1
mulsd  0x40(%rsp),%xmm1
mulsd  0xb0(%rsp),%xmm0
mulsd  0x60(%rsp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x50(%rsp)
movapd 0x70(%rsp),%xmm0
mulsd  0xc0(%rsp),%xmm0
movapd %xmm0,0x70(%rsp)
movsd  0xac8(%rip),%xmm2
addsd  0x48(%rsp),%xmm2
movaps 0xd0(%rsp),%xmm0
movaps 0xe0(%rsp),%xmm1
call   1030 <rec_saha_xe_H@plt>
movsd  %xmm0,(%rsp)
movsd  0x48(%rsp),%xmm2
addsd  0xaa2(%rip),%xmm2
movapd 0xd0(%rsp),%xmm0
movaps 0xe0(%rsp),%xmm1
call   1030 <rec_saha_xe_H@plt>
movsd  (%rsp),%xmm1
subsd  %xmm0,%xmm1
mulsd  0x70(%rsp),%xmm1
addsd  0x50(%rsp),%xmm1
movapd %xmm1,%xmm0
add    $0x100,%rsp
pop    %rbx
ret

LLVM IR (-O0):
@M_PI = global i32 0
define double @rec_helium_dxedt(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* %9
%34 = load double, double* %12
%35 = fadd double 1.000000e+00, %34
store double %35, double* %15
%36 = fmul double %33, %35
store double %36, double* %13
%37 = load double, double* %8
%38 = load double, double* %15
%39 = fmul double %37, %38
%40 = load double, double* %15
%41 = fmul double %39, %40
%42 = load double, double* %15
%43 = fmul double %41, %42
store double %43, double* %14
%44 = load double, double* %13
%45 = fmul double 0x44605BF58181A9ED, %44
%46 = load double, double* %13
%47 = fptosi double %46 to i32
%48 = call double @sqrt(i32 %47)
%49 = fmul double %45, %48
%50 = load double, double* %14
%51 = fdiv double %49, %50
%52 = fmul double %51, 4.000000e+00
store double %52, double* %17
%53 = load double, double* %17
%54 = load double, double* %13
%55 = fdiv double -2.853250e+05, %54
%56 = call double @exp(double %55)
%57 = fmul double %53, %56
store double %57, double* %16
%58 = load double, double* %8
%59 = load double, double* %9
%60 = load double, double* %12
%61 = call double @rec_saha_xe_H(double %58, double %59, double %60)
store double %61, double* %22
%62 = load double, double* %7
%63 = load double, double* %22
%64 = fsub double %62, %63
store double %64, double* %19
%65 = load double, double* %10
%66 = load double, double* %19
%67 = fsub double %65, %66
store double %67, double* %18
%68 = load double, double* %13
%69 = fdiv double 4.609000e+04, %68
%70 = call double @exp(double %69)
%71 = load double, double* %17
%72 = fdiv double %70, %71
store double %72, double* %20
%73 = load double, double* %13
%74 = fdiv double 3.910100e+04, %73
%75 = call double @exp(double %74)
%76 = load double, double* %17
%77 = fdiv double %75, %76
%78 = fmul double %77, 3.000000e+00
store double %78, double* %21
%79 = load double, double* %11
%80 = load double, double* %14
%81 = load double, double* %14
%82 = fmul double %80, %81
%83 = load double, double* %7
%84 = fmul double %82, %83
%85 = fdiv double %79, %84
%86 = load double, double* %13
%87 = fmul double %85, %86
%88 = load double, double* %13
%89 = fptosi double %88 to i32
%90 = call double @sqrt(i32 %89)
%91 = fmul double %87, %90
%92 = load double, double* %13
%93 = fdiv double 0x4103434B07D2C7B9, %92
%94 = fsub double 1.159200e+02, %93
%95 = call double @exp(double %94)
%96 = fmul double %91, %95
store double %96, double* %23
%97 = load double, double* %13
%98 = fdiv double -6.989000e+03, %97
%99 = call double @exp(double %98)
%100 = fsub double 1.000000e+00, %99
%101 = fdiv double 1.976000e+06, %100
%102 = load double, double* %13
%103 = fdiv double 1.975400e+04, %102
%104 = call double @exp(double %103)
%105 = fsub double %104, 1.000000e+00
%106 = fdiv double 6.030000e+06, %105
%107 = fadd double %101, %106
%108 = load double, double* %13
%109 = fdiv double 2.153900e+04, %108
%110 = call double @exp(double %109)
%111 = fsub double %110, 1.000000e+00
%112 = fdiv double 1.060000e+08, %111
%113 = fadd double %107, %112
%114 = load double, double* %13
%115 = fdiv double 2.849600e+04, %114
%116 = call double @exp(double %115)
%117 = fsub double %116, 1.000000e+00
%118 = fdiv double 2.180000e+06, %117
%119 = fadd double %113, %118
%120 = load double, double* %13
%121 = fdiv double 2.922400e+04, %120
%122 = call double @exp(double %121)
%123 = fsub double %122, 1.000000e+00
%124 = fdiv double 3.370000e+07, %123
%125 = fadd double %119, %124
%126 = load double, double* %13
%127 = fdiv double 3.241400e+04, %126
%128 = call double @exp(double %127)
%129 = fsub double %128, 1.000000e+00
%130 = fdiv double 1.040000e+06, %129
%131 = fadd double %125, %130
%132 = load double, double* %13
%133 = fdiv double 3.278100e+04, %132
%134 = call double @exp(double %133)
%135 = fsub double %134, 1.000000e+00
%136 = fdiv double 1.510000e+07, %135
%137 = fadd double %131, %136
store double %137, double* %24
%138 = load double, double* %14
%139 = fmul double 4.277000e-14, %138
%140 = load double, double* %11
%141 = fdiv double %139, %140
%142 = load double, double* %18
%143 = fmul double %141, %142
store double %143, double* %26
%144 = load double, double* %24
%145 = load double, double* %26
%146 = fmul double %144, %145
%147 = load i32, i32* @M_PI
%148 = sitofp i32 %147 to double
%149 = fmul double 4.000000e+00, %148
%150 = load i32, i32* @M_PI
%151 = sitofp i32 %150 to double
%152 = fmul double %149, %151
%153 = fdiv double %146, %152
store double %153, double* %25
%154 = load double, double* %25
%155 = load double, double* %23
%156 = fdiv double %154, %155
store double %156, double* %28
%157 = load i32, i32* @M_PI
%158 = load i32, i32* @M_PI
%159 = mul nsw i32 %157, %158
%160 = sitofp i32 %159 to double
%161 = load double, double* %28
%162 = call double @llvm.fmuladd.f64(double %160, double %161, double 1.000000e+00)
%163 = fptosi double %162 to i32
%164 = call double @sqrt(i32 %163)
%165 = load double, double* %28
%166 = fmul double 7.740000e+00, %165
%167 = load double, double* %28
%168 = call double @llvm.fmuladd.f64(double 7.000000e+01, double %167, double 1.000000e+00)
%169 = fdiv double %166, %168
%170 = fadd double %164, %169
store double %170, double* %32
%171 = load double, double* %32
%172 = load double, double* %26
%173 = fdiv double %171, %172
store double %173, double* %27
%174 = load double, double* %27
%175 = load double, double* %26
%176 = fmul double -1.023000e-07, %175
%177 = call double @exp(double %176)
%178 = fsub double 1.000000e+00, %177
%179 = load double, double* %13
%180 = fdiv double 2.947000e+03, %179
%181 = call double @exp(double %180)
%182 = load double, double* %32
%183 = load double, double* %23
%184 = fdiv double -6.140000e+13, %183
%185 = call double @exp(double %184)
%186 = fmul double %182, %185
%187 = fneg double %186
%188 = call double @llvm.fmuladd.f64(double 0x3FEEDD63886594AF, double %181, double %187)
%189 = fmul double %178, %188
%190 = load double, double* %26
%191 = fdiv double %189, %190
%192 = fadd double %174, %191
store double %192, double* %27
%193 = load double, double* %20
%194 = load double, double* %21
%195 = fmul double 1.798900e+09, %194
%196 = load double, double* %27
%197 = fmul double %195, %196
%198 = call double @llvm.fmuladd.f64(double 5.094000e+01, double %193, double %197)
store double %198, double* %31
%199 = load double, double* %31
%200 = load double, double* %19
%201 = fmul double %199, %200
%202 = load double, double* %7
%203 = fmul double %201, %202
store double %203, double* %29
%204 = load double, double* %31
%205 = load double, double* %18
%206 = fmul double %204, %205
%207 = load double, double* %16
%208 = fmul double %206, %207
store double %208, double* %30
%209 = load double, double* %30
%210 = load double, double* %29
%211 = fsub double %209, %210
%212 = load double, double* %11
%213 = load double, double* %12
%214 = fadd double 1.000000e+00, %213
%215 = fmul double %212, %214
%216 = load double, double* %8
%217 = load double, double* %9
%218 = load double, double* %12
%219 = fsub double %218, 5.000000e-01
%220 = call double @rec_saha_xe_H(double %216, double %217, double %219)
%221 = load double, double* %8
%222 = load double, double* %9
%223 = load double, double* %12
%224 = fadd double %223, 5.000000e-01
%225 = call double @rec_saha_xe_H(double %221, double %222, double %224)
%226 = fsub double %220, %225
%227 = call double @llvm.fmuladd.f64(double %215, double %226, double %211)
ret double %227
}

LLVM IR (-O2):
@M_PI = global i32 0
define double @rec_helium_dxedt(double %0, double %1, double %2, double %3, double %4, double %5) {
%7 = fadd double %5, 1.000000e+00
%8 = insertelement <2 x double> poison, double %7, i64 0
%9 = shufflevector <2 x double> %8, <2 x double> poison, <2 x i32> zeroinitializer
%10 = insertelement <2 x double> poison, double %2, i64 0
%11 = insertelement <2 x double> %10, double %1, i64 1
%12 = fmul <2 x double> %9, %11
%13 = insertelement <2 x double> <double 0x44605BF58181A9ED, double poison>, double %7, i64 1
%14 = fmul <2 x double> %12, %13
%15 = extractelement <2 x double> %12, i64 0
%16 = fptosi double %15 to i32
%17 = tail call double @sqrt(i32 %16)
%18 = insertelement <2 x double> poison, double %17, i64 0
%19 = insertelement <2 x double> %18, double %7, i64 1
%20 = fmul <2 x double> %14, %19
%21 = extractelement <2 x double> %20, i64 1
%22 = fdiv double -2.853250e+05, %15
%23 = tail call double @exp(double %22)
%24 = tail call double @rec_saha_xe_H(double %1, double %2, double %5)
%25 = fsub double %0, %24
%26 = fsub double %3, %25
%27 = fmul double %21, 4.277000e-14
%28 = insertelement <2 x double> %20, double %27, i64 1
%29 = insertelement <2 x double> poison, double %4, i64 1
%30 = shufflevector <2 x double> %29, <2 x double> %20, <2 x i32> <i32 3, i32 1>
%31 = fdiv <2 x double> %28, %30
%32 = insertelement <2 x double> <double 4.000000e+00, double poison>, double %26, i64 1
%33 = fmul <2 x double> %31, %32
%34 = extractelement <2 x double> %33, i64 0
%35 = fmul double %23, %34
%36 = fdiv double 4.609000e+04, %15
%37 = tail call double @exp(double %36)
%38 = fdiv double %37, %34
%39 = fdiv double 3.910100e+04, %15
%40 = tail call double @exp(double %39)
%41 = fmul double %21, %21
%42 = fmul double %41, %0
%43 = fdiv double %4, %42
%44 = fmul double %15, %43
%45 = tail call double @sqrt(i32 %16)
%46 = fmul double %44, %45
%47 = fdiv double 0x4103434B07D2C7B9, %15
%48 = fsub double 1.159200e+02, %47
%49 = tail call double @exp(double %48)
%50 = fmul double %46, %49
%51 = fdiv double -6.989000e+03, %15
%52 = tail call double @exp(double %51)
%53 = fsub double 1.000000e+00, %52
%54 = fdiv double 1.976000e+06, %53
%55 = fdiv double 1.975400e+04, %15
%56 = tail call double @exp(double %55)
%57 = fadd double %56, -1.000000e+00
%58 = fdiv double 6.030000e+06, %57
%59 = fadd double %54, %58
%60 = fdiv double 2.153900e+04, %15
%61 = tail call double @exp(double %60)
%62 = fadd double %61, -1.000000e+00
%63 = fdiv double 1.060000e+08, %62
%64 = fadd double %59, %63
%65 = fdiv double 2.849600e+04, %15
%66 = tail call double @exp(double %65)
%67 = fadd double %66, -1.000000e+00
%68 = fdiv double 2.180000e+06, %67
%69 = fadd double %64, %68
%70 = fdiv double 2.922400e+04, %15
%71 = tail call double @exp(double %70)
%72 = fadd double %71, -1.000000e+00
%73 = fdiv double 3.370000e+07, %72
%74 = fadd double %69, %73
%75 = fdiv double 3.241400e+04, %15
%76 = tail call double @exp(double %75)
%77 = fadd double %76, -1.000000e+00
%78 = fdiv double 1.040000e+06, %77
%79 = fadd double %74, %78
%80 = fdiv double 3.278100e+04, %15
%81 = tail call double @exp(double %80)
%82 = fadd double %81, -1.000000e+00
%83 = fdiv double 1.510000e+07, %82
%84 = fadd double %79, %83
%85 = extractelement <2 x double> %33, i64 1
%86 = fmul double %85, %84
%87 = load i32, i32* @M_PI
%88 = sitofp i32 %87 to double
%89 = fmul double %88, 4.000000e+00
%90 = fmul double %89, %88
%91 = fdiv double %86, %90
%92 = fdiv double %91, %50
%93 = mul nsw i32 %87, %87
%94 = sitofp i32 %93 to double
%95 = tail call double @llvm.fmuladd.f64(double %94, double %92, double 1.000000e+00)
%96 = fptosi double %95 to i32
%97 = tail call double @sqrt(i32 %96)
%98 = fmul double %92, 7.740000e+00
%99 = tail call double @llvm.fmuladd.f64(double %92, double 7.000000e+01, double 1.000000e+00)
%100 = fdiv double %98, %99
%101 = fadd double %97, %100
%102 = insertelement <2 x double> poison, double %40, i64 0
%103 = insertelement <2 x double> %102, double %101, i64 1
%104 = fdiv <2 x double> %103, %33
%105 = fmul double %85, -1.023000e-07
%106 = tail call double @exp(double %105)
%107 = fsub double 1.000000e+00, %106
%108 = fdiv double 2.947000e+03, %15
%109 = tail call double @exp(double %108)
%110 = fdiv double -6.140000e+13, %50
%111 = tail call double @exp(double %110)
%112 = fneg double %101
%113 = fmul double %111, %112
%114 = tail call double @llvm.fmuladd.f64(double %109, double 0x3FEEDD63886594AF, double %113)
%115 = fmul double %107, %114
%116 = fdiv double %115, %85
%117 = extractelement <2 x double> %104, i64 0
%118 = fmul double %117, 3.000000e+00
%119 = fmul double %118, 1.798900e+09
%120 = extractelement <2 x double> %104, i64 1
%121 = fadd double %120, %116
%122 = fmul double %119, %121
%123 = tail call double @llvm.fmuladd.f64(double %38, double 5.094000e+01, double %122)
%124 = fmul double %25, %123
%125 = fmul double %124, %0
%126 = fmul double %26, %123
%127 = fmul double %35, %126
%128 = fsub double %127, %125
%129 = fmul double %7, %4
%130 = fadd double %5, -5.000000e-01
%131 = tail call double @rec_saha_xe_H(double %1, double %2, double %130)
%132 = fadd double %5, 5.000000e-01
%133 = tail call double @rec_saha_xe_H(double %1, double %2, double %132)
%134 = fsub double %131, %133
%135 = tail call double @llvm.fmuladd.f64(double %129, double %134, double %128)
ret double %135
}