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

```asm
<sinus>:
  endbr64
  push   %rbx
  sub    $0x30,%rsp
  mov    %edi,%ebx
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  pxor   %xmm1,%xmm1
  comisd %xmm0,%xmm1
  ja     L53
L0:
  mulsd  D80(%rip),%xmm0
  comisd D99(%rip),%xmm0
  ja     L45
  cvttsd2si %xmm0,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x8(%rsp)
  lea    (%rbx,%rax,1),%edi
  and    $0x3,%edi
L28:
  test   $0x1,%dil
  je     L65
  movsd  D8(%rip),%xmm0
  subsd  0x8(%rsp),%xmm0
  movsd  %xmm0,0x8(%rsp)
L65:
  cmp    $0x1,%edi
  jle    L66
  movsd  0x8(%rsp),%xmm4
  xorpd  D116(%rip),%xmm4
  movsd  %xmm4,0x8(%rsp)
L66:
  movsd  0x8(%rsp),%xmm3
  movapd %xmm3,%xmm2
  mulsd  %xmm3,%xmm2
  movapd %xmm2,%xmm0
  mulsd  D19(%rip),%xmm0
  subsd  D150(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  D129(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  subsd  D13(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  D134(%rip),%xmm0
  mulsd  %xmm3,%xmm0
  movapd %xmm2,%xmm1
  addsd  D157(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  addsd  D11(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  addsd  D147(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  addsd  D109(%rip),%xmm1
  divsd  %xmm1,%xmm0
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L41
  add    $0x30,%rsp
  pop    %rbx
  ret
L53:
  xorpd  D116(%rip),%xmm0
  add    $0x2,%ebx
  jmp    L0
L45:
  lea    0x18(%rsp),%rdi
  call   <modf@plt>
  movsd  %xmm0,0x8(%rsp)
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebx,%xmm0
  addsd  0x18(%rsp),%xmm0
  movq   %xmm0,%rbx
  lea    0x20(%rsp),%rdi
  mulsd  D113(%rip),%xmm0
  call   <modf@plt>
  movsd  D43(%rip),%xmm1
  mulsd  0x20(%rsp),%xmm1
  movq   %rbx,%xmm0
  subsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edi
  jmp    L28
L41:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: tag: D80
type: f64
name: disassemble_data
arguments: tag: D99
type: byte[16]
name: disassemble_data
arguments: tag: D8
type: byte[8]
name: disassemble_data
arguments: tag: D116
type: byte[16]
name: disassemble_data
arguments: tag: D19
type: f64
name: disassemble_data
arguments: tag: D150
type: f64
name: disassemble_data
arguments: tag: D129
type: f64
name: disassemble_data
arguments: tag: D13
type: f64
name: disassemble_data
arguments: tag: D134
type: f64
name: disassemble_data
arguments: tag: D157
type: f64
name: disassemble_data
arguments: tag: D11
type: f64
name: disassemble_data
arguments: tag: D147
type: f64
name: disassemble_data
arguments: tag: D109
type: f64
name: disassemble_data
arguments: tag: D113
type: f64
name: disassemble_data
arguments: tag: D43
type: byte[8]

tool: D80: 0.636619772367581

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

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

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

tool: D19: 145.968840666577

tool: D150: 13847.2724998245

tool: D129: 440103.053537527

tool: D13: 4942908.10090284

tool: D134: 13578840.9787738

tool: D157: 132.653490878614

tool: D11: 9463.09610153821

tool: D147: 408179.22523433

tool: D109: 8644558.65292253

tool: D113: 0.25

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

assistant: ```c
double sinus(double arg, int quad) {
  double e, f;
  int k;
  double ysq;
  double x, y;
  double temp1, temp2;
  x = arg;
  if (x < 0) {
    x = -x;
    quad = quad + 2;
  }
  x = x * 0.636619772367581;
  if (x > 32764) {
    y = modf(x, &e);
    e = e + quad;
    modf(0.25 * e, &f);
    quad = e - 4 * f;
  } else {
    k = x;
    y = x - k;
    quad = (quad + k) & 03;
  }
  if (quad & 01)
    y = 1 - y;
  if (quad > 1)
    y = -y;
  ysq = y * y;
  temp1 = ((((0.145968840666577e3 * ysq + -0.138472724998245e5) * ysq + 0.440103053537527e6) * ysq + -0.494290810090284e7) * ysq + 0.135788409787738e8) * y;
  temp2 = ((((ysq + 0.132653490878614e3) * ysq + 0.946309610153821e4) * ysq + 0.408179225234330e6) * ysq + 0.864455865292253e7);
  return (temp1 / temp2);
}
```