user: Translate the below assembly code into C programming language:

```asm
<bessj0>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x48(%rbp),%xmm0
  movq   D71(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  D66(%rip),%xmm0
  comisd -0x30(%rbp),%xmm0
  jbe    L2
  movsd  -0x48(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x20(%rbp),%xmm1
  movsd  D198(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D235(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mulsd  -0x20(%rbp),%xmm0
  movsd  D46(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D242(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mulsd  -0x20(%rbp),%xmm0
  movsd  D34(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D139(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x20(%rbp),%xmm1
  movsd  D65(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D243(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D113(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D203(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D107(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x10(%rbp),%xmm0
  divsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  jmp    L9
L2:
  movsd  D66(%rip),%xmm0
  divsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x28(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x30(%rbp),%xmm0
  movsd  D54(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x20(%rbp),%xmm1
  movsd  D126(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D64(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D22(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mulsd  -0x20(%rbp),%xmm0
  movsd  D194(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D146(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x20(%rbp),%xmm1
  movsd  D8(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D190(%rip),%xmm0
  subsd  %xmm1,%xmm0
  mulsd  -0x20(%rbp),%xmm0
  movsd  D132(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D157(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mulsd  -0x20(%rbp),%xmm0
  movsd  D168(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  D186(%rip),%xmm0
  divsd  -0x30(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movsd  %xmm0,-0x50(%rbp)
  mov    -0x18(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm2
  mulsd  -0x10(%rbp),%xmm2
  movsd  %xmm2,-0x58(%rbp)
  mov    -0x18(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm3
  mulsd  -0x28(%rbp),%xmm3
  movapd %xmm3,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x8(%rbp),%xmm1
  movsd  -0x58(%rbp),%xmm2
  subsd  %xmm1,%xmm2
  movapd %xmm2,%xmm0
  mulsd  -0x50(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
L9:
  movsd  -0x38(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: read_data
arguments: data_tag: D71
data_type: qword
name: read_data
arguments: data_tag: D66
data_type: f64
name: read_data
arguments: data_tag: D198
data_type: byte[8]
name: read_data
arguments: data_tag: D235
data_type: f64
name: read_data
arguments: data_tag: D46
data_type: f64
name: read_data
arguments: data_tag: D242
data_type: f64
name: read_data
arguments: data_tag: D34
data_type: f64
name: read_data
arguments: data_tag: D139
data_type: f64
name: read_data
arguments: data_tag: D65
data_type: f64
name: read_data
arguments: data_tag: D243
data_type: f64
name: read_data
arguments: data_tag: D113
data_type: f64
name: read_data
arguments: data_tag: D203
data_type: f64
name: read_data
arguments: data_tag: D107
data_type: f64
name: read_data
arguments: data_tag: D54
data_type: f64
name: read_data
arguments: data_tag: D126
data_type: byte[8]
name: read_data
arguments: data_tag: D64
data_type: byte[8]
name: read_data
arguments: data_tag: D22
data_type: byte[8]
name: read_data
arguments: data_tag: D194
data_type: byte[8]
name: read_data
arguments: data_tag: D146
data_type: f64
name: read_data
arguments: data_tag: D8
data_type: byte[8]
name: read_data
arguments: data_tag: D190
data_type: byte[8]
name: read_data
arguments: data_tag: D132
data_type: byte[8]
name: read_data
arguments: data_tag: D157
data_type: byte[8]
name: read_data
arguments: data_tag: D168
data_type: byte[8]
name: read_data
arguments: data_tag: D186
data_type: f64

tool: D71: 9223372036854775807

tool: D66: 8

tool: {"D198": [0x22,0xdb,0x9e,0xc5,0xf7,0x1c,0x67,0xc0]}

tool: D235: 77392.33017

tool: D46: 11214424.18

tool: D242: 651619640.7

tool: D34: 13362590354

tool: D139: 57568490574

tool: D65: 267.8532712

tool: D243: 59272.64853

tool: D113: 9494680.718

tool: D203: 1029532985

tool: D107: 57568490411

tool: D54: 0.785398164

tool: {"D126": [0x61,0x28,0x29,0xab,0x8a,0x1a,0x8c,0x3e]}

tool: {"D64": [0x51,0x9c,0x29,0x90,0x87,0x64,0xc1,0x3e]}

tool: {"D22": [0x37,0x0f,0x34,0x3e,0x65,0xac,0xfc,0x3e]}

tool: {"D194": [0x0a,0x9f,0x7f,0x81,0xfb,0xff,0x51,0x3f]}

tool: D146: 1

tool: {"D8": [0xfb,0x5d,0x37,0x50,0xd3,0x18,0x79,0x3e]}

tool: {"D190": [0xa9,0x26,0x97,0x8c,0x78,0x92,0xa9,0x3e]}

tool: {"D132": [0xfc,0xfb,0x06,0xcd,0xc9,0xfc,0xdc,0x3e]}

tool: {"D157": [0x61,0xa5,0x1a,0x7e,0xec,0xbf,0x22,0x3f]}

tool: {"D168": [0x02,0x32,0x48,0xfe,0xff,0xff,0x8f,0x3f]}

tool: D186: 0.636619772

assistant: ```c
double bessj0(double x) {
  double ax, z;
  double xx, y, ans, ans1, ans2;
  if ((ax = fabs(x)) < 8.0) {
    y = x * x;
    ans1 = 57568490574.0 + y * (-13362590354.0 + y * (651619640.7 + y * (-11214424.18 + y * (77392.33017 + y * (-184.9052456)))));
    ans2 = 57568490411.0 + y * (1029532985.0 + y * (9494680.718 + y * (59272.64853 + y * (267.8532712 + y * 1.0))));
    ans = ans1 / ans2;
  } else {
    z = 8.0 / ax;
    y = z * z;
    xx = ax - 0.785398164;
    ans1 = 1.0 + y * (-0.1098628627e-2 + y * (0.2734510407e-4 + y * (-0.2073370639e-5 + y * 0.2093887211e-6)));
    ans2 = -0.1562499995e-1 + y * (0.1430488765e-3 + y * (-0.6911147651e-5 + y * (0.7621095161e-6 - y * 0.934935152e-7)));
    ans = sqrt(0.636619772 / ax) * (cos(xx) * ans1 - z * sin(xx) * ans2);
  }
  return ans;
}
```