user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<fff_gamln>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  movsd  %xmm0,-0x78(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movsd  D75(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  D18(%rip),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  D44(%rip),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  D60(%rip),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  D78(%rip),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  D23(%rip),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  D40(%rip),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  -0x78(%rbp),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  D32(%rip),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movl   $0x0,-0x64(%rbp)
  jmp    L29
L17:
  movsd  -0x60(%rbp),%xmm1
  movsd  D11(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  mov    -0x64(%rbp),%eax
  cltq
  movsd  -0x40(%rbp,%rax,8),%xmm0
  divsd  -0x60(%rbp),%xmm0
  movsd  -0x58(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x58(%rbp)
  addl   $0x1,-0x64(%rbp)
L29:
  cmpl   $0x5,-0x64(%rbp)
  jle    L17
  movsd  -0x78(%rbp),%xmm1
  movsd  D2(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x78(%rbp),%xmm1
  movsd  D59(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movsd  %xmm1,-0x80(%rbp)
  mov    -0x48(%rbp),%rax
  movq   %rax,%xmm0
  call   <log@plt>
  mulsd  -0x80(%rbp),%xmm0
  subsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x50(%rbp),%xmm0
  mulsd  -0x58(%rbp),%xmm0
  divsd  -0x78(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <log@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  addsd  -0x48(%rbp),%xmm0
  movq   %xmm0,%rax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L19
  call   <__stack_chk_fail@plt>
L19:
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D75
type: f64
name: extract_symbolic_data
arguments: data_tag: D18
type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D44
type: f64
name: extract_symbolic_data
arguments: data_tag: D60
type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D78
type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D23
type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D40
type: f64
name: extract_symbolic_data
arguments: data_tag: D32
type: f64
name: extract_symbolic_data
arguments: data_tag: D11
type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D2
type: f64
name: extract_symbolic_data
arguments: data_tag: D59
type: f64

tool: D75: 76.18009172947146

tool: {"D18": [0x56,0x36,0x14,0x2b,0x57,0xa0,0x55,0xc0]}

tool: D44: 24.01409824083091

tool: {"D60": [0x8c,0xcc,0xcd,0x8d,0x34,0xb5,0xf3,0xbf]}

tool: {"D78": [0xd8,0x12,0xec,0x19,0x73,0xcd,0x53,0x3f]}

tool: {"D23": [0x88,0x98,0x0e,0x1c,0x18,0xa1,0xd6,0xbe]}

tool: D40: 2.5066282746310007

tool: D32: 1.000000000190015

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

tool: D2: 5.5

tool: D59: 0.5

assistant: ```c
double fff_gamln(double x) {
  double coeff[] = {76.18009172947146, -86.50532032941677, 24.01409824083091, -1.231739572450155, .1208650973866179e-2, -.5395239384953e-5};
  const double stp = 2.5066282746310005;
  double y = x;
  double sum = 1.000000000190015;
  double out;
  int i;
  for (i = 0; i < 6; i++) {
    y += 1;
    sum += coeff[i] / y;
  }
  out = x + 5.5;
  out = (x + 0.5) * log(out) - out;
  return out + log(stp * sum / x);
}
```