user: What is the c source code of the assembly code below:

```asm
<BSIM4NumFingerDiff>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  movsd  %xmm0,-0x18(%rbp)
  mov    %edi,-0x1c(%rbp)
  mov    %rsi,-0x28(%rbp)
  mov    %rdx,-0x30(%rbp)
  mov    %rcx,-0x38(%rbp)
  mov    %r8,-0x40(%rbp)
  movsd  -0x18(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L49
  mov    -0x40(%rbp),%rax
  movsd  D87(%rip),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x40(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0x30(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0x18(%rbp),%xmm0
  movsd  D87(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  D64(%rip),%xmm1
  divsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L5
  movsd  -0x18(%rbp),%xmm0
  movsd  D87(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  D64(%rip),%xmm1
  divsd  %xmm1,%xmm0
  jmp    L2
L5:
  pxor   %xmm0,%xmm0
L2:
  addsd  %xmm0,%xmm0
  mov    -0x38(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0x38(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0x28(%rbp),%rax
  movsd  %xmm0,(%rax)
  jmp    L87
L49:
  cmpl   $0x1,-0x1c(%rbp)
  jne    L34
  mov    -0x30(%rbp),%rax
  movsd  D64(%rip),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x18(%rbp),%xmm0
  movsd  D64(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  D87(%rip),%xmm1
  subsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L12
  movsd  -0x18(%rbp),%xmm0
  movsd  D64(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  D87(%rip),%xmm1
  subsd  %xmm1,%xmm0
  jmp    L36
L12:
  pxor   %xmm0,%xmm0
L36:
  addsd  %xmm0,%xmm0
  mov    -0x28(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0x40(%rbp),%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x38(%rbp),%rax
  movsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  jmp    L87
L34:
  mov    -0x30(%rbp),%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x28(%rbp),%rax
  movsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x40(%rbp),%rax
  movsd  D64(%rip),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x18(%rbp),%xmm0
  movsd  D64(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  D87(%rip),%xmm1
  subsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L23
  movsd  -0x18(%rbp),%xmm0
  movsd  D64(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  D87(%rip),%xmm1
  subsd  %xmm1,%xmm0
  jmp    L80
L23:
  pxor   %xmm0,%xmm0
L80:
  addsd  %xmm0,%xmm0
  mov    -0x38(%rbp),%rax
  movsd  %xmm0,(%rax)
L87:
  mov    $0x0,%eax
  pop    %rbp
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D87
type_guessed: f64
name: disassemble_data
arguments: data_label: D64
type_guessed: f64

tool: D87: 1

tool: D64: 2

assistant: ```c
int BSIM4NumFingerDiff(nf, minSD, nuIntD, nuEndD, nuIntS, nuEndS)
int minSD;
double nf, *nuIntD, *nuEndD, *nuIntS, *nuEndS;
{
  int NF;
  NF = (int)nf;
  if ((NF % 2) != 0) {
    *nuEndD = *nuEndS = 1.0;
    *nuIntD = *nuIntS = 2.0 * (((nf - 1.0) / 2.0) > (0.0) ? ((nf - 1.0) / 2.0) : (0.0));
  } else {
    if (minSD == 1) {
      *nuEndD = 2.0;
      *nuIntD = 2.0 * (((nf / 2.0 - 1.0)) > (0.0) ? ((nf / 2.0 - 1.0)) : (0.0));
      *nuEndS = 0.0;
      *nuIntS = nf;
    } else {
      *nuEndD = 0.0;
      *nuIntD = nf;
      *nuEndS = 2.0;
      *nuIntS = 2.0 * (((nf / 2.0 - 1.0)) > (0.0) ? ((nf / 2.0 - 1.0)) : (0.0));
    }
  }
  return 0;
}
```