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

```asm
<sinus>:
  endbr64
  push   %rbx
  movapd %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  mov    %edi,%ebx
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  comisd %xmm1,%xmm0
  jbe    L17
  xorpd  D36(%rip),%xmm1
  add    $0x2,%ebx
L17:
  mulsd  D3(%rip),%xmm1
  comisd D72(%rip),%xmm1
  ja     L21
  cvttsd2si %xmm1,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  lea    (%rbx,%rax,1),%edi
  and    $0x3,%edi
  subsd  %xmm0,%xmm1
L52:
  test   $0x1,%dil
  je     L14
  movsd  D34(%rip),%xmm0
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
L14:
  cmp    $0x1,%edi
  jle    L9
  xorpd  D36(%rip),%xmm1
L9:
  movapd %xmm1,%xmm2
  movsd  D33(%rip),%xmm0
  mulsd  %xmm1,%xmm2
  mulsd  %xmm2,%xmm0
  subsd  D2(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  D123(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  subsd  D108(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  D99(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D91(%rip),%xmm1
  addsd  %xmm2,%xmm1
  mulsd  %xmm2,%xmm1
  addsd  D52(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  addsd  D83(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  addsd  D101(%rip),%xmm1
  divsd  %xmm1,%xmm0
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L51
  add    $0x30,%rsp
  pop    %rbx
  ret
  nopl   0x0(%rax)
L21:
  movapd %xmm1,%xmm0
  lea    0x18(%rsp),%rdi
  call   <modf@plt>
  pxor   %xmm2,%xmm2
  lea    0x20(%rsp),%rdi
  cvtsi2sd %ebx,%xmm2
  addsd  0x18(%rsp),%xmm2
  movsd  %xmm0,0x8(%rsp)
  movapd %xmm2,%xmm0
  movsd  %xmm2,(%rsp)
  mulsd  D107(%rip),%xmm0
  call   <modf@plt>
  movsd  (%rsp),%xmm2
  movsd  D58(%rip),%xmm0
  mulsd  0x20(%rsp),%xmm0
  movsd  0x8(%rsp),%xmm1
  subsd  %xmm0,%xmm2
  cvttsd2si %xmm2,%edi
  jmp    L52
L51:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D36
data_type: byte[16]
name: extract_symbolic_data
arguments: data_tag: D3
data_type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D72
data_type: byte[16]
name: extract_symbolic_data
arguments: data_tag: D34
data_type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D33
data_type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D2
data_type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D123
data_type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D108
data_type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D99
data_type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D91
data_type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D52
data_type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D83
data_type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D101
data_type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D107
data_type: f64
name: extract_symbolic_data
arguments: data_tag: D58
data_type: byte[8]

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

tool: {"D3": [0x83,0xc8,0xc9,0x6d,0x30,0x5f,0xe4,0x3f]}

tool: {"D72": [0x00,0x00,0x00,0x00,0x00,0xff,0xdf,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0xd0,0x3f]}

tool: {"D34": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

tool: {"D33": [0x71,0x3f,0x24,0xbe,0x00,0x3f,0x62,0x40]}

tool: {"D2": [0x42,0x35,0x46,0xe1,0xa2,0x0b,0xcb,0x40]}

tool: {"D123": [0x98,0x8a,0xd2,0x36,0x9c,0xdc,0x1a,0x41]}

tool: {"D108": [0x34,0x31,0x75,0x06,0x0f,0xdb,0x52,0x41]}

tool: {"D99": [0x57,0x1d,0x52,0x1f,0x4b,0xe6,0x69,0x41]}

tool: {"D91": [0x28,0xfc,0xb3,0x65,0xe9,0x94,0x60,0x40]}

tool: {"D52": [0xda,0x21,0x0e,0x4d,0x8c,0x7b,0xc2,0x40]}

tool: {"D83": [0x05,0xd4,0xa3,0xe6,0xcc,0xe9,0x18,0x41]}

tool: {"D101": [0xcd,0xbd,0xe4,0xd4,0xf9,0x7c,0x60,0x41]}

tool: D107: 0.25

tool: {"D58": [0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40]}

assistant: ```c
double sinus(double arg, int quad) {
  double e, f, ysq, x, y, temp1, temp2;
  int k;
  x = arg;
  if (x < 0) {
    x = -x;
    quad += 2;
  }
  x *= 1 / 1.570796326794896619231e0;
  if (x > 32764) {
    y = modf(x, &e);
    e += quad;
    modf(0.25 * e, &f);
    quad = e - 4 * f;
  } else {
    k = x;
    y = x - k;
    quad += k;
    quad &= 3;
  }
  if (quad & 1)
    y = 1 - y;
  if (quad > 1)
    y = -y;
  ysq = y * y;
  temp1 = ((((.1459688406665768722226959e3 * ysq + -.1384727249982452873054457e5) * ysq + .4401030535375266501944918e6) * ysq + -.4942908100902844161158627e7) * ysq + .1357884097877375669092680e8) * y;
  temp2 = ((((ysq + .1326534908786136358911494e3) * ysq + .9463096101538208180571257e4) * ysq + .4081792252343299749395779e6) * ysq + .8644558652922534429915149e7);
  return temp1 / temp2;
}
```