user: 下面的汇编指令对应的C源代码是什么：

```asm
<sin>:
  endbr64
  pxor   %xmm1,%xmm1
  sub    $0x18,%rsp
  xor    %eax,%eax
  comisd %xmm0,%xmm1
  jbe    L2
  xorpd  D24(%rip),%xmm0
  mov    $0x2,%eax
L2:
  mulsd  D80(%rip),%xmm0
  movsd  D1(%rip),%xmm2
  comisd %xmm2,%xmm0
  jbe    L32
  movsd  D43(%rip),%xmm1
  movsd  D102(%rip),%xmm4
  movsd  D86(%rip),%xmm5
  mulsd  %xmm0,%xmm1
  movapd %xmm1,%xmm3
  andpd  %xmm4,%xmm3
  ucomisd %xmm3,%xmm5
  ja     L64
L29:
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
L32:
  movsd  D103(%rip),%xmm1
  comisd %xmm1,%xmm0
  jbe    L37
  mov    $0x2,%edx
  subsd  %xmm1,%xmm0
  sub    %eax,%edx
  mov    %edx,%eax
L37:
  cvttsd2si %xmm0,%edx
  pxor   %xmm2,%xmm2
  movapd %xmm0,%xmm1
  add    %edx,%eax
  cvtsi2sd %edx,%xmm2
  cltd
  shr    $0x1e,%edx
  add    %edx,%eax
  and    $0x3,%eax
  subsd  %xmm2,%xmm1
  sub    %edx,%eax
  test   $0x1,%al
  je     L33
  movsd  D29(%rip),%xmm0
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
L33:
  test   $0x2,%al
  je     L55
  xorpd  D24(%rip),%xmm1
L55:
  movapd %xmm1,%xmm2
  mov    $0x4,%esi
  mov    $0x1,%eax
  movsd  %xmm1,(%rsp)
  mulsd  %xmm1,%xmm2
  lea    D65(%rip),%rdi
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x8(%rsp)
  call   <eval_poly@plt>
  movsd  (%rsp),%xmm1
  movsd  0x8(%rsp),%xmm2
  mov    $0x4,%esi
  lea    D95(%rip),%rdi
  mov    $0x1,%eax
  mulsd  %xmm0,%xmm1
  movapd %xmm2,%xmm0
  movsd  %xmm1,(%rsp)
  call   <eval_poly@plt>
  movsd  (%rsp),%xmm1
  add    $0x18,%rsp
  divsd  %xmm0,%xmm1
  movapd %xmm1,%xmm0
  ret
  cs nopw 0x0(%rax,%rax,1)
L64:
  cvttsd2si %xmm1,%rdx
  pxor   %xmm3,%xmm3
  movsd  D29(%rip),%xmm6
  andnpd %xmm1,%xmm4
  cvtsi2sd %rdx,%xmm3
  movapd %xmm3,%xmm5
  cmpnlesd %xmm1,%xmm5
  andpd  %xmm6,%xmm5
  subsd  %xmm5,%xmm3
  orpd   %xmm4,%xmm3
  movapd %xmm3,%xmm1
  jmp    L29
```

tool_calls: name: parse_data
arguments: label: D24
type_infered: f32[4]
name: parse_data
arguments: label: D80
type_infered: byte[8]
name: parse_data
arguments: label: D1
type_infered: f64
name: parse_data
arguments: label: D43
type_infered: f32[2]
name: parse_data
arguments: label: D102
type_infered: byte[8]
name: parse_data
arguments: label: D86
type_infered: f32[2]
name: parse_data
arguments: label: D103
type_infered: f64
name: parse_data
arguments: label: D29
type_infered: f64

tool: {"D24": [0.0,-0.0,0.0,0.0]}

tool: {"D80": [0x9c,0x1d,0xca,0x6d,0x30,0x5f,0xe4,0x3f]}

tool: D1: 4

tool: {"D43": [0.0,1.625]}

tool: {"D102": [0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f]}

tool: {"D86": [0.0,176.0]}

tool: D103: 2

tool: D29: 1

assistant: ```c
double sin(f)
double f;
{
  static double coeff_a[] = {0.1357884e8, -0.49429081e7, 0.440103053e6, -0.138472724e5, 0.145968841e3};
  static double coeff_b[] = {0.864455865e7, 0.408179225e6, 0.946309610e4, 0.132653491e3, 1.0};
  double y, y_squared;
  int sect, e;
  extern double eval_poly();
  if (f < 0.0) {
    f = -f;
    sect = 2;
  } else
    sect = 0;
  f *= .63661977237;
  if (f > 4.0)
    f -= 4.0 * floor(f / 4.0);
  if (f > 2.0) {
    f -= 2.0;
    sect = 2 - sect;
  }
  y = f - (e = (int)f);
  sect = (e + sect) % 4;
  if (sect & 1)
    y = 1.0 - y;
  if (sect & 2)
    y = -y;
  y_squared = y * y;
  return y * eval_poly(y_squared, coeff_a, 4) / eval_poly(y_squared, coeff_b, 4);
}
```