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

```asm
<__kernel_sin>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  movsd  %xmm0,-0x28(%rbp)
  movsd  %xmm1,-0x30(%rbp)
  mov    %edi,-0x34(%rbp)
  lea    -0x28(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  and    $0x7fffffff,%eax
  mov    %eax,-0x1c(%rbp)
  cmpl   $0x3e3fffff,-0x1c(%rbp)
  jg     L21
  movsd  -0x28(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  jne    L21
  movsd  -0x28(%rbp),%xmm0
  jmp    L41
L21:
  movsd  -0x28(%rbp),%xmm1
  movsd  -0x28(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x28(%rbp),%xmm0
  movsd  -0x18(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x18(%rbp),%xmm1
  movsd  D75(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D15(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x18(%rbp),%xmm1
  movsd  D21(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mulsd  -0x18(%rbp),%xmm0
  movsd  D38(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x18(%rbp),%xmm1
  movsd  D0(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  cmpl   $0x0,-0x34(%rbp)
  jne    L11
  movsd  -0x18(%rbp),%xmm0
  mulsd  -0x8(%rbp),%xmm0
  movsd  D42(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x10(%rbp),%xmm1
  movsd  -0x28(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  jmp    L41
L11:
  movsd  -0x28(%rbp),%xmm0
  movsd  -0x30(%rbp),%xmm2
  movsd  D7(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  movsd  -0x10(%rbp),%xmm2
  mulsd  -0x8(%rbp),%xmm2
  subsd  %xmm2,%xmm1
  mulsd  -0x18(%rbp),%xmm1
  movapd %xmm1,%xmm2
  subsd  -0x30(%rbp),%xmm2
  movsd  -0x10(%rbp),%xmm3
  movsd  D42(%rip),%xmm1
  mulsd  %xmm3,%xmm1
  addsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
L41:
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  pop    %rbp
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D75
data_type: byte[8]
name: unpack_data
arguments: data_tag: D15
data_type: byte[8]
name: unpack_data
arguments: data_tag: D21
data_type: byte[8]
name: unpack_data
arguments: data_tag: D38
data_type: byte[8]
name: unpack_data
arguments: data_tag: D0
data_type: byte[8]
name: unpack_data
arguments: data_tag: D42
data_type: byte[8]
name: unpack_data
arguments: data_tag: D7
data_type: byte[8]

tool: {"D75": [0x7c,0xd5,0xcf,0x5a,0x3a,0xd9,0xe5,0x3d]}

tool: {"D15": [0xeb,0x9c,0x2b,0x8a,0xe6,0xe5,0x5a,0x3e]}

tool: {"D21": [0x7d,0xfe,0xb1,0x57,0xe3,0x1d,0xc7,0x3e]}

tool: {"D38": [0xd5,0x61,0xc1,0x19,0xa0,0x01,0x2a,0x3f]}

tool: {"D0": [0xa6,0xf8,0x10,0x11,0x11,0x11,0x81,0x3f]}

tool: {"D42": [0x49,0x55,0x55,0x55,0x55,0x55,0xc5,0x3f]}

tool: {"D7": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f]}

assistant: ```c
double __kernel_sin(double x, double y, int iy) {
  double z, r, v;
  int ix;
  ix = *(1 + (const int *)&x) & 0x7fffffff;
  if (ix < 0x3e400000) {
    if ((int)x == 0) {
      return x;
    }
  }
  z = x * x;
  v = z * x;
  r = 8.33333333332248946124e-03 + z * (-1.98412698298579493134e-04 + z * (2.75573137070700676789e-06 + z * (-2.50507602534068634195e-08 + z * 1.58969099521155010221e-10)));
  if (iy == 0) {
    return x + v * (-1.66666666666666324348e-01 + z * r);
  } else {
    return x - ((z * (5.00000000000000000000e-01 * y - v * r) - y) - v * -1.66666666666666324348e-01);
  }
}
```