user: Demonstrate the C code that generates the assembly output below:

```asm
<Riemann_solver_exact>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x110,%rsp
  mov    %rdi,-0xa8(%rbp)
  mov    %rsi,-0xb0(%rbp)
  movsd  %xmm0,-0xb8(%rbp)
  movsd  %xmm1,-0xc0(%rbp)
  movsd  %xmm2,-0xc8(%rbp)
  movsd  %xmm3,-0xd0(%rbp)
  movsd  %xmm4,-0xd8(%rbp)
  movsd  %xmm5,-0xe0(%rbp)
  movsd  %xmm6,-0xe8(%rbp)
  mov    %rdx,-0xf0(%rbp)
  movsd  %xmm7,-0xf8(%rbp)
  mov    %ecx,-0xfc(%rbp)
  movsd  D309(%rip),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movl   $0x0,-0x94(%rbp)
  movsd  -0xb8(%rbp),%xmm0
  movsd  D350(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  -0xb8(%rbp),%xmm0
  movapd %xmm0,%xmm2
  addsd  %xmm0,%xmm2
  divsd  %xmm2,%xmm1
  movapd %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0xb8(%rbp),%xmm1
  movsd  D350(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0xb8(%rbp),%xmm0
  movapd %xmm0,%xmm2
  addsd  %xmm0,%xmm2
  divsd  %xmm2,%xmm1
  movapd %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0xb8(%rbp),%xmm0
  movsd  D350(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  -0xb8(%rbp),%xmm2
  movsd  D350(%rip),%xmm1
  addsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  -0xd8(%rbp),%xmm0
  comisd -0xd0(%rbp),%xmm0
  jbe    L215
  movsd  -0xd8(%rbp),%xmm0
  subsd  -0xd0(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x40(%rbp),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  movapd %xmm0,%xmm1
  divsd  -0xd0(%rbp),%xmm1
  movsd  D350(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x90(%rbp)
  movsd  -0x30(%rbp),%xmm0
  mulsd  -0xe0(%rbp),%xmm0
  divsd  -0xb8(%rbp),%xmm0
  divsd  -0xd0(%rbp),%xmm0
  divsd  -0x90(%rbp),%xmm0
  movsd  %xmm0,-0x90(%rbp)
  movsd  -0xc0(%rbp),%xmm0
  subsd  -0x90(%rbp),%xmm0
  movsd  %xmm0,-0x90(%rbp)
  jmp    L103
L215:
  movsd  -0xd8(%rbp),%xmm0
  divsd  -0xd0(%rbp),%xmm0
  movq   %xmm0,%rax
  movsd  -0x48(%rbp),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movq   %xmm0,%rax
  movsd  D350(%rip),%xmm1
  movq   %rax,%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x90(%rbp)
  movsd  -0xe0(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  mulsd  -0x90(%rbp),%xmm0
  movsd  -0xb8(%rbp),%xmm1
  movsd  D350(%rip),%xmm2
  subsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x90(%rbp)
  movsd  -0xc0(%rbp),%xmm0
  subsd  -0x90(%rbp),%xmm0
  movsd  %xmm0,-0x90(%rbp)
L103:
  movsd  -0xd0(%rbp),%xmm0
  comisd -0xd8(%rbp),%xmm0
  jbe    L220
  movsd  -0xd0(%rbp),%xmm0
  subsd  -0xd8(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x40(%rbp),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  movapd %xmm0,%xmm1
  divsd  -0xd8(%rbp),%xmm1
  movsd  D350(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x88(%rbp)
  movsd  -0x30(%rbp),%xmm0
  mulsd  -0xe8(%rbp),%xmm0
  divsd  -0xb8(%rbp),%xmm0
  divsd  -0xd8(%rbp),%xmm0
  divsd  -0x88(%rbp),%xmm0
  movsd  %xmm0,-0x88(%rbp)
  movsd  -0x88(%rbp),%xmm0
  addsd  -0xc8(%rbp),%xmm0
  movsd  %xmm0,-0x88(%rbp)
  jmp    L67
L220:
  movsd  -0xd0(%rbp),%xmm0
  divsd  -0xd8(%rbp),%xmm0
  movq   %xmm0,%rax
  movsd  -0x48(%rbp),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movq   %xmm0,%rax
  movsd  D350(%rip),%xmm1
  movq   %rax,%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x88(%rbp)
  movsd  -0xe8(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  mulsd  -0x88(%rbp),%xmm0
  movsd  -0xb8(%rbp),%xmm1
  movsd  D350(%rip),%xmm2
  subsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x88(%rbp)
  movsd  -0x88(%rbp),%xmm0
  addsd  -0xc8(%rbp),%xmm0
  movsd  %xmm0,-0x88(%rbp)
L67:
  movsd  -0xc8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  -0xf8(%rbp),%xmm1
  movsd  -0x90(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jbe    L135
  mov    -0xf0(%rbp),%rax
  add    $0x4,%rax
  movl   $0x0,(%rax)
  jmp    L54
L135:
  mov    -0xf0(%rbp),%rax
  add    $0x4,%rax
  movl   $0x1,(%rax)
L54:
  movsd  -0xc0(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0xf8(%rbp),%xmm1
  movsd  -0x88(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jbe    L70
  mov    -0xf0(%rbp),%rax
  movl   $0x1,(%rax)
  jmp    L272
L70:
  mov    -0xf0(%rbp),%rax
  movl   $0x0,(%rax)
L272:
  movsd  -0xe0(%rbp),%xmm0
  movq   D36(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  divsd  -0xd0(%rbp),%xmm0
  divsd  -0xb8(%rbp),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0xe8(%rbp),%xmm0
  divsd  -0xd8(%rbp),%xmm0
  divsd  -0xb8(%rbp),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0x80(%rbp),%xmm0
  mulsd  -0xd0(%rbp),%xmm0
  movsd  -0x78(%rbp),%xmm1
  mulsd  -0xd8(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  subsd  -0xc0(%rbp),%xmm0
  addsd  -0xc8(%rbp),%xmm0
  movsd  -0x80(%rbp),%xmm1
  subsd  -0x78(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x70(%rbp)
  pxor   %xmm0,%xmm0
  comisd -0x70(%rbp),%xmm0
  jbe    L124
  movsd  -0xd8(%rbp),%xmm0
  comisd -0xd0(%rbp),%xmm0
  jbe    L256
  movsd  -0xd0(%rbp),%xmm0
  jmp    L228
L256:
  movsd  -0xd8(%rbp),%xmm0
L228:
  movsd  %xmm0,-0x70(%rbp)
L124:
  movsd  -0x70(%rbp),%xmm1
  movsd  D174(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  -0x70(%rbp),%xmm0
  comisd -0xd0(%rbp),%xmm0
  jbe    L191
  movsd  -0x70(%rbp),%xmm0
  subsd  -0xd0(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x40(%rbp),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  movapd %xmm0,%xmm1
  divsd  -0xd0(%rbp),%xmm1
  movsd  D350(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x68(%rbp)
  movsd  -0x30(%rbp),%xmm0
  mulsd  -0xe0(%rbp),%xmm0
  divsd  -0xb8(%rbp),%xmm0
  divsd  -0xd0(%rbp),%xmm0
  divsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0xc0(%rbp),%xmm0
  subsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  jmp    L102
L191:
  movsd  -0x70(%rbp),%xmm0
  divsd  -0xd0(%rbp),%xmm0
  movq   %xmm0,%rax
  movsd  -0x48(%rbp),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movq   %xmm0,%rax
  movsd  D350(%rip),%xmm1
  movq   %rax,%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0xe0(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  mulsd  -0x68(%rbp),%xmm0
  movsd  -0xb8(%rbp),%xmm1
  movsd  D350(%rip),%xmm2
  subsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0xc0(%rbp),%xmm0
  subsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,-0x68(%rbp)
L102:
  movsd  -0x70(%rbp),%xmm0
  comisd -0xd8(%rbp),%xmm0
  jbe    L145
  movsd  -0x70(%rbp),%xmm0
  subsd  -0xd8(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x40(%rbp),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  movapd %xmm0,%xmm1
  divsd  -0xd8(%rbp),%xmm1
  movsd  D350(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x60(%rbp)
  movsd  -0x30(%rbp),%xmm0
  mulsd  -0xe8(%rbp),%xmm0
  divsd  -0xb8(%rbp),%xmm0
  divsd  -0xd8(%rbp),%xmm0
  divsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x60(%rbp),%xmm0
  addsd  -0xc8(%rbp),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  jmp    L274
L145:
  movsd  -0x70(%rbp),%xmm0
  divsd  -0xd8(%rbp),%xmm0
  movq   %xmm0,%rax
  movsd  -0x48(%rbp),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x50(%rbp)
  movsd  -0x70(%rbp),%xmm0
  divsd  -0xd8(%rbp),%xmm0
  movq   %xmm0,%rax
  movsd  -0x48(%rbp),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movq   %xmm0,%rax
  movsd  D350(%rip),%xmm1
  movq   %rax,%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0xe8(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  mulsd  -0x60(%rbp),%xmm0
  movsd  -0xb8(%rbp),%xmm1
  movsd  D350(%rip),%xmm2
  subsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x60(%rbp),%xmm0
  addsd  -0xc8(%rbp),%xmm0
  movsd  %xmm0,-0x60(%rbp)
L274:
  movsd  -0x68(%rbp),%xmm0
  subsd  -0x60(%rbp),%xmm0
  movq   D373(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x58(%rbp)
  jmp    L230
L58:
  movsd  -0x70(%rbp),%xmm0
  comisd -0xd0(%rbp),%xmm0
  jbe    L52
  movsd  -0x70(%rbp),%xmm0
  subsd  -0xd0(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x40(%rbp),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  movapd %xmm0,%xmm1
  divsd  -0xd0(%rbp),%xmm1
  movsd  D350(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movapd %xmm0,%xmm1
  movsd  D350(%rip),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0xe0(%rbp),%xmm0
  divsd  -0xb8(%rbp),%xmm0
  divsd  -0xd0(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x28(%rbp),%xmm1
  movsd  D174(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  -0x40(%rbp),%xmm0
  divsd  -0xd0(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x18(%rbp),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x108(%rbp)
  movsd  D208(%rip),%xmm0
  mov    -0x20(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  mulsd  -0x108(%rbp),%xmm0
  movsd  -0x28(%rbp),%xmm1
  mulsd  -0x20(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x80(%rbp)
  jmp    L56
L52:
  movsd  -0xe0(%rbp),%xmm0
  divsd  -0xb8(%rbp),%xmm0
  divsd  -0xd0(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x70(%rbp),%xmm0
  divsd  -0xd0(%rbp),%xmm0
  movq   %xmm0,%rax
  movsd  -0x40(%rbp),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movapd %xmm0,%xmm1
  movsd  D350(%rip),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x20(%rbp),%xmm0
  movq   D36(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  -0x28(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x80(%rbp)
L56:
  movsd  -0x70(%rbp),%xmm0
  comisd -0xd8(%rbp),%xmm0
  jbe    L1
  movsd  -0x70(%rbp),%xmm0
  subsd  -0xd8(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x40(%rbp),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  movapd %xmm0,%xmm1
  divsd  -0xd8(%rbp),%xmm1
  movsd  D350(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movapd %xmm0,%xmm1
  movsd  D350(%rip),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0xe8(%rbp),%xmm0
  divsd  -0xb8(%rbp),%xmm0
  divsd  -0xd8(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x28(%rbp),%xmm1
  movsd  D174(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  -0x40(%rbp),%xmm0
  divsd  -0xd8(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x28(%rbp),%xmm0
  mulsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x108(%rbp)
  movsd  -0x18(%rbp),%xmm0
  movapd %xmm0,%xmm3
  mulsd  -0x30(%rbp),%xmm3
  movsd  %xmm3,-0x110(%rbp)
  movsd  D208(%rip),%xmm0
  mov    -0x20(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movsd  -0x110(%rbp),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  -0x108(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x78(%rbp)
  jmp    L113
L1:
  movsd  -0xe8(%rbp),%xmm0
  divsd  -0xb8(%rbp),%xmm0
  divsd  -0xd8(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x70(%rbp),%xmm0
  divsd  -0xd8(%rbp),%xmm0
  movq   %xmm0,%rax
  movsd  -0x40(%rbp),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movapd %xmm0,%xmm1
  movsd  D350(%rip),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x20(%rbp),%xmm0
  mulsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x78(%rbp)
L113:
  movsd  -0x60(%rbp),%xmm0
  subsd  -0x68(%rbp),%xmm0
  movsd  -0x80(%rbp),%xmm1
  subsd  -0x78(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  movsd  -0x70(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  pxor   %xmm0,%xmm0
  comisd -0x10(%rbp),%xmm0
  jbe    L200
  movsd  -0x70(%rbp),%xmm1
  movsd  D174(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x70(%rbp)
  jmp    L245
L200:
  movsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x70(%rbp)
L245:
  addl   $0x1,-0x94(%rbp)
  movsd  -0x70(%rbp),%xmm0
  comisd -0xd0(%rbp),%xmm0
  jbe    L59
  movsd  -0x70(%rbp),%xmm0
  subsd  -0xd0(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x40(%rbp),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  movapd %xmm0,%xmm1
  divsd  -0xd0(%rbp),%xmm1
  movsd  D350(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x68(%rbp)
  movsd  -0x30(%rbp),%xmm0
  mulsd  -0xe0(%rbp),%xmm0
  divsd  -0xb8(%rbp),%xmm0
  divsd  -0xd0(%rbp),%xmm0
  divsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0xc0(%rbp),%xmm0
  subsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  jmp    L81
L59:
  movsd  -0x70(%rbp),%xmm0
  divsd  -0xd0(%rbp),%xmm0
  movq   %xmm0,%rax
  movsd  -0x48(%rbp),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movq   %xmm0,%rax
  movsd  D350(%rip),%xmm1
  movq   %rax,%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0xe0(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  mulsd  -0x68(%rbp),%xmm0
  movsd  -0xb8(%rbp),%xmm1
  movsd  D350(%rip),%xmm2
  subsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0xc0(%rbp),%xmm0
  subsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,-0x68(%rbp)
L81:
  movsd  -0x70(%rbp),%xmm0
  comisd -0xd8(%rbp),%xmm0
  jbe    L177
  movsd  -0x70(%rbp),%xmm0
  subsd  -0xd8(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x40(%rbp),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  movapd %xmm0,%xmm1
  divsd  -0xd8(%rbp),%xmm1
  movsd  D350(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x60(%rbp)
  movsd  -0x30(%rbp),%xmm0
  mulsd  -0xe8(%rbp),%xmm0
  divsd  -0xb8(%rbp),%xmm0
  divsd  -0xd8(%rbp),%xmm0
  divsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x60(%rbp),%xmm0
  addsd  -0xc8(%rbp),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  jmp    L231
L177:
  movsd  -0x70(%rbp),%xmm0
  divsd  -0xd8(%rbp),%xmm0
  movq   %xmm0,%rax
  movsd  -0x48(%rbp),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movq   %xmm0,%rax
  movsd  D350(%rip),%xmm1
  movq   %rax,%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0xe8(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  mulsd  -0x60(%rbp),%xmm0
  movsd  -0xb8(%rbp),%xmm1
  movsd  D350(%rip),%xmm2
  subsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x60(%rbp),%xmm0
  addsd  -0xc8(%rbp),%xmm0
  movsd  %xmm0,-0x60(%rbp)
L231:
  movsd  -0x68(%rbp),%xmm0
  subsd  -0x60(%rbp),%xmm0
  movq   D373(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x58(%rbp)
L230:
  movsd  -0x58(%rbp),%xmm0
  comisd -0xf8(%rbp),%xmm0
  jbe    L279
  mov    -0x94(%rbp),%eax
  cmp    -0xfc(%rbp),%eax
  jne    L58
L279:
  movsd  -0x60(%rbp),%xmm0
  subsd  -0x68(%rbp),%xmm0
  mulsd  -0x80(%rbp),%xmm0
  movsd  -0x80(%rbp),%xmm1
  subsd  -0x78(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  movsd  -0x68(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0xb0(%rbp),%rax
  movsd  -0x70(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xa8(%rbp),%rax
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x58(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D309
type_infered: f64
name: extract_symbolic_data
arguments: label: D350
type_infered: f64
name: extract_symbolic_data
arguments: label: D36
type_infered: f32[2]
name: extract_symbolic_data
arguments: label: D174
type_infered: f64
name: extract_symbolic_data
arguments: label: D373
type_infered: qword
name: extract_symbolic_data
arguments: label: D208
type_infered: f64

tool: D309: 2

tool: D350: 1

tool: {"D36": [0.0,-0.0]}

tool: D174: 0.5

tool: D373: 9223372036854775807

tool: D208: 3

assistant: ```c
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;
}
```