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

```asm
<wcsutil_dblEq>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x34(%rbp)
  movsd  %xmm0,-0x40(%rbp)
  mov    %rsi,-0x48(%rbp)
  mov    %rdx,-0x50(%rbp)
  cmpl   $0x0,-0x34(%rbp)
  jne    L244
  mov    $0x1,%eax
  jmp    L67
L244:
  cmpl   $0x0,-0x34(%rbp)
  jns    L201
  mov    $0x0,%eax
  jmp    L67
L201:
  cmpq   $0x0,-0x48(%rbp)
  jne    L154
  cmpq   $0x0,-0x50(%rbp)
  jne    L154
  mov    $0x1,%eax
  jmp    L67
L154:
  pxor   %xmm0,%xmm0
  ucomisd -0x40(%rbp),%xmm0
  jp     L367
  pxor   %xmm0,%xmm0
  ucomisd -0x40(%rbp),%xmm0
  jne    L367
  movl   $0x0,-0x28(%rbp)
  jmp    L5
L343:
  cmpq   $0x0,-0x48(%rbp)
  je     L410
  mov    -0x28(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  jmp    L283
L410:
  movsd  D78(%rip),%xmm0
L283:
  movsd  %xmm0,-0x10(%rbp)
  cmpq   $0x0,-0x50(%rbp)
  je     L420
  mov    -0x28(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  jmp    L306
L420:
  movsd  D78(%rip),%xmm0
L306:
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x10(%rbp),%xmm0
  ucomisd D78(%rip),%xmm0
  jp     L132
  movsd  -0x10(%rbp),%xmm0
  ucomisd D78(%rip),%xmm0
  jne    L132
  movsd  -0x8(%rbp),%xmm0
  ucomisd D78(%rip),%xmm0
  jp     L455
  movsd  -0x8(%rbp),%xmm0
  ucomisd D78(%rip),%xmm0
  je     L132
L455:
  mov    $0x0,%eax
  jmp    L67
L132:
  movsd  -0x10(%rbp),%xmm0
  ucomisd D78(%rip),%xmm0
  jp     L364
  movsd  -0x10(%rbp),%xmm0
  ucomisd D78(%rip),%xmm0
  je     L239
L364:
  movsd  -0x8(%rbp),%xmm0
  ucomisd D78(%rip),%xmm0
  jp     L239
  movsd  -0x8(%rbp),%xmm0
  ucomisd D78(%rip),%xmm0
  jne    L239
  mov    $0x0,%eax
  jmp    L67
L239:
  movsd  -0x10(%rbp),%xmm0
  ucomisd -0x8(%rbp),%xmm0
  jp     L145
  movsd  -0x10(%rbp),%xmm0
  ucomisd -0x8(%rbp),%xmm0
  je     L379
L145:
  mov    $0x0,%eax
  jmp    L67
L379:
  addl   $0x1,-0x28(%rbp)
L5:
  mov    -0x28(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jl     L343
  jmp    L332
L367:
  movl   $0x0,-0x24(%rbp)
  jmp    L156
L208:
  cmpq   $0x0,-0x48(%rbp)
  je     L301
  mov    -0x24(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  jmp    L452
L301:
  movsd  D78(%rip),%xmm0
L452:
  movsd  %xmm0,-0x20(%rbp)
  cmpq   $0x0,-0x50(%rbp)
  je     L85
  mov    -0x24(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  jmp    L53
L85:
  movsd  D78(%rip),%xmm0
L53:
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x20(%rbp),%xmm0
  ucomisd D78(%rip),%xmm0
  jp     L246
  movsd  -0x20(%rbp),%xmm0
  ucomisd D78(%rip),%xmm0
  jne    L246
  movsd  -0x18(%rbp),%xmm0
  ucomisd D78(%rip),%xmm0
  jp     L71
  movsd  -0x18(%rbp),%xmm0
  ucomisd D78(%rip),%xmm0
  je     L246
L71:
  mov    $0x0,%eax
  jmp    L67
L246:
  movsd  -0x20(%rbp),%xmm0
  ucomisd D78(%rip),%xmm0
  jp     L291
  movsd  -0x20(%rbp),%xmm0
  ucomisd D78(%rip),%xmm0
  je     L265
L291:
  movsd  -0x18(%rbp),%xmm0
  ucomisd D78(%rip),%xmm0
  jp     L265
  movsd  -0x18(%rbp),%xmm0
  ucomisd D78(%rip),%xmm0
  jne    L265
  mov    $0x0,%eax
  jmp    L67
L265:
  movsd  -0x20(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movq   D97(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  -0x40(%rbp),%xmm2
  movsd  D59(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  comisd %xmm1,%xmm0
  jbe    L192
  mov    $0x0,%eax
  jmp    L67
L192:
  addl   $0x1,-0x24(%rbp)
L156:
  mov    -0x24(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jl     L208
L332:
  mov    $0x1,%eax
L67:
  pop    %rbp
  ret
```

tool_calls: name: retrieve_data
arguments: data_label: D78
datatype: f64
name: retrieve_data
arguments: data_label: D97
datatype: qword
name: retrieve_data
arguments: data_label: D59
datatype: f64

tool: D78: 9.87654321e+107

tool: D97: 9223372036854775807

tool: D59: 0.5

assistant: ```c
int wcsutil_dblEq(int nelem, double tol, const double *darr1, const double *darr2) {
  if (nelem == 0)
    return 1;
  if (nelem < 0)
    return 0;
  if (darr1 == 0x0 && darr2 == 0x0)
    return 1;
  if (tol == 0.0) {
    for (int i = 0; i < nelem; i++) {
      double dval1 = (darr1 ? darr1[i] : 987654321.0e99);
      double dval2 = (darr2 ? darr2[i] : 987654321.0e99);
      if (dval1 == 987654321.0e99 && dval2 != 987654321.0e99)
        return 0;
      if (dval1 != 987654321.0e99 && dval2 == 987654321.0e99)
        return 0;
      if (dval1 != dval2)
        return 0;
    }
  } else {
    for (int i = 0; i < nelem; i++) {
      double dval1 = (darr1 ? darr1[i] : 987654321.0e99);
      double dval2 = (darr2 ? darr2[i] : 987654321.0e99);
      if (dval1 == 987654321.0e99 && dval2 != 987654321.0e99)
        return 0;
      if (dval1 != 987654321.0e99 && dval2 == 987654321.0e99)
        return 0;
      if (fabs(dval1 - dval2) > 0.5 * tol)
        return 0;
    }
  }
  return 1;
}
```