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

```asm
<xcbrt>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  movsd  %xmm0,-0x28(%rbp)
  movsd  D97(%rip),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    -0x28(%rbp),%rax
  movq   %rax,%xmm0
  call   <ilogbp1@plt>
  mov    %eax,-0x20(%rbp)
  mov    -0x20(%rbp),%eax
  neg    %eax
  mov    %eax,%edx
  mov    -0x28(%rbp),%rax
  mov    %edx,%edi
  movq   %rax,%xmm0
  call   <ldexpk@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x20(%rbp),%eax
  add    $0x1800,%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  mov    %eax,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%edx
  mov    %edx,-0x1c(%rbp)
  mov    -0x1c(%rbp),%ecx
  mov    %ecx,%edx
  add    %edx,%edx
  add    %ecx,%edx
  sub    %edx,%eax
  mov    %eax,-0x1c(%rbp)
  cmpl   $0x1,-0x1c(%rbp)
  je     L24
  movsd  -0x18(%rbp),%xmm0
  jmp    L23
L24:
  movsd  D20(%rip),%xmm0
L23:
  movsd  %xmm0,-0x18(%rbp)
  cmpl   $0x2,-0x1c(%rbp)
  je     L28
  movsd  -0x18(%rbp),%xmm0
  jmp    L14
L28:
  movsd  D117(%rip),%xmm0
L14:
  movsd  %xmm0,-0x18(%rbp)
  mov    -0x20(%rbp),%eax
  add    $0x1800,%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  lea    -0x800(%rax),%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,%edi
  movq   %rax,%xmm0
  call   <ldexpk@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x18(%rbp)
  movsd  -0x28(%rbp),%xmm0
  mov    -0x18(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <mulsign@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x28(%rbp),%rax
  movq   %rax,%xmm0
  call   <xfabs@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x28(%rbp)
  movsd  D77(%rip),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x28(%rbp),%xmm1
  movsd  D21(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x10(%rbp),%xmm0
  mulsd  -0x28(%rbp),%xmm0
  movsd  D103(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x28(%rbp),%xmm1
  movsd  D18(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x10(%rbp),%xmm0
  mulsd  -0x28(%rbp),%xmm0
  movsd  D72(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x28(%rbp),%xmm1
  movsd  D104(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x10(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x28(%rbp),%xmm0
  mulsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x10(%rbp),%xmm1
  movsd  D48(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x10(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x28(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movsd  -0x10(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm1
  movsd  D73(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x8(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movsd  D97(%rip),%xmm2
  subsd  %xmm2,%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x8(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  -0x18(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: read_data
arguments: label: D97
type_guessed: f64
name: read_data
arguments: label: D20
type_guessed: f64
name: read_data
arguments: label: D117
type_guessed: f64
name: read_data
arguments: label: D77
type_guessed: byte[8]
name: read_data
arguments: label: D21
type_guessed: f64
name: read_data
arguments: label: D103
type_guessed: f64
name: read_data
arguments: label: D18
type_guessed: f64
name: read_data
arguments: label: D72
type_guessed: f64
name: read_data
arguments: label: D104
type_guessed: f64
name: read_data
arguments: label: D48
type_guessed: byte[8]
name: read_data
arguments: label: D73
type_guessed: byte[8]

tool: D97: 1

tool: D20: 1.2599210498948732

tool: D117: 1.5874010519681996

tool: {"D77": [0x42,0xed,0x6b,0xf7,0xe4,0x7c,0xe4,0xbf]}

tool: D21: 2.961551030200395

tool: D103: 5.733530609229478

tool: D18: 6.0399036898945875

tool: D72: 3.85841935510445

tool: D104: 2.230727530249661

tool: {"D48": [0x55,0x55,0x55,0x55,0x55,0x55,0xd5,0x3f]}

tool: {"D73": [0x55,0x55,0x55,0x55,0x55,0x55,0xe5,0x3f]}

assistant: ```c
double xcbrt(double d) {
  double x, y, q = 1.0;
  int e, r;
  e = ilogbp1(d);
  d = ldexpk(d, -e);
  r = (e + 6144) % 3;
  q = (r == 1) ? 1.2599210498948731647672106 : q;
  q = (r == 2) ? 1.5874010519681994747517056 : q;
  q = ldexpk(q, (e + 6144) / 3 - 2048);
  q = mulsign(q, d);
  d = xfabs(d);
  x = -0.640245898480692909870982;
  x = x * d + 2.96155103020039511818595;
  x = x * d + -5.73353060922947843636166;
  x = x * d + 6.03990368989458747961407;
  x = x * d + -3.85841935510444988821632;
  x = x * d + 2.2307275302496609725722;
  y = x * x;
  y = y * y;
  x -= (d * y - x) * (1.0 / 3.0);
  y = d * x * x;
  y = (y - (2.0 / 3.0) * y * (y * x - 1)) * q;
  return y;
}
```