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

```asm
<compCorr>:
  endbr64
  push   %r12
  pxor   %xmm4,%xmm4
  push   %rbp
  mov    %rdx,%rbp
  push   %rbx
  mov    %rsi,%rbx
  sub    $0x10,%rsp
  movslq 0x30(%rsp),%rsi
  test   %esi,%esi
  jle    L64
  mov    %r9d,%eax
  lea    -0x1(%rsi),%edx
  sub    %esi,%eax
  cmp    $0x2,%edx
  jbe    L9
  movslq %esi,%r10
  movslq %r9d,%rdx
  pxor   %xmm4,%xmm4
  movaps %xmm4,%xmm6
  movaps %xmm4,%xmm3
  movaps %xmm4,%xmm5
  sub    %r10,%rdx
  movslq %r8d,%r10
  lea    (%rcx,%rdx,4),%r11
  sub    %r10,%rdx
  mov    %esi,%r10d
  shr    $0x2,%r10d
  lea    (%rcx,%rdx,4),%r12
  xor    %edx,%edx
  shl    $0x4,%r10
  nopl   (%rax)
L61:
  movups (%r11,%rdx,1),%xmm0
  movups (%r12,%rdx,1),%xmm1
  add    $0x10,%rdx
  movaps %xmm0,%xmm2
  mulps  %xmm1,%xmm2
  mulps  %xmm1,%xmm1
  mulps  %xmm0,%xmm0
  addss  %xmm2,%xmm5
  movaps %xmm2,%xmm7
  shufps $0x55,%xmm2,%xmm7
  addss  %xmm7,%xmm5
  movaps %xmm2,%xmm7
  unpckhps %xmm2,%xmm7
  shufps $0xff,%xmm2,%xmm2
  addss  %xmm7,%xmm5
  addss  %xmm2,%xmm5
  movaps %xmm1,%xmm2
  addss  %xmm3,%xmm2
  movaps %xmm1,%xmm3
  shufps $0x55,%xmm1,%xmm3
  addss  %xmm3,%xmm2
  movaps %xmm1,%xmm3
  unpckhps %xmm1,%xmm3
  shufps $0xff,%xmm1,%xmm1
  addss  %xmm3,%xmm2
  movaps %xmm2,%xmm3
  movaps %xmm0,%xmm2
  addss  %xmm1,%xmm3
  movaps %xmm0,%xmm1
  shufps $0x55,%xmm0,%xmm2
  addss  %xmm6,%xmm1
  addss  %xmm2,%xmm1
  movaps %xmm0,%xmm2
  unpckhps %xmm0,%xmm2
  shufps $0xff,%xmm0,%xmm0
  addss  %xmm2,%xmm1
  movaps %xmm1,%xmm6
  addss  %xmm0,%xmm6
  cmp    %r10,%rdx
  jne    L61
  mov    %esi,%r11d
  and    $0xfffffffc,%r11d
  mov    %r11d,%edx
  cmp    %esi,%r11d
  je     L33
L29:
  mov    %esi,%r10d
  sub    %r11d,%r10d
  cmp    $0x1,%r10d
  je     L2
  movslq %r9d,%r9
  sub    %rsi,%r9
  lea    (%r9,%r11,1),%rsi
  movq   (%rcx,%rsi,4),%xmm0
  movslq %r8d,%rsi
  sub    %rsi,%r9
  mov    %r10d,%esi
  add    %r11,%r9
  movaps %xmm0,%xmm2
  and    $0xfffffffe,%esi
  movq   (%rcx,%r9,4),%xmm1
  mulps  %xmm0,%xmm0
  add    %esi,%edx
  mulps  %xmm1,%xmm2
  mulps  %xmm1,%xmm1
  addss  %xmm2,%xmm5
  shufps $0xe5,%xmm2,%xmm2
  addss  %xmm2,%xmm5
  movaps %xmm1,%xmm2
  shufps $0xe5,%xmm1,%xmm1
  addss  %xmm3,%xmm2
  movaps %xmm1,%xmm3
  movaps %xmm0,%xmm1
  shufps $0xe5,%xmm0,%xmm0
  addss  %xmm6,%xmm1
  movaps %xmm0,%xmm6
  addss  %xmm2,%xmm3
  addss  %xmm1,%xmm6
  cmp    %esi,%r10d
  je     L33
L2:
  add    %edx,%eax
  movslq %eax,%rdx
  sub    %r8d,%eax
  movss  (%rcx,%rdx,4),%xmm0
  cltq
  movss  (%rcx,%rax,4),%xmm1
  movaps %xmm0,%xmm2
  mulss  %xmm1,%xmm2
  mulss  %xmm0,%xmm0
  mulss  %xmm1,%xmm1
  addss  %xmm2,%xmm5
  addss  %xmm0,%xmm6
  addss  %xmm1,%xmm3
L33:
  comiss %xmm4,%xmm3
  movss  %xmm6,0x4(%rsp)
  ja     L71
L64:
  movl   $0x0,(%rdi)
  movl   $0x0,(%rbx)
  movss  %xmm4,0x0(%rbp)
  add    $0x10,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax)
L71:
  movaps %xmm5,%xmm0
  movss  %xmm3,0x8(%rsp)
  mulss  %xmm5,%xmm0
  movss  %xmm5,0xc(%rsp)
  divss  %xmm3,%xmm0
  movss  %xmm0,(%rdi)
  movaps %xmm5,%xmm0
  divss  %xmm3,%xmm0
  call   <fabs@plt>
  pxor   %xmm0,%xmm0
  movss  0xc(%rsp),%xmm5
  cvtsi2ss %rax,%xmm0
  movss  %xmm0,(%rbx)
  movaps %xmm5,%xmm0
  call   <fabs@plt>
  movss  0x8(%rsp),%xmm3
  mov    %rax,%r12
  movaps %xmm3,%xmm0
  call   <sqrt@plt>
  movss  0x4(%rsp),%xmm6
  mov    %rax,%rbx
  movaps %xmm6,%xmm0
  call   <sqrt@plt>
  pxor   %xmm0,%xmm0
  pxor   %xmm1,%xmm1
  pxor   %xmm4,%xmm4
  cvtsi2ss %rbx,%xmm0
  cvtsi2ss %rax,%xmm1
  cvtsi2ss %r12,%xmm4
  mulss  %xmm1,%xmm0
  divss  %xmm0,%xmm4
  movss  %xmm4,0x0(%rbp)
  add    $0x10,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L9:
  pxor   %xmm4,%xmm4
  xor    %r11d,%r11d
  xor    %edx,%edx
  movaps %xmm4,%xmm6
  movaps %xmm4,%xmm3
  movaps %xmm4,%xmm5
  jmp    L29
```

assistant: ```c
void compCorr(float *cc, float *gc, float *pm, float *buffer, int lag, int bLen, int sRange) {
  int i;
  float ftmp1, ftmp2, ftmp3;
  ftmp1 = 0.0;
  ftmp2 = 0.0;
  ftmp3 = 0.0;
  for (i = 0; i < sRange; i++) {
    ftmp1 += buffer[bLen - sRange + i] * buffer[bLen - sRange + i - lag];
    ftmp2 += buffer[bLen - sRange + i - lag] * buffer[bLen - sRange + i - lag];
    ftmp3 += buffer[bLen - sRange + i] * buffer[bLen - sRange + i];
  }
  if (ftmp2 > 0.0) {
    *cc = ftmp1 * ftmp1 / ftmp2;
    *gc = (float)fabs(ftmp1 / ftmp2);
    *pm = (float)fabs(ftmp1) / ((float)sqrt(ftmp2) * (float)sqrt(ftmp3));
  } else {
    *cc = 0.0;
    *gc = 0.0;
    *pm = 0.0;
  }
}
```