user: Please show me the C implementation that matches the assembly code listed below:

```asm
<airBesselI1>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  movq   %xmm0,%rbx
  movsd  %xmm0,(%rsp)
  comisd D216(%rip),%xmm0
  jbe    L34
L10:
  movsd  D28(%rip),%xmm0
  movsd  (%rsp),%xmm5
  comisd %xmm5,%xmm0
  jbe    L22
  movq   %rbx,%xmm3
  divsd  D88(%rip),%xmm3
  mulsd  %xmm3,%xmm3
  movapd %xmm3,%xmm0
  mulsd  D56(%rip),%xmm0
  addsd  D35(%rip),%xmm0
  mulsd  %xmm3,%xmm0
  addsd  D124(%rip),%xmm0
  mulsd  %xmm3,%xmm0
  addsd  D133(%rip),%xmm0
  mulsd  %xmm3,%xmm0
  addsd  D34(%rip),%xmm0
  mulsd  %xmm3,%xmm0
  addsd  D172(%rip),%xmm0
  mulsd  %xmm5,%xmm0
  movapd %xmm3,%xmm4
  mulsd  D244(%rip),%xmm4
  movsd  D163(%rip),%xmm2
  subsd  %xmm4,%xmm2
  movapd %xmm2,%xmm1
  mulsd  %xmm3,%xmm1
  subsd  D110(%rip),%xmm1
  mulsd  %xmm3,%xmm1
  addsd  D155(%rip),%xmm1
  divsd  %xmm1,%xmm0
L1:
  pxor   %xmm1,%xmm1
  movq   %rbx,%xmm7
  comisd %xmm7,%xmm1
  ja     L6
L50:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  ret
L34:
  movapd %xmm0,%xmm7
  xorpd  D48(%rip),%xmm7
  movsd  %xmm7,(%rsp)
  jmp    L10
L22:
  movsd  D88(%rip),%xmm3
  movsd  (%rsp),%xmm6
  divsd  %xmm6,%xmm3
  movapd %xmm3,%xmm0
  mulsd  D233(%rip),%xmm0
  addsd  D136(%rip),%xmm0
  mulsd  %xmm3,%xmm0
  subsd  D221(%rip),%xmm0
  mulsd  %xmm3,%xmm0
  addsd  D78(%rip),%xmm0
  mulsd  %xmm3,%xmm0
  subsd  D154(%rip),%xmm0
  mulsd  %xmm3,%xmm0
  addsd  D29(%rip),%xmm0
  movapd %xmm3,%xmm4
  mulsd  D226(%rip),%xmm4
  movsd  D241(%rip),%xmm2
  subsd  %xmm4,%xmm2
  movapd %xmm2,%xmm1
  mulsd  %xmm3,%xmm1
  subsd  D12(%rip),%xmm1
  mulsd  %xmm3,%xmm1
  addsd  D155(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,0x8(%rsp)
  movapd %xmm6,%xmm0
  call   <exp@plt>
  movq   %xmm0,%rbp
  pxor   %xmm0,%xmm0
  movsd  (%rsp),%xmm6
  ucomisd %xmm6,%xmm0
  ja     L74
  sqrtsd %xmm6,%xmm6
  movapd %xmm6,%xmm1
L21:
  movq   %rbp,%xmm0
  divsd  %xmm1,%xmm0
  mulsd  0x8(%rsp),%xmm0
  jmp    L1
L74:
  movsd  (%rsp),%xmm0
  call   <sqrt@plt>
  movapd %xmm0,%xmm1
  jmp    L21
L6:
  xorpd  D48(%rip),%xmm0
  jmp    L50
```

tool_calls: name: disassemble_data
arguments: data_tag: D216
data_type: f64[2]
name: disassemble_data
arguments: data_tag: D28
data_type: f64
name: disassemble_data
arguments: data_tag: D88
data_type: f64
name: disassemble_data
arguments: data_tag: D56
data_type: f64
name: disassemble_data
arguments: data_tag: D35
data_type: f64
name: disassemble_data
arguments: data_tag: D124
data_type: f64
name: disassemble_data
arguments: data_tag: D133
data_type: f64
name: disassemble_data
arguments: data_tag: D34
data_type: f64
name: disassemble_data
arguments: data_tag: D172
data_type: f64
name: disassemble_data
arguments: data_tag: D244
data_type: f64
name: disassemble_data
arguments: data_tag: D163
data_type: f64
name: disassemble_data
arguments: data_tag: D110
data_type: f64
name: disassemble_data
arguments: data_tag: D155
data_type: byte[8]
name: disassemble_data
arguments: data_tag: D48
data_type: byte[16]
name: disassemble_data
arguments: data_tag: D233
data_type: f64
name: disassemble_data
arguments: data_tag: D136
data_type: f64
name: disassemble_data
arguments: data_tag: D221
data_type: f64
name: disassemble_data
arguments: data_tag: D78
data_type: f64
name: disassemble_data
arguments: data_tag: D154
data_type: f64
name: disassemble_data
arguments: data_tag: D29
data_type: f64
name: disassemble_data
arguments: data_tag: D226
data_type: f64
name: disassemble_data
arguments: data_tag: D241
data_type: f64
name: disassemble_data
arguments: data_tag: D12
data_type: f64

tool: {"D216": [0.0,6.449305566387246]}

tool: D28: 6.449305566387246

tool: D88: 6.45

tool: D56: 0.0792323006694466

tool: D35: 0.6092719473097832

tool: D124: 2.0569974969268707

tool: D133: 3.3554331305863787

tool: D34: 2.370331499358438

tool: D172: 0.4999999998235554

tool: D244: 0.006777712190188699

tool: D163: 0.08677361454866868

tool: D110: 0.4596495788370524

tool: {"D155": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

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

tool: D233: 7.03849046144657e-05

tool: D136: 0.00248933264397244

tool: D221: 0.0766281832045885

tool: D78: 0.40311772245257

tool: D154: 0.669339325353065

tool: D29: 0.398942280267484

tool: D226: 0.142824922601647

tool: D241: 0.919118239717915

tool: D12: 1.61964537617937

assistant: ```c
double airBesselI1(double x) {
  double b, ax, y;
  ax = ((x) > 0.0f ? (x) : -(x));
  if (ax < 6.449305566387246) {
    y = x / 6.45;
    y *= y;
    b = ax * (0.4999999998235554 + y * (2.370331499358438 + y * (3.3554331305863787 + y * (2.0569974969268707 + (0.6092719473097832 + 0.0792323006694466 * y) * y)))) / (1 + y * (-0.4596495788370524 + (0.08677361454866868 - 0.006777712190188699 * y) * y));
  } else {
    y = 6.45 / ax;
    b = (0.398942280267484 + y * (-0.669339325353065 + y * (0.40311772245257 + y * (-0.0766281832045885 + (0.00248933264397244 + 0.0000703849046144657 * y) * y)))) / (1 + y * (-1.61964537617937 + (0.919118239717915 - 0.142824922601647 * y) * y));
    b *= exp(ax) / sqrt(ax);
  }
  return x < 0.0 ? -b : b;
}
```