user: 这段汇编代码用C语言表示是什么样的：

```asm
<airBesselIn>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %edi,-0x44(%rbp)
  movsd  %xmm0,-0x50(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x44(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comiss %xmm1,%xmm0
  jbe    L86
  mov    -0x44(%rbp),%eax
  jmp    L51
L86:
  mov    -0x44(%rbp),%eax
  neg    %eax
L51:
  mov    %eax,-0x30(%rbp)
  cmpl   $0x0,-0x30(%rbp)
  jne    L80
  mov    -0x50(%rbp),%rax
  movq   %rax,%xmm0
  call   <airBesselI0@plt>
  movq   %xmm0,%rax
  jmp    L70
L80:
  cmpl   $0x1,-0x30(%rbp)
  jne    L23
  mov    -0x50(%rbp),%rax
  movq   %rax,%xmm0
  call   <airBesselI1@plt>
  movq   %xmm0,%rax
  jmp    L70
L23:
  pxor   %xmm0,%xmm0
  ucomisd -0x50(%rbp),%xmm0
  jp     L53
  pxor   %xmm0,%xmm0
  ucomisd -0x50(%rbp),%xmm0
  jne    L53
  mov    D70(%rip),%rax
  jmp    L70
L53:
  movsd  -0x50(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L159
  movsd  -0x50(%rbp),%xmm0
  jmp    L128
L159:
  movsd  -0x50(%rbp),%xmm0
  movq   D50(%rip),%xmm1
  xorpd  %xmm1,%xmm0
L128:
  movsd  D51(%rip),%xmm1
  divsd  %xmm0,%xmm1
  movsd  %xmm1,-0x10(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  D83(%rip),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x30(%rbp),%xmm1
  movsd  D16(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  mov    %eax,%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  add    %eax,%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x2c(%rbp),%eax
  mov    %eax,-0x34(%rbp)
  jmp    L137
L11:
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x34(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  mulsd  -0x20(%rbp),%xmm0
  movsd  -0x18(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x20(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L177
  movsd  -0x20(%rbp),%xmm0
  comisd D74(%rip),%xmm0
  seta   %al
  jmp    L168
L177:
  movsd  D99(%rip),%xmm0
  comisd -0x20(%rbp),%xmm0
  seta   %al
L168:
  test   %al,%al
  je     L65
  movsd  -0x28(%rbp),%xmm1
  movsd  D2(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x20(%rbp),%xmm1
  movsd  D2(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x18(%rbp),%xmm1
  movsd  D2(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
L65:
  mov    -0x34(%rbp),%eax
  cmp    -0x30(%rbp),%eax
  jne    L131
  movsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
L131:
  subl   $0x1,-0x34(%rbp)
L137:
  cmpl   $0x0,-0x34(%rbp)
  jg     L11
  mov    -0x50(%rbp),%rax
  movq   %rax,%xmm0
  call   <airBesselI0@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  divsd  -0x20(%rbp),%xmm0
  movsd  -0x28(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  comisd -0x50(%rbp),%xmm0
  jbe    L72
  movsd  -0x28(%rbp),%xmm0
  movq   D50(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movq   %xmm0,%rax
  jmp    L70
L72:
  mov    -0x28(%rbp),%rax
L70:
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: label: D70
type_guessed: f64
name: disassemble_data
arguments: label: D50
type_guessed: byte[8]
name: disassemble_data
arguments: label: D51
type_guessed: f64
name: disassemble_data
arguments: label: D83
type_guessed: f64
name: disassemble_data
arguments: label: D16
type_guessed: f64
name: disassemble_data
arguments: label: D74
type_guessed: f64[2]
name: disassemble_data
arguments: label: D99
type_guessed: byte[8]
name: disassemble_data
arguments: label: D2
type_guessed: byte[8]

tool: D70: 0

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

tool: D51: 2

tool: D83: 1

tool: D16: 40

tool: {"D74": [10000000000.0,-10000000000.0]}

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

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

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