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

```asm
<ft_sin>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  movsd  %xmm0,-0x18(%rbp)
  movsd  D42(%rip),%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L46
  movsd  -0x18(%rbp),%xmm1
  movsd  D51(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  jmp    L47
L46:
  movsd  -0x18(%rbp),%xmm0
  comisd D103(%rip),%xmm0
  jbe    L47
  movsd  -0x18(%rbp),%xmm0
  movsd  D51(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
L47:
  pxor   %xmm0,%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L50
  movsd  -0x18(%rbp),%xmm1
  movsd  D66(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x18(%rbp),%xmm2
  movsd  D78(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  mulsd  -0x18(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  pxor   %xmm0,%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L52
  movsd  -0x8(%rbp),%xmm0
  movq   D50(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  mulsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x8(%rbp),%xmm1
  movsd  D5(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x8(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  jmp    L23
L52:
  movsd  -0x8(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x8(%rbp),%xmm1
  movsd  D5(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x8(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  jmp    L23
L50:
  movsd  -0x18(%rbp),%xmm1
  movsd  D66(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x18(%rbp),%xmm2
  movsd  D78(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  mulsd  -0x18(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  pxor   %xmm0,%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L11
  movsd  -0x8(%rbp),%xmm0
  movq   D50(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  mulsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x8(%rbp),%xmm1
  movsd  D5(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x8(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  jmp    L23
L11:
  movsd  -0x8(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x8(%rbp),%xmm1
  movsd  D5(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x8(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
L23:
  movsd  -0x8(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  pop    %rbp
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D42
type: byte[8]
name: unpack_data
arguments: data_tag: D51
type: f64
name: unpack_data
arguments: data_tag: D103
type: f64[2]
name: unpack_data
arguments: data_tag: D66
type: f64
name: unpack_data
arguments: data_tag: D78
type: f64
name: unpack_data
arguments: data_tag: D50
type: byte[8]
name: unpack_data
arguments: data_tag: D5
type: f64

tool: {"D42": [0xf1,0xd4,0xc8,0x53,0xfb,0x21,0x09,0xc0]}

tool: D51: 6.28318531

tool: {"D103": [3.14159265,1.27323954]}

tool: D66: 1.27323954

tool: D78: 0.405284735

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

tool: D5: 0.225

assistant: ```c
double ft_sin(double ang) {
  double sinus;
  if (ang < -3.14159265)
    ang += 6.28318531;
  else if (ang > 3.14159265)
    ang -= 6.28318531;
  if (ang < 0) {
    sinus = 1.27323954 * ang + 0.405284735 * ang * ang;
    if (sinus < 0)
      sinus = 0.225 * (sinus * (-sinus) - sinus) + sinus;
    else
      sinus = 0.225 * (sinus * sinus - sinus) + sinus;
  } else {
    sinus = 1.27323954 * ang - 0.405284735 * ang * ang;
    if (sinus < 0)
      sinus = 0.225 * (sinus * (-sinus) - sinus) + sinus;
    else
      sinus = 0.225 * (sinus * sinus - sinus) + sinus;
  }
  return (sinus);
}
```