user: What is the c source code of the assembly code below?

```asm
<reb_tools_M_to_E>:
  endbr64
  push   %r14
  push   %rbx
  sub    $0x38,%rsp
  movsd  D103(%rip),%xmm7
  movsd  %xmm0,(%rsp)
  comisd %xmm0,%xmm7
  movsd  %xmm1,0x8(%rsp)
  jbe    L35
  movapd %xmm0,%xmm6
  movsd  D34(%rip),%xmm0
  comisd %xmm6,%xmm0
  ja     L41
  movsd  D9(%rip),%xmm0
  movsd  D102(%rip),%xmm3
  movsd  D104(%rip),%xmm2
L88:
  mulsd  (%rsp),%xmm3
  movq   D42(%rip),%xmm4
  movapd %xmm2,%xmm1
  mov    $0x64,%ebx
  movsd  D13(%rip),%xmm7
  movaps %xmm4,0x20(%rsp)
  movq   %xmm7,%r14
  subsd  %xmm3,%xmm1
  subsd  0x8(%rsp),%xmm1
  jmp    L13
  nopw   0x0(%rax,%rax,1)
L36:
  sub    $0x1,%ebx
  je     L73
  movsd  %xmm2,0x18(%rsp)
  call   <cos@plt>
  movsd  0x18(%rsp),%xmm2
  movsd  0x10(%rsp),%xmm1
L13:
  mulsd  (%rsp),%xmm0
  movsd  D103(%rip),%xmm3
  subsd  %xmm0,%xmm3
  divsd  %xmm3,%xmm1
  subsd  %xmm1,%xmm2
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x10(%rsp)
  call   <sin@plt>
  mulsd  (%rsp),%xmm0
  movsd  0x10(%rsp),%xmm2
  movq   %r14,%xmm7
  movapd 0x20(%rsp),%xmm4
  movapd %xmm2,%xmm1
  subsd  %xmm0,%xmm1
  subsd  0x8(%rsp),%xmm1
  movapd %xmm2,%xmm0
  andpd  %xmm1,%xmm4
  movsd  %xmm1,0x10(%rsp)
  comisd %xmm4,%xmm7
  jbe    L36
L73:
  add    $0x38,%rsp
  pop    %rbx
  pop    %r14
  jmp    10f0 <mod2pi@plt>
  nopl   0x0(%rax,%rax,1)
L41:
  movapd %xmm1,%xmm0
  call   <sin@plt>
  movsd  %xmm0,0x10(%rsp)
  movsd  0x8(%rsp),%xmm0
  call   <cos@plt>
  movsd  0x8(%rsp),%xmm2
  movsd  0x10(%rsp),%xmm3
  jmp    L88
  nopl   0x0(%rax,%rax,1)
L35:
  movq   D42(%rip),%xmm7
  mov    $0x64,%ebx
  movapd %xmm7,%xmm5
  movaps %xmm7,0x20(%rsp)
  movsd  0x8(%rsp),%xmm7
  movapd %xmm7,%xmm0
  movapd %xmm7,%xmm4
  andpd  %xmm5,%xmm0
  divsd  %xmm0,%xmm4
  addsd  %xmm0,%xmm0
  divsd  (%rsp),%xmm0
  addsd  D98(%rip),%xmm0
  cvttsd2si %xmm0,%edi
  movsd  %xmm4,0x10(%rsp)
  call   <log@plt>
  movsd  0x10(%rsp),%xmm2
  mulsd  %xmm0,%xmm2
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x10(%rsp)
  call   <sinh@plt>
  mulsd  (%rsp),%xmm0
  movsd  0x10(%rsp),%xmm2
  movsd  D13(%rip),%xmm4
  movapd %xmm2,%xmm1
  movq   %xmm4,%r14
  subsd  %xmm0,%xmm1
  addsd  0x8(%rsp),%xmm1
  jmp    L43
  nopl   (%rax)
L11:
  sub    $0x1,%ebx
  je     L64
L43:
  movapd %xmm2,%xmm0
  movsd  %xmm1,0x18(%rsp)
  movsd  %xmm2,0x10(%rsp)
  call   <cosh@plt>
  mulsd  (%rsp),%xmm0
  movsd  D103(%rip),%xmm3
  movsd  0x18(%rsp),%xmm1
  movsd  0x10(%rsp),%xmm2
  subsd  %xmm0,%xmm3
  divsd  %xmm3,%xmm1
  subsd  %xmm1,%xmm2
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x10(%rsp)
  call   <sinh@plt>
  mulsd  (%rsp),%xmm0
  movsd  0x10(%rsp),%xmm2
  movq   %r14,%xmm5
  movapd 0x20(%rsp),%xmm6
  movapd %xmm2,%xmm1
  subsd  %xmm0,%xmm1
  addsd  0x8(%rsp),%xmm1
  andpd  %xmm1,%xmm6
  comisd %xmm6,%xmm5
  jbe    L11
L64:
  add    $0x38,%rsp
  movapd %xmm2,%xmm0
  pop    %rbx
  pop    %r14
  ret
```

tool_calls: name: parse_data
arguments: label: D103
type_infered: f64
name: parse_data
arguments: label: D34
type_infered: f64
name: parse_data
arguments: label: D9
type_infered: byte[8]
name: parse_data
arguments: label: D102
type_infered: byte[8]
name: parse_data
arguments: label: D104
type_infered: f64
name: parse_data
arguments: label: D42
type_infered: qword
name: parse_data
arguments: label: D13
type_infered: byte[8]
name: parse_data
arguments: label: D98
type_infered: f64

tool: D103: 1

tool: D34: 0.8

tool: {"D9": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xbf]}

tool: {"D102": [0x07,0x5c,0x14,0x33,0x26,0xa6,0xa1,0x3c]}

tool: D104: 3.141592653589793

tool: D42: 9223372036854775807

tool: {"D13": [0xbc,0x89,0xd8,0x97,0xb2,0xd2,0x9c,0x3c]}

tool: D98: 1.8

assistant: ```c
double reb_tools_M_to_E(double e, double M) {
  double E;
  if (e < 1.) {
    E = e < 0.8 ? M : 3.14159265358979323846;
    double F = E - e * sin(E) - M;
    for (int i = 0; i < 100; i++) {
      E = E - F / (1. - e * cos(E));
      F = E - e * sin(E) - M;
      if (fabs(F) < 1.e-16) {
        break;
      }
    }
    E = mod2pi(E);
    return E;
  } else {
    E = M / fabs(M) * log(2. * fabs(M) / e + 1.8);
    double F = E - e * sinh(E) + M;
    for (int i = 0; i < 100; i++) {
      E = E - F / (1.0 - e * cosh(E));
      F = E - e * sinh(E) + M;
      if (fabs(F) < 1.e-16) {
        break;
      }
    }
    return E;
  }
}
```