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

```asm
<cdflib_dstrem>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x28(%rbp),%rax
  movsd  (%rax),%xmm1
  pxor   %xmm0,%xmm0
  comisd %xmm1,%xmm0
  jb     L16
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  call   <cdflib_ftnstop@plt>
L16:
  mov    -0x28(%rbp),%rax
  movsd  (%rax),%xmm0
  comisd D70(%rip),%xmm0
  seta   %al
  xor    $0x1,%eax
  test   %al,%al
  jne    L38
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rax
  movsd  D74(%rip),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movapd %xmm0,%xmm1
  movsd  D54(%rip),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  lea    -0x20(%rbp),%rax
  mov    %rax,%rdx
  lea    D29(%rip),%rax
  mov    %rax,%rsi
  lea    D25(%rip),%rax
  mov    %rax,%rdi
  call   <cdflib_eval_pol@plt>
  mov    -0x28(%rbp),%rax
  movsd  (%rax),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  jmp    L25
L38:
  nop
  mov    -0x28(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  D21(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rax
  movq   %rax,%xmm0
  call   <log@plt>
  movsd  -0x30(%rbp),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  D44(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mov    -0x28(%rbp),%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <cdflib_gamma_log@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  subsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
L25:
  movsd  -0x18(%rbp),%xmm0
  movq   %xmm0,%rax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L21
  call   <__stack_chk_fail@plt>
L21:
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D50
data_type: string
name: unpack_data
arguments: data_label: D70
data_type: f64[2]
name: unpack_data
arguments: data_label: D74
data_type: f64
name: unpack_data
arguments: data_label: D54
data_type: f64
name: unpack_data
arguments: data_label: D29
data_type: string
name: unpack_data
arguments: data_label: D25
data_type: f64
name: unpack_data
arguments: data_label: D21
data_type: f64
name: unpack_data
arguments: data_label: D44
data_type: f64

tool: D50: Zero or negative argument in DSTREM

tool: {"D70": [6.0,2.0]}

tool: D74: 2

tool: D54: 1

tool: D29: 


tool: D25: 0

tool: D21: 0.5

tool: D44: 0.9189385332046728

assistant: ```c
double cdflib_dstrem(double *z) {
  static const double hln2pi = 0.91893853320467274178e0;
  enum { ncoef = 10 };
  static const double coef[ncoef] = {0.0e0, 0.0833333333333333333333333333333e0, -0.00277777777777777777777777777778e0, 0.000793650793650793650793650793651e0, -0.000595238095238095238095238095238e0, 0.000841750841750841750841750841751e0, -0.00191752691752691752691752691753e0, 0.00641025641025641025641025641026e0, -0.0295506535947712418300653594771e0, 0.179644372368830573164938490016e0};
  static const int K1 = 10;
  double dstrem, sterl, T2;
  if (*z <= 0.0e0) {
    cdflib_ftnstop("Zero or negative argument in DSTREM");
  }
  if (!(*z > 6.0e0)) {
    goto S10;
  }
  T2 = 1.0e0 / pow(*z, 2.0);
  dstrem = cdflib_eval_pol(coef, &K1, &T2) * *z;
  goto S20;
S10:
  sterl = hln2pi + (*z - 0.5e0) * log(*z) - *z;
  dstrem = cdflib_gamma_log(z) - sterl;
S20:
  return dstrem;
}
```