user: 请将以下的汇编代码转换成C语言代码：

```asm
<fff_psi>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  movsd  %xmm0,-0x58(%rbp)
  movsd  D116(%rip),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  D46(%rip),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  D5(%rip),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  D77(%rip),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  D117(%rip),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  D112(%rip),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x28(%rbp),%xmm0
  comisd -0x40(%rbp),%xmm0
  jb     L39
  movsd  D89(%rip),%xmm0
  movapd %xmm0,%xmm1
  divsd  -0x40(%rbp),%xmm1
  movsd  -0x30(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x48(%rbp),%xmm0
  jmp    L36
L39:
  jmp    L15
L33:
  movsd  D89(%rip),%xmm0
  movapd %xmm0,%xmm1
  divsd  -0x40(%rbp),%xmm1
  movsd  -0x48(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x40(%rbp),%xmm1
  movsd  D89(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
L15:
  movsd  -0x38(%rbp),%xmm0
  comisd -0x40(%rbp),%xmm0
  ja     L33
  movsd  D89(%rip),%xmm0
  divsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x40(%rbp),%rax
  movq   %rax,%xmm0
  call   <log@plt>
  movq   %xmm0,%rax
  movsd  -0x8(%rbp),%xmm1
  movsd  D88(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %rax,%xmm0
  subsd  %xmm1,%xmm0
  movsd  -0x48(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x8(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movq   D65(%rip),%xmm1
  xorpd  %xmm0,%xmm1
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm2
  mulsd  -0x10(%rbp),%xmm2
  movsd  -0x18(%rbp),%xmm0
  subsd  %xmm2,%xmm0
  movapd %xmm0,%xmm2
  mulsd  -0x8(%rbp),%xmm2
  movsd  -0x20(%rbp),%xmm0
  subsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x48(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x48(%rbp),%xmm0
L36:
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: read_data
arguments: data_label: D116
data_type: f64
name: read_data
arguments: data_label: D46
data_type: byte[8]
name: read_data
arguments: data_label: D5
data_type: f64
name: read_data
arguments: data_label: D77
data_type: f64
name: read_data
arguments: data_label: D117
data_type: f64
name: read_data
arguments: data_label: D112
data_type: f64
name: read_data
arguments: data_label: D89
data_type: f64
name: read_data
arguments: data_label: D88
data_type: f64
name: read_data
arguments: data_label: D65
data_type: f32[2]

tool: D116: 8.5

tool: {"D46": [0x2a,0x80,0x6f,0xfc,0x8c,0x78,0xe2,0xbf]}

tool: D5: 1e-05

tool: D77: 0.08333333333

tool: D117: 0.0083333333333

tool: D112: 0.003968253968

tool: D89: 1

tool: D88: 0.5

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

assistant: ```c
double fff_psi(double x) {
  double c = 8.5;
  double d1 = -0.5772156649;
  double r;
  double s = 0.00001;
  double s3 = 0.08333333333;
  double s4 = 0.0083333333333;
  double s5 = 0.003968253968;
  double out;
  double y;
  y = x;
  out = 0.0;
  if (y <= s) {
    out = d1 - 1.0 / y;
    return out;
  }
  while (y < c) {
    out = out - 1.0 / y;
    y = y + 1.0;
  }
  r = 1.0 / y;
  out += log(y) - 0.5 * r;
  r = r * r;
  out += -r * (s3 - r * (s4 - r * s5));
  return out;
}
```