user: What would the C source look like for the assembly code provided here?

```asm
<bessi>:
  endbr64
  push   %rbp
  push   %rbx
  mov    %edi,%ebx
  sub    $0x28,%rsp
  movss  %xmm0,0x1c(%rsp)
  cmp    $0x1,%edi
  jle    L20
L88:
  movss  0x1c(%rsp),%xmm5
  pxor   %xmm6,%xmm6
  ucomiss %xmm6,%xmm5
  jp     L149
  pxor   %xmm0,%xmm0
  jne    L149
L83:
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  ret
  nopw   0x0(%rax,%rax,1)
L149:
  movss  0x1c(%rsp),%xmm0
  call   <fabs@plt>
  pxor   %xmm7,%xmm7
  movapd %xmm0,%xmm1
  movsd  D73(%rip),%xmm0
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm7
  pxor   %xmm0,%xmm0
  movss  %xmm7,0x18(%rsp)
  cvtsi2sd %ebx,%xmm0
  mulsd  D65(%rip),%xmm0
  call   <sqrt@plt>
  movl   $0x0,0x14(%rsp)
  lea    (%rbx,%rax,1),%ebp
  add    %ebp,%ebp
  test   %ebp,%ebp
  jle    L98
  movss  D62(%rip),%xmm2
  pxor   %xmm0,%xmm0
  jmp    L148
  nopl   0x0(%rax)
L145:
  pxor   %xmm0,%xmm0
  cvtss2sd %xmm2,%xmm2
  cvtss2sd %xmm1,%xmm1
  pxor   %xmm4,%xmm4
  cvtss2sd 0x14(%rsp),%xmm0
  mulsd  D93(%rip),%xmm0
  mulsd  D93(%rip),%xmm2
  mulsd  D93(%rip),%xmm1
  cvtsd2ss %xmm0,%xmm4
  pxor   %xmm0,%xmm0
  movss  %xmm4,0x14(%rsp)
  cvtsd2ss %xmm2,%xmm0
  pxor   %xmm2,%xmm2
  cvtsd2ss %xmm1,%xmm2
  cmp    %ebp,%ebx
  je     L19
L12:
  sub    $0x1,%ebp
  je     L106
L148:
  pxor   %xmm1,%xmm1
  movss  %xmm2,0x10(%rsp)
  cvtsi2ss %ebp,%xmm1
  mulss  0x18(%rsp),%xmm1
  mulss  %xmm2,%xmm1
  addss  %xmm0,%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm1,0xc(%rsp)
  call   <fabs@plt>
  comisd D38(%rip),%xmm0
  movss  0xc(%rsp),%xmm1
  movss  0x10(%rsp),%xmm2
  ja     L145
  movaps %xmm2,%xmm0
  movaps %xmm1,%xmm2
  cmp    %ebp,%ebx
  jne    L12
L19:
  movss  %xmm0,0x14(%rsp)
  sub    $0x1,%ebp
  jne    L148
  nopw   0x0(%rax,%rax,1)
L106:
  movss  0x1c(%rsp),%xmm0
  movss  %xmm2,0xc(%rsp)
  call   <bessi0@plt>
  movss  0xc(%rsp),%xmm2
  pxor   %xmm6,%xmm6
  comiss 0x1c(%rsp),%xmm6
  divss  %xmm2,%xmm0
  mulss  0x14(%rsp),%xmm0
  jbe    L83
  and    $0x1,%ebx
  je     L83
  xorps  D14(%rip),%xmm0
  jmp    L83
  nopl   (%rax)
L20:
  lea    D37(%rip),%rdi
  call   <nrerror@plt>
  jmp    L88
  nopl   0x0(%rax)
L98:
  movss  D62(%rip),%xmm2
  jmp    L106
```

tool_calls: name: read_data
arguments: data_tag: D73
type_guessed: f64
name: read_data
arguments: data_tag: D65
type_guessed: f64
name: read_data
arguments: data_tag: D62
type_guessed: f32
name: read_data
arguments: data_tag: D93
type_guessed: byte[8]
name: read_data
arguments: data_tag: D38
type_guessed: f64[2]
name: read_data
arguments: data_tag: D14
type_guessed: byte[16]
name: read_data
arguments: data_tag: D37
type_guessed: string

tool: D73: 2

tool: D65: 40

tool: D62: 1

tool: {"D93": [0xbb,0xbd,0xd7,0xd9,0xdf,0x7c,0xdb,0x3d]}

tool: {"D38": [10000000000.0,1e-10]}

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

tool: D37: Index n less than 2 in bessi

assistant: ```c
float bessi(int n, float x) {
  float bessi0(float x);
  void nrerror(char error_text[]);
  int j;
  float bi, bim, bip, tox, ans;
  if (n < 2)
    nrerror("Index n less than 2 in bessi");
  if (x == 0.0)
    return 0.0;
  else {
    tox = 2.0 / fabs(x);
    bip = ans = 0.0;
    bi = 1.0;
    for (j = 2 * (n + (int)sqrt(40.0 * n)); j > 0; j--) {
      bim = bip + j * tox * bi;
      bip = bi;
      bi = bim;
      if (fabs(bi) > 1.0e10) {
        ans *= 1.0e-10;
        bi *= 1.0e-10;
        bip *= 1.0e-10;
      }
      if (j == n)
        ans = bip;
    }
    ans *= bessi0(x) / bi;
    return x < 0.0 && (n & 1) ? -ans : ans;
  }
}
```