user: 请将以下的汇编代码转换成C语言代码:

```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     L39
L14:
  mulsd  D29(%rip),%xmm0
  comisd D114(%rip),%xmm0
  ja     L26
  cvttsd2si %xmm0,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x8(%rsp)
  lea    (%rbx,%rax,1),%edi
  and    $0x3,%edi
L68:
  test   $0x1,%dil
  je     L42
  movsd  D15(%rip),%xmm0
  subsd  0x8(%rsp),%xmm0
  movsd  %xmm0,0x8(%rsp)
L42:
  cmp    $0x1,%edi
  jle    L61
  movsd  0x8(%rsp),%xmm4
  xorpd  D71(%rip),%xmm4
  movsd  %xmm4,0x8(%rsp)
L61:
  movsd  0x8(%rsp),%xmm3
  movapd %xmm3,%xmm2
  mulsd  %xmm3,%xmm2
  movapd %xmm2,%xmm0
  mulsd  D119(%rip),%xmm0
  subsd  D108(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  D52(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  subsd  D113(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  D7(%rip),%xmm0
  mulsd  %xmm3,%xmm0
  movapd %xmm2,%xmm1
  addsd  D2(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  addsd  D150(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  addsd  D143(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  addsd  D149(%rip),%xmm1
  divsd  %xmm1,%xmm0
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L2
  add    $0x30,%rsp
  pop    %rbx
  ret
L39:
  xorpd  D71(%rip),%xmm0
  add    $0x2,%ebx
  jmp    L14
L26:
  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  D98(%rip),%xmm0
  call   <modf@plt>
  movsd  D40(%rip),%xmm1
  mulsd  0x20(%rsp),%xmm1
  movq   %rbx,%xmm0
  subsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edi
  jmp    L68
L2:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: tag: D29
datatype: byte[8]
name: parse_data
arguments: tag: D114
datatype: byte[16]
name: parse_data
arguments: tag: D15
datatype: byte[8]
name: parse_data
arguments: tag: D71
datatype: byte[16]
name: parse_data
arguments: tag: D119
datatype: byte[8]
name: parse_data
arguments: tag: D108
datatype: byte[8]
name: parse_data
arguments: tag: D52
datatype: byte[8]
name: parse_data
arguments: tag: D113
datatype: byte[8]
name: parse_data
arguments: tag: D7
datatype: byte[8]
name: parse_data
arguments: tag: D2
datatype: byte[8]
name: parse_data
arguments: tag: D150
datatype: byte[8]
name: parse_data
arguments: tag: D143
datatype: byte[8]
name: parse_data
arguments: tag: D149
datatype: byte[8]
name: parse_data
arguments: tag: D98
datatype: f64
name: parse_data
arguments: tag: D40
datatype: byte[8]

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

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

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

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

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

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

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

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

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

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

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

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

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

tool: D98: 0.25

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