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

```asm
<bessj>:
  endbr64
  push   %rbx
  movapd %xmm0,%xmm4
  mov    %edi,%ebx
  sub    $0x20,%rsp
  cmp    $0x1,%edi
  jle    L88
L131:
  pxor   %xmm5,%xmm5
  ucomisd %xmm5,%xmm4
  jp     L179
  movapd %xmm5,%xmm0
  je     L36
L179:
  pxor   %xmm0,%xmm0
  movapd %xmm4,%xmm1
  movq   D26(%rip),%xmm9
  movsd  D31(%rip),%xmm3
  cvtsi2sd %ebx,%xmm0
  andpd  %xmm9,%xmm1
  divsd  %xmm1,%xmm3
  comisd %xmm0,%xmm1
  ja     L52
  mulsd  D28(%rip),%xmm0
  movsd  %xmm4,(%rsp)
  movsd  %xmm3,0x8(%rsp)
  call   <sqrt@plt>
  movsd  (%rsp),%xmm4
  pxor   %xmm5,%xmm5
  lea    (%rbx,%rax,1),%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  and    $0xfffffffe,%eax
  jle    L197
  movsd  D87(%rip),%xmm2
  movapd %xmm5,%xmm0
  xor    %edx,%edx
  movsd  D93(%rip),%xmm10
  movsd  0x8(%rsp),%xmm3
  movapd %xmm5,%xmm6
  movapd %xmm5,%xmm7
  movsd  D36(%rip),%xmm8
  movq   D26(%rip),%xmm9
  jmp    L90
  nopl   0x0(%rax)
L107:
  mulsd  %xmm8,%xmm2
  mulsd  %xmm8,%xmm0
  mulsd  %xmm8,%xmm6
  movapd %xmm2,%xmm7
  movapd %xmm1,%xmm2
  mulsd  %xmm8,%xmm2
L185:
  test   %edx,%edx
  je     L60
  addsd  %xmm2,%xmm6
L60:
  xor    $0x1,%edx
  cmp    %eax,%ebx
  je     L72
L170:
  sub    $0x1,%eax
  je     L110
L90:
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  mulsd  %xmm3,%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm7,%xmm1
  movapd %xmm1,%xmm7
  andpd  %xmm9,%xmm7
  comisd %xmm10,%xmm7
  ja     L107
  movapd %xmm2,%xmm7
  movapd %xmm1,%xmm2
  jmp    L185
  nopw   0x0(%rax,%rax,1)
L110:
  addsd  %xmm6,%xmm6
  subsd  %xmm2,%xmm6
  divsd  %xmm6,%xmm0
L190:
  comisd %xmm4,%xmm5
  jbe    L36
  and    $0x1,%ebx
  je     L36
  xorpd  D94(%rip),%xmm0
L36:
  add    $0x20,%rsp
  pop    %rbx
  ret
  nopl   (%rax)
L52:
  movapd %xmm1,%xmm0
  movsd  %xmm4,0x8(%rsp)
  movsd  %xmm3,0x18(%rsp)
  movsd  %xmm1,(%rsp)
  call   <bessj0@plt>
  movsd  (%rsp),%xmm1
  movsd  %xmm0,0x10(%rsp)
  movapd %xmm1,%xmm0
  call   <bessj1@plt>
  cmp    $0x1,%ebx
  movsd  0x8(%rsp),%xmm4
  pxor   %xmm5,%xmm5
  movapd %xmm0,%xmm1
  jle    L190
  movsd  0x10(%rsp),%xmm2
  movsd  0x18(%rsp),%xmm3
  mov    $0x1,%eax
  jmp    L74
  nopl   0x0(%rax)
L46:
  movapd %xmm0,%xmm1
L74:
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  add    $0x1,%eax
  mulsd  %xmm3,%xmm0
  mulsd  %xmm1,%xmm0
  subsd  %xmm2,%xmm0
  movapd %xmm1,%xmm2
  cmp    %eax,%ebx
  jne    L46
  jmp    L190
L72:
  movapd %xmm7,%xmm0
  jmp    L170
  nopl   0x0(%rax)
L88:
  lea    D14(%rip),%rdi
  movsd  %xmm0,(%rsp)
  call   <nrerror@plt>
  movsd  (%rsp),%xmm4
  jmp    L131
  nopl   0x0(%rax,%rax,1)
L197:
  movsd  D94(%rip),%xmm0
  jmp    L190
```

tool_calls: name: read_data
arguments: data_label: D26
datatype: qword
name: read_data
arguments: data_label: D31
datatype: f64
name: read_data
arguments: data_label: D28
datatype: f64
name: read_data
arguments: data_label: D87
datatype: f64
name: read_data
arguments: data_label: D93
datatype: f64
name: read_data
arguments: data_label: D36
datatype: byte[8]
name: read_data
arguments: data_label: D94
datatype: f32[4]
name: read_data
arguments: data_label: D14
datatype: string

tool: D26: 9223372036854775807

tool: D31: 2

tool: D28: 40

tool: D87: 1

tool: D93: 10000000000

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

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

tool: D14: Index n less than 2 in bessj

assistant: ```c
double bessj(int n, double x) {
  double bessj0(double x);
  double bessj1(double x);
  void nrerror(char error_text[]);
  int j, jsum, m;
  double ax, bj, bjm, bjp, sum, tox, ans;
  if (n < 2)
    nrerror("Index n less than 2 in bessj");
  ax = fabs(x);
  if (ax == 0.0)
    return 0.0;
  else if (ax > (double)n) {
    tox = 2.0 / ax;
    bjm = bessj0(ax);
    bj = bessj1(ax);
    for (j = 1; j < n; j++) {
      bjp = j * tox * bj - bjm;
      bjm = bj;
      bj = bjp;
    }
    ans = bj;
  } else {
    tox = 2.0 / ax;
    m = 2 * ((n + (int)sqrt(40.0 * n)) / 2);
    jsum = 0;
    bjp = ans = sum = 0.0;
    bj = 1.0;
    for (j = m; j > 0; j--) {
      bjm = j * tox * bj - bjp;
      bjp = bj;
      bj = bjm;
      if (fabs(bj) > 1.0e10) {
        bj *= 1.0e-10;
        bjp *= 1.0e-10;
        ans *= 1.0e-10;
        sum *= 1.0e-10;
      }
      if (jsum)
        sum += bj;
      jsum = !jsum;
      if (j == n)
        ans = bjp;
    }
    sum = 2.0 * sum - bj;
    ans /= sum;
  }
  return x < 0.0 && (n & 1) ? -ans : ans;
}
```