user: 请从给定的汇编指令推导出C源代码:

```asm
<bessel_i1>:
  endbr64
  push   %r14
  push   %rbx
  sub    $0x18,%rsp
  movq   %xmm0,%r14
  movapd %xmm0,%xmm5
  movapd %xmm0,%xmm4
  andpd  D114(%rip),%xmm4
  movsd  %xmm4,(%rsp)
  movsd  D99(%rip),%xmm0
  comisd %xmm4,%xmm0
  jbe    L19
  divsd  %xmm0,%xmm5
  movapd %xmm5,%xmm1
  mulsd  %xmm5,%xmm1
  movapd %xmm1,%xmm0
  mulsd  D88(%rip),%xmm0
  addsd  D129(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  D147(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  D133(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  D25(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  D117(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  D56(%rip),%xmm0
  mulsd  %xmm4,%xmm0
L14:
  pxor   %xmm1,%xmm1
  movq   %r14,%xmm6
  comisd %xmm6,%xmm1
  ja     L20
L39:
  add    $0x18,%rsp
  pop    %rbx
  pop    %r14
  ret
L19:
  movsd  D99(%rip),%xmm2
  movsd  (%rsp),%xmm7
  divsd  %xmm7,%xmm2
  movapd %xmm2,%xmm3
  mulsd  D162(%rip),%xmm3
  movsd  D97(%rip),%xmm1
  subsd  %xmm3,%xmm1
  movapd %xmm1,%xmm0
  mulsd  %xmm2,%xmm0
  subsd  D26(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  D96(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  subsd  D67(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  D142(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  subsd  D113(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  subsd  D169(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  D131(%rip),%xmm0
  movsd  %xmm0,0x8(%rsp)
  movapd %xmm7,%xmm0
  call   <exp@plt>
  movq   %xmm0,%rbx
  pxor   %xmm0,%xmm0
  movsd  (%rsp),%xmm7
  ucomisd %xmm7,%xmm0
  ja     L37
  sqrtsd %xmm7,%xmm7
  movapd %xmm7,%xmm1
L33:
  movq   %rbx,%xmm0
  divsd  %xmm1,%xmm0
  mulsd  0x8(%rsp),%xmm0
  jmp    L14
L37:
  movsd  (%rsp),%xmm0
  call   <sqrt@plt>
  movapd %xmm0,%xmm1
  jmp    L33
L20:
  xorpd  D158(%rip),%xmm0
  jmp    L39
```

tool_calls: name: retrieve_data
arguments: data_label: D114
data_type: qword[2]
name: retrieve_data
arguments: data_label: D99
data_type: f64
name: retrieve_data
arguments: data_label: D88
data_type: byte[8]
name: retrieve_data
arguments: data_label: D129
data_type: byte[8]
name: retrieve_data
arguments: data_label: D147
data_type: byte[8]
name: retrieve_data
arguments: data_label: D133
data_type: f64
name: retrieve_data
arguments: data_label: D25
data_type: f64
name: retrieve_data
arguments: data_label: D117
data_type: f64
name: retrieve_data
arguments: data_label: D56
data_type: f64
name: retrieve_data
arguments: data_label: D162
data_type: byte[8]
name: retrieve_data
arguments: data_label: D97
data_type: byte[8]
name: retrieve_data
arguments: data_label: D26
data_type: byte[8]
name: retrieve_data
arguments: data_label: D96
data_type: byte[8]
name: retrieve_data
arguments: data_label: D67
data_type: byte[8]
name: retrieve_data
arguments: data_label: D142
data_type: byte[8]
name: retrieve_data
arguments: data_label: D113
data_type: byte[8]
name: retrieve_data
arguments: data_label: D169
data_type: byte[8]
name: retrieve_data
arguments: data_label: D131
data_type: f64
name: retrieve_data
arguments: data_label: D158
data_type: f32[4]

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

tool: D99: 3.75

tool: {"D88": [0xd3,0xb0,0xad,0xd9,0xa9,0x3d,0x35,0x3f]}

tool: {"D129": [0x9c,0xe5,0x2e,0x99,0x95,0xb3,0x68,0x3f]}

tool: {"D147": [0x1a,0x12,0x5a,0x83,0xb5,0x39,0x9b,0x3f]}

tool: D133: 0.15084934

tool: D25: 0.51498869

tool: D117: 0.87890594

tool: D56: 0.5

tool: {"D162": [0x3b,0x50,0xc8,0x4a,0xa3,0x34,0x71,0x3f]}

tool: {"D97": [0x71,0x9c,0xa9,0x4a,0x3a,0x4e,0x92,0x3f]}

tool: {"D26": [0x50,0x93,0x11,0xfe,0xe2,0xa5,0x9d,0x3f]}

tool: {"D96": [0xd9,0x27,0x1d,0x38,0xa9,0x60,0x97,0x3f]}

tool: {"D67": [0xdc,0x3c,0x1f,0xaf,0x51,0x20,0x85,0x3f]}

tool: {"D142": [0x96,0x74,0x5a,0xd8,0x4f,0xd6,0x5a,0x3f]}

tool: {"D113": [0x3f,0x8c,0x94,0x56,0x11,0xa8,0x6d,0x3f]}

tool: {"D169": [0xbe,0xfe,0x1c,0xcd,0x2e,0x6b,0xa4,0x3f]}

tool: D131: 0.39894228

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

assistant: ```c
double bessel_i1(double x) {
  double ax, ans;
  double y;
  if ((ax = fabs(x)) < 3.75) {
    y = x / 3.75;
    y *= y;
    ans = ax * (0.5 + y * (0.87890594 + y * (0.51498869 + y * (0.15084934 + y * (0.2658733e-1 + y * (0.301532e-2 + y * 0.32411e-3))))));
  } else {
    y = 3.75 / ax;
    ans = 0.2282967e-1 + y * (-0.2895312e-1 + y * (0.1787654e-1 - y * 0.420059e-2));
    ans = 0.39894228 + y * (-0.3988024e-1 + y * (-0.362018e-2 + y * (0.163801e-2 + y * (-0.1031555e-1 + y * ans))));
    ans *= (exp(ax) / sqrt(ax));
  }
  return x < 0.0 ? -ans : ans;
}
```