#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 DBL_MIN;
int fabs(double);
int ighmm_rand_get_philen();
int ighmm_rand_get_xfaktphi();
int ighmm_rand_get_xstepphi();
double ighmm_rand_normal_density_trunc(double, double, double, double);
double sqrt(double);
double ighmm_gtail_pmue_interpol(double mue, double A, double B, double eps) {
  double u, Atil, Btil, z, z1, z2, m1, m2, u1, u2, p1, p2, pz;
  int i1, i2;
  Atil = A + eps;
  Btil = B + eps * A;
  u = Btil - mue * Atil;
  if (u <= DBL_MIN)
    return (mue - A);
  if (mue >= 0.0)
    return (A - mue - u * ighmm_rand_normal_density_trunc(-eps, mue, u, -eps));
  z = (eps + mue) / sqrt(u);
  i1 = (int)(fabs(z) * ighmm_rand_get_xfaktphi());
  if (i1 >= ighmm_rand_get_philen() - 1) {
    i1 = (int)ighmm_rand_get_philen() - 1;
    i2 = i1;
  } else
    i2 = i1 + 1;
  z1 = i1 / ighmm_rand_get_xfaktphi();
  z2 = i2 / ighmm_rand_get_xfaktphi();
  m1 = -z1 * sqrt(Btil + eps * Atil + Atil * Atil * z1 * z1 * 0.25) -
       (eps + Atil * z1 * z1 * 0.5);
  m2 = -z2 * sqrt(Btil + eps * Atil + Atil * Atil * z2 * z2 * 0.25) -
       (eps + Atil * z2 * z2 * 0.5);
  u1 = Btil - m1 * Atil;
  u2 = Btil - m2 * Atil;
  p1 = A - m1 - u1 * ighmm_rand_normal_density_trunc(-eps, m1, u1, -eps);
  p2 = A - m1 - u1 * ighmm_rand_normal_density_trunc(-eps, m2, u2, -eps);
  if (i1 >= ighmm_rand_get_philen() - 1)
    pz = p1;
  else {
    pz = p1 + (fabs(z) - i1 * ighmm_rand_get_xstepphi()) * (p2 - p1) /
                  ighmm_rand_get_xstepphi();
  }
  return (pz);
}


x86 assembly (clang, -O0):
<ighmm_gtail_pmue_interpol>:
push   %rbp
mov    %rsp,%rbp
sub    $0x110,%rsp
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
movsd  %xmm3,-0x28(%rbp)
movsd  -0x18(%rbp),%xmm0
addsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x20(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm1
mov    0x2df7(%rip),%rax
movsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jb     120b <ighmm_gtail_pmue_interpol+0xab>
movsd  -0x10(%rbp),%xmm0
subsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    179c <ighmm_gtail_pmue_interpol+0x63c>
movsd  -0x10(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     12bf <ighmm_gtail_pmue_interpol+0x15f>
movsd  -0x18(%rbp),%xmm0
subsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x10(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
call   1030 <ighmm_rand_normal_density_trunc@plt>
movsd  -0xa8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xa0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    179c <ighmm_gtail_pmue_interpol+0x63c>
movsd  -0x28(%rbp),%xmm0
addsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
call   1080 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0xb8(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
call   1060 <fabs@plt>
mov    %eax,-0xb0(%rbp)
mov    $0x0,%al
call   1050 <ighmm_rand_get_xfaktphi@plt>
mov    %eax,%ecx
mov    -0xb0(%rbp),%eax
imul   %ecx,%eax
mov    %eax,-0x94(%rbp)
mov    -0x94(%rbp),%eax
mov    %eax,-0xac(%rbp)
mov    $0x0,%al
call   1040 <ighmm_rand_get_philen@plt>
mov    %eax,%ecx
mov    -0xac(%rbp),%eax
sub    $0x1,%ecx
cmp    %ecx,%eax
jl     135e <ighmm_gtail_pmue_interpol+0x1fe>
mov    $0x0,%al
call   1040 <ighmm_rand_get_philen@plt>
sub    $0x1,%eax
mov    %eax,-0x94(%rbp)
mov    -0x94(%rbp),%eax
mov    %eax,-0x98(%rbp)
jmp    136d <ighmm_gtail_pmue_interpol+0x20d>
mov    -0x94(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x98(%rbp)
mov    -0x94(%rbp),%eax
mov    %eax,-0xf8(%rbp)
mov    $0x0,%al
call   1050 <ighmm_rand_get_xfaktphi@plt>
mov    %eax,%ecx
mov    -0xf8(%rbp),%eax
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x98(%rbp),%eax
mov    %eax,-0xf4(%rbp)
mov    $0x0,%al
call   1050 <ighmm_rand_get_xfaktphi@plt>
mov    %eax,%ecx
mov    -0xf4(%rbp),%eax
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x38(%rbp),%xmm0
mulsd  -0x38(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  0xbf6(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1080 <sqrt@plt>
movaps %xmm0,%xmm2
movsd  -0xf0(%rbp),%xmm0
ff
movsd  -0x28(%rbp),%xmm3
movsd  -0x38(%rbp),%xmm1
mulsd  -0x50(%rbp),%xmm1
mulsd  -0x50(%rbp),%xmm1
movsd  0xbba(%rip),%xmm4
mulsd  %xmm4,%xmm1
addsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x38(%rbp),%xmm0
mulsd  -0x38(%rbp),%xmm0
mulsd  -0x58(%rbp),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  0xb3f(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1080 <sqrt@plt>
movaps %xmm0,%xmm2
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0x28(%rbp),%xmm3
movsd  -0x38(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
movsd  0xb03(%rip),%xmm4
mulsd  %xmm4,%xmm1
addsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm1
movsd  -0x68(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x18(%rbp),%xmm0
subsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x60(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
call   1030 <ighmm_rand_normal_density_trunc@plt>
movsd  -0xe0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xd8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x18(%rbp),%xmm0
subsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x68(%rbp),%xmm1
movsd  -0x78(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
call   1030 <ighmm_rand_normal_density_trunc@plt>
movsd  -0xd0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xc8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x94(%rbp),%eax
mov    %eax,-0xbc(%rbp)
mov    $0x0,%al
call   1040 <ighmm_rand_get_philen@plt>
mov    %eax,%ecx
mov    -0xbc(%rbp),%eax
sub    $0x1,%ecx
cmp    %ecx,%eax
jl     1704 <ighmm_gtail_pmue_interpol+0x5a4>
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
jmp    178f <ighmm_gtail_pmue_interpol+0x62f>
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
call   1060 <fabs@plt>
mov    %eax,-0x10c(%rbp)
mov    -0x94(%rbp),%eax
mov    %eax,-0x110(%rbp)
mov    $0x0,%al
call   1070 <ighmm_rand_get_xstepphi@plt>
mov    -0x110(%rbp),%ecx
mov    %eax,%edx
mov    -0x10c(%rbp),%eax
imul   %edx,%ecx
sub    %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  -0x88(%rbp),%xmm1
ff
subsd  -0x80(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
mov    $0x0,%al
call   1070 <ighmm_rand_get_xstepphi@plt>
movsd  -0x108(%rbp),%xmm1
ff
movsd  -0x100(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x110,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ighmm_gtail_pmue_interpol>:
push   %rbp
push   %rbx
sub    $0xa8,%rsp
movapd %xmm0,%xmm4
movapd %xmm1,%xmm6
addsd  %xmm3,%xmm6
movapd %xmm3,%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm2,%xmm5
mulsd  %xmm6,%xmm0
movapd %xmm5,%xmm2
subsd  %xmm0,%xmm2
mov    0x2e4c(%rip),%rax
movsd  (%rax),%xmm0
ucomisd %xmm2,%xmm0
jae    11d3 <ighmm_gtail_pmue_interpol+0x73>
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm4
jae    11e0 <ighmm_gtail_pmue_interpol+0x80>
addsd  %xmm3,%xmm4
ucomisd %xmm0,%xmm2
movapd %xmm3,0x40(%rsp)
movapd %xmm5,0x60(%rsp)
movsd  %xmm6,0x10(%rsp)
movsd  %xmm1,0x8(%rsp)
jb     121e <ighmm_gtail_pmue_interpol+0xbe>
xorps  %xmm0,%xmm0
sqrtsd %xmm2,%xmm0
jmp    1233 <ighmm_gtail_pmue_interpol+0xd3>
subsd  %xmm1,%xmm4
movapd %xmm4,%xmm0
jmp    1527 <ighmm_gtail_pmue_interpol+0x3c7>
subsd  %xmm4,%xmm1
movsd  %xmm1,0x8(%rsp)
xorpd  0xe0e(%rip),%xmm3
movapd %xmm3,%xmm0
movapd %xmm4,%xmm1
movapd %xmm2,0x20(%rsp)
call   1030 <ighmm_rand_normal_density_trunc@plt>
mulsd  0x20(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
subsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
jmp    1527 <ighmm_gtail_pmue_interpol+0x3c7>
movapd %xmm2,%xmm0
movsd  %xmm4,0x58(%rsp)
call   1080 <sqrt@plt>
movsd  0x58(%rsp),%xmm4
divsd  %xmm0,%xmm4
movsd  %xmm4,0x58(%rsp)
movapd %xmm4,%xmm0
call   1060 <fabs@plt>
mov    %eax,%ebp
xor    %eax,%eax
call   1050 <ighmm_rand_get_xfaktphi@plt>
mov    %eax,%ebx
imul   %ebp,%ebx
xor    %eax,%eax
call   1040 <ighmm_rand_get_philen@plt>
add    $0xffffffff,%eax
cmp    %eax,%ebx
jge    1267 <ighmm_gtail_pmue_interpol+0x107>
lea    0x1(%rbx),%ebp
jmp    1275 <ighmm_gtail_pmue_interpol+0x115>
xor    %eax,%eax
call   1040 <ighmm_rand_get_philen@plt>
mov    %eax,%ebx
add    $0xffffffff,%ebx
mov    %ebx,%ebp
xor    %eax,%eax
call   1050 <ighmm_rand_get_xfaktphi@plt>
mov    %eax,%ecx
mov    %ebx,%eax
cltd
idiv   %ecx
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movapd %xmm0,0x20(%rsp)
xor    %eax,%eax
call   1050 <ighmm_rand_get_xfaktphi@plt>
mov    %eax,%ecx
mov    %ebp,%eax
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm8
movapd 0xd55(%rip),%xmm1
movapd 0x20(%rsp),%xmm4
xorpd  %xmm4,%xmm1
movapd 0x40(%rsp),%xmm3
movapd %xmm3,%xmm7
movsd  0x10(%rsp),%xmm2
mulsd  %xmm2,%xmm7
addsd  0x60(%rsp),%xmm7
movapd %xmm2,%xmm5
mulsd  %xmm2,%xmm5
movapd %xmm5,%xmm0
mulsd  %xmm4,%xmm0
mulsd  %xmm4,%xmm0
mulsd  0xd25(%rip),%xmm0
addsd  %xmm7,%xmm0
xorpd  %xmm9,%xmm9
ucomisd %xmm9,%xmm0
movapd %xmm8,0x80(%rsp)
jb     130b <ighmm_gtail_pmue_interpol+0x1ab>
sqrtsd %xmm0,%xmm0
jmp    1355 <ighmm_gtail_pmue_interpol+0x1f5>
movapd %xmm1,0x30(%rsp)
movsd  %xmm5,0x78(%rsp)
movapd %xmm7,0x90(%rsp)
call   1080 <sqrt@plt>
xorpd  %xmm9,%xmm9
movapd 0x90(%rsp),%xmm7
movsd  0x78(%rsp),%xmm5
movapd 0x80(%rsp),%xmm8
movapd 0x30(%rsp),%xmm1
movsd  0x10(%rsp),%xmm2
movapd 0x40(%rsp),%xmm3
movapd %xmm2,%xmm4
movapd 0x20(%rsp),%xmm6
mulsd  %xmm6,%xmm4
mulsd  %xmm6,%xmm4
mulsd  0xca9(%rip),%xmm4
addsd  %xmm3,%xmm4
mulsd  %xmm0,%xmm1
subsd  %xmm4,%xmm1
movapd 0xc7d(%rip),%xmm0
mulsd  %xmm8,%xmm5
mulsd  %xmm8,%xmm5
mulsd  0xc7b(%rip),%xmm5
xorpd  %xmm8,%xmm0
movapd %xmm0,0x20(%rsp)
addsd  %xmm7,%xmm5
ucomisd %xmm9,%xmm5
jb     13b4 <ighmm_gtail_pmue_interpol+0x254>
xorps  %xmm0,%xmm0
sqrtsd %xmm5,%xmm0
jmp    13df <ighmm_gtail_pmue_interpol+0x27f>
movapd %xmm5,%xmm0
movapd %xmm1,0x30(%rsp)
call   1080 <sqrt@plt>
movapd 0x80(%rsp),%xmm8
movapd 0x30(%rsp),%xmm1
movsd  0x10(%rsp),%xmm2
movapd 0x40(%rsp),%xmm3
movapd 0x60(%rsp),%xmm4
movapd %xmm2,%xmm5
mulsd  %xmm8,%xmm5
mulsd  %xmm8,%xmm5
mulsd  0xc1d(%rip),%xmm5
addsd  %xmm3,%xmm5
movapd 0x20(%rsp),%xmm6
mulsd  %xmm0,%xmm6
subsd  %xmm5,%xmm6
movapd %xmm6,0x20(%rsp)
movapd %xmm1,%xmm0
mulsd  %xmm2,%xmm0
movapd %xmm4,%xmm5
subsd  %xmm0,%xmm5
movapd %xmm5,0x10(%rsp)
mulsd  %xmm6,%xmm2
subsd  %xmm2,%xmm4
movapd %xmm4,0x60(%rsp)
movsd  0x8(%rsp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x8(%rsp)
xorpd  0xbb1(%rip),%xmm3
movapd %xmm3,0x40(%rsp)
movapd %xmm3,%xmm0
movapd %xmm5,%xmm2
call   1030 <ighmm_rand_normal_density_trunc@plt>
mulsd  0x10(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
subsd  %xmm0,%xmm1
movapd %xmm1,0x30(%rsp)
movapd 0x40(%rsp),%xmm0
movapd 0x20(%rsp),%xmm1
movapd 0x60(%rsp),%xmm2
movapd %xmm0,%xmm3
call   1030 <ighmm_rand_normal_density_trunc@plt>
movsd  %xmm0,0x40(%rsp)
xor    %eax,%eax
call   1040 <ighmm_rand_get_philen@plt>
add    $0xffffffff,%eax
cmp    %eax,%ebx
jge    1521 <ighmm_gtail_pmue_interpol+0x3c1>
movapd 0x10(%rsp),%xmm0
xorpd  0xb4b(%rip),%xmm0
mulsd  0x40(%rsp),%xmm0
addsd  0x8(%rsp),%xmm0
movapd %xmm0,0x10(%rsp)
movsd  0x58(%rsp),%xmm0
call   1060 <fabs@plt>
mov    %eax,%ebp
xor    %eax,%eax
call   1070 <ighmm_rand_get_xstepphi@plt>
imul   %ebx,%eax
sub    %eax,%ebp
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
movapd 0x10(%rsp),%xmm1
subsd  0x30(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movapd %xmm1,0x10(%rsp)
xor    %eax,%eax
call   1070 <ighmm_rand_get_xstepphi@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movapd 0x10(%rsp),%xmm1
divsd  %xmm0,%xmm1
movapd 0x30(%rsp),%xmm0
addsd  %xmm1,%xmm0
jmp    1527 <ighmm_gtail_pmue_interpol+0x3c7>
movapd 0x30(%rsp),%xmm0
add    $0xa8,%rsp
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
@DBL_MIN = global double 0.000000e+00
define double @ighmm_gtail_pmue_interpol(double %0, double %1, double %2, double %3) {
%5 = alloca double
%6 = alloca double
%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 i32
%24 = alloca i32
store double %0, double* %6
store double %1, double* %7
store double %2, double* %8
store double %3, double* %9
%25 = load double, double* %7
%26 = load double, double* %9
%27 = fadd double %25, %26
store double %27, double* %11
%28 = load double, double* %8
%29 = load double, double* %9
%30 = load double, double* %7
%31 = call double @llvm.fmuladd.f64(double %29, double %30, double %28)
store double %31, double* %12
%32 = load double, double* %12
%33 = load double, double* %6
%34 = load double, double* %11
%35 = fneg double %33
%36 = call double @llvm.fmuladd.f64(double %35, double %34, double %32)
store double %36, double* %10
%37 = load double, double* %10
%38 = load double, double* @DBL_MIN
%39 = fcmp ole double %37, %38
br i1 %39, label %40, label %44
40: ; preds = %4
%41 = load double, double* %6
%42 = load double, double* %7
%43 = fsub double %41, %42
store double %43, double* %5
br label %201
44: ; preds = %4
%45 = load double, double* %6
%46 = fcmp oge double %45, 0.000000e+00
br i1 %46, label %47, label %61
47: ; preds = %44
%48 = load double, double* %7
%49 = load double, double* %6
%50 = fsub double %48, %49
%51 = load double, double* %10
%52 = load double, double* %9
%53 = fneg double %52
%54 = load double, double* %6
%55 = load double, double* %10
%56 = load double, double* %9
%57 = fneg double %56
%58 = call double @ighmm_rand_normal_density_trunc(double %53, double %54, double %55, double %57)
%59 = fneg double %51
%60 = call double @llvm.fmuladd.f64(double %59, double %58, double %50)
store double %60, double* %5
br label %201
61: ; preds = %44
%62 = load double, double* %9
%63 = load double, double* %6
%64 = fadd double %62, %63
%65 = load double, double* %10
%66 = call double @sqrt(double %65)
%67 = fdiv double %64, %66
store double %67, double* %13
%68 = load double, double* %13
%69 = call i32 @fabs(double %68)
%70 = call i32 (...) @ighmm_rand_get_xfaktphi()
%71 = mul nsw i32 %69, %70
store i32 %71, i32* %23
%72 = load i32, i32* %23
%73 = call i32 (...) @ighmm_rand_get_philen()
%74 = sub nsw i32 %73, 1
%75 = icmp sge i32 %72, %74
br i1 %75, label %76, label %80
76: ; preds = %61
%77 = call i32 (...) @ighmm_rand_get_philen()
%78 = sub nsw i32 %77, 1
store i32 %78, i32* %23
%79 = load i32, i32* %23
store i32 %79, i32* %24
br label %83
80: ; preds = %61
%81 = load i32, i32* %23
%82 = add nsw i32 %81, 1
store i32 %82, i32* %24
br label %83
83: ; preds = %80, %76
%84 = load i32, i32* %23
%85 = call i32 (...) @ighmm_rand_get_xfaktphi()
%86 = sdiv i32 %84, %85
%87 = sitofp i32 %86 to double
store double %87, double* %14
%88 = load i32, i32* %24
%89 = call i32 (...) @ighmm_rand_get_xfaktphi()
%90 = sdiv i32 %88, %89
%91 = sitofp i32 %90 to double
store double %91, double* %15
%92 = load double, double* %14
%93 = fneg double %92
%94 = load double, double* %12
%95 = load double, double* %9
%96 = load double, double* %11
%97 = call double @llvm.fmuladd.f64(double %95, double %96, double %94)
%98 = load double, double* %11
%99 = load double, double* %11
%100 = fmul double %98, %99
%101 = load double, double* %14
%102 = fmul double %100, %101
%103 = load double, double* %14
%104 = fmul double %102, %103
%105 = call double @llvm.fmuladd.f64(double %104, double 2.500000e-01, double %97)
%106 = call double @sqrt(double %105)
%107 = load double, double* %9
%108 = load double, double* %11
%109 = load double, double* %14
%110 = fmul double %108, %109
%111 = load double, double* %14
%112 = fmul double %110, %111
%113 = call double @llvm.fmuladd.f64(double %112, double 5.000000e-01, double %107)
%114 = fneg double %113
%115 = call double @llvm.fmuladd.f64(double %93, double %106, double %114)
store double %115, double* %16
%116 = load double, double* %15
%117 = fneg double %116
%118 = load double, double* %12
%119 = load double, double* %9
%120 = load double, double* %11
%121 = call double @llvm.fmuladd.f64(double %119, double %120, double %118)
%122 = load double, double* %11
%123 = load double, double* %11
%124 = fmul double %122, %123
%125 = load double, double* %15
%126 = fmul double %124, %125
%127 = load double, double* %15
%128 = fmul double %126, %127
%129 = call double @llvm.fmuladd.f64(double %128, double 2.500000e-01, double %121)
%130 = call double @sqrt(double %129)
%131 = load double, double* %9
%132 = load double, double* %11
%133 = load double, double* %15
%134 = fmul double %132, %133
%135 = load double, double* %15
%136 = fmul double %134, %135
%137 = call double @llvm.fmuladd.f64(double %136, double 5.000000e-01, double %131)
%138 = fneg double %137
%139 = call double @llvm.fmuladd.f64(double %117, double %130, double %138)
store double %139, double* %17
%140 = load double, double* %12
%141 = load double, double* %16
%142 = load double, double* %11
%143 = fneg double %141
%144 = call double @llvm.fmuladd.f64(double %143, double %142, double %140)
store double %144, double* %18
%145 = load double, double* %12
%146 = load double, double* %17
%147 = load double, double* %11
%148 = fneg double %146
%149 = call double @llvm.fmuladd.f64(double %148, double %147, double %145)
store double %149, double* %19
%150 = load double, double* %7
%151 = load double, double* %16
%152 = fsub double %150, %151
%153 = load double, double* %18
%154 = load double, double* %9
%155 = fneg double %154
%156 = load double, double* %16
%157 = load double, double* %18
%158 = load double, double* %9
%159 = fneg double %158
%160 = call double @ighmm_rand_normal_density_trunc(double %155, double %156, double %157, double %159)
%161 = fneg double %153
%162 = call double @llvm.fmuladd.f64(double %161, double %160, double %152)
store double %162, double* %20
%163 = load double, double* %7
%164 = load double, double* %16
%165 = fsub double %163, %164
%166 = load double, double* %18
%167 = load double, double* %9
%168 = fneg double %167
%169 = load double, double* %17
%170 = load double, double* %19
%171 = load double, double* %9
%172 = fneg double %171
%173 = call double @ighmm_rand_normal_density_trunc(double %168, double %169, double %170, double %172)
%174 = fneg double %166
%175 = call double @llvm.fmuladd.f64(double %174, double %173, double %165)
store double %175, double* %21
%176 = load i32, i32* %23
%177 = call i32 (...) @ighmm_rand_get_philen()
%178 = sub nsw i32 %177, 1
%179 = icmp sge i32 %176, %178
br i1 %179, label %180, label %182
180: ; preds = %83
%181 = load double, double* %20
store double %181, double* %22
br label %199
182: ; preds = %83
%183 = load double, double* %20
%184 = load double, double* %13
%185 = call i32 @fabs(double %184)
%186 = load i32, i32* %23
%187 = call i32 (...) @ighmm_rand_get_xstepphi()
%188 = mul nsw i32 %186, %187
%189 = sub nsw i32 %185, %188
%190 = sitofp i32 %189 to double
%191 = load double, double* %21
%192 = load double, double* %20
%193 = fsub double %191, %192
%194 = fmul double %190, %193
%195 = call i32 (...) @ighmm_rand_get_xstepphi()
%196 = sitofp i32 %195 to double
%197 = fdiv double %194, %196
%198 = fadd double %183, %197
store double %198, double* %22
br label %199
199: ; preds = %182, %180
%200 = load double, double* %22
store double %200, double* %5
br label %201
201: ; preds = %199, %47, %40
%202 = load double, double* %5
ret double %202
}

LLVM IR (-O2):
@DBL_MIN = global double 0.000000e+00
define double @ighmm_gtail_pmue_interpol(double %0, double %1, double %2, double %3) {
%5 = fadd double %1, %3
%6 = tail call double @llvm.fmuladd.f64(double %3, double %1, double %2)
%7 = fneg double %0
%8 = tail call double @llvm.fmuladd.f64(double %7, double %5, double %6)
%9 = load double, double* @DBL_MIN
%10 = fcmp ugt double %8, %9
br i1 %10, label %13, label %11
11: ; preds = %4
%12 = fsub double %0, %1
br label %93
13: ; preds = %4
%14 = fcmp ult double %0, 0.000000e+00
br i1 %14, label %21, label %15
15: ; preds = %13
%16 = fsub double %1, %0
%17 = fneg double %3
%18 = tail call double @ighmm_rand_normal_density_trunc(double %17, double %0, double %8, double %17)
%19 = fneg double %8
%20 = tail call double @llvm.fmuladd.f64(double %19, double %18, double %16)
br label %93
21: ; preds = %13
%22 = fadd double %0, %3
%23 = tail call double @sqrt(double %8)
%24 = fdiv double %22, %23
%25 = tail call i32 @fabs(double %24)
%26 = tail call i32 (...) @ighmm_rand_get_xfaktphi()
%27 = mul nsw i32 %26, %25
%28 = tail call i32 (...) @ighmm_rand_get_philen()
%29 = add nsw i32 %28, -1
%30 = icmp slt i32 %27, %29
br i1 %30, label %34, label %31
31: ; preds = %21
%32 = tail call i32 (...) @ighmm_rand_get_philen()
%33 = add nsw i32 %32, -1
br label %36
34: ; preds = %21
%35 = add nsw i32 %27, 1
br label %36
36: ; preds = %34, %31
%37 = phi i32 [ %33, %31 ], [ %27, %34 ]
%38 = phi i32 [ %33, %31 ], [ %35, %34 ]
%39 = tail call i32 (...) @ighmm_rand_get_xfaktphi()
%40 = sdiv i32 %37, %39
%41 = sitofp i32 %40 to double
%42 = tail call i32 (...) @ighmm_rand_get_xfaktphi()
%43 = sdiv i32 %38, %42
%44 = sitofp i32 %43 to double
%45 = fneg double %41
%46 = tail call double @llvm.fmuladd.f64(double %3, double %5, double %6)
%47 = fmul double %5, %5
%48 = fmul double %47, %41
%49 = fmul double %48, %41
%50 = tail call double @llvm.fmuladd.f64(double %49, double 2.500000e-01, double %46)
%51 = tail call double @sqrt(double %50)
%52 = fmul double %5, %41
%53 = fmul double %52, %41
%54 = tail call double @llvm.fmuladd.f64(double %53, double 5.000000e-01, double %3)
%55 = fneg double %54
%56 = tail call double @llvm.fmuladd.f64(double %45, double %51, double %55)
%57 = fneg double %44
%58 = fmul double %47, %44
%59 = fmul double %58, %44
%60 = tail call double @llvm.fmuladd.f64(double %59, double 2.500000e-01, double %46)
%61 = tail call double @sqrt(double %60)
%62 = fmul double %5, %44
%63 = fmul double %62, %44
%64 = tail call double @llvm.fmuladd.f64(double %63, double 5.000000e-01, double %3)
%65 = fneg double %64
%66 = tail call double @llvm.fmuladd.f64(double %57, double %61, double %65)
%67 = fneg double %56
%68 = tail call double @llvm.fmuladd.f64(double %67, double %5, double %6)
%69 = fneg double %66
%70 = tail call double @llvm.fmuladd.f64(double %69, double %5, double %6)
%71 = fsub double %1, %56
%72 = fneg double %3
%73 = tail call double @ighmm_rand_normal_density_trunc(double %72, double %56, double %68, double %72)
%74 = fneg double %68
%75 = tail call double @llvm.fmuladd.f64(double %74, double %73, double %71)
%76 = tail call double @ighmm_rand_normal_density_trunc(double %72, double %66, double %70, double %72)
%77 = tail call i32 (...) @ighmm_rand_get_philen()
%78 = add nsw i32 %77, -1
%79 = icmp slt i32 %37, %78
br i1 %79, label %80, label %93
80: ; preds = %36
%81 = tail call double @llvm.fmuladd.f64(double %74, double %76, double %71)
%82 = tail call i32 @fabs(double %24)
%83 = tail call i32 (...) @ighmm_rand_get_xstepphi()
%84 = mul nsw i32 %83, %37
%85 = sub nsw i32 %82, %84
%86 = sitofp i32 %85 to double
%87 = fsub double %81, %75
%88 = fmul double %87, %86
%89 = tail call i32 (...) @ighmm_rand_get_xstepphi()
%90 = sitofp i32 %89 to double
%91 = fdiv double %88, %90
%92 = fadd double %75, %91
br label %93
93: ; preds = %80, %36, %15, %11
%94 = phi double [ %12, %11 ], [ %20, %15 ], [ %92, %80 ], [ %75, %36 ]
ret double %94
}