user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<bessel_i1>:
  endbr64
  movsd  D161(%rip),%xmm4
  movapd %xmm0,%xmm3
  movapd %xmm0,%xmm1
  andpd  D38(%rip),%xmm3
  comisd %xmm3,%xmm4
  jbe    L6
  movapd %xmm0,%xmm2
  movsd  D31(%rip),%xmm0
  divsd  %xmm4,%xmm2
  pxor   %xmm4,%xmm4
  comisd %xmm1,%xmm4
  mulsd  %xmm2,%xmm2
  mulsd  %xmm2,%xmm0
  addsd  D97(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  D81(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  D104(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  D165(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  D159(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  D126(%rip),%xmm0
  mulsd  %xmm3,%xmm0
  ja     L4
  ret
  nopl   (%rax)
L4:
  xorpd  D12(%rip),%xmm0
  ret
  nopl   0x0(%rax)
L6:
  divsd  %xmm3,%xmm4
  sub    $0x28,%rsp
  movsd  D113(%rip),%xmm5
  movsd  D45(%rip),%xmm2
  movsd  %xmm0,0x10(%rsp)
  movsd  %xmm3,0x8(%rsp)
  mulsd  %xmm4,%xmm5
  subsd  %xmm5,%xmm2
  movapd %xmm2,%xmm0
  mulsd  %xmm4,%xmm0
  subsd  D133(%rip),%xmm0
  mulsd  %xmm4,%xmm0
  addsd  D50(%rip),%xmm0
  mulsd  %xmm4,%xmm0
  subsd  D180(%rip),%xmm0
  mulsd  %xmm4,%xmm0
  addsd  D170(%rip),%xmm0
  mulsd  %xmm4,%xmm0
  subsd  D142(%rip),%xmm0
  mulsd  %xmm4,%xmm0
  subsd  D196(%rip),%xmm0
  mulsd  %xmm4,%xmm0
  addsd  D188(%rip),%xmm0
  movsd  %xmm0,(%rsp)
  movapd %xmm3,%xmm0
  call   <exp@plt>
  movsd  0x8(%rsp),%xmm3
  pxor   %xmm4,%xmm4
  movsd  0x10(%rsp),%xmm1
  movapd %xmm0,%xmm2
  ucomisd %xmm3,%xmm4
  ja     L48
  sqrtsd %xmm3,%xmm3
L22:
  divsd  %xmm3,%xmm2
  comisd %xmm1,%xmm4
  movsd  (%rsp),%xmm0
  mulsd  %xmm2,%xmm0
  ja     L45
  add    $0x28,%rsp
  ret
  nopl   0x0(%rax,%rax,1)
L45:
  xorpd  D12(%rip),%xmm0
  add    $0x28,%rsp
  ret
L48:
  movsd  %xmm0,0x8(%rsp)
  movapd %xmm3,%xmm0
  movsd  %xmm4,0x18(%rsp)
  movsd  %xmm1,0x10(%rsp)
  call   <sqrt@plt>
  movsd  0x18(%rsp),%xmm4
  movsd  0x10(%rsp),%xmm1
  movsd  0x8(%rsp),%xmm2
  movapd %xmm0,%xmm3
  jmp    L22
```

tool_calls: name: read_data
arguments: data_label: D161
type_infered: f64
name: read_data
arguments: data_label: D38
type_infered: qword[2]
name: read_data
arguments: data_label: D31
type_infered: byte[8]
name: read_data
arguments: data_label: D97
type_infered: byte[8]
name: read_data
arguments: data_label: D81
type_infered: byte[8]
name: read_data
arguments: data_label: D104
type_infered: f64
name: read_data
arguments: data_label: D165
type_infered: f64
name: read_data
arguments: data_label: D159
type_infered: f64
name: read_data
arguments: data_label: D126
type_infered: f64
name: read_data
arguments: data_label: D12
type_infered: f32[4]
name: read_data
arguments: data_label: D113
type_infered: byte[8]
name: read_data
arguments: data_label: D45
type_infered: byte[8]
name: read_data
arguments: data_label: D133
type_infered: byte[8]
name: read_data
arguments: data_label: D50
type_infered: byte[8]
name: read_data
arguments: data_label: D180
type_infered: byte[8]
name: read_data
arguments: data_label: D170
type_infered: byte[8]
name: read_data
arguments: data_label: D142
type_infered: byte[8]
name: read_data
arguments: data_label: D196
type_infered: byte[8]
name: read_data
arguments: data_label: D188
type_infered: f64

tool: D161: 3.75

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

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

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

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

tool: D104: 0.15084934

tool: D165: 0.51498869

tool: D159: 0.87890594

tool: D126: 0.5

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

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

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

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

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

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

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

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

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

tool: D188: 0.39894228

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;
}
```