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

```asm
<cephes_jnf>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %edi,-0x34(%rbp)
  movss  %xmm0,-0x38(%rbp)
  movsd  D2(%rip),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  cmpl   $0x0,-0x34(%rbp)
  jns    L88
  negl   -0x34(%rbp)
  mov    -0x34(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  jne    L17
  movl   $0x1,-0x18(%rbp)
  jmp    L31
L17:
  movl   $0xffffffff,-0x18(%rbp)
  jmp    L31
L88:
  movl   $0x1,-0x18(%rbp)
L31:
  pxor   %xmm0,%xmm0
  comiss -0x38(%rbp),%xmm0
  jbe    L172
  mov    -0x34(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L43
  negl   -0x18(%rbp)
L43:
  movss  -0x38(%rbp),%xmm0
  movss  D15(%rip),%xmm1
  xorps  %xmm1,%xmm0
  movss  %xmm0,-0x38(%rbp)
L172:
  cmpl   $0x0,-0x34(%rbp)
  jne    L151
  mov    -0x38(%rbp),%eax
  movd   %eax,%xmm0
  call   <cephes_j0f@plt>
  imul   -0x18(%rbp),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  jmp    L159
L151:
  cmpl   $0x1,-0x34(%rbp)
  jne    L25
  mov    -0x38(%rbp),%eax
  movd   %eax,%xmm0
  call   <cephes_j1f@plt>
  imul   -0x18(%rbp),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  jmp    L159
L25:
  cmpl   $0x2,-0x34(%rbp)
  jne    L82
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x18(%rbp),%xmm2
  movsd  %xmm2,-0x40(%rbp)
  mov    -0x38(%rbp),%eax
  movd   %eax,%xmm0
  call   <cephes_j1f@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  addsd  %xmm0,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd -0x38(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  mov    -0x38(%rbp),%eax
  movd   %eax,%xmm0
  call   <cephes_j0f@plt>
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  -0x48(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  mulsd  -0x40(%rbp),%xmm0
  cvtsd2ss %xmm0,%xmm0
  jmp    L159
L82:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x38(%rbp),%xmm1
  movsd  -0x8(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jbe    L41
  pxor   %xmm0,%xmm0
  jmp    L159
L41:
  movl   $0x18,-0x1c(%rbp)
  mov    -0x34(%rbp),%edx
  mov    -0x1c(%rbp),%eax
  add    %edx,%eax
  add    %eax,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x28(%rbp)
  movss  -0x28(%rbp),%xmm0
  movss  %xmm0,-0x20(%rbp)
  movss  -0x38(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  movss  %xmm0,-0x14(%rbp)
L40:
  movss  -0x28(%rbp),%xmm0
  movss  D51(%rip),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x28(%rbp)
  movss  -0x14(%rbp),%xmm0
  movaps %xmm0,%xmm1
  divss  -0x20(%rbp),%xmm1
  movss  -0x28(%rbp),%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x20(%rbp)
  subl   $0x1,-0x1c(%rbp)
  cmpl   $0x0,-0x1c(%rbp)
  jg     L40
  movss  D76(%rip),%xmm0
  movss  %xmm0,-0x28(%rbp)
  movss  D76(%rip),%xmm0
  divss  -0x38(%rbp),%xmm0
  movss  %xmm0,-0x10(%rbp)
  movss  -0x20(%rbp),%xmm0
  mulss  -0x10(%rbp),%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    -0x34(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  add    %eax,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x24(%rbp)
L96:
  movss  -0x2c(%rbp),%xmm0
  mulss  -0x24(%rbp),%xmm0
  movss  -0x28(%rbp),%xmm1
  mulss  -0x38(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  -0x10(%rbp),%xmm1
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0xc(%rbp)
  movss  -0x2c(%rbp),%xmm0
  movss  %xmm0,-0x28(%rbp)
  movss  -0xc(%rbp),%xmm0
  movss  %xmm0,-0x2c(%rbp)
  movss  -0x24(%rbp),%xmm0
  movss  D51(%rip),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x24(%rbp)
  subl   $0x1,-0x1c(%rbp)
  cmpl   $0x0,-0x1c(%rbp)
  jg     L96
  movss  -0x28(%rbp),%xmm0
  movss  %xmm0,-0x24(%rbp)
  pxor   %xmm0,%xmm0
  comiss -0x24(%rbp),%xmm0
  jbe    L194
  movss  -0x24(%rbp),%xmm0
  movss  D15(%rip),%xmm1
  xorps  %xmm1,%xmm0
  movss  %xmm0,-0x24(%rbp)
L194:
  movss  -0x2c(%rbp),%xmm0
  movss  %xmm0,-0x20(%rbp)
  pxor   %xmm0,%xmm0
  comiss -0x20(%rbp),%xmm0
  jbe    L189
  movss  -0x20(%rbp),%xmm0
  movss  D15(%rip),%xmm1
  xorps  %xmm1,%xmm0
  movss  %xmm0,-0x20(%rbp)
L189:
  movss  -0x24(%rbp),%xmm0
  comiss -0x20(%rbp),%xmm0
  jbe    L21
  mov    -0x38(%rbp),%eax
  movd   %eax,%xmm0
  call   <cephes_j1f@plt>
  imul   -0x18(%rbp),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  divss  -0x28(%rbp),%xmm0
  movss  %xmm0,-0x20(%rbp)
  jmp    L119
L21:
  mov    -0x38(%rbp),%eax
  movd   %eax,%xmm0
  call   <cephes_j0f@plt>
  imul   -0x18(%rbp),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  divss  -0x2c(%rbp),%xmm0
  movss  %xmm0,-0x20(%rbp)
L119:
  movss  -0x20(%rbp),%xmm0
L159:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D2
type_guessed: byte[8]
name: unpack_data
arguments: data_label: D15
type_guessed: byte[4]
name: unpack_data
arguments: data_label: D51
type_guessed: f32
name: unpack_data
arguments: data_label: D76
type_guessed: f32

tool: {"D2": [0xfd,0xf4,0x02,0x01,0x00,0x00,0x70,0x3e]}

tool: {"D15": [0x00,0x00,0x00,0x80]}

tool: D51: 2

tool: D76: 1

assistant: ```c
float cephes_jnf(int n, float x) {
  const double MACHEP = 5.9604645e-08;
  float pkm2, pkm1, pk, xk, r, ans;
  int k, sign;
  if (n < 0) {
    n = -n;
    if ((n & 1) == 0)
      sign = 1;
    else
      sign = -1;
  } else {
    sign = 1;
  }
  if (x < 0.0) {
    if (n & 1)
      sign = -sign;
    x = -x;
  }
  if (n == 0)
    return (sign * cephes_j0f(x));
  if (n == 1)
    return (sign * cephes_j1f(x));
  if (n == 2)
    return (sign * (2.0 * cephes_j1f(x) / x - cephes_j0f(x)));
  if (x < MACHEP)
    return (0.0);
  k = 24;
  pk = 2 * (n + k);
  ans = pk;
  xk = x * x;
  do {
    pk -= 2.0;
    ans = pk - (xk / ans);
  } while (--k > 0);
  pk = 1.0;
  const float xinv = 1.0 / x;
  pkm1 = ans * xinv;
  k = n - 1;
  r = (float)(2 * k);
  do {
    pkm2 = (pkm1 * r - pk * x) * xinv;
    pk = pkm1;
    pkm1 = pkm2;
    r -= 2.0;
  } while (--k > 0);
  r = pk;
  if (r < 0)
    r = -r;
  ans = pkm1;
  if (ans < 0)
    ans = -ans;
  if (r > ans)
    ans = sign * cephes_j1f(x) / pk;
  else
    ans = sign * cephes_j0f(x) / pkm1;
  return (ans);
}
```