user: Converte this assembly snippet into its equivalent C code:

```asm
<hunt>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  movss  %xmm0,-0x34(%rbp)
  mov    %rdx,-0x40(%rbp)
  mov    -0x30(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm1
  comiss %xmm1,%xmm0
  setae  %al
  movzbl %al,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  test   %rax,%rax
  je     L34
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  cmp    %rax,-0x30(%rbp)
  jae    L239
L34:
  mov    -0x40(%rbp),%rax
  movq   $0x0,(%rax)
  mov    -0x30(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,-0x18(%rbp)
  jmp    L166
L239:
  movq   $0x1,-0x10(%rbp)
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  movss  -0x34(%rbp),%xmm0
  comiss %xmm1,%xmm0
  setae  %al
  movzbl %al,%eax
  cmp    %eax,-0x1c(%rbp)
  jne    L81
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  cmp    %rax,-0x30(%rbp)
  je     L54
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  add    $0x1,%rax
  mov    %rax,-0x18(%rbp)
  jmp    L10
L206:
  mov    -0x40(%rbp),%rax
  mov    -0x18(%rbp),%rdx
  mov    %rdx,(%rax)
  shlq   -0x10(%rbp)
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jbe    L10
  mov    -0x30(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,-0x18(%rbp)
  jmp    L166
L10:
  mov    -0x18(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  movss  -0x34(%rbp),%xmm0
  comiss %xmm1,%xmm0
  setae  %al
  movzbl %al,%eax
  cmp    %eax,-0x1c(%rbp)
  je     L206
  jmp    L72
L81:
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  cmp    $0x1,%rax
  jne    L15
  mov    -0x40(%rbp),%rax
  movq   $0x0,(%rax)
  jmp    L107
L15:
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  lea    -0x1(%rax),%rcx
  mov    -0x40(%rbp),%rdx
  mov    %rcx,(%rdx)
  mov    %rax,-0x18(%rbp)
  jmp    L200
L105:
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x18(%rbp)
  shlq   -0x10(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    -0x18(%rbp),%rax
  jb     L109
  mov    -0x40(%rbp),%rax
  movq   $0x0,(%rax)
  jmp    L166
L109:
  mov    -0x18(%rbp),%rax
  sub    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x40(%rbp),%rax
  mov    %rdx,(%rax)
L200:
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  comiss -0x34(%rbp),%xmm0
  seta   %al
  movzbl %al,%eax
  cmp    %eax,-0x1c(%rbp)
  je     L105
L166:
  jmp    L72
L229:
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  shr    %rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  movss  -0x34(%rbp),%xmm0
  comiss %xmm1,%xmm0
  setae  %al
  movzbl %al,%eax
  cmp    %eax,-0x1c(%rbp)
  jne    L41
  mov    -0x40(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  mov    %rdx,(%rax)
  jmp    L72
L41:
  mov    -0x8(%rbp),%rax
  mov    %rax,-0x18(%rbp)
L72:
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x18(%rbp),%rax
  sub    %rdx,%rax
  cmp    $0x1,%rax
  jne    L229
  mov    -0x30(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  ucomiss -0x34(%rbp),%xmm0
  jp     L101
  ucomiss -0x34(%rbp),%xmm0
  jne    L101
  mov    -0x30(%rbp),%rax
  lea    -0x1(%rax),%rdx
  mov    -0x40(%rbp),%rax
  mov    %rdx,(%rax)
L101:
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  ucomiss -0x34(%rbp),%xmm0
  jp     L107
  ucomiss -0x34(%rbp),%xmm0
  jne    L107
  mov    -0x40(%rbp),%rax
  movq   $0x1,(%rax)
  jmp    L107
L54:
  nop
L107:
  pop    %rbp
  ret
```

assistant: ```c
void hunt(float xx[], unsigned long n, float x, unsigned long *jlo) {
  unsigned long jm, jhi, inc;
  int ascnd;
  ascnd = (xx[n] >= xx[1]);
  if (*jlo <= 0 || *jlo > n) {
    *jlo = 0;
    jhi = n + 1;
  } else {
    inc = 1;
    if (x >= xx[*jlo] == ascnd) {
      if (*jlo == n)
        return;
      jhi = (*jlo) + 1;
      while (x >= xx[jhi] == ascnd) {
        *jlo = jhi;
        inc += inc;
        jhi = (*jlo) + inc;
        if (jhi > n) {
          jhi = n + 1;
          break;
        }
      }
    } else {
      if (*jlo == 1) {
        *jlo = 0;
        return;
      }
      jhi = (*jlo)--;
      while (x < xx[*jlo] == ascnd) {
        jhi = (*jlo);
        inc <<= 1;
        if (inc >= jhi) {
          *jlo = 0;
          break;
        } else
          *jlo = jhi - inc;
      }
    }
  }
  while (jhi - (*jlo) != 1) {
    jm = (jhi + (*jlo)) >> 1;
    if (x >= xx[jm] == ascnd)
      *jlo = jm;
    else
      jhi = jm;
  }
  if (x == xx[n])
    *jlo = n - 1;
  if (x == xx[1])
    *jlo = 1;
}
```