#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 fabs(double);
double pow(double, double);
double sqrt(double);
double Riemann_solver_exact(double *U_star, double *P_star, double gamma,
                            double u_L, double u_R, double p_L, double p_R,
                            double c_L, double c_R, int *CRW, double tol,
                            int N) {
  double mu, nu, sigma;
  double delta_p, u_LR, u_RL;
  double k1, k3, p_INT, p_INT0, u_INT;
  double rho_star_l, rho_star_r;
  double v_L, v_R, gap;
  double temp1, temp2, temp3;
  double dbg = 2;
  int n = 0;
  mu = (gamma - 1.0) / (2.0 * gamma);
  nu = (gamma + 1.0) / (2.0 * gamma);
  sigma = (gamma - 1.0) / (gamma + 1.0);
  if (p_R > p_L) {
    delta_p = p_R - p_L;
    u_LR = sqrt(1.0 + nu * delta_p / p_L);
    u_LR = delta_p * c_L / gamma / p_L / u_LR;
    u_LR = u_L - u_LR;
  } else {
    u_LR = pow(p_R / p_L, mu) - 1.0;
    u_LR = 2.0 * c_L * u_LR / (gamma - 1.0);
    u_LR = u_L - u_LR;
  }
  if (p_L > p_R) {
    delta_p = p_L - p_R;
    u_RL = sqrt(1.0 + nu * delta_p / p_R);
    u_RL = delta_p * c_R / gamma / p_R / u_RL;
    u_RL = u_R + u_RL;
  } else {
    u_RL = pow(p_L / p_R, mu) - 1.0;
    u_RL = 2.0 * c_R * u_RL / (gamma - 1.0);
    u_RL = u_R + u_RL;
  }
  if (u_LR > u_R + tol)
    CRW[1] = 0;
  else
    CRW[1] = 1;
  if (u_RL > u_L - tol)
    CRW[0] = 1;
  else
    CRW[0] = 0;
  k1 = -c_L / p_L / gamma;
  k3 = c_R / p_R / gamma;
  p_INT = (k1 * p_L - k3 * p_R - u_L + u_R) / (k1 - k3);
  if (p_INT < 0)
    p_INT = (p_L < p_R) ? p_L : p_R;
  p_INT = 0.5 * p_INT;
  if (p_INT > p_L) {
    delta_p = p_INT - p_L;
    v_L = sqrt(1.0 + nu * delta_p / p_L);
    v_L = delta_p * c_L / gamma / p_L / v_L;
    v_L = u_L - v_L;
  } else {
    v_L = pow(p_INT / p_L, mu) - 1.0;
    v_L = 2.0 * c_L * v_L / (gamma - 1.0);
    v_L = u_L - v_L;
  }
  if (p_INT > p_R) {
    delta_p = p_INT - p_R;
    v_R = sqrt(1.0 + nu * delta_p / p_R);
    v_R = delta_p * c_R / gamma / p_R / v_R;
    v_R = u_R + v_R;
  } else {
    dbg = pow(p_INT / p_R, mu);
    v_R = pow(p_INT / p_R, mu) - 1.0;
    v_R = 2.0 * c_R * v_R / (gamma - 1.0);
    v_R = u_R + v_R;
  }
  gap = fabs(v_L - v_R);
  while ((gap > tol) && (n != N)) {
    if (p_INT > p_L) {
      delta_p = p_INT - p_L;
      temp1 = 1.0 / sqrt(1.0 + nu * delta_p / p_L);
      temp2 = c_L / gamma / p_L;
      temp3 = 0.5 * temp2 * nu / p_L;
      k1 = temp3 * delta_p * pow(temp1, 3.0) - temp2 * temp1;
    } else {
      temp2 = c_L / gamma / p_L;
      temp1 = 1.0 / pow(p_INT / p_L, nu);
      k1 = -temp1 * temp2;
    }
    if (p_INT > p_R) {
      delta_p = p_INT - p_R;
      temp1 = 1.0 / sqrt(1.0 + nu * delta_p / p_R);
      temp2 = c_R / gamma / p_R;
      temp3 = 0.5 * temp2 * nu / p_R;
      k3 = temp2 * temp1 - temp3 * delta_p * pow(temp1, 3.0);
    } else {
      temp2 = c_R / gamma / p_R;
      temp1 = 1.0 / pow(p_INT / p_R, nu);
      k3 = temp1 * temp2;
    }
    p_INT0 = p_INT + (v_R - v_L) / (k1 - k3);
    if (p_INT0 < 0.0)
      p_INT = 0.5 * p_INT;
    else
      p_INT = p_INT0;
    ++n;
    if (p_INT > p_L) {
      delta_p = p_INT - p_L;
      v_L = sqrt(1.0 + nu * delta_p / p_L);
      v_L = delta_p * c_L / gamma / p_L / v_L;
      v_L = u_L - v_L;
    } else {
      v_L = pow(p_INT / p_L, mu) - 1.0;
      v_L = 2.0 * c_L * v_L / (gamma - 1.0);
      v_L = u_L - v_L;
    }
    if (p_INT > p_R) {
      delta_p = p_INT - p_R;
      v_R = sqrt(1.0 + nu * delta_p / p_R);
      v_R = delta_p * c_R / gamma / p_R / v_R;
      v_R = u_R + v_R;
    } else {
      v_R = pow(p_INT / p_R, mu) - 1.0;
      v_R = 2.0 * c_R * v_R / (gamma - 1.0);
      v_R = u_R + v_R;
    }
    gap = fabs(v_L - v_R);
  }
  u_INT = k1 * (v_R - v_L) / (k1 - k3) + v_L;
  *P_star = p_INT;
  *U_star = u_INT;
  return gap;
}


x86 assembly (clang, -O0):
<Riemann_solver_exact>:
push   %rbp
mov    %rsp,%rbp
sub    $0x140,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movsd  %xmm0,-0x18(%rbp)
movsd  %xmm1,-0x20(%rbp)
movsd  %xmm2,-0x28(%rbp)
movsd  %xmm3,-0x30(%rbp)
movsd  %xmm4,-0x38(%rbp)
movsd  %xmm5,-0x40(%rbp)
movsd  %xmm6,-0x48(%rbp)
mov    %rdx,-0x50(%rbp)
movsd  %xmm7,-0x58(%rbp)
mov    %ecx,-0x5c(%rbp)
movsd  0xe9e(%rip),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movl   $0x0,-0x104(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  0xe77(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xe73(%rip),%xmm1
mulsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xe55(%rip),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  0xe50(%rip),%xmm1
mulsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  0xe2d(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xe21(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x38(%rbp),%xmm0
ucomisd -0x30(%rbp),%xmm0
jbe    1272 <Riemann_solver_exact+0x152>
movsd  -0x38(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x70(%rbp),%xmm1
mulsd  -0x80(%rbp),%xmm1
divsd  -0x30(%rbp),%xmm1
movsd  0xddd(%rip),%xmm0
addsd  %xmm1,%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
divsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
subsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
jmp    12e1 <Riemann_solver_exact+0x1c1>
movsd  -0x38(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
call   1030 <pow@plt>
movsd  0xd72(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0xd66(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movsd  -0x18(%rbp),%xmm1
movsd  0xd44(%rip),%xmm2
subsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
subsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
ucomisd -0x38(%rbp),%xmm0
jbe    1366 <Riemann_solver_exact+0x246>
movsd  -0x30(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x70(%rbp),%xmm1
mulsd  -0x80(%rbp),%xmm1
divsd  -0x38(%rbp),%xmm1
movsd  0xce9(%rip),%xmm0
addsd  %xmm1,%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
divsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
addsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
jmp    13d5 <Riemann_solver_exact+0x2b5>
movsd  -0x30(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
call   1030 <pow@plt>
movsd  0xc7e(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xc72(%rip),%xmm0
mulsd  -0x48(%rbp),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  -0x18(%rbp),%xmm1
movsd  0xc50(%rip),%xmm2
subsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
addsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x28(%rbp),%xmm1
addsd  -0x58(%rbp),%xmm1
ucomisd %xmm1,%xmm0
jbe    1401 <Riemann_solver_exact+0x2e1>
mov    -0x50(%rbp),%rax
movl   $0x0,0x4(%rax)
jmp    140c <Riemann_solver_exact+0x2ec>
mov    -0x50(%rbp),%rax
movl   $0x1,0x4(%rax)
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x20(%rbp),%xmm1
subsd  -0x58(%rbp),%xmm1
ucomisd %xmm1,%xmm0
jbe    1437 <Riemann_solver_exact+0x317>
mov    -0x50(%rbp),%rax
movl   $0x1,(%rax)
jmp    1441 <Riemann_solver_exact+0x321>
mov    -0x50(%rbp),%rax
movl   $0x0,(%rax)
movsd  -0x40(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
divsd  -0x30(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x30(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0x38(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
subsd  -0x20(%rbp),%xmm0
addsd  -0x28(%rbp),%xmm0
movsd  -0x98(%rbp),%xmm1
ff
subsd  -0xa0(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0xa8(%rbp),%xmm0
ff
jbe    1539 <Riemann_solver_exact+0x419>
movsd  -0x30(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    151c <Riemann_solver_exact+0x3fc>
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
jmp    1529 <Riemann_solver_exact+0x409>
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0xacf(%rip),%xmm0
mulsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
ucomisd -0x30(%rbp),%xmm0
jbe    15dc <Riemann_solver_exact+0x4bc>
movsd  -0xa8(%rbp),%xmm0
ff
subsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x70(%rbp),%xmm1
mulsd  -0x80(%rbp),%xmm1
divsd  -0x30(%rbp),%xmm1
movsd  0xa73(%rip),%xmm0
addsd  %xmm1,%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
divsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
subsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
jmp    164e <Riemann_solver_exact+0x52e>
movsd  -0xa8(%rbp),%xmm0
ff
divsd  -0x30(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
call   1030 <pow@plt>
movsd  0xa05(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  0x9f9(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  -0x18(%rbp),%xmm1
movsd  0x9d7(%rip),%xmm2
subsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
subsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
ucomisd -0x38(%rbp),%xmm0
jbe    16d9 <Riemann_solver_exact+0x5b9>
movsd  -0xa8(%rbp),%xmm0
ff
subsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x70(%rbp),%xmm1
mulsd  -0x80(%rbp),%xmm1
divsd  -0x38(%rbp),%xmm1
movsd  0x976(%rip),%xmm0
addsd  %xmm1,%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
divsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
addsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
jmp    176a <Riemann_solver_exact+0x64a>
movsd  -0xa8(%rbp),%xmm0
ff
divsd  -0x38(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
call   1030 <pow@plt>
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
divsd  -0x38(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
call   1030 <pow@plt>
movsd  0x8e9(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  0x8dd(%rip),%xmm0
mulsd  -0x48(%rbp),%xmm0
mulsd  -0xd8(%rbp),%xmm0
ff
movsd  -0x18(%rbp),%xmm1
movsd  0x8bb(%rip),%xmm2
subsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
addsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
subsd  -0xd8(%rbp),%xmm0
ff
movaps 0x89f(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
xor    %eax,%eax
ucomisd -0x58(%rbp),%xmm0
mov    %al,-0x111(%rbp)
jbe    17ba <Riemann_solver_exact+0x69a>
mov    -0x104(%rbp),%eax
cmp    -0x5c(%rbp),%eax
setne  %al
mov    %al,-0x111(%rbp)
mov    -0x111(%rbp),%al
test   $0x1,%al
jne    17cd <Riemann_solver_exact+0x6ad>
jmp    1d75 <Riemann_solver_exact+0xc55>
movsd  -0xa8(%rbp),%xmm0
ff
ucomisd -0x30(%rbp),%xmm0
jbe    18d3 <Riemann_solver_exact+0x7b3>
movsd  -0xa8(%rbp),%xmm0
ff
subsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x70(%rbp),%xmm1
mulsd  -0x80(%rbp),%xmm1
divsd  -0x30(%rbp),%xmm1
movsd  0x7f7(%rip),%xmm0
addsd  %xmm1,%xmm0
call   1040 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  0x7e3(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  0x7c8(%rip),%xmm0
mulsd  -0xf0(%rbp),%xmm0
ff
mulsd  -0x70(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
movsd  0x791(%rip),%xmm1
call   1030 <pow@plt>
movaps %xmm0,%xmm2
movsd  -0x120(%rbp),%xmm0
ff
movsd  -0xf0(%rbp),%xmm1
ff
mulsd  -0xe8(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
jmp    1947 <Riemann_solver_exact+0x827>
movsd  -0x40(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
divsd  -0x30(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
call   1030 <pow@plt>
movaps %xmm0,%xmm1
movsd  0x6f4(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
ucomisd -0x38(%rbp),%xmm0
jbe    1a71 <Riemann_solver_exact+0x951>
movsd  -0xa8(%rbp),%xmm0
ff
subsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x70(%rbp),%xmm1
mulsd  -0x80(%rbp),%xmm1
divsd  -0x38(%rbp),%xmm1
movsd  0x67d(%rip),%xmm0
addsd  %xmm1,%xmm0
call   1040 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  0x669(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  0x64e(%rip),%xmm0
mulsd  -0xf0(%rbp),%xmm0
ff
mulsd  -0x70(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
movsd  0x5f7(%rip),%xmm1
call   1030 <pow@plt>
movsd  -0x138(%rbp),%xmm1
ff
movsd  -0x130(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x128(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
jmp    1ace <Riemann_solver_exact+0x9ae>
movsd  -0x48(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
divsd  -0x38(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
call   1030 <pow@plt>
movaps %xmm0,%xmm1
movsd  0x556(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
mulsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xd8(%rbp),%xmm1
ff
subsd  -0xd0(%rbp),%xmm1
ff
movsd  -0x98(%rbp),%xmm2
ff
subsd  -0xa0(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0xb0(%rbp),%xmm0
ff
jbe    1b34 <Riemann_solver_exact+0xa14>
movsd  0x4f1(%rip),%xmm0
mulsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
jmp    1b44 <Riemann_solver_exact+0xa24>
movsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x104(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x104(%rbp)
movsd  -0xa8(%rbp),%xmm0
ff
ucomisd -0x30(%rbp),%xmm0
jbe    1bde <Riemann_solver_exact+0xabe>
movsd  -0xa8(%rbp),%xmm0
ff
subsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x70(%rbp),%xmm1
mulsd  -0x80(%rbp),%xmm1
divsd  -0x30(%rbp),%xmm1
movsd  0x471(%rip),%xmm0
addsd  %xmm1,%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
divsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
subsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
jmp    1c50 <Riemann_solver_exact+0xb30>
movsd  -0xa8(%rbp),%xmm0
ff
divsd  -0x30(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
call   1030 <pow@plt>
movsd  0x403(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  0x3f7(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  -0x18(%rbp),%xmm1
movsd  0x3d5(%rip),%xmm2
subsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
subsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
ucomisd -0x38(%rbp),%xmm0
jbe    1cdb <Riemann_solver_exact+0xbbb>
movsd  -0xa8(%rbp),%xmm0
ff
subsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x70(%rbp),%xmm1
mulsd  -0x80(%rbp),%xmm1
divsd  -0x38(%rbp),%xmm1
movsd  0x374(%rip),%xmm0
addsd  %xmm1,%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
divsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
addsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
jmp    1d4d <Riemann_solver_exact+0xc2d>
movsd  -0xa8(%rbp),%xmm0
ff
divsd  -0x38(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
call   1030 <pow@plt>
movsd  0x306(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  0x2fa(%rip),%xmm0
mulsd  -0x48(%rbp),%xmm0
mulsd  -0xd8(%rbp),%xmm0
ff
movsd  -0x18(%rbp),%xmm1
movsd  0x2d8(%rip),%xmm2
subsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
addsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
subsd  -0xd8(%rbp),%xmm0
ff
movaps 0x2bc(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
jmp    178d <Riemann_solver_exact+0x66d>
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0xd8(%rbp),%xmm1
ff
subsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  -0x98(%rbp),%xmm1
ff
subsd  -0xa0(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
addsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xb8(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xe0(%rbp),%xmm0
ff
add    $0x140,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Riemann_solver_exact>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0x148,%rsp
mov    %ecx,%ebp
movsd  %xmm7,0xb8(%rsp)
mov    %rdx,%rbx
movaps %xmm6,0x90(%rsp)
movsd  %xmm2,0xb0(%rsp)
movsd  %xmm1,0x88(%rsp)
mov    %rsi,%r14
mov    %rdi,%r15
movsd  0xe9d(%rip),%xmm7
addsd  %xmm0,%xmm7
movapd %xmm0,%xmm2
addsd  %xmm0,%xmm2
movapd %xmm7,%xmm1
divsd  %xmm2,%xmm1
movsd  0xe89(%rip),%xmm6
movapd %xmm0,0x70(%rsp)
addsd  %xmm0,%xmm6
divsd  %xmm2,%xmm6
ucomisd %xmm3,%xmm4
movaps %xmm5,0x50(%rsp)
movapd %xmm4,0x60(%rsp)
movapd %xmm3,0x20(%rsp)
movsd  %xmm7,0x38(%rsp)
movsd  %xmm1,0x30(%rsp)
movsd  %xmm6,0x8(%rsp)
jbe    11de <Riemann_solver_exact+0xbe>
subsd  %xmm3,%xmm4
movapd %xmm6,%xmm0
mulsd  %xmm4,%xmm0
divsd  %xmm3,%xmm0
addsd  0xe3a(%rip),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1215 <Riemann_solver_exact+0xf5>
sqrtsd %xmm0,%xmm0
jmp    122c <Riemann_solver_exact+0x10c>
movapd %xmm4,%xmm0
divsd  %xmm3,%xmm0
call   1030 <pow@plt>
movapd 0x60(%rsp),%xmm1
movapd 0x20(%rsp),%xmm3
addsd  0xe01(%rip),%xmm0
movapd 0x50(%rsp),%xmm4
addsd  %xmm4,%xmm4
mulsd  %xmm0,%xmm4
divsd  0x38(%rsp),%xmm4
jmp    124a <Riemann_solver_exact+0x12a>
movapd %xmm4,0x10(%rsp)
call   1040 <sqrt@plt>
movapd 0x10(%rsp),%xmm4
movapd 0x20(%rsp),%xmm3
movapd 0x50(%rsp),%xmm1
mulsd  %xmm1,%xmm4
divsd  0x70(%rsp),%xmm4
divsd  %xmm3,%xmm4
divsd  %xmm0,%xmm4
movapd 0x60(%rsp),%xmm1
movsd  0x88(%rsp),%xmm5
subsd  %xmm4,%xmm5
ucomisd %xmm1,%xmm3
jbe    128b <Riemann_solver_exact+0x16b>
movapd %xmm3,%xmm2
subsd  %xmm1,%xmm2
movsd  0x8(%rsp),%xmm0
mulsd  %xmm2,%xmm0
divsd  %xmm1,%xmm0
addsd  0xd8d(%rip),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     12e2 <Riemann_solver_exact+0x1c2>
sqrtsd %xmm0,%xmm0
jmp    1305 <Riemann_solver_exact+0x1e5>
movapd %xmm3,%xmm0
divsd  %xmm1,%xmm0
movsd  0x30(%rsp),%xmm1
movsd  %xmm5,0x10(%rsp)
call   1030 <pow@plt>
movsd  0x10(%rsp),%xmm5
movapd 0x60(%rsp),%xmm7
movapd 0x20(%rsp),%xmm3
addsd  0xd42(%rip),%xmm0
movapd 0x90(%rsp),%xmm6
movapd %xmm6,%xmm2
addsd  %xmm6,%xmm2
mulsd  %xmm0,%xmm2
divsd  0x38(%rsp),%xmm2
movapd 0x70(%rsp),%xmm8
jmp    132c <Riemann_solver_exact+0x20c>
movsd  %xmm5,0x10(%rsp)
movapd %xmm2,0x40(%rsp)
call   1040 <sqrt@plt>
movapd 0x40(%rsp),%xmm2
movsd  0x10(%rsp),%xmm5
movapd 0x20(%rsp),%xmm3
movapd 0x90(%rsp),%xmm6
mulsd  %xmm6,%xmm2
movapd 0x70(%rsp),%xmm8
divsd  %xmm8,%xmm2
movapd 0x60(%rsp),%xmm7
divsd  %xmm7,%xmm2
divsd  %xmm0,%xmm2
movsd  0xb0(%rsp),%xmm4
movapd %xmm4,%xmm0
movsd  0xb8(%rsp),%xmm1
addsd  %xmm1,%xmm0
xor    %eax,%eax
ucomisd %xmm0,%xmm5
addsd  %xmm4,%xmm2
setbe  %al
mov    %eax,0x4(%rbx)
movsd  0x88(%rsp),%xmm5
movapd %xmm5,%xmm0
subsd  %xmm1,%xmm0
xor    %eax,%eax
ucomisd %xmm0,%xmm2
seta   %al
mov    %eax,(%rbx)
movapd 0xcb6(%rip),%xmm1
movapd 0x50(%rsp),%xmm9
xorpd  %xmm9,%xmm1
unpcklpd %xmm6,%xmm1
movapd %xmm3,%xmm0
unpcklpd %xmm7,%xmm0
divpd  %xmm0,%xmm1
movapd %xmm8,%xmm0
unpcklpd %xmm8,%xmm0
divpd  %xmm0,%xmm1
movapd %xmm1,%xmm0
unpckhpd %xmm1,%xmm0
movapd %xmm1,%xmm6
subsd  %xmm0,%xmm6
mulsd  %xmm7,%xmm0
movapd %xmm1,0xa0(%rsp)
movapd %xmm1,%xmm2
mulsd  %xmm3,%xmm2
subsd  %xmm0,%xmm2
subsd  %xmm5,%xmm2
addsd  %xmm4,%xmm2
movapd %xmm6,0xc0(%rsp)
divsd  %xmm6,%xmm2
movapd %xmm3,%xmm0
minsd  %xmm7,%xmm0
xorpd  %xmm1,%xmm1
movapd %xmm2,%xmm6
cmpltsd %xmm1,%xmm6
movapd %xmm6,%xmm4
andnpd %xmm2,%xmm4
andpd  %xmm0,%xmm6
orpd   %xmm4,%xmm6
mulsd  0xc01(%rip),%xmm6
ucomisd %xmm3,%xmm6
movapd %xmm6,0x10(%rsp)
jbe    1445 <Riemann_solver_exact+0x325>
movapd %xmm6,%xmm2
subsd  %xmm3,%xmm2
movsd  0x8(%rsp),%xmm0
mulsd  %xmm2,%xmm0
divsd  %xmm3,%xmm0
addsd  0xbcf(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     147c <Riemann_solver_exact+0x35c>
sqrtsd %xmm0,%xmm0
jmp    1499 <Riemann_solver_exact+0x379>
divsd  %xmm3,%xmm6
movapd %xmm6,%xmm0
movsd  0x30(%rsp),%xmm1
call   1030 <pow@plt>
movapd 0x10(%rsp),%xmm6
addsd  0xb9a(%rip),%xmm0
movapd 0x50(%rsp),%xmm2
addsd  %xmm2,%xmm2
mulsd  %xmm0,%xmm2
divsd  0x38(%rsp),%xmm2
jmp    14b1 <Riemann_solver_exact+0x391>
movapd %xmm2,0x40(%rsp)
call   1040 <sqrt@plt>
movapd 0x40(%rsp),%xmm2
movapd 0x10(%rsp),%xmm6
movapd 0x20(%rsp),%xmm3
movapd 0x50(%rsp),%xmm1
mulsd  %xmm1,%xmm2
divsd  0x70(%rsp),%xmm2
divsd  %xmm3,%xmm2
divsd  %xmm0,%xmm2
movsd  0x88(%rsp),%xmm4
subsd  %xmm2,%xmm4
movapd 0x60(%rsp),%xmm1
ucomisd %xmm1,%xmm6
jbe    14f4 <Riemann_solver_exact+0x3d4>
subsd  %xmm1,%xmm6
movsd  0x8(%rsp),%xmm0
mulsd  %xmm6,%xmm0
divsd  %xmm1,%xmm0
addsd  0xb24(%rip),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1556 <Riemann_solver_exact+0x436>
sqrtsd %xmm0,%xmm0
jmp    1571 <Riemann_solver_exact+0x451>
divsd  %xmm1,%xmm6
movapd %xmm6,0x40(%rsp)
movapd %xmm6,%xmm0
movsd  0x30(%rsp),%xmm1
movsd  %xmm4,(%rsp)
call   1030 <pow@plt>
movapd 0x40(%rsp),%xmm0
movsd  0x30(%rsp),%xmm1
call   1030 <pow@plt>
movsd  (%rsp),%xmm4
addsd  0xad0(%rip),%xmm0
movapd 0x90(%rsp),%xmm9
movapd %xmm9,%xmm6
addsd  %xmm9,%xmm6
mulsd  %xmm0,%xmm6
divsd  0x38(%rsp),%xmm6
movapd 0x20(%rsp),%xmm3
jmp    1596 <Riemann_solver_exact+0x476>
movapd %xmm6,0x40(%rsp)
movsd  %xmm4,(%rsp)
call   1040 <sqrt@plt>
movsd  (%rsp),%xmm4
movapd 0x40(%rsp),%xmm6
movapd 0x90(%rsp),%xmm9
movapd 0x20(%rsp),%xmm3
mulsd  %xmm9,%xmm6
divsd  0x70(%rsp),%xmm6
divsd  0x60(%rsp),%xmm6
divsd  %xmm0,%xmm6
addsd  0xb0(%rsp),%xmm6
movapd %xmm4,%xmm0
subsd  %xmm6,%xmm0
andpd  0xa91(%rip),%xmm0
ucomisd 0xb8(%rsp),%xmm0
jbe    1a75 <Riemann_solver_exact+0x955>
test   %ebp,%ebp
movapd 0x10(%rsp),%xmm5
je     1a7a <Riemann_solver_exact+0x95a>
movapd 0x50(%rsp),%xmm8
movapd %xmm8,%xmm7
movapd 0x70(%rsp),%xmm2
divsd  %xmm2,%xmm7
divsd  %xmm3,%xmm7
movsd  0xa22(%rip),%xmm0
mulsd  %xmm7,%xmm0
movsd  0x8(%rsp),%xmm1
mulsd  %xmm1,%xmm0
divsd  %xmm3,%xmm0
movsd  %xmm0,0xe0(%rsp)
movapd 0xa1f(%rip),%xmm0
movapd %xmm7,0x130(%rsp)
xorpd  %xmm7,%xmm0
movapd %xmm0,0x120(%rsp)
movapd %xmm9,%xmm0
divsd  %xmm2,%xmm0
movapd 0x60(%rsp),%xmm2
divsd  %xmm2,%xmm0
movsd  0x9d6(%rip),%xmm7
movapd %xmm0,0xf0(%rsp)
mulsd  %xmm0,%xmm7
mulsd  %xmm1,%xmm7
divsd  %xmm2,%xmm7
movsd  %xmm7,0xd8(%rsp)
addsd  %xmm8,%xmm8
movapd %xmm8,0x110(%rsp)
addsd  %xmm9,%xmm9
movapd %xmm9,0x100(%rsp)
add    $0xffffffff,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
ucomisd %xmm3,%xmm5
movapd %xmm5,0x10(%rsp)
movapd %xmm6,0x40(%rsp)
movsd  %xmm4,(%rsp)
jbe    16e0 <Riemann_solver_exact+0x5c0>
subsd  %xmm3,%xmm5
movsd  0x8(%rsp),%xmm0
movsd  %xmm5,0xa0(%rsp)
mulsd  %xmm5,%xmm0
divsd  %xmm3,%xmm0
addsd  0x93e(%rip),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1720 <Riemann_solver_exact+0x600>
sqrtsd %xmm0,%xmm0
jmp    1725 <Riemann_solver_exact+0x605>
nopw   0x0(%rax,%rax,1)
movapd %xmm5,%xmm0
divsd  %xmm3,%xmm0
movsd  0x8(%rsp),%xmm1
call   1030 <pow@plt>
movapd 0x10(%rsp),%xmm2
movsd  0x8ff(%rip),%xmm1
divsd  %xmm0,%xmm1
mulsd  0x130(%rsp),%xmm1
movapd %xmm1,0xa0(%rsp)
jmp    1794 <Riemann_solver_exact+0x674>
nopl   0x0(%rax)
call   1040 <sqrt@plt>
movsd  0x8db(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0xc0(%rsp)
movsd  0xa0(%rsp),%xmm0
mulsd  0xe0(%rsp),%xmm0
movsd  %xmm0,0xa0(%rsp)
movapd %xmm1,%xmm0
movsd  0x8bf(%rip),%xmm1
call   1030 <pow@plt>
movsd  0xc0(%rsp),%xmm1
mulsd  0x120(%rsp),%xmm1
mulsd  0xa0(%rsp),%xmm0
addsd  %xmm1,%xmm0
movapd %xmm0,0xa0(%rsp)
movapd 0x10(%rsp),%xmm2
movapd 0x60(%rsp),%xmm1
ucomisd %xmm1,%xmm2
jbe    17e0 <Riemann_solver_exact+0x6c0>
subsd  %xmm1,%xmm2
movsd  0x8(%rsp),%xmm0
movsd  %xmm2,0xc0(%rsp)
mulsd  %xmm2,%xmm0
divsd  %xmm1,%xmm0
addsd  0x845(%rip),%xmm0
ucomisd 0x85d(%rip),%xmm0
jb     1810 <Riemann_solver_exact+0x6f0>
sqrtsd %xmm0,%xmm0
jmp    1815 <Riemann_solver_exact+0x6f5>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movapd %xmm2,%xmm0
divsd  %xmm1,%xmm0
movsd  0x8(%rsp),%xmm1
call   1030 <pow@plt>
movapd 0x10(%rsp),%xmm4
movsd  0x807(%rip),%xmm1
divsd  %xmm0,%xmm1
mulsd  0xf0(%rsp),%xmm1
jmp    1871 <Riemann_solver_exact+0x751>
call   1040 <sqrt@plt>
movsd  0x7eb(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0xe8(%rsp)
movapd %xmm1,%xmm0
movsd  0x7ea(%rip),%xmm1
call   1030 <pow@plt>
movsd  0xc0(%rsp),%xmm1
mulsd  0xd8(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  0xe8(%rsp),%xmm0
mulsd  0xf0(%rsp),%xmm0
addsd  %xmm1,%xmm0
movapd %xmm0,%xmm1
movapd 0x10(%rsp),%xmm4
movapd 0x40(%rsp),%xmm2
subsd  (%rsp),%xmm2
movapd 0xa0(%rsp),%xmm0
subsd  %xmm1,%xmm0
movapd %xmm0,0xc0(%rsp)
divsd  %xmm0,%xmm2
addsd  %xmm4,%xmm2
mulsd  0x76e(%rip),%xmm4
movapd %xmm2,%xmm0
xorpd  %xmm3,%xmm3
cmpltsd %xmm3,%xmm0
movapd %xmm0,%xmm1
andnpd %xmm2,%xmm1
andpd  %xmm4,%xmm0
orpd   %xmm1,%xmm0
movapd %xmm0,%xmm6
movapd 0x20(%rsp),%xmm2
ucomisd %xmm2,%xmm0
movapd %xmm0,0x10(%rsp)
jbe    1900 <Riemann_solver_exact+0x7e0>
movapd %xmm6,%xmm5
subsd  %xmm2,%xmm5
movsd  0x8(%rsp),%xmm0
mulsd  %xmm5,%xmm0
divsd  %xmm2,%xmm0
addsd  0x715(%rip),%xmm0
ucomisd %xmm3,%xmm0
jb     1940 <Riemann_solver_exact+0x820>
sqrtsd %xmm0,%xmm0
jmp    195b <Riemann_solver_exact+0x83b>
nop
divsd  %xmm2,%xmm6
movapd %xmm6,%xmm0
movsd  0x30(%rsp),%xmm1
call   1030 <pow@plt>
movapd 0x10(%rsp),%xmm6
movapd %xmm0,%xmm5
addsd  0x6db(%rip),%xmm5
mulsd  0x110(%rsp),%xmm5
divsd  0x38(%rsp),%xmm5
jmp    1977 <Riemann_solver_exact+0x857>
cs nopw 0x0(%rax,%rax,1)
movsd  %xmm5,(%rsp)
call   1040 <sqrt@plt>
movsd  (%rsp),%xmm5
movapd 0x10(%rsp),%xmm6
movapd 0x20(%rsp),%xmm2
movapd 0x50(%rsp),%xmm1
movapd 0x70(%rsp),%xmm3
mulsd  %xmm1,%xmm5
divsd  %xmm3,%xmm5
divsd  %xmm2,%xmm5
divsd  %xmm0,%xmm5
movapd 0x60(%rsp),%xmm1
ucomisd %xmm1,%xmm6
jbe    19b0 <Riemann_solver_exact+0x890>
subsd  %xmm1,%xmm6
movsd  0x8(%rsp),%xmm0
mulsd  %xmm6,%xmm0
divsd  %xmm1,%xmm0
addsd  0x66b(%rip),%xmm0
ucomisd 0x683(%rip),%xmm0
jb     19f0 <Riemann_solver_exact+0x8d0>
sqrtsd %xmm0,%xmm0
jmp    1a0b <Riemann_solver_exact+0x8eb>
nopl   (%rax)
divsd  %xmm1,%xmm6
movapd %xmm6,%xmm0
movsd  0x30(%rsp),%xmm1
movsd  %xmm5,(%rsp)
call   1030 <pow@plt>
movsd  (%rsp),%xmm5
movapd %xmm0,%xmm6
addsd  0x627(%rip),%xmm6
mulsd  0x100(%rsp),%xmm6
divsd  0x38(%rsp),%xmm6
movapd 0x20(%rsp),%xmm3
jmp    1a2e <Riemann_solver_exact+0x90e>
movapd %xmm6,0x40(%rsp)
movsd  %xmm5,(%rsp)
call   1040 <sqrt@plt>
movsd  (%rsp),%xmm5
movapd 0x40(%rsp),%xmm6
movapd 0x90(%rsp),%xmm1
movapd 0x20(%rsp),%xmm3
mulsd  %xmm1,%xmm6
divsd  0x70(%rsp),%xmm6
divsd  0x60(%rsp),%xmm6
divsd  %xmm0,%xmm6
movsd  0x88(%rsp),%xmm4
subsd  %xmm5,%xmm4
addsd  0xb0(%rsp),%xmm6
movapd %xmm4,%xmm0
subsd  %xmm6,%xmm0
andpd  0x5ec(%rip),%xmm0
add    $0xffffffff,%ebp
setb   %al
ucomisd 0xb8(%rsp),%xmm0
jbe    1a75 <Riemann_solver_exact+0x955>
test   %al,%al
movapd 0x10(%rsp),%xmm5
jne    1690 <Riemann_solver_exact+0x570>
jmp    1a7a <Riemann_solver_exact+0x95a>
movaps 0x10(%rsp),%xmm5
subsd  %xmm4,%xmm6
mulsd  0xa0(%rsp),%xmm6
divsd  0xc0(%rsp),%xmm6
addsd  %xmm4,%xmm6
movsd  %xmm5,(%r14)
movsd  %xmm6,(%r15)
add    $0x148,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define double @Riemann_solver_exact(double* nocapture writeonly %0, double* nocapture writeonly %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8, i32* nocapture writeonly %9, double %10, i32 %11) {
%13 = fadd double %2, -1.000000e+00
%14 = fmul double %2, 2.000000e+00
%15 = fdiv double %13, %14
%16 = fadd double %2, 1.000000e+00
%17 = fdiv double %16, %14
%18 = fcmp ogt double %6, %5
br i1 %18, label %19, label %29
19: ; preds = %12
%20 = fsub double %6, %5
%21 = fmul double %17, %20
%22 = fdiv double %21, %5
%23 = fadd double %22, 1.000000e+00
%24 = tail call double @sqrt(double %23)
%25 = fmul double %20, %7
%26 = fdiv double %25, %2
%27 = fdiv double %26, %5
%28 = fdiv double %27, %24
br label %36
29: ; preds = %12
%30 = fdiv double %6, %5
%31 = tail call double @pow(double %30, double %15)
%32 = fadd double %31, -1.000000e+00
%33 = fmul double %7, 2.000000e+00
%34 = fmul double %33, %32
%35 = fdiv double %34, %13
br label %36
36: ; preds = %29, %19
%37 = phi double [ %28, %19 ], [ %35, %29 ]
%38 = fsub double %3, %37
%39 = fcmp ogt double %5, %6
br i1 %39, label %40, label %50
40: ; preds = %36
%41 = fsub double %5, %6
%42 = fmul double %17, %41
%43 = fdiv double %42, %6
%44 = fadd double %43, 1.000000e+00
%45 = tail call double @sqrt(double %44)
%46 = fmul double %41, %8
%47 = fdiv double %46, %2
%48 = fdiv double %47, %6
%49 = fdiv double %48, %45
br label %57
50: ; preds = %36
%51 = fdiv double %5, %6
%52 = tail call double @pow(double %51, double %15)
%53 = fadd double %52, -1.000000e+00
%54 = fmul double %8, 2.000000e+00
%55 = fmul double %54, %53
%56 = fdiv double %55, %13
br label %57
57: ; preds = %50, %40
%58 = phi double [ %49, %40 ], [ %56, %50 ]
%59 = fadd double %58, %4
%60 = fadd double %4, %10
%61 = fcmp ule double %38, %60
%62 = zext i1 %61 to i32
%63 = getelementptr inbounds i32, i32* %9, i64 1
store i32 %62, i32* %63
%64 = fsub double %3, %10
%65 = fcmp ogt double %59, %64
%66 = zext i1 %65 to i32
store i32 %66, i32* %9
%67 = fneg double %7
%68 = insertelement <2 x double> poison, double %8, i64 1
%69 = insertelement <2 x double> %68, double %67, i64 0
%70 = insertelement <2 x double> poison, double %5, i64 0
%71 = insertelement <2 x double> %70, double %6, i64 1
%72 = fdiv <2 x double> %69, %71
%73 = insertelement <2 x double> poison, double %2, i64 0
%74 = shufflevector <2 x double> %73, <2 x double> poison, <2 x i32> zeroinitializer
%75 = fdiv <2 x double> %72, %74
%76 = extractelement <2 x double> %75, i64 1
%77 = fneg double %76
%78 = fmul double %77, %6
%79 = extractelement <2 x double> %75, i64 0
%80 = tail call double @llvm.fmuladd.f64(double %79, double %5, double %78)
%81 = fsub double %80, %3
%82 = fadd double %81, %4
%83 = fsub double %79, %76
%84 = fdiv double %82, %83
%85 = fcmp olt double %84, 0.000000e+00
%86 = select i1 %18, double %5, double %6
%87 = select i1 %85, double %86, double %84
%88 = fmul double %87, 5.000000e-01
%89 = fcmp ogt double %88, %5
br i1 %89, label %90, label %100
90: ; preds = %57
%91 = fsub double %88, %5
%92 = fmul double %17, %91
%93 = fdiv double %92, %5
%94 = fadd double %93, 1.000000e+00
%95 = tail call double @sqrt(double %94)
%96 = fmul double %91, %7
%97 = fdiv double %96, %2
%98 = fdiv double %97, %5
%99 = fdiv double %98, %95
br label %107
100: ; preds = %57
%101 = fdiv double %88, %5
%102 = tail call double @pow(double %101, double %15)
%103 = fadd double %102, -1.000000e+00
%104 = fmul double %7, 2.000000e+00
%105 = fmul double %104, %103
%106 = fdiv double %105, %13
br label %107
107: ; preds = %100, %90
%108 = phi double [ %99, %90 ], [ %106, %100 ]
%109 = fsub double %3, %108
%110 = fcmp ogt double %88, %6
br i1 %110, label %111, label %121
111: ; preds = %107
%112 = fsub double %88, %6
%113 = fmul double %17, %112
%114 = fdiv double %113, %6
%115 = fadd double %114, 1.000000e+00
%116 = tail call double @sqrt(double %115)
%117 = fmul double %112, %8
%118 = fdiv double %117, %2
%119 = fdiv double %118, %6
%120 = fdiv double %119, %116
br label %129
121: ; preds = %107
%122 = fdiv double %88, %6
%123 = tail call double @pow(double %122, double %15)
%124 = tail call double @pow(double %122, double %15)
%125 = fadd double %124, -1.000000e+00
%126 = fmul double %8, 2.000000e+00
%127 = fmul double %126, %125
%128 = fdiv double %127, %13
br label %129
129: ; preds = %121, %111
%130 = phi double [ %120, %111 ], [ %128, %121 ]
%131 = fadd double %130, %4
%132 = fsub double %109, %131
%133 = tail call double @llvm.fabs.f64(double %132)
%134 = fcmp ogt double %133, %10
%135 = icmp ne i32 %11, 0
%136 = and i1 %134, %135
br i1 %136, label %137, label %247
137: ; preds = %129
%138 = fdiv double %7, %2
%139 = fdiv double %138, %5
%140 = fmul double %139, 5.000000e-01
%141 = fmul double %17, %140
%142 = fdiv double %141, %5
%143 = fneg double %139
%144 = fdiv double %8, %2
%145 = fdiv double %144, %6
%146 = fmul double %145, -5.000000e-01
%147 = fmul double %17, %146
%148 = fdiv double %147, %6
%149 = fmul double %7, 2.000000e+00
%150 = fmul double %8, 2.000000e+00
br label %151
151: ; preds = %137, %239
%152 = phi i32 [ 0, %137 ], [ %201, %239 ]
%153 = phi double [ %131, %137 ], [ %241, %239 ]
%154 = phi double [ %109, %137 ], [ %221, %239 ]
%155 = phi double [ %88, %137 ], [ %200, %239 ]
%156 = fcmp ogt double %155, %5
br i1 %156, label %157, label %168
157: ; preds = %151
%158 = fsub double %155, %5
%159 = fmul double %17, %158
%160 = fdiv double %159, %5
%161 = fadd double %160, 1.000000e+00
%162 = tail call double @sqrt(double %161)
%163 = fdiv double 1.000000e+00, %162
%164 = fmul double %142, %158
%165 = tail call double @pow(double %163, double 3.000000e+00)
%166 = fmul double %163, %143
%167 = tail call double @llvm.fmuladd.f64(double %164, double %165, double %166)
br label %173
168: ; preds = %151
%169 = fdiv double %155, %5
%170 = tail call double @pow(double %169, double %17)
%171 = fdiv double -1.000000e+00, %170
%172 = fmul double %139, %171
br label %173
173: ; preds = %168, %157
%174 = phi double [ %167, %157 ], [ %172, %168 ]
%175 = fcmp ogt double %155, %6
br i1 %175, label %176, label %187
176: ; preds = %173
%177 = fsub double %155, %6
%178 = fmul double %17, %177
%179 = fdiv double %178, %6
%180 = fadd double %179, 1.000000e+00
%181 = tail call double @sqrt(double %180)
%182 = fdiv double 1.000000e+00, %181
%183 = tail call double @pow(double %182, double 3.000000e+00)
%184 = fmul double %148, %177
%185 = fmul double %184, %183
%186 = tail call double @llvm.fmuladd.f64(double %145, double %182, double %185)
br label %192
187: ; preds = %173
%188 = fdiv double %155, %6
%189 = tail call double @pow(double %188, double %17)
%190 = fdiv double 1.000000e+00, %189
%191 = fmul double %145, %190
br label %192
192: ; preds = %187, %176
%193 = phi double [ %186, %176 ], [ %191, %187 ]
%194 = fsub double %153, %154
%195 = fsub double %174, %193
%196 = fdiv double %194, %195
%197 = fadd double %155, %196
%198 = fcmp olt double %197, 0.000000e+00
%199 = fmul double %155, 5.000000e-01
%200 = select i1 %198, double %199, double %197
%201 = add nuw nsw i32 %152, 1
%202 = fcmp ogt double %200, %5
br i1 %202, label %203, label %213
203: ; preds = %192
%204 = fsub double %200, %5
%205 = fmul double %17, %204
%206 = fdiv double %205, %5
%207 = fadd double %206, 1.000000e+00
%208 = tail call double @sqrt(double %207)
%209 = fmul double %204, %7
%210 = fdiv double %209, %2
%211 = fdiv double %210, %5
%212 = fdiv double %211, %208
br label %219
213: ; preds = %192
%214 = fdiv double %200, %5
%215 = tail call double @pow(double %214, double %15)
%216 = fadd double %215, -1.000000e+00
%217 = fmul double %149, %216
%218 = fdiv double %217, %13
br label %219
219: ; preds = %213, %203
%220 = phi double [ %212, %203 ], [ %218, %213 ]
%221 = fsub double %3, %220
%222 = fcmp ogt double %200, %6
br i1 %222, label %223, label %233
223: ; preds = %219
%224 = fsub double %200, %6
%225 = fmul double %17, %224
%226 = fdiv double %225, %6
%227 = fadd double %226, 1.000000e+00
%228 = tail call double @sqrt(double %227)
%229 = fmul double %224, %8
%230 = fdiv double %229, %2
%231 = fdiv double %230, %6
%232 = fdiv double %231, %228
br label %239
233: ; preds = %219
%234 = fdiv double %200, %6
%235 = tail call double @pow(double %234, double %15)
%236 = fadd double %235, -1.000000e+00
%237 = fmul double %150, %236
%238 = fdiv double %237, %13
br label %239
239: ; preds = %233, %223
%240 = phi double [ %232, %223 ], [ %238, %233 ]
%241 = fadd double %240, %4
%242 = fsub double %221, %241
%243 = tail call double @llvm.fabs.f64(double %242)
%244 = fcmp ogt double %243, %10
%245 = icmp ne i32 %201, %11
%246 = select i1 %244, i1 %245, i1 false
br i1 %246, label %151, label %247
247: ; preds = %239, %129
%248 = phi double [ %83, %129 ], [ %195, %239 ]
%249 = phi double [ %88, %129 ], [ %200, %239 ]
%250 = phi double [ %79, %129 ], [ %174, %239 ]
%251 = phi double [ %109, %129 ], [ %221, %239 ]
%252 = phi double [ %131, %129 ], [ %241, %239 ]
%253 = phi double [ %133, %129 ], [ %243, %239 ]
%254 = fsub double %252, %251
%255 = fmul double %250, %254
%256 = fdiv double %255, %248
%257 = fadd double %251, %256
store double %249, double* %1
store double %257, double* %0
ret double %253
}