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

```asm
<airBesselIn>:
  endbr64
  push   %rbx
  movapd %xmm0,%xmm6
  mov    %edi,%eax
  pxor   %xmm0,%xmm0
  neg    %eax
  cvtsi2ss %edi,%xmm0
  mov    %edi,%ebx
  sub    $0x20,%rsp
  ucomiss D23(%rip),%xmm0
  cmovbe %eax,%ebx
  test   %ebx,%ebx
  je     L130
  cmp    $0x1,%ebx
  je     L115
  pxor   %xmm4,%xmm4
  ucomisd %xmm4,%xmm6
  jp     L134
  movapd %xmm4,%xmm0
  je     L139
L134:
  comisd %xmm4,%xmm6
  movapd %xmm6,%xmm0
  ja     L18
  xorpd  D23(%rip),%xmm0
L18:
  movsd  D5(%rip),%xmm8
  movsd  %xmm6,0x8(%rsp)
  divsd  %xmm0,%xmm8
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebx,%xmm0
  mulsd  D99(%rip),%xmm0
  movsd  %xmm8,0x10(%rsp)
  call   <sqrt@plt>
  movsd  0x8(%rsp),%xmm6
  pxor   %xmm4,%xmm4
  add    %ebx,%eax
  add    %eax,%eax
  test   %eax,%eax
  jle    L70
  movsd  D60(%rip),%xmm2
  movapd %xmm4,%xmm3
  movapd %xmm4,%xmm7
  movsd  D10(%rip),%xmm5
  movsd  D76(%rip),%xmm9
  movsd  D86(%rip),%xmm0
  movsd  0x10(%rsp),%xmm8
  jmp    L136
  nopl   0x0(%rax)
L45:
  comisd %xmm0,%xmm1
  jbe    L36
L108:
  mulsd  %xmm5,%xmm7
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  mulsd  %xmm5,%xmm3
  mulsd  %xmm5,%xmm2
  cmp    %eax,%ebx
  je     L17
L2:
  sub    $0x1,%eax
  je     L128
L136:
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  mulsd  %xmm8,%xmm1
  mulsd  %xmm2,%xmm1
  addsd  %xmm3,%xmm1
  comisd %xmm4,%xmm1
  ja     L45
  comisd %xmm1,%xmm9
  ja     L108
L36:
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  cmp    %eax,%ebx
  jne    L2
L17:
  movapd %xmm3,%xmm7
  sub    $0x1,%eax
  jne    L136
  nopw   0x0(%rax,%rax,1)
L128:
  movapd %xmm6,%xmm0
  movsd  %xmm2,0x18(%rsp)
  movsd  %xmm7,0x10(%rsp)
  movsd  %xmm6,0x8(%rsp)
  call   <airBesselI0@plt>
  movsd  0x18(%rsp),%xmm2
  pxor   %xmm4,%xmm4
  movsd  0x8(%rsp),%xmm6
  movsd  0x10(%rsp),%xmm7
  divsd  %xmm2,%xmm0
  comisd %xmm6,%xmm4
  mulsd  %xmm7,%xmm0
  ja     L11
L139:
  add    $0x20,%rsp
  pop    %rbx
  ret
  nopl   (%rax)
L130:
  add    $0x20,%rsp
  movapd %xmm6,%xmm0
  pop    %rbx
  jmp    1080 <airBesselI0@plt>
  xchg   %ax,%ax
L11:
  xorpd  D23(%rip),%xmm0
  add    $0x20,%rsp
  pop    %rbx
  ret
  xchg   %ax,%ax
L115:
  add    $0x20,%rsp
  movapd %xmm6,%xmm0
  pop    %rbx
  jmp    1090 <airBesselI1@plt>
  xchg   %ax,%ax
L70:
  movsd  D60(%rip),%xmm2
  movapd %xmm4,%xmm7
  jmp    L128
```

tool_calls: name: parse_data
arguments: data_tag: D23
type_guessed: f32[4]
name: parse_data
arguments: data_tag: D5
type_guessed: f64
name: parse_data
arguments: data_tag: D99
type_guessed: f64
name: parse_data
arguments: data_tag: D60
type_guessed: f64
name: parse_data
arguments: data_tag: D10
type_guessed: byte[8]
name: parse_data
arguments: data_tag: D76
type_guessed: byte[8]
name: parse_data
arguments: data_tag: D86
type_guessed: f64

tool: {"D23": [0.0,-0.0,0.0,0.0]}

tool: D5: 2

tool: D99: 40

tool: D60: 1

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

tool: {"D76": [0x00,0x00,0x00,0x20,0x5f,0xa0,0x02,0xc2]}

tool: D86: 10000000000

assistant: ```c
double airBesselIn(int nn, double xx) {
  double tax, bb, bi, bim, bip;
  int ii, an, top;
  an = ((nn) > 0.0f ? (nn) : -(nn));
  if (0 == an) {
    return airBesselI0(xx);
  } else if (1 == an) {
    return airBesselI1(xx);
  }
  if (0.0 == xx) {
    return 0.0;
  }
  tax = 2.0 / ((xx) > 0.0f ? (xx) : -(xx));
  bip = bb = 0.0;
  bi = 1.0;
  top = 2 * (an + ((int)(sqrt(40.0 * an))));
  for (ii = top; ii > 0; ii--) {
    bim = bip + ii * tax * bi;
    bip = bi;
    bi = bim;
    if (((bi) > 0.0f ? (bi) : -(bi)) > 1.0e10) {
      bb *= 1.0e-10;
      bi *= 1.0e-10;
      bip *= 1.0e-10;
    }
    if (ii == an) {
      bb = bip;
    }
  }
  bb *= airBesselI0(xx) / bi;
  return (xx < 0.0 ? -bb : bb);
}
```