user: Please show me the C implementation that matches the assembly code listed below:

```asm
<xcbrt>:
  endbr64
  push   %rbx
  sub    $0x20,%rsp
  movsd  %xmm0,0x8(%rsp)
  call   <ilogbp1@plt>
  movsd  0x8(%rsp),%xmm0
  mov    %eax,%edi
  mov    %eax,%ebx
  neg    %edi
  call   <ldexpk@plt>
  lea    0x1800(%rbx),%eax
  movslq %eax,%rdx
  mov    %eax,%esi
  movapd %xmm0,%xmm1
  imul   $0x55555556,%rdx,%rcx
  sar    $0x1f,%esi
  shr    $0x20,%rcx
  sub    %esi,%ecx
  lea    (%rcx,%rcx,2),%esi
  mov    %eax,%ecx
  sub    %esi,%ecx
  cmp    $0x1,%ecx
  je     L29
  cmp    $0x2,%ecx
  jne    L19
  movsd  D103(%rip),%xmm0
  movsd  D63(%rip),%xmm2
L36:
  imul   $0x55555556,%rdx,%rdi
  sar    $0x1f,%eax
  movsd  %xmm2,0x18(%rsp)
  movsd  %xmm1,0x8(%rsp)
  shr    $0x20,%rdi
  sub    %eax,%edi
  sub    $0x800,%edi
  call   <ldexpk@plt>
  movsd  0x8(%rsp),%xmm1
  movsd  %xmm1,0x10(%rsp)
  call   <mulsign@plt>
  movsd  0x10(%rsp),%xmm1
  movsd  %xmm0,0x8(%rsp)
  movapd %xmm1,%xmm0
  call   <xfabs@plt>
  movsd  D83(%rip),%xmm1
  movsd  0x18(%rsp),%xmm2
  mulsd  %xmm0,%xmm1
  addsd  D69(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  subsd  D121(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  addsd  D67(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  subsd  D61(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  addsd  D2(%rip),%xmm1
  movapd %xmm1,%xmm3
  mulsd  %xmm1,%xmm3
  mulsd  %xmm3,%xmm3
  mulsd  %xmm0,%xmm3
  subsd  %xmm1,%xmm3
  mulsd  D71(%rip),%xmm3
  subsd  %xmm3,%xmm1
  mulsd  %xmm1,%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D124(%rip),%xmm2
  mulsd  %xmm0,%xmm2
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  mulsd  0x8(%rsp),%xmm0
  add    $0x20,%rsp
  pop    %rbx
  ret
  nopl   0x0(%rax)
L19:
  movsd  D63(%rip),%xmm2
  movapd %xmm2,%xmm0
  jmp    L36
  nopl   0x0(%rax)
L29:
  movsd  D39(%rip),%xmm0
  movsd  D63(%rip),%xmm2
  jmp    L36
```

tool_calls: name: read_data
arguments: label: D103
datatype: f64
name: read_data
arguments: label: D63
datatype: f64
name: read_data
arguments: label: D83
datatype: byte[8]
name: read_data
arguments: label: D69
datatype: f64
name: read_data
arguments: label: D121
datatype: f64
name: read_data
arguments: label: D67
datatype: f64
name: read_data
arguments: label: D61
datatype: f64
name: read_data
arguments: label: D2
datatype: f64
name: read_data
arguments: label: D71
datatype: byte[8]
name: read_data
arguments: label: D124
datatype: byte[8]
name: read_data
arguments: label: D39
datatype: f64

tool: D103: 1.5874010519681996

tool: D63: 1

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

tool: D69: 2.961551030200395

tool: D121: 5.733530609229478

tool: D67: 6.0399036898945875

tool: D61: 3.85841935510445

tool: D2: 2.230727530249661

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

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

tool: D39: 1.2599210498948732

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;
}
```