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

```asm
<bessi>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  movq   %xmm1,%rbp
  cvttsd2si %xmm0,%r12d
  test   %r12d,%r12d
  je     L169
  cmp    $0x1,%r12d
  je     L23
  ucomisd D48(%rip),%xmm1
  jp     L84
  pxor   %xmm0,%xmm0
  jne    L84
L178:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L169:
  movapd %xmm1,%xmm0
  mov    $0x1,%eax
  call   <bessi0@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  jmp    L178
L23:
  movapd %xmm1,%xmm0
  mov    $0x1,%eax
  call   <bessi1@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  jmp    L178
L84:
  movq   %rbp,%xmm0
  andpd  D90(%rip),%xmm0
  movsd  D13(%rip),%xmm1
  divsd  %xmm0,%xmm1
  movsd  %xmm1,0x8(%rsp)
  pxor   %xmm0,%xmm0
  cvtsi2sd %r12d,%xmm0
  mulsd  D33(%rip),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L167
  sqrtsd %xmm0,%xmm0
L115:
  cvttsd2si %xmm0,%eax
  add    %r12d,%eax
  add    %eax,%eax
  test   %eax,%eax
  jle    L157
  mov    D48(%rip),%r13
  movq   %r13,%xmm1
  mov    D116(%rip),%rbx
  movq   D90(%rip),%xmm4
  movsd  D114(%rip),%xmm3
  movsd  D106(%rip),%xmm2
  jmp    L146
L167:
  call   <sqrt@plt>
  jmp    L115
L2:
  movq   %rbx,%xmm1
  movq   %xmm0,%rbx
L108:
  cmp    %eax,%r12d
  je     L1
L53:
  sub    $0x1,%eax
  je     L22
L146:
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  0x8(%rsp),%xmm0
  movq   %rbx,%xmm6
  mulsd  %xmm6,%xmm0
  addsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  andpd  %xmm4,%xmm1
  comisd %xmm3,%xmm1
  jbe    L2
  movq   %r13,%xmm7
  mulsd  %xmm2,%xmm7
  movq   %xmm7,%r13
  movq   %rbx,%xmm1
  mulsd  %xmm2,%xmm1
  mulsd  %xmm2,%xmm0
  movq   %xmm0,%rbx
  jmp    L108
L1:
  movq   %xmm1,%r13
  jmp    L53
L157:
  mov    D48(%rip),%r13
  mov    D116(%rip),%rbx
L22:
  movq   %rbp,%xmm0
  mov    $0x1,%eax
  call   <bessi0@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movq   %rbx,%xmm7
  divsd  %xmm7,%xmm0
  movq   %r13,%xmm2
  mulsd  %xmm2,%xmm0
  pxor   %xmm1,%xmm1
  movq   %rbp,%xmm7
  comisd %xmm7,%xmm1
  jbe    L178
  test   $0x1,%r12b
  je     L178
  xorpd  D98(%rip),%xmm0
  jmp    L178
```

tool_calls: name: retrieve_data
arguments: data_tag: D48
datatype: f64
name: retrieve_data
arguments: data_tag: D90
datatype: qword[2]
name: retrieve_data
arguments: data_tag: D13
datatype: f64
name: retrieve_data
arguments: data_tag: D33
datatype: f64
name: retrieve_data
arguments: data_tag: D116
datatype: f64
name: retrieve_data
arguments: data_tag: D114
datatype: f64
name: retrieve_data
arguments: data_tag: D106
datatype: byte[8]
name: retrieve_data
arguments: data_tag: D98
datatype: byte[16]

tool: D48: 0

tool: {"D90": [0x7fffffffffffffff,0x0000000000000000]}

tool: D13: 2

tool: D33: 40

tool: D116: 1

tool: D114: 10000000000

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

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

assistant: ```c
double bessi(nn, x)
double x;
double nn;
{
  int j, n;
  double bi, bim, bip, tox, ans;
  n = (int)nn;
  if (n == 0)
    return bessi0(x);
  if (n == 1)
    return bessi1(x);
  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;
  }
}
```