user: What is the c source code of the assembly code below?

```asm
<sinus>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  movsd  %xmm0,-0x58(%rbp)
  mov    %edi,-0x5c(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  comisd -0x30(%rbp),%xmm0
  jbe    L34
  movsd  -0x30(%rbp),%xmm0
  movq   D32(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  addl   $0x2,-0x5c(%rbp)
L34:
  movsd  -0x30(%rbp),%xmm1
  movsd  D49(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x30(%rbp),%xmm0
  comisd D84(%rip),%xmm0
  jbe    L7
  lea    -0x40(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  mov    %rdx,%rdi
  movq   %rax,%xmm0
  call   <modf@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x28(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x5c(%rbp),%xmm1
  movsd  -0x40(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x40(%rbp),%xmm1
  movsd  D7(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  lea    -0x38(%rbp),%rdx
  mov    %rdx,%rdi
  movq   %rax,%xmm0
  call   <modf@plt>
  movsd  -0x40(%rbp),%xmm0
  movsd  -0x38(%rbp),%xmm2
  movsd  D148(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,-0x5c(%rbp)
  jmp    L43
L7:
  movsd  -0x30(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,-0x44(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x44(%rbp),%xmm1
  movsd  -0x30(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x44(%rbp),%eax
  add    %eax,-0x5c(%rbp)
  andl   $0x3,-0x5c(%rbp)
L43:
  mov    -0x5c(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L29
  movsd  D52(%rip),%xmm0
  subsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
L29:
  cmpl   $0x1,-0x5c(%rbp)
  jle    L2
  movsd  -0x28(%rbp),%xmm0
  movq   D32(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
L2:
  movsd  -0x28(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x20(%rbp),%xmm1
  movsd  D5(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D80(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D133(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mulsd  -0x20(%rbp),%xmm0
  movsd  D12(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D146(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  -0x28(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x20(%rbp),%xmm1
  movsd  D37(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D50(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D36(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D59(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x18(%rbp),%xmm0
  divsd  -0x10(%rbp),%xmm0
  movq   %xmm0,%rax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L24
  call   <__stack_chk_fail@plt>
L24:
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_tag: D32
datatype: byte[8]
name: retrieve_data
arguments: data_tag: D49
datatype: byte[8]
name: retrieve_data
arguments: data_tag: D84
datatype: byte[16]
name: retrieve_data
arguments: data_tag: D7
datatype: f64
name: retrieve_data
arguments: data_tag: D148
datatype: byte[8]
name: retrieve_data
arguments: data_tag: D52
datatype: byte[8]
name: retrieve_data
arguments: data_tag: D5
datatype: byte[8]
name: retrieve_data
arguments: data_tag: D80
datatype: byte[8]
name: retrieve_data
arguments: data_tag: D133
datatype: byte[8]
name: retrieve_data
arguments: data_tag: D12
datatype: byte[8]
name: retrieve_data
arguments: data_tag: D146
datatype: byte[8]
name: retrieve_data
arguments: data_tag: D37
datatype: byte[8]
name: retrieve_data
arguments: data_tag: D50
datatype: byte[8]
name: retrieve_data
arguments: data_tag: D36
datatype: byte[8]
name: retrieve_data
arguments: data_tag: D59
datatype: byte[8]

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

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

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

tool: D7: 0.25

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

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

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

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

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

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

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

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

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

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

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

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