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

```asm
<LinearADR_Sine_r>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  mov    %rcx,%r12
  push   %rbp
  mov    %r8,%rbp
  push   %rbx
  movslq %edx,%rbx
  mov    %ebx,%edx
  sub    $0xa8,%rsp
  movsd  0x18(%rsi),%xmm4
  movsd  (%rsi),%xmm5
  movsd  0x8(%rsi),%xmm3
  movsd  0x10(%rsi),%xmm2
  mov    %r9,0x40(%rsp)
  movsd  %xmm4,0x20(%rsp)
  movupd 0x68(%rsi),%xmm4
  movupd 0x38(%rsi),%xmm7
  movupd 0x48(%rsi),%xmm6
  movupd 0x58(%rsi),%xmm1
  movsd  %xmm5,(%rsp)
  movsd  %xmm3,0x8(%rsp)
  movsd  0x78(%rsi),%xmm5
  movsd  0x28(%rsi),%xmm3
  movsd  %xmm2,0x10(%rsp)
  movsd  0x30(%rsi),%xmm2
  mov    0x20(%rsi),%r14
  movaps %xmm4,0x30(%rsp)
  movsd  0x80(%rsi),%xmm4
  movsd  %xmm3,0x88(%rsp)
  movsd  %xmm2,0x80(%rsp)
  movaps %xmm7,0x70(%rsp)
  movaps %xmm6,0x60(%rsp)
  movaps %xmm1,0x50(%rsp)
  movsd  %xmm5,0x28(%rsp)
  movsd  %xmm4,0x18(%rsp)
  call   <LinearADR_Sine@plt>
  movapd 0x70(%rsp),%xmm7
  movsd  0x8(%rsp),%xmm3
  movapd 0x50(%rsp),%xmm1
  movsd  (%rsp),%xmm5
  mov    %eax,0x4c(%rsp)
  movapd 0x60(%rsp),%xmm6
  movapd %xmm7,%xmm0
  movapd %xmm3,%xmm8
  movsd  0x10(%rsp),%xmm2
  unpcklpd %xmm8,%xmm8
  shufpd $0x1,%xmm7,%xmm0
  unpcklpd %xmm1,%xmm0
  movapd %xmm5,%xmm9
  mulpd  %xmm8,%xmm0
  movapd %xmm6,%xmm8
  unpcklpd %xmm9,%xmm9
  movapd 0x30(%rsp),%xmm4
  movsd  %xmm7,%xmm8
  unpcklpd %xmm7,%xmm6
  mulpd  %xmm9,%xmm8
  movsd  %xmm6,%xmm1
  movapd %xmm2,%xmm6
  unpcklpd %xmm6,%xmm6
  movapd %xmm4,%xmm7
  mulpd  %xmm6,%xmm1
  unpckhpd %xmm7,%xmm7
  movapd %xmm3,%xmm6
  mulsd  %xmm5,%xmm4
  addpd  %xmm8,%xmm0
  addpd  %xmm1,%xmm0
  movapd %xmm7,%xmm1
  movapd %xmm5,%xmm7
  movsd  0x28(%rsp),%xmm5
  mulsd  %xmm3,%xmm1
  mulsd  %xmm2,%xmm5
  addsd  %xmm4,%xmm1
  movapd %xmm0,%xmm4
  unpckhpd %xmm0,%xmm0
  mulsd  %xmm7,%xmm4
  mulsd  %xmm3,%xmm0
  movsd  0x88(%rsp),%xmm3
  addsd  %xmm5,%xmm1
  mulsd  %xmm6,%xmm3
  movapd %xmm2,%xmm6
  mulsd  %xmm2,%xmm1
  movsd  0x80(%rsp),%xmm2
  addsd  %xmm4,%xmm0
  movq   D0(%rip),%xmm4
  mulsd  %xmm6,%xmm2
  addsd  %xmm0,%xmm1
  movq   %r14,%xmm0
  mulsd  %xmm7,%xmm0
  xorpd  %xmm4,%xmm1
  subsd  0x18(%rsp),%xmm1
  addsd  %xmm0,%xmm3
  movsd  %xmm1,0x28(%rsp)
  addsd  %xmm2,%xmm3
  xorpd  %xmm4,%xmm3
  movsd  %xmm3,0x30(%rsp)
  test   %ebx,%ebx
  jle    L14
  xor    %r15d,%r15d
  lea    0x98(%rsp),%r14
  lea    0x90(%rsp),%r13
  nopw   0x0(%rax,%rax,1)
L3:
  movsd  (%rsp),%xmm0
  mov    %r13,%rsi
  mov    %r14,%rdi
  add    $0x18,%r12
  mulsd  -0x18(%r12),%xmm0
  movsd  0x8(%rsp),%xmm1
  mulsd  -0x10(%r12),%xmm1
  addsd  %xmm1,%xmm0
  movsd  0x10(%rsp),%xmm1
  mulsd  -0x8(%r12),%xmm1
  addsd  %xmm1,%xmm0
  addsd  0x20(%rsp),%xmm0
  call   <sincos@plt>
  movsd  0x18(%rsp),%xmm0
  movsd  0x30(%rsp),%xmm1
  mulsd  0x0(%rbp,%r15,8),%xmm0
  mov    0x40(%rsp),%rax
  mulsd  0x90(%rsp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  0x28(%rsp),%xmm1
  mulsd  0x98(%rsp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax,%r15,8)
  add    $0x1,%r15
  cmp    %r15,%rbx
  jne    L3
L14:
  mov    0x4c(%rsp),%eax
  add    $0xa8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: retrieve_data
arguments: label: D0
type_guessed: byte[8]

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

assistant: ```c
int LinearADR_Sine_r(int *iwork, double *rwork, int nPoints, double t, double *x, double *u, double *r) {
  int i, j, iret;
  double omega[3] = {rwork[0], rwork[1], rwork[2]};
  double omega0 = rwork[3];
  double b[3] = {rwork[4], rwork[5], rwork[6]};
  double a[3][3] = {{rwork[7], rwork[8], rwork[9]}, {rwork[10], rwork[11], rwork[12]}, {rwork[13], rwork[14], rwork[15]}};
  double c = rwork[16];
  double Y, D, E;
  double MM[3];
  iret = LinearADR_Sine(iwork, rwork, nPoints, t, x, u);
  for (j = 0; j < 3; j++) {
    MM[j] = a[j][0] * omega[0] + a[j][1] * omega[1] + a[j][2] * omega[2];
  }
  E = -(MM[0] * omega[0] + MM[1] * omega[1] + MM[2] * omega[2]) - c;
  D = -(b[0] * omega[0] + b[1] * omega[1] + b[2] * omega[2]);
  for (i = 0; i < nPoints; i++) {
    Y = omega[0] * x[i * 3 + 0] + omega[1] * x[i * 3 + 1] + omega[2] * x[i * 3 + 2] + omega0;
    r[i] = c * u[i] + D * cos(Y) + E * sin(Y);
  }
  return iret;
}
```