user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<digammaRN>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  movsd  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  jmp    L11
L2:
  movsd  D50(%rip),%xmm0
  movapd %xmm0,%xmm1
  divsd  -0x28(%rbp),%xmm1
  movsd  -0x18(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x28(%rbp),%xmm1
  movsd  D50(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
L11:
  movsd  D110(%rip),%xmm0
  comisd -0x28(%rbp),%xmm0
  jae    L2
  movsd  -0x28(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  D50(%rip),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x10(%rbp),%xmm1
  movsd  D3(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D86(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  D41(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x10(%rbp),%xmm1
  movsd  D2(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movsd  D120(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x10(%rbp),%xmm1
  movsd  D99(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movsd  D96(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x10(%rbp),%xmm1
  movsd  D74(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movsd  D41(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  -0x10(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x28(%rbp),%rax
  movq   %rax,%xmm0
  call   <log@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  addsd  -0x18(%rbp),%xmm0
  movsd  D54(%rip),%xmm1
  divsd  -0x28(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  addsd  -0x8(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D50
type: byte[8]
name: disassemble_data
arguments: tag: D110
type: byte[8]
name: disassemble_data
arguments: tag: D3
type: byte[8]
name: disassemble_data
arguments: tag: D86
type: f64
name: disassemble_data
arguments: tag: D41
type: byte[8]
name: disassemble_data
arguments: tag: D2
type: byte[8]
name: disassemble_data
arguments: tag: D120
type: byte[8]
name: disassemble_data
arguments: tag: D99
type: byte[8]
name: disassemble_data
arguments: tag: D96
type: byte[8]
name: disassemble_data
arguments: tag: D74
type: byte[8]
name: disassemble_data
arguments: tag: D54
type: f64

tool: {"D50": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

tool: {"D110": [0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x40]}

tool: {"D3": [0x00,0x00,0x00,0x00,0x00,0x42,0xac,0x40]}

tool: D86: 8160

tool: {"D41": [0x55,0x55,0x55,0x55,0x55,0x55,0xb5,0x3f]}

tool: {"D2": [0x96,0x59,0x99,0x95,0x59,0x99,0x95,0x3f]}

tool: {"D120": [0x08,0x1f,0x7c,0xf0,0xc1,0x07,0x7f,0x3f]}

tool: {"D99": [0x11,0x11,0x11,0x11,0x11,0x11,0x71,0x3f]}

tool: {"D96": [0x10,0x04,0x41,0x10,0x04,0x41,0x70,0x3f]}

tool: {"D74": [0x11,0x11,0x11,0x11,0x11,0x11,0x81,0x3f]}

tool: D54: 0.5

assistant: ```c
double digammaRN(double x) {
  double r, f, t;
  r = 0;
  while (x <= 5) {
    r -= 1 / x;
    x += 1;
  }
  f = 1 / (x * x);
  t = f * (-1 / 12.0 + f * (1 / 120.0 + f * (-1 / 252.0 + f * (1 / 240.0 + f * (-1 / 132.0 + f * (691 / 32760.0 + f * (-1 / 12.0 + f * 3617 / 8160.0)))))));
  return r + log(x) - 0.5 / x + t;
}
```