user: What would the C source look like for the assembly code provided here?

```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    L15
  xorpd  D39(%rip),%xmm1
  add    $0x2,%ebx
L15:
  mulsd  D140(%rip),%xmm1
  comisd D67(%rip),%xmm1
  ja     L23
  cvttsd2si %xmm1,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  lea    (%rbx,%rax,1),%edi
  and    $0x3,%edi
  subsd  %xmm0,%xmm1
L16:
  test   $0x1,%dil
  je     L24
  movsd  D88(%rip),%xmm0
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
L24:
  cmp    $0x1,%edi
  jle    L53
  xorpd  D39(%rip),%xmm1
L53:
  movapd %xmm1,%xmm2
  movsd  D119(%rip),%xmm0
  mulsd  %xmm1,%xmm2
  mulsd  %xmm2,%xmm0
  subsd  D28(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  D82(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  subsd  D129(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  D126(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D139(%rip),%xmm1
  addsd  %xmm2,%xmm1
  mulsd  %xmm2,%xmm1
  addsd  D141(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  addsd  D109(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  addsd  D97(%rip),%xmm1
  divsd  %xmm1,%xmm0
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L57
  add    $0x30,%rsp
  pop    %rbx
  ret
  nopl   0x0(%rax)
L23:
  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  D147(%rip),%xmm0
  call   <modf@plt>
  movsd  (%rsp),%xmm2
  movsd  D86(%rip),%xmm0
  mulsd  0x20(%rsp),%xmm0
  movsd  0x8(%rsp),%xmm1
  subsd  %xmm0,%xmm2
  cvttsd2si %xmm2,%edi
  jmp    L16
L57:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: data_tag: D39
type_infered: byte[16]
name: read_data
arguments: data_tag: D140
type_infered: byte[8]
name: read_data
arguments: data_tag: D67
type_infered: byte[16]
name: read_data
arguments: data_tag: D88
type_infered: byte[8]
name: read_data
arguments: data_tag: D119
type_infered: byte[8]
name: read_data
arguments: data_tag: D28
type_infered: byte[8]
name: read_data
arguments: data_tag: D82
type_infered: byte[8]
name: read_data
arguments: data_tag: D129
type_infered: byte[8]
name: read_data
arguments: data_tag: D126
type_infered: byte[8]
name: read_data
arguments: data_tag: D139
type_infered: byte[8]
name: read_data
arguments: data_tag: D141
type_infered: byte[8]
name: read_data
arguments: data_tag: D109
type_infered: byte[8]
name: read_data
arguments: data_tag: D97
type_infered: byte[8]
name: read_data
arguments: data_tag: D147
type_infered: f64
name: read_data
arguments: data_tag: D86
type_infered: byte[8]

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

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

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

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

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

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

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

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

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

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

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

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

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

tool: D147: 0.25

tool: {"D86": [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;
}
```