user: What is the c source code of the assembly code below?

```asm
<rmean_and_taper>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  movss  %xmm0,-0x34(%rbp)
  mov    %edx,-0x38(%rbp)
  movss  %xmm1,-0x3c(%rbp)
  cmpl   $0x0,-0x38(%rbp)
  je     L74
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x18(%rbp)
  movq   $0x0,-0x10(%rbp)
  jmp    L113
L103:
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  cvtsi2ssq -0x30(%rbp),%xmm1
  divss  %xmm1,%xmm0
  movss  -0x18(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x18(%rbp)
  addq   $0x1,-0x10(%rbp)
L113:
  mov    -0x10(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jl     L103
  movq   $0x0,-0x10(%rbp)
  jmp    L1
L77:
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  subss  -0x18(%rbp),%xmm0
  movss  %xmm0,(%rax)
  addq   $0x1,-0x10(%rbp)
L1:
  mov    -0x10(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jl     L77
L74:
  movss  -0x3c(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comiss %xmm1,%xmm0
  ja     L99
  jmp    L7
L99:
  movss  -0x3c(%rbp),%xmm0
  divss  -0x34(%rbp),%xmm0
  comiss D19(%rip),%xmm0
  jae    L83
  cvttss2si %xmm0,%rax
  jmp    L79
L83:
  movss  D19(%rip),%xmm1
  subss  %xmm1,%xmm0
  cvttss2si %xmm0,%rax
  movabs $0x8000000000000000,%rdx
  xor    %rdx,%rax
L79:
  mov    %rax,-0x8(%rbp)
  mov    -0x30(%rbp),%rax
  mov    %rax,%rdx
  shr    $0x3f,%rdx
  add    %rdx,%rax
  sar    %rax
  cmp    %rax,-0x8(%rbp)
  jle    L51
  mov    -0x30(%rbp),%rax
  mov    %rax,%rdx
  shr    $0x3f,%rdx
  add    %rdx,%rax
  sar    %rax
  mov    %rax,-0x8(%rbp)
L51:
  movq   $0x0,-0x10(%rbp)
  jmp    L91
L47:
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  pxor   %xmm1,%xmm1
  cvtsi2sd %rax,%xmm1
  movsd  D14(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  cvtss2sd %xmm0,%xmm0
  addsd  %xmm0,%xmm0
  divsd  %xmm0,%xmm1
  cvttsd2si %xmm1,%rax
  mov    %rax,%rdi
  call   <sin@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mulss  -0x14(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x30(%rbp),%rax
  sub    -0x10(%rbp),%rax
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x30(%rbp),%rax
  sub    -0x10(%rbp),%rax
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mulss  -0x14(%rbp),%xmm0
  movss  %xmm0,(%rax)
  addq   $0x1,-0x10(%rbp)
L91:
  mov    -0x10(%rbp),%rax
  cmp    -0x8(%rbp),%rax
  jl     L47
L7:
  nop
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D19
datatype: byte[4]
name: read_data
arguments: tag: D14
datatype: f64

tool: {"D19": [0x00,0x00,0x00,0x5f]}

tool: D14: 3.1415926535897

assistant: ```c
void rmean_and_taper(float data[], long int len, float del, int rmean, float taperlen) {
  long i;
  float mean, fac;
  long talen;
  if (rmean) {
    mean = 0;
    for (i = 0; i < len; i++)
      mean += data[i] / len;
    for (i = 0; i < len; i++)
      data[i] -= mean;
  }
  if (taperlen > 0.0) {
    talen = (unsigned long int)(taperlen / del);
    if (talen > len / 2)
      talen = len / 2;
    for (i = 0; i < talen; i++) {
      fac = sin((i + 1) * 3.1415926535897 / (2. * (float)(talen + 1)));
      data[i] *= fac;
      data[len - i - 1] *= fac;
    }
  }
}
```