user: 请从给定的汇编指令推导出C源代码:

```asm
<xatan>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  movsd  %xmm0,-0x28(%rbp)
  movl   $0x0,-0x14(%rbp)
  pxor   %xmm0,%xmm0
  comisd -0x28(%rbp),%xmm0
  jbe    L11
  movsd  -0x28(%rbp),%xmm0
  movq   D128(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movl   $0x2,-0x14(%rbp)
L11:
  movsd  -0x28(%rbp),%xmm0
  movsd  D21(%rip),%xmm1
  comisd %xmm1,%xmm0
  jbe    L35
  movsd  D21(%rip),%xmm0
  divsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  orl    $0x1,-0x14(%rbp)
L35:
  movsd  -0x28(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  D191(%rip),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x10(%rbp),%xmm1
  movsd  D168(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movsd  D11(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x10(%rbp),%xmm1
  movsd  D148(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movsd  D170(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x10(%rbp),%xmm1
  movsd  D181(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movsd  D118(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x10(%rbp),%xmm1
  movsd  D238(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movsd  D104(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x10(%rbp),%xmm1
  movsd  D90(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movsd  D84(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x10(%rbp),%xmm1
  movsd  D82(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movsd  D206(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x10(%rbp),%xmm1
  movsd  D208(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movsd  D74(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x10(%rbp),%xmm1
  movsd  D136(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movsd  D13(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x10(%rbp),%xmm1
  movsd  D177(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movsd  D117(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x10(%rbp),%xmm0
  mulsd  -0x8(%rbp),%xmm0
  mulsd  -0x28(%rbp),%xmm0
  movsd  -0x28(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  mov    -0x14(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L25
  movsd  D44(%rip),%xmm0
  subsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
L25:
  mov    -0x14(%rbp),%eax
  and    $0x2,%eax
  test   %eax,%eax
  je     L10
  movsd  -0x10(%rbp),%xmm0
  movq   D128(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
L10:
  movsd  -0x10(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  pop    %rbp
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D128
datatype: byte[8]
name: parse_data
arguments: data_tag: D21
datatype: f64
name: parse_data
arguments: data_tag: D191
datatype: byte[8]
name: parse_data
arguments: data_tag: D168
datatype: f64
name: parse_data
arguments: data_tag: D11
datatype: f64
name: parse_data
arguments: data_tag: D148
datatype: f64
name: parse_data
arguments: data_tag: D170
datatype: f64
name: parse_data
arguments: data_tag: D181
datatype: f64
name: parse_data
arguments: data_tag: D118
datatype: f64
name: parse_data
arguments: data_tag: D238
datatype: f64
name: parse_data
arguments: data_tag: D104
datatype: f64
name: parse_data
arguments: data_tag: D90
datatype: f64
name: parse_data
arguments: data_tag: D84
datatype: f64
name: parse_data
arguments: data_tag: D82
datatype: f64
name: parse_data
arguments: data_tag: D206
datatype: f64
name: parse_data
arguments: data_tag: D208
datatype: f64
name: parse_data
arguments: data_tag: D74
datatype: f64
name: parse_data
arguments: data_tag: D136
datatype: f64
name: parse_data
arguments: data_tag: D13
datatype: f64
name: parse_data
arguments: data_tag: D177
datatype: f64
name: parse_data
arguments: data_tag: D117
datatype: f64
name: parse_data
arguments: data_tag: D44
datatype: f64

tool: {"D128": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80]}

tool: D21: 1

tool: {"D191": [0x5f,0x55,0x88,0x4a,0xf4,0xcb,0xf3,0xbe]}

tool: D168: 0.00020985007664581698

tool: D11: 0.0011061183148667248

tool: D148: 0.003700267441887131

tool: D170: 0.008898961958876555

tool: D181: 0.016599329773529202

tool: D118: 0.025451762493231264

tool: D238: 0.03378525800013531

tool: D104: 0.04076291912768365

tool: D90: 0.04666671500778406

tool: D84: 0.052367485230348246

tool: D82: 0.05876663929266736

tool: D206: 0.06665735793610805

tool: D208: 0.07692195383117696

tool: D74: 0.09090899500824501

tool: D136: 0.11111110564826142

tool: D13: 0.1428571426677133

tool: D177: 0.19999999999659127

tool: D117: 0.3333333333333111

tool: D44: 1.5707963267948966

assistant: ```c
double xatan(double s) {
  double t, u;
  int q = 0;
  if (s < 0) {
    s = -s;
    q = 2;
  }
  if (s > 1) {
    s = 1.0 / s;
    q |= 1;
  }
  t = s * s;
  u = -1.88796008463073496563746e-05;
  u = u * t + (0.000209850076645816976906797);
  u = u * t + (-0.00110611831486672482563471);
  u = u * t + (0.00370026744188713119232403);
  u = u * t + (-0.00889896195887655491740809);
  u = u * t + (0.016599329773529201970117);
  u = u * t + (-0.0254517624932312641616861);
  u = u * t + (0.0337852580001353069993897);
  u = u * t + (-0.0407629191276836500001934);
  u = u * t + (0.0466667150077840625632675);
  u = u * t + (-0.0523674852303482457616113);
  u = u * t + (0.0587666392926673580854313);
  u = u * t + (-0.0666573579361080525984562);
  u = u * t + (0.0769219538311769618355029);
  u = u * t + (-0.090908995008245008229153);
  u = u * t + (0.111111105648261418443745);
  u = u * t + (-0.14285714266771329383765);
  u = u * t + (0.199999999996591265594148);
  u = u * t + (-0.333333333333311110369124);
  t = s + s * (t * u);
  if ((q & 1) != 0)
    t = 1.570796326794896557998982 - t;
  if ((q & 2) != 0)
    t = -t;
  return t;
}
```