user: 请从给定的汇编指令推导出C源代码：

```asm
<__kernel_cos>:
  endbr64
  movq   %xmm0,%rax
  movapd %xmm0,%xmm4
  sar    $0x20,%rax
  and    $0x7fffffff,%eax
  cmp    $0x3e3fffff,%eax
  jg     L10
  cvttsd2si %xmm0,%eax
  movsd  D118(%rip),%xmm0
  test   %eax,%eax
  je     L35
  movapd %xmm4,%xmm3
  movsd  D119(%rip),%xmm2
  mulsd  %xmm4,%xmm3
  mulsd  %xmm3,%xmm2
  addsd  D25(%rip),%xmm2
  mulsd  %xmm3,%xmm2
  subsd  D161(%rip),%xmm2
  mulsd  %xmm3,%xmm2
  addsd  D48(%rip),%xmm2
  mulsd  %xmm3,%xmm2
  subsd  D74(%rip),%xmm2
  mulsd  %xmm3,%xmm2
  addsd  D15(%rip),%xmm2
  mulsd  %xmm3,%xmm2
L22:
  mulsd  %xmm1,%xmm4
  movsd  D142(%rip),%xmm0
  mulsd  %xmm3,%xmm2
  mulsd  %xmm3,%xmm0
  subsd  %xmm4,%xmm2
  movapd %xmm0,%xmm1
  movsd  D118(%rip),%xmm0
  subsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  ret
  nopw   0x0(%rax,%rax,1)
L10:
  movapd %xmm0,%xmm3
  movsd  D119(%rip),%xmm2
  mulsd  %xmm0,%xmm3
  mulsd  %xmm3,%xmm2
  addsd  D25(%rip),%xmm2
  mulsd  %xmm3,%xmm2
  subsd  D161(%rip),%xmm2
  mulsd  %xmm3,%xmm2
  addsd  D48(%rip),%xmm2
  mulsd  %xmm3,%xmm2
  subsd  D74(%rip),%xmm2
  mulsd  %xmm3,%xmm2
  addsd  D15(%rip),%xmm2
  mulsd  %xmm3,%xmm2
  cmp    $0x3fd33332,%eax
  jle    L22
  cmp    $0x3fe90000,%eax
  jg     L40
  sub    $0x200000,%eax
  movsd  D118(%rip),%xmm0
  shl    $0x20,%rax
  movq   %rax,%xmm6
  subsd  %xmm6,%xmm0
L48:
  movsd  D142(%rip),%xmm5
  mulsd  %xmm3,%xmm2
  mulsd  %xmm1,%xmm4
  mulsd  %xmm3,%xmm5
  subsd  %xmm4,%xmm2
  subsd  %xmm6,%xmm5
  subsd  %xmm2,%xmm5
  subsd  %xmm5,%xmm0
  ret
  nopl   0x0(%rax)
L40:
  movsd  D174(%rip),%xmm0
  movsd  D19(%rip),%xmm6
  jmp    L48
  nopw   0x0(%rax,%rax,1)
L35:
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D118
type: byte[8]
name: parse_data
arguments: data_tag: D119
type: byte[8]
name: parse_data
arguments: data_tag: D25
type: byte[8]
name: parse_data
arguments: data_tag: D161
type: byte[8]
name: parse_data
arguments: data_tag: D48
type: byte[8]
name: parse_data
arguments: data_tag: D74
type: byte[8]
name: parse_data
arguments: data_tag: D15
type: byte[8]
name: parse_data
arguments: data_tag: D142
type: f64
name: parse_data
arguments: data_tag: D174
type: byte[8]
name: parse_data
arguments: data_tag: D19
type: f64

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

tool: {"D119": [0xd4,0x38,0x88,0xbe,0xe9,0xfa,0xa8,0xbd]}

tool: {"D25": [0xc4,0xb1,0xb4,0xbd,0x9e,0xee,0x21,0x3e]}

tool: {"D161": [0xad,0x52,0x9c,0x80,0x4f,0x7e,0x92,0x3e]}

tool: {"D48": [0x90,0x15,0xcb,0x19,0xa0,0x01,0xfa,0x3e]}

tool: {"D74": [0x77,0x51,0xc1,0x16,0x6c,0xc1,0x56,0x3f]}

tool: {"D15": [0x4c,0x55,0x55,0x55,0x55,0x55,0xa5,0x3f]}

tool: D142: 0.5

tool: {"D174": [0x00,0x00,0x00,0x00,0x00,0x00,0xe7,0x3f]}

tool: D19: 0.28125

assistant: ```c
double __kernel_cos(double x, double y) {
  double a, hz, z, r, qx;
  int ix;
  ix = *(1 + (int *)&x) & 0x7fffffff;
  if (ix < 0x3e400000) {
    if (((int)x) == 0) {
      return 1.00000000000000000000e+00;
    }
  }
  z = x * x;
  r = z * (4.16666666666666019037e-02 + z * (-1.38888888888741095749e-03 + z * (2.48015872894767294178e-05 + z * (-2.75573143513906633035e-07 + z * (2.08757232129817482790e-09 + z * -1.13596475577881948265e-11)))));
  if (ix < 0x3FD33333) {
    return 1.00000000000000000000e+00 - (0.5 * z - (z * r - x * y));
  } else {
    if (ix > 0x3fe90000) {
      qx = 0.28125;
    } else {
      *(1 + (int *)&qx) = ix - 0x00200000;
      *(int *)&qx = 0;
    }
    hz = 0.5 * z - qx;
    a = 1.00000000000000000000e+00 - qx;
    return a - (hz - (z * r - x * y));
  }
}
```