user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<xcbrt>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  movq   %xmm0,%rbp
  call   <ilogbp1@plt>
  mov    %eax,%ebx
  mov    %eax,%edi
  neg    %edi
  movq   %rbp,%xmm0
  call   <ldexpk@plt>
  movq   %xmm0,%rbp
  lea    0x1800(%rbx),%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  mov    %eax,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%edx
  lea    (%rdx,%rdx,2),%ecx
  mov    %eax,%edx
  sub    %ecx,%edx
  movsd  D100(%rip),%xmm0
  cmp    $0x1,%edx
  je     L10
  movsd  D11(%rip),%xmm0
  cmp    $0x2,%edx
  jne    L10
  movsd  D16(%rip),%xmm0
L10:
  movslq %eax,%rdi
  imul   $0x55555556,%rdi,%rdi
  shr    $0x20,%rdi
  sar    $0x1f,%eax
  sub    %eax,%edi
  sub    $0x800,%edi
  call   <ldexpk@plt>
  movq   %rbp,%xmm1
  call   <mulsign@plt>
  movq   %xmm0,%rbx
  movq   %rbp,%xmm0
  call   <xfabs@plt>
  movapd %xmm0,%xmm1
  mulsd  D98(%rip),%xmm1
  addsd  D93(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  subsd  D77(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  addsd  D71(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  subsd  D106(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  addsd  D13(%rip),%xmm1
  movapd %xmm1,%xmm2
  mulsd  %xmm1,%xmm2
  mulsd  %xmm2,%xmm2
  mulsd  %xmm0,%xmm2
  subsd  %xmm1,%xmm2
  mulsd  D38(%rip),%xmm2
  subsd  %xmm2,%xmm1
  mulsd  %xmm1,%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  %xmm0,%xmm1
  subsd  D11(%rip),%xmm1
  movapd %xmm0,%xmm2
  mulsd  D80(%rip),%xmm2
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  movq   %rbx,%xmm3
  mulsd  %xmm3,%xmm0
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D100
data_type: f64
name: parse_data
arguments: data_tag: D11
data_type: f64
name: parse_data
arguments: data_tag: D16
data_type: f64
name: parse_data
arguments: data_tag: D98
data_type: byte[8]
name: parse_data
arguments: data_tag: D93
data_type: f64
name: parse_data
arguments: data_tag: D77
data_type: f64
name: parse_data
arguments: data_tag: D71
data_type: f64
name: parse_data
arguments: data_tag: D106
data_type: f64
name: parse_data
arguments: data_tag: D13
data_type: f64
name: parse_data
arguments: data_tag: D38
data_type: byte[8]
name: parse_data
arguments: data_tag: D80
data_type: byte[8]

tool: D100: 1.2599210498948732

tool: D11: 1

tool: D16: 1.5874010519681996

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

tool: D93: 2.961551030200395

tool: D77: 5.733530609229478

tool: D71: 6.0399036898945875

tool: D106: 3.85841935510445

tool: D13: 2.230727530249661

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

tool: {"D80": [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;
}
```