user: 下面的汇编指令对应的C源代码是什么：

```asm
<sms_filterArray>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rcx,-0x18(%rsp)
  lea    -0x1(%rdx),%eax
  imul   %esi,%eax
  cltq
  lea    (%rdi,%rax,8),%r15
  test   %esi,%esi
  jle    L31
  mov    %rdi,%r13
  mov    %esi,%r10d
  mov    %edx,%r14d
  movslq %edx,%rdx
  mov    %rdx,%rax
  neg    %rax
  lea    (%r15,%rax,8),%rbp
  movslq %esi,%r11
  shl    $0x3,%r11
  add    %r11,%r13
  mov    %r14d,%r9d
  neg    %r9d
  mov    %esi,%eax
  mov    %rax,-0x10(%rsp)
  lea    -0x1(%r14),%eax
  cltq
  add    %rdx,%rax
  mov    %r14d,%r8d
  mov    $0x0,%r12d
  lea    -0x8(,%rax,8),%rax
  mov    %rax,-0x8(%rsp)
  lea    -0x4(%r14),%ebx
  add    $0x3,%rbx
  pxor   %xmm5,%xmm5
  movapd %xmm5,%xmm6
  jmp    L27
L54:
  movsd  (%rdx),%xmm0
  ucomisd %xmm5,%xmm0
  jp     L39
  ucomisd %xmm6,%xmm0
  jne    L39
L34:
  add    $0x1,%rax
  add    %r11,%rdx
  sub    $0x8,%rcx
  cmp    %rbx,%rax
  je     L74
L13:
  mov    %eax,%edi
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movapd %xmm4,%xmm1
  divsd  %xmm0,%xmm1
  mov    %r9d,%esi
  add    %eax,%esi
  js     L23
  movapd %xmm1,%xmm0
  mulsd  0x0(%rbp,%rax,8),%xmm0
  addsd  %xmm0,%xmm2
  addsd  %xmm1,%xmm3
L23:
  mov    %r8d,%esi
  sub    %edi,%esi
  cmp    %esi,%r10d
  jle    L54
  movapd %xmm1,%xmm0
  mulsd  (%rcx),%xmm0
  addsd  %xmm0,%xmm2
  addsd  %xmm1,%xmm3
  jmp    L54
L39:
  mulsd  %xmm1,%xmm0
  addsd  %xmm0,%xmm2
  addsd  %xmm1,%xmm3
  jmp    L34
L4:
  movsd  D17(%rip),%xmm3
L74:
  divsd  %xmm3,%xmm2
  mov    -0x18(%rsp),%rax
  movsd  %xmm2,(%rax,%r12,8)
  add    $0x1,%r12
  add    $0x1,%r8d
  add    $0x8,%rbp
  add    $0x8,%r13
  add    $0x1,%r9d
  cmp    -0x10(%rsp),%r12
  je     L31
L27:
  movsd  (%r15,%r12,8),%xmm2
  cmp    $0x3,%r14d
  jle    L4
  mov    -0x8(%rsp),%rax
  lea    (%rax,%rbp,1),%rcx
  mov    %r13,%rdx
  mov    $0x2,%eax
  movsd  D17(%rip),%xmm3
  pxor   %xmm4,%xmm4
  cvtsi2sd %r14d,%xmm4
  jmp    L13
L31:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: read_data
arguments: label: D17
type_infered: byte[8]

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

assistant: ```c
void sms_filterArray(double *pFArray, int size1, int size2, double *pFOutArray) {
  int i, j, iPoint, iFrame, size2_2 = size2 - 2, size2_1 = size2 - 1;
  double *pFCurrentArray = pFArray + (size2_1)*size1;
  double fVal, fWeighting, fTotalWeighting, fTmpVal;
  for (i = 0; i < size1; i++) {
    fVal = pFCurrentArray[i];
    fTotalWeighting = 1;
    for (j = 1; j < (size2_2); j++) {
      fWeighting = (double)size2 / (1 + j);
      iPoint = i - (size2_1) + j;
      if (iPoint >= 0) {
        fVal += pFCurrentArray[iPoint] * fWeighting;
        fTotalWeighting += fWeighting;
      }
      iPoint = i + (size2_1)-j;
      if (iPoint < size1) {
        fVal += pFCurrentArray[iPoint] * fWeighting;
        fTotalWeighting += fWeighting;
      }
      iFrame = j;
      fTmpVal = pFArray[iFrame * size1 + i];
      if (fTmpVal) {
        fVal += fTmpVal * fWeighting;
        fTotalWeighting += fWeighting;
      }
    }
    pFOutArray[i] = fVal / fTotalWeighting;
  }
}
```