user: 请将以下的汇编代码转换成C语言代码：

```asm
<sift_threshold_and_quantize_feature_vector>:
  endbr64
  push   %r13
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  mov    %esi,%ebp
  push   %rbx
  sub    $0x28,%rsp
  movaps %xmm2,0x10(%rsp)
  movss  %xmm0,(%rsp)
  call   <array_l2norm@plt>
  test   %ebp,%ebp
  jle    L89
  lea    -0x1(%rbp),%r13d
  mulss  (%rsp),%xmm0
  movaps 0x10(%rsp),%xmm2
  cmp    $0x2,%r13d
  jbe    L126
  mov    %ebp,%edx
  lea    0x10(%r12),%rbx
  movaps %xmm0,%xmm3
  mov    %r12,%rax
  shr    $0x2,%edx
  shufps $0x0,%xmm3,%xmm3
  sub    $0x1,%edx
  shl    $0x4,%rdx
  add    %rbx,%rdx
L120:
  movups (%rax),%xmm1
  add    $0x10,%rax
  minps  %xmm3,%xmm1
  movups %xmm1,-0x10(%rax)
  cmp    %rax,%rdx
  jne    L120
  mov    %ebp,%eax
  and    $0xfffffffc,%eax
  cmp    %eax,%ebp
  je     L16
L110:
  movslq %eax,%rdx
  shl    $0x2,%rdx
  lea    (%r12,%rdx,1),%rcx
  movss  (%rcx),%xmm1
  minss  %xmm0,%xmm1
  movss  %xmm1,(%rcx)
  lea    0x1(%rax),%ecx
  cmp    %ecx,%ebp
  jle    L5
  lea    0x4(%r12,%rdx,1),%rcx
  add    $0x2,%eax
  movss  (%rcx),%xmm1
  minss  %xmm0,%xmm1
  movss  %xmm1,(%rcx)
  cmp    %eax,%ebp
  jle    L5
  lea    0x8(%r12,%rdx,1),%rax
  movss  (%rax),%xmm1
  minss  %xmm0,%xmm1
  movss  %xmm1,(%rax)
L5:
  mov    %ebp,%esi
  mov    %r12,%rdi
  movaps %xmm2,(%rsp)
  call   <array_l2norm@plt>
  pxor   %xmm6,%xmm6
  cvtss2sd %xmm0,%xmm6
  cmp    $0x2,%r13d
  jbe    L11
  movaps (%rsp),%xmm2
  lea    0x10(%r12),%rbx
L100:
  mov    %ebp,%edx
  movapd %xmm6,%xmm5
  movaps D33(%rip),%xmm3
  mov    %r12,%rax
  shr    $0x2,%edx
  movapd D13(%rip),%xmm4
  unpcklpd %xmm5,%xmm5
  sub    $0x1,%edx
  shl    $0x4,%rdx
  add    %rbx,%rdx
  nopl   0x0(%rax)
L134:
  movlps 0x8(%rax),%xmm2
  cvtps2pd (%rax),%xmm0
  add    $0x10,%rax
  mulpd  %xmm4,%xmm0
  cvtps2pd %xmm2,%xmm1
  mulpd  %xmm4,%xmm1
  divpd  %xmm5,%xmm0
  divpd  %xmm5,%xmm1
  cvttpd2dq %xmm0,%xmm0
  cvttpd2dq %xmm1,%xmm1
  punpcklqdq %xmm1,%xmm0
  cvtdq2ps %xmm0,%xmm0
  movaps %xmm0,%xmm1
  cmpltps %xmm3,%xmm1
  andps  %xmm1,%xmm0
  andnps %xmm3,%xmm1
  orps   %xmm0,%xmm1
  movups %xmm1,-0x10(%rax)
  cmp    %rax,%rdx
  jne    L134
  mov    %ebp,%eax
  and    $0xfffffffc,%eax
  test   $0x3,%bpl
  je     L118
L115:
  movslq %eax,%rdx
  movsd  D13(%rip),%xmm2
  pxor   %xmm0,%xmm0
  movss  D33(%rip),%xmm1
  shl    $0x2,%rdx
  lea    (%r12,%rdx,1),%rcx
  cvtss2sd (%rcx),%xmm0
  mulsd  %xmm2,%xmm0
  divsd  %xmm6,%xmm0
  cvttsd2si %xmm0,%esi
  pxor   %xmm0,%xmm0
  cvtsi2ss %esi,%xmm0
  minss  %xmm1,%xmm0
  movss  %xmm0,(%rcx)
  lea    0x1(%rax),%ecx
  cmp    %ebp,%ecx
  jge    L118
  lea    0x4(%r12,%rdx,1),%rcx
  pxor   %xmm0,%xmm0
  add    $0x2,%eax
  cvtss2sd (%rcx),%xmm0
  mulsd  %xmm2,%xmm0
  divsd  %xmm6,%xmm0
  cvttsd2si %xmm0,%esi
  pxor   %xmm0,%xmm0
  cvtsi2ss %esi,%xmm0
  minss  %xmm1,%xmm0
  movss  %xmm0,(%rcx)
  cmp    %eax,%ebp
  jle    L118
  lea    0x8(%r12,%rdx,1),%rax
  pxor   %xmm0,%xmm0
  cvtss2sd (%rax),%xmm0
  mulsd  %xmm2,%xmm0
  divsd  %xmm6,%xmm0
  cvttsd2si %xmm0,%edx
  pxor   %xmm0,%xmm0
  cvtsi2ss %edx,%xmm0
  minss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
L118:
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nop
L16:
  mov    %ebp,%esi
  mov    %r12,%rdi
  movaps %xmm2,(%rsp)
  call   <array_l2norm@plt>
  pxor   %xmm6,%xmm6
  movaps (%rsp),%xmm2
  cvtss2sd %xmm0,%xmm6
  jmp    L100
  nop
L89:
  add    $0x28,%rsp
  mov    %ebp,%esi
  mov    %r12,%rdi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  jmp    1050 <array_l2norm@plt>
  nopl   0x0(%rax)
L11:
  xor    %eax,%eax
  jmp    L115
L126:
  xor    %eax,%eax
  jmp    L110
```

tool_calls: name: disassemble_data
arguments: data_label: D33
type: byte[16]
name: disassemble_data
arguments: data_label: D13
type: f64[2]

tool: {"D33": [0x00,0x00,0x7f,0x43,0x00,0x00,0x7f,0x43,0x00,0x00,0x7f,0x43,0x00,0x00,0x7f,0x43]}

tool: {"D13": [512.0,512.0]}

assistant: ```c
void sift_threshold_and_quantize_feature_vector(float *descr, int n, float threshold) {
  float l2norm = array_l2norm(descr, n);
  for (int i = 0; i < n; i++) {
    descr[i] = ((descr[i]) < (threshold * l2norm) ? (descr[i]) : (threshold * l2norm));
  }
  l2norm = array_l2norm(descr, n);
  for (int i = 0; i < n; i++) {
    descr[i] = (int)(descr[i] * 512.0 / l2norm);
    descr[i] = ((descr[i]) < (255) ? (descr[i]) : (255));
  }
}
```