user: 请将以下的汇编代码转换成C语言代码:

```asm
<testAllValues>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  movsd  %xmm0,-0x48(%rbp)
  movsd  %xmm1,-0x50(%rbp)
  mov    -0x48(%rbp),%rax
  movq   %rax,%xmm0
  call   <era_sinh@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x48(%rbp),%rax
  movq   %rax,%xmm0
  call   <sinh@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movq   $0x0,-0x18(%rbp)
  jmp    L23
L12:
  mov    -0x48(%rbp),%rax
  movq   %rax,%xmm0
  call   <era_sinh@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x48(%rbp),%rax
  movq   %rax,%xmm0
  call   <sinh@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  cmpq   $0xf4240,-0x18(%rbp)
  jne    L38
  movq   $0x0,-0x18(%rbp)
  mov    -0x48(%rbp),%rax
  movq   %rax,%xmm0
  lea    D4(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
L38:
  pxor   %xmm0,%xmm0
  ucomisd -0x8(%rbp),%xmm0
  jp     L10
  pxor   %xmm0,%xmm0
  ucomisd -0x8(%rbp),%xmm0
  je     L31
L10:
  movsd  -0x10(%rbp),%xmm0
  subsd  -0x8(%rbp),%xmm0
  movq   D43(%rip),%xmm1
  andpd  %xmm1,%xmm0
  divsd  -0x8(%rbp),%xmm0
  comisd -0x20(%rbp),%xmm0
  jbe    L31
  movsd  -0x10(%rbp),%xmm0
  subsd  -0x8(%rbp),%xmm0
  movq   D43(%rip),%xmm1
  andpd  %xmm1,%xmm0
  divsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
L31:
  addq   $0x1,-0x18(%rbp)
  movsd  -0x50(%rbp),%xmm0
  mov    -0x48(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <nextafter@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x48(%rbp)
L23:
  movsd  -0x48(%rbp),%xmm0
  ucomisd -0x50(%rbp),%xmm0
  jp     L12
  movsd  -0x48(%rbp),%xmm0
  ucomisd -0x50(%rbp),%xmm0
  jne    L12
  movsd  -0x20(%rbp),%xmm1
  movsd  D19(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movsd  -0x30(%rbp),%xmm2
  movsd  -0x38(%rbp),%xmm1
  movsd  -0x28(%rbp),%xmm0
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D37(%rip),%rax
  mov    %rax,%rdi
  mov    $0x4,%eax
  call   <printf@plt>
  nop
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D4
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D43
type_guessed: qword
name: extract_symbolic_data
arguments: data_label: D19
type_guessed: f32[2]
name: extract_symbolic_data
arguments: data_label: D37
type_guessed: string

tool: D4: I'm at input value %.17g


tool: D43: 9223372036854775807

tool: {"D19": [0.0,3.390625]}

tool: D37: The worst relative error was found to be %.17g%% for input %.17g. Our function returned %.17g, the C function returned %.17g.


assistant: ```c
void testAllValues(double from, double to) {
  double sinhera = era_sinh(from), sinhc = sinh(from);
  double worstera = 0, worstc = 0, worstInput = 0;
  double worstDeviation = 0;
  long long counter = 0;
  while (from != to) {
    sinhera = era_sinh(from);
    sinhc = sinh(from);
    if (counter == 1000000) {
      counter = 0;
      printf("I'm at input value %.17g\n", from);
    }
    if (sinhc != 0 && fabs(sinhera - sinhc) / sinhc > worstDeviation) {
      worstDeviation = fabs(sinhera - sinhc) / sinhc;
      worstera = sinhera;
      worstc = sinhc;
      worstInput = from;
    }
    counter = counter + 1;
    from = nextafter(from, to);
  }
  printf("The worst relative error was found to be %.17g%% for input %.17g. Our function returned %.17g, the C function returned %.17g.\n", worstDeviation * 100, worstInput, worstera, worstc);
}
```