user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<Si>:
  endbr64
  push   %r13
  movapd %xmm0,%xmm1
  push   %r12
  cvttsd2si %xmm0,%r12d
  push   %rbp
  push   %rbx
  sub    $0x48,%rsp
  comisd D79(%rip),%xmm0
  jae    L8
  mov    %r12d,%edi
  mov    $0x3,%esi
  movsd  %xmm0,0x10(%rsp)
  call   <pow@plt>
  mov    $0x1,%esi
  mov    $0xffffffff,%edi
  movsd  %xmm0,0x20(%rsp)
  call   <pow@plt>
  fldl   0x20(%rsp)
  mov    $0x3,%edi
  movsd  %xmm0,(%rsp)
  fmull  (%rsp)
  fstpt  (%rsp)
  call   <factorial@plt>
  fldt   (%rsp)
  pxor   %xmm0,%xmm0
  mov    %r12d,%edi
  cvtsi2sd %rax,%xmm0
  movsd  0x10(%rsp),%xmm1
  mov    $0x5,%esi
  mulsd  D75(%rip),%xmm0
  addsd  D72(%rip),%xmm1
  movsd  %xmm0,0x20(%rsp)
  fdivl  0x20(%rsp)
  movsd  %xmm1,0x20(%rsp)
  faddl  0x20(%rsp)
  fstpt  0x10(%rsp)
  call   <pow@plt>
  mov    $0x2,%esi
  mov    $0xffffffff,%edi
  movsd  %xmm0,0x20(%rsp)
  call   <pow@plt>
  fldl   0x20(%rsp)
  mov    $0x5,%edi
  movsd  %xmm0,(%rsp)
  fmull  (%rsp)
  fstpt  (%rsp)
  call   <factorial@plt>
  fldt   (%rsp)
  pxor   %xmm0,%xmm0
  mov    %r12d,%edi
  cvtsi2sd %rax,%xmm0
  mov    $0x7,%esi
  mulsd  D34(%rip),%xmm0
  movsd  %xmm0,0x20(%rsp)
  fdivl  0x20(%rsp)
  fldt   0x10(%rsp)
  fstpl  0x20(%rsp)
  fldl   0x20(%rsp)
  faddp  %st,%st(1)
  fstpt  0x10(%rsp)
  call   <pow@plt>
  mov    $0x3,%esi
  mov    $0xffffffff,%edi
  movsd  %xmm0,0x20(%rsp)
  call   <pow@plt>
  fldl   0x20(%rsp)
  mov    $0x7,%edi
  movsd  %xmm0,(%rsp)
  fmull  (%rsp)
  fstpt  (%rsp)
  call   <factorial@plt>
  fldt   (%rsp)
  pxor   %xmm0,%xmm0
  mov    %r12d,%edi
  cvtsi2sd %rax,%xmm0
  mov    $0x9,%esi
  mulsd  D23(%rip),%xmm0
  movsd  %xmm0,0x20(%rsp)
  fdivl  0x20(%rsp)
  fldt   0x10(%rsp)
  fstpl  0x20(%rsp)
  fldl   0x20(%rsp)
  faddp  %st,%st(1)
  fstpt  0x10(%rsp)
  call   <pow@plt>
  mov    $0x4,%esi
  mov    $0xffffffff,%edi
  movsd  %xmm0,0x20(%rsp)
  call   <pow@plt>
  fldl   0x20(%rsp)
  mov    $0x9,%edi
  movsd  %xmm0,(%rsp)
  fmull  (%rsp)
  fstpt  (%rsp)
  call   <factorial@plt>
  fldt   (%rsp)
  pxor   %xmm0,%xmm0
  mov    %r12d,%edi
  cvtsi2sd %rax,%xmm0
  mov    $0xb,%esi
  mulsd  D28(%rip),%xmm0
  movsd  %xmm0,0x20(%rsp)
  fdivl  0x20(%rsp)
  fldt   0x10(%rsp)
  fstpl  0x20(%rsp)
  fldl   0x20(%rsp)
  faddp  %st,%st(1)
  fstpt  0x10(%rsp)
  call   <pow@plt>
  mov    $0x5,%esi
  mov    $0xffffffff,%edi
  movsd  %xmm0,0x20(%rsp)
  call   <pow@plt>
  fldl   0x20(%rsp)
  mov    $0xb,%edi
  movsd  %xmm0,(%rsp)
  fmull  (%rsp)
  fstpt  (%rsp)
  call   <factorial@plt>
  fldt   (%rsp)
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  mulsd  D50(%rip),%xmm0
  movsd  %xmm0,0x20(%rsp)
  fdivl  0x20(%rsp)
  fldt   0x10(%rsp)
  fstpl  0x20(%rsp)
  fldl   0x20(%rsp)
  faddp  %st,%st(1)
  fstpl  0x20(%rsp)
  movsd  0x20(%rsp),%xmm0
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopl   (%rax)
L8:
  pxor   %xmm6,%xmm6
  xor    %ebx,%ebx
  movsd  %xmm6,0x20(%rsp)
  movsd  %xmm6,(%rsp)
L11:
  mov    %ebx,%esi
  lea    (%rbx,%rbx,1),%ebp
  mov    $0xffffffff,%edi
  movsd  %xmm1,0x28(%rsp)
  call   <pow@plt>
  mov    %ebp,%edi
  lea    0x1(%rbp),%r13d
  movsd  %xmm0,0x10(%rsp)
  call   <factorial@plt>
  pxor   %xmm0,%xmm0
  mov    %r13d,%esi
  mov    %r12d,%edi
  cvtsi2sd %rax,%xmm0
  movsd  0x10(%rsp),%xmm2
  mulsd  %xmm0,%xmm2
  movsd  %xmm2,0x10(%rsp)
  call   <pow@plt>
  movsd  0x10(%rsp),%xmm2
  mov    %ebx,%esi
  mov    $0xffffffff,%edi
  add    $0x1,%ebx
  divsd  %xmm0,%xmm2
  movsd  0x20(%rsp),%xmm0
  addsd  %xmm2,%xmm0
  movsd  %xmm0,0x20(%rsp)
  call   <pow@plt>
  mov    %r13d,%edi
  movsd  %xmm0,0x10(%rsp)
  call   <factorial@plt>
  pxor   %xmm0,%xmm0
  lea    0x2(%rbp),%esi
  mov    %r12d,%edi
  cvtsi2sd %rax,%xmm0
  movsd  0x10(%rsp),%xmm2
  mulsd  %xmm0,%xmm2
  movsd  %xmm2,0x10(%rsp)
  call   <pow@plt>
  movsd  0x10(%rsp),%xmm2
  cmp    $0x4,%ebx
  movsd  0x28(%rsp),%xmm1
  divsd  %xmm0,%xmm2
  movsd  (%rsp),%xmm0
  addsd  %xmm2,%xmm0
  movsd  %xmm0,(%rsp)
  jne    L11
  movapd %xmm1,%xmm0
  lea    0x38(%rsp),%rdi
  lea    0x30(%rsp),%rsi
  call   <sincos@plt>
  movsd  0x20(%rsp),%xmm1
  mulsd  0x30(%rsp),%xmm1
  movsd  D57(%rip),%xmm0
  subsd  %xmm1,%xmm0
  movsd  (%rsp),%xmm1
  mulsd  0x38(%rsp),%xmm1
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  subsd  %xmm1,%xmm0
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D79
type: byte[16]
name: extract_symbolic_data
arguments: tag: D75
type: f32[2]
name: extract_symbolic_data
arguments: tag: D72
type: f32[2]
name: extract_symbolic_data
arguments: tag: D34
type: f32[2]
name: extract_symbolic_data
arguments: tag: D23
type: f32[2]
name: extract_symbolic_data
arguments: tag: D28
type: f32[2]
name: extract_symbolic_data
arguments: tag: D50
type: f32[2]
name: extract_symbolic_data
arguments: tag: D57
type: byte[8]

tool: {"D79": [0x59,0x09,0xe8,0xfa,0x55,0x7a,0x13,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40]}

tool: {"D75": [0.0,2.125]}

tool: {"D72": [0.0,0.0]}

tool: {"D34": [0.0,2.3125]}

tool: {"D23": [0.0,2.4375]}

tool: {"D28": [0.0,2.53125]}

tool: {"D50": [0.0,2.59375]}

tool: {"D57": [0x18,0x2d,0x44,0x54,0xfb,0x21,0xf9,0x3f]}

assistant: ```c
double Si(double x) {
  int i;
  int nmax = 6;
  double out;
  long double power;
  double pi = 4.0 * atan(1.0);
  if (x >= pi * 6.2 / 4.0) {
    double out_sin = 0.0;
    double out_cos = 0.0;
    out = pi / 2.0;
    for (i = 0; i < nmax - 2; i += 1) {
      out_cos += pow(-1.0, i) * (double)factorial(2 * i) / pow(x, 2 * i + 1);
      out_sin += pow(-1.0, i) * (double)factorial(2 * i + 1) / pow(x, 2 * i + 2);
    }
    out -= cos(x) * out_cos;
    out -= sin(x) * out_sin;
    return out;
  }
  out = 0.0;
  for (i = 0; i < nmax; i += 1) {
    if (i == 0) {
      out += x;
      continue;
    }
    power = pow(x, (2 * i + 1));
    out += (double)pow(-1, i) * power / ((2.0 * (double)i + 1.0) * (double)factorial(2 * i + 1));
  }
  return out;
}
```