user: Translate the below assembly code into C programming language:

```asm
<smileUtil_quickSort_float>:
  endbr64
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x2d8,%rsp
  xor    %edx,%edx
  xor    %r10d,%r10d
  mov    %fs:0x28,%rax
  mov    %rax,0x12c8(%rsp)
  xor    %eax,%eax
  movq   $0x0,(%rsp)
  mov    %rdi,%r8
  mov    %rsi,%r11
  mov    %rsi,0x960(%rsp)
L57:
  lea    -0x1(%r11),%rax
  cmp    %rdx,%rax
  jg     L42
L96:
  sub    $0x1,%r10
  jb     L104
  mov    0x960(%rsp,%r10,8),%r11
  mov    (%rsp,%r10,8),%rdx
  lea    -0x1(%r11),%rax
  cmp    %rdx,%rax
  jle    L96
L42:
  movss  (%r8,%rdx,4),%xmm1
  nopl   0x0(%rax,%rax,1)
L8:
  lea    0x0(,%rax,4),%rcx
  lea    (%r8,%rcx,1),%rsi
  movss  (%rsi),%xmm0
  cmp    %rax,%rdx
  jge    L204
  lea    -0x4(%r8,%rcx,1),%rcx
  jmp    L162
  nopl   0x0(%rax)
L79:
  sub    $0x1,%rax
  movss  (%rcx),%xmm0
  mov    %rcx,%rsi
  sub    $0x4,%rcx
  cmp    %rdx,%rax
  jle    L56
L162:
  comiss %xmm1,%xmm0
  jae    L79
L204:
  cmp    %rdx,%rax
  jle    L56
  lea    0x1(%rdx),%r9
  movss  %xmm0,(%r8,%rdx,4)
  lea    0x0(,%r9,4),%rdx
  lea    (%r8,%rdx,1),%rdi
  movss  (%rdi),%xmm0
  comiss %xmm0,%xmm1
  jb     L191
  cmp    %r9,%rax
  jle    L189
  lea    0x4(%r8,%rdx,1),%rcx
  mov    %r9,%rdx
  jmp    L111
  nopl   0x0(%rax)
L67:
  add    $0x4,%rcx
  cmp    %rax,%rdx
  je     L145
L111:
  movss  (%rcx),%xmm0
  add    $0x1,%rdx
  mov    %rcx,%rdi
  comiss %xmm0,%xmm1
  jae    L67
L40:
  cmp    %rax,%rdx
  jge    L110
  sub    $0x1,%rax
  movss  %xmm0,(%rsi)
  cmp    %rdx,%rax
  jg     L8
L110:
  mov    %rdx,%rax
  nopw   0x0(%rax,%rax,1)
L145:
  lea    0x1(%r10),%rcx
  lea    0x1(%rax),%rdx
  movss  %xmm1,(%rdi)
  mov    %rax,%rdi
  mov    %r11,0x960(%rsp,%rcx,8)
  mov    %rax,0x960(%rsp,%r10,8)
  mov    0x960(%rsp,%rcx,8),%r11
  mov    %rdx,(%rsp,%rcx,8)
  mov    (%rsp,%r10,8),%rsi
  mov    %r11,%r9
  sub    %rdx,%r9
  sub    %rsi,%rdi
  cmp    %rdi,%r9
  jle    L209
  mov    %rsi,(%rsp,%rcx,8)
  mov    %rax,0x960(%rsp,%rcx,8)
  mov    %rdx,(%rsp,%r10,8)
  mov    (%rsp,%rcx,8),%rdx
  mov    %r11,0x960(%rsp,%r10,8)
  mov    0x960(%rsp,%rcx,8),%r11
L209:
  mov    %rcx,%r10
  jmp    L57
  nopl   0x0(%rax)
L56:
  lea    (%r8,%rdx,4),%rdi
  movss  (%rdi),%xmm0
  comiss %xmm0,%xmm1
  jb     L40
  jmp    L110
L104:
  mov    0x12c8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L217
  add    $0x12d8,%rsp
  ret
L191:
  mov    %r9,%rdx
  jmp    L40
L217:
  call   <__stack_chk_fail@plt>
L189:
  mov    %r9,%rax
  jmp    L145
```

assistant: ```c
void smileUtil_quickSort_float(float *arr, long nEl) {
  float piv;
  long beg[300], end[300], swap;
  long i = 0, L, R;
  beg[0] = 0;
  end[0] = nEl;
  while (i >= 0) {
    L = beg[i];
    R = end[i] - 1;
    if (L < R) {
      piv = arr[L];
      while (L < R) {
        while (arr[R] >= piv && L < R)
          R--;
        if (L < R)
          arr[L++] = arr[R];
        while (arr[L] <= piv && L < R)
          L++;
        if (L < R)
          arr[R--] = arr[L];
      }
      arr[L] = piv;
      beg[i + 1] = L + 1;
      end[i + 1] = end[i];
      end[i++] = L;
      if (end[i] - beg[i] > end[i - 1] - beg[i - 1]) {
        swap = beg[i];
        beg[i] = beg[i - 1];
        beg[i - 1] = swap;
        swap = end[i];
        end[i] = end[i - 1];
        end[i - 1] = swap;
      }
    } else {
      i--;
    }
  }
}
```