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

```asm
<feat_normalize>:
  endbr64
  test   %esi,%esi
  jle    L64
  push   %r15
  mov    %esi,%r15d
  mov    $0x1,%esi
  mov    %rdi,%rax
  push   %r14
  mov    %edx,%r14d
  movslq %edx,%rdx
  pxor   %xmm4,%xmm4
  push   %r13
  sub    %rdx,%rsi
  lea    0x0(,%rdx,4),%r13
  push   %r12
  neg    %r13
  xor    %r12d,%r12d
  shl    $0x2,%rsi
  push   %rbp
  mov    %rcx,%rbp
  lea    -0x1(%r14),%ecx
  push   %rbx
  lea    0x4(,%rcx,4),%rdi
  sub    $0x28,%rsp
  nopl   0x0(%rax,%rax,1)
L68:
  lea    (%rax,%rdi,1),%rbx
  movapd %xmm4,%xmm0
  test   %r14d,%r14d
  jle    L133
  nopl   0x0(%rax)
L137:
  movss  (%rax),%xmm1
  add    $0x4,%rax
  mulss  %xmm1,%xmm1
  cvtss2sd %xmm1,%xmm1
  addsd  %xmm1,%xmm0
  cmp    %rax,%rbx
  jne    L137
  ucomisd %xmm0,%xmm4
  ja     L18
L39:
  sqrtsd %xmm0,%xmm0
L111:
  mov    %rbx,%rax
  add    %r13,%rax
  jae    L93
  lea    (%rbx,%rsi,1),%r8
  mov    %rbp,%rdx
  lea    -0x1(%rbx),%rcx
  sub    %r8,%rdx
  sub    %rax,%rcx
  cmp    $0x8,%rdx
  jbe    L28
  cmp    $0xb,%rcx
  jbe    L28
  mov    %rcx,%r9
  movapd %xmm0,%xmm5
  xor    %edx,%edx
  shr    $0x2,%r9
  unpcklpd %xmm5,%xmm5
  add    $0x1,%r9
  mov    %r9,%r8
  shr    $0x2,%r8
  shl    $0x4,%r8
  nopl   0x0(%rax,%rax,1)
L23:
  movlps 0x8(%rax,%rdx,1),%xmm3
  cvtps2pd (%rax,%rdx,1),%xmm1
  cvtps2pd %xmm3,%xmm2
  divpd  %xmm5,%xmm1
  divpd  %xmm5,%xmm2
  cvtpd2ps %xmm1,%xmm1
  cvtpd2ps %xmm2,%xmm2
  movlhps %xmm2,%xmm1
  movups %xmm1,0x0(%rbp,%rdx,1)
  add    $0x10,%rdx
  cmp    %r8,%rdx
  jne    L23
  mov    %r9,%r10
  and    $0xfffffffffffffffc,%r10
  lea    0x0(,%r10,4),%rdx
  lea    (%rax,%rdx,1),%r8
  add    %rbp,%rdx
  cmp    %r10,%r9
  je     L5
  pxor   %xmm1,%xmm1
  lea    0x4(%r8),%r9
  cvtss2sd (%r8),%xmm1
  divsd  %xmm0,%xmm1
  cvtsd2ss %xmm1,%xmm1
  movss  %xmm1,(%rdx)
  cmp    %r9,%rbx
  jbe    L5
  pxor   %xmm1,%xmm1
  lea    0x8(%r8),%r9
  cvtss2sd 0x4(%r8),%xmm1
  divsd  %xmm0,%xmm1
  cvtsd2ss %xmm1,%xmm1
  movss  %xmm1,0x4(%rdx)
  cmp    %r9,%rbx
  jbe    L5
  pxor   %xmm1,%xmm1
  cvtss2sd 0x8(%r8),%xmm1
  divsd  %xmm0,%xmm1
  cvtsd2ss %xmm1,%xmm1
  movss  %xmm1,0x8(%rdx)
L5:
  shr    $0x2,%rcx
  lea    0x4(,%rcx,4),%rdx
  add    %rdx,%rax
  add    %rdx,%rbp
L93:
  add    $0x1,%r12d
  cmp    %r12d,%r15d
  jne    L68
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L28:
  mov    %rbp,%r8
  mov    %rax,%rdx
  cs nopw 0x0(%rax,%rax,1)
L29:
  pxor   %xmm1,%xmm1
  add    $0x4,%rdx
  add    $0x4,%r8
  cvtss2sd -0x4(%rdx),%xmm1
  divsd  %xmm0,%xmm1
  cvtsd2ss %xmm1,%xmm1
  movss  %xmm1,-0x4(%r8)
  cmp    %rdx,%rbx
  ja     L29
  jmp    L5
  cs nopw 0x0(%rax,%rax,1)
L133:
  mov    %rax,%rbx
  jmp    L39
L64:
  ret
L18:
  mov    %rsi,0x18(%rsp)
  mov    %rdi,0x10(%rsp)
  movaps %xmm3,(%rsp)
  call   <sqrt@plt>
  mov    0x18(%rsp),%rsi
  movaps (%rsp),%xmm3
  pxor   %xmm4,%xmm4
  mov    0x10(%rsp),%rdi
  jmp    L111
```

assistant: ```c
void feat_normalize(float *feats, int N, int D, float *nfeats) {
  float *f = feats;
  float *nf = nfeats;
  for (int n = 0; n < N; n++) {
    double sum_of_squares = 0;
    for (int d = 0; d < D; d++, f++)
      sum_of_squares += *f * *f;
    double norm = sqrt(sum_of_squares);
    float *fend = f;
    f -= D;
    for (; f < fend; nf++, f++)
      *nf = *f / norm;
  }
}
```