user: Please show me the C implementation that matches the assembly code listed below:

```asm
<K0>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x28(%rbp),%xmm0
  comisd D62(%rip),%xmm0
  jb     L36
  pxor   %xmm0,%xmm0
  jmp    L5
L36:
  movsd  -0x28(%rbp),%xmm0
  comisd D152(%rip),%xmm0
  jb     L25
  movsd  D152(%rip),%xmm0
  divsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x20(%rbp),%xmm1
  movsd  D102(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D70(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D83(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mulsd  -0x20(%rbp),%xmm0
  movsd  D58(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D71(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mulsd  -0x20(%rbp),%xmm0
  movsd  D133(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D94(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x28(%rbp),%xmm0
  movq   D242(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <exp@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm2
  mulsd  -0x10(%rbp),%xmm2
  movsd  %xmm2,-0x30(%rbp)
  mov    -0x28(%rbp),%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movapd %xmm0,%xmm1
  movsd  -0x30(%rbp),%xmm0
  divsd  %xmm1,%xmm0
  jmp    L5
L25:
  movsd  -0x28(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  D209(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x28(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  D16(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x20(%rbp),%xmm1
  movsd  D276(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D14(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D239(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D190(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D162(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  D26(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mulsd  -0x20(%rbp),%xmm0
  movsd  D106(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x18(%rbp),%xmm1
  movsd  D93(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D251(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x18(%rbp),%xmm1
  movsd  D199(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x18(%rbp),%xmm1
  movsd  D217(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x18(%rbp),%xmm1
  movsd  D185(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x18(%rbp),%xmm1
  movsd  D59(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x18(%rbp),%xmm1
  movsd  D57(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x28(%rbp),%xmm1
  movsd  D250(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <log@plt>
  movq   %xmm0,%rax
  movq   D242(%rip),%xmm0
  movq   %rax,%xmm3
  xorpd  %xmm0,%xmm3
  movapd %xmm3,%xmm0
  mulsd  -0x8(%rbp),%xmm0
  addsd  -0x10(%rbp),%xmm0
L5:
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D62
type: f64[2]
name: disassemble_data
arguments: data_tag: D152
type: f64[2]
name: disassemble_data
arguments: data_tag: D102
type: f64
name: disassemble_data
arguments: data_tag: D70
type: f64
name: disassemble_data
arguments: data_tag: D83
type: f64
name: disassemble_data
arguments: data_tag: D58
type: f64
name: disassemble_data
arguments: data_tag: D71
type: f64
name: disassemble_data
arguments: data_tag: D133
type: f64
name: disassemble_data
arguments: data_tag: D94
type: f64
name: disassemble_data
arguments: data_tag: D242
type: f32[2]
name: disassemble_data
arguments: data_tag: D209
type: f64
name: disassemble_data
arguments: data_tag: D16
type: f64
name: disassemble_data
arguments: data_tag: D276
type: f64
name: disassemble_data
arguments: data_tag: D14
type: f64
name: disassemble_data
arguments: data_tag: D239
type: f64
name: disassemble_data
arguments: data_tag: D190
type: f64
name: disassemble_data
arguments: data_tag: D162
type: f64
name: disassemble_data
arguments: data_tag: D26
type: f64
name: disassemble_data
arguments: data_tag: D106
type: f64
name: disassemble_data
arguments: data_tag: D93
type: f64
name: disassemble_data
arguments: data_tag: D251
type: f64
name: disassemble_data
arguments: data_tag: D199
type: f64
name: disassemble_data
arguments: data_tag: D217
type: f64
name: disassemble_data
arguments: data_tag: D185
type: f64
name: disassemble_data
arguments: data_tag: D59
type: f64
name: disassemble_data
arguments: data_tag: D57
type: f64
name: disassemble_data
arguments: data_tag: D250
type: f64

tool: {"D62": [60.0,2.0]}

tool: {"D152": [2.0,0.00053208]}

tool: D102: 0.00053208

tool: D70: 0.0025154

tool: D83: 0.00587872

tool: D58: 0.01062446

tool: D71: 0.02189568

tool: D133: 0.07832358

tool: D94: 1.25331414

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

tool: D209: 4

tool: D16: 14.0625

tool: D276: 7.4e-06

tool: D14: 0.0001075

tool: D239: 0.00262698

tool: D190: 0.0348859

tool: D162: 0.23069756

tool: D26: 0.4227842

tool: D106: 0.57721566

tool: D93: 0.0045813

tool: D251: 0.0360768

tool: D199: 0.2659732

tool: D217: 1.2067492

tool: D185: 3.0899424

tool: D59: 3.5156229

tool: D57: 1

tool: D250: 0.5

assistant: ```c
double K0(double x) {
  double x1, x2;
  double s1, s2;
  if (x >= 60.0)
    return (0.0);
  else if (x >= 2.0) {
    x1 = 2.0 / x;
    s1 = (((((0.00053208 * x1 - 0.00251540) * x1 + 0.00587872) * x1 - 0.01062446) * x1 + 0.02189568) * x1 - 0.07832358) * x1 + 1.25331414;
    return (s1 * exp(-x) / sqrt(x));
  } else {
    x1 = x * x / 4.0;
    x2 = x * x / 14.0625;
    s1 = (((((0.00000740 * x1 + 0.00010750) * x1 + 0.00262698) * x1 + 0.03488590) * x1 + 0.23069756) * x1 + 0.42278420) * x1 - 0.57721566;
    s2 = (((((0.0045813 * x2 + 0.0360768) * x2 + 0.2659732) * x2 + 1.2067492) * x2 + 3.0899424) * x2 + 3.5156229) * x2 + 1.0;
    return (-log(0.5 * x) * s2 + s1);
  }
}
```