user: What would the C source look like for the assembly code provided here:

```asm
<cosh>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  movsd  %xmm0,-0x28(%rbp)
  lea    -0x28(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  mov    %eax,-0x18(%rbp)
  andl   $0x7fffffff,-0x18(%rbp)
  cmpl   $0x7fefffff,-0x18(%rbp)
  jle    L82
  movsd  -0x28(%rbp),%xmm1
  movsd  -0x28(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  jmp    L98
L82:
  cmpl   $0x3fd62e42,-0x18(%rbp)
  jg     L41
  movsd  -0x28(%rbp),%xmm0
  movq   D68(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <expm1@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm1
  movsd  D52(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  cmpl   $0x3c7fffff,-0x18(%rbp)
  jg     L137
  movsd  -0x10(%rbp),%xmm0
  jmp    L98
L137:
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  -0x10(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  divsd  %xmm0,%xmm1
  movsd  D52(%rip),%xmm0
  addsd  %xmm1,%xmm0
  jmp    L98
L41:
  cmpl   $0x4035ffff,-0x18(%rbp)
  jg     L76
  movsd  -0x28(%rbp),%xmm0
  movq   D68(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <exp@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm1
  movsd  D3(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D3(%rip),%xmm0
  divsd  -0x8(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  jmp    L98
L76:
  cmpl   $0x40862e41,-0x18(%rbp)
  jg     L30
  movsd  -0x28(%rbp),%xmm0
  movq   D68(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <exp@plt>
  movsd  D3(%rip),%xmm1
  mulsd  %xmm1,%xmm0
  jmp    L98
L30:
  movsd  -0x28(%rbp),%xmm0
  cvttsd2si %xmm0,%rax
  mov    %eax,-0x14(%rbp)
  cmpl   $0x408633cd,-0x18(%rbp)
  jle    L120
  cmpl   $0x408633ce,-0x18(%rbp)
  jne    L60
  cmpl   $0x8fb9f87d,-0x14(%rbp)
  ja     L60
L120:
  movsd  -0x28(%rbp),%xmm0
  movq   D68(%rip),%xmm1
  andpd  %xmm0,%xmm1
  movsd  D3(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <exp@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x10(%rbp)
  movsd  -0x10(%rbp),%xmm1
  movsd  D3(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  jmp    L98
L60:
  movsd  D95(%rip),%xmm0
  mulsd  %xmm0,%xmm0
L98:
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D68
type_guessed: qword
name: disassemble_data
arguments: data_tag: D52
type_guessed: f64
name: disassemble_data
arguments: data_tag: D3
type_guessed: f64
name: disassemble_data
arguments: data_tag: D95
type_guessed: f64

tool: D68: 9223372036854775807

tool: D52: 1

tool: D3: 0.5

tool: D95: 1e+300

assistant: ```c
double cosh(double x) {
  double t, w;
  int ix;
  unsigned lx;
  ix = *(1 + (const int *)&x);
  ix &= 0x7fffffff;
  if (ix >= 0x7ff00000) {
    return x * x;
  }
  if (ix < 0x3fd62e43) {
    t = expm1(fabs(x));
    w = 1.0 + t;
    if (ix < 0x3c800000) {
      return w;
    }
    return 1.0 + (t * t) / (w + w);
  }
  if (ix < 0x40360000) {
    t = exp(fabs(x));
    return 0.5 * t + 0.5 / t;
  }
  if (ix < 0x40862E42) {
    return 0.5 * exp(fabs(x));
  }
  lx = ((1 >> 29) + (unsigned int)x);
  if ((ix < 0x408633CE) || ((ix == 0x408633ce) && (lx <= (unsigned)0x8fb9f87d))) {
    w = exp(0.5 * fabs(x));
    t = 0.5 * w;
    return t * w;
  }
  return 1.0e300 * 1.0e300;
}
```