user: What would the C source look like for the assembly code provided here?

```asm
<tbdm>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xd0,%rsp
  mov    %rdi,-0xa8(%rbp)
  mov    %rsi,-0xb0(%rbp)
  mov    %rdx,-0xb8(%rbp)
  mov    %rcx,-0xc0(%rbp)
  mov    %r8,-0xc8(%rbp)
  mov    %r9,-0xd0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  subq   $0x4,-0xb8(%rbp)
  subq   $0x8,-0xb0(%rbp)
  mov    -0xb8(%rbp),%rax
  lea    0x4(%rax),%rdi
  mov    -0xb0(%rbp),%rax
  add    $0x1e0,%rax
  mov    (%rax),%rdx
  mov    -0xb0(%rbp),%rax
  lea    0x8(%rax),%rsi
  mov    -0xc0(%rbp),%rcx
  mov    -0xa8(%rbp),%rax
  sub    $0x8,%rsp
  push   -0xc8(%rbp)
  mov    %rcx,%r9
  mov    %rdi,%r8
  mov    %rdx,%rcx
  mov    $0x3c,%edx
  mov    %rax,%rdi
  call   <difmag@plt>
  add    $0x10,%rsp
  mov    -0xc0(%rbp),%rax
  mov    (%rax),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0xb0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xd0(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0xc0(%rbp),%rax
  mov    (%rax),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0xb8(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  cvttss2si %xmm0,%rax
  mov    %rax,-0x78(%rbp)
  movq   $0x0,-0x88(%rbp)
  mov    -0xc0(%rbp),%rax
  mov    (%rax),%rax
  sub    $0x2,%rax
  mov    %rax,-0x70(%rbp)
  mov    -0xd0(%rbp),%rax
  mov    (%rax),%rax
  lea    0x2(%rax),%rdx
  mov    -0xb0(%rbp),%rax
  add    $0x1e0,%rax
  mov    (%rax),%rax
  sub    $0x1,%rax
  cmp    %rax,%rdx
  jge    L52
  mov    -0xd0(%rbp),%rax
  mov    (%rax),%rax
  add    $0x3,%rax
  jmp    L87
L52:
  mov    -0xb0(%rbp),%rax
  add    $0x1e0,%rax
  mov    (%rax),%rax
  sub    $0x1,%rax
L87:
  mov    %rax,-0x68(%rbp)
  mov    -0xd0(%rbp),%rax
  mov    (%rax),%rax
  mov    $0x2c,%edx
  cmp    %rdx,%rax
  cmovl  %rdx,%rax
  sub    $0x3,%rax
  mov    %rax,-0x80(%rbp)
  jmp    L32
L136:
  addq   $0x1,-0x70(%rbp)
L30:
  mov    -0x70(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0xb0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  cmp    %rax,-0x80(%rbp)
  jg     L136
  mov    -0x70(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0xb0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  cmp    %rax,-0x80(%rbp)
  je     L21
  addq   $0x1,-0x88(%rbp)
  mov    -0x88(%rbp),%rax
  lea    -0x1(%rax),%rdx
  mov    -0x80(%rbp),%rax
  mov    %rax,-0x40(%rbp,%rdx,8)
L21:
  addq   $0x1,-0x80(%rbp)
L32:
  mov    -0x80(%rbp),%rax
  cmp    -0x68(%rbp),%rax
  jle    L30
  cmpq   $0x0,-0x88(%rbp)
  jle    L95
  mov    -0xb0(%rbp),%rax
  add    $0x1e0,%rax
  mov    (%rax),%rcx
  lea    -0x98(%rbp),%r9
  lea    -0x60(%rbp),%r8
  mov    -0x88(%rbp),%rdx
  lea    -0x40(%rbp),%rsi
  mov    -0xa8(%rbp),%rax
  sub    $0x8,%rsp
  lea    -0x90(%rbp),%rdi
  push   %rdi
  mov    %rax,%rdi
  call   <difmag@plt>
  add    $0x10,%rsp
  mov    -0x98(%rbp),%rax
  sub    $0x1,%rax
  movss  -0x60(%rbp,%rax,4),%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2ssq -0x78(%rbp),%xmm0
  comiss %xmm1,%xmm0
  jbe    L95
  mov    -0x98(%rbp),%rax
  sub    $0x1,%rax
  mov    -0x40(%rbp,%rax,8),%rdx
  mov    -0xd0(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0x98(%rbp),%rax
  sub    $0x1,%rax
  movss  -0x60(%rbp,%rax,4),%xmm0
  cvttss2si %xmm0,%rax
  mov    %rax,-0x78(%rbp)
L95:
  mov    -0xd0(%rbp),%rax
  mov    (%rax),%rax
  cmp    $0x4f,%rax
  jle    L84
  mov    -0xd0(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rdx
  shr    $0x3f,%rdx
  add    %rdx,%rax
  sar    %rax
  mov    %rax,-0x80(%rbp)
  mov    -0x80(%rbp),%rax
  and    $0x1,%eax
  test   %rax,%rax
  jne    L64
  movq   $0x2,-0x88(%rbp)
  mov    -0x80(%rbp),%rax
  sub    $0x1,%rax
  mov    %rax,-0x40(%rbp)
  mov    -0x80(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,-0x38(%rbp)
  jmp    L40
L64:
  movq   $0x1,-0x88(%rbp)
  mov    -0x80(%rbp),%rax
  mov    %rax,-0x40(%rbp)
L40:
  mov    -0xb0(%rbp),%rax
  add    $0x1e0,%rax
  mov    (%rax),%rcx
  lea    -0x98(%rbp),%r9
  lea    -0x60(%rbp),%r8
  mov    -0x88(%rbp),%rdx
  lea    -0x40(%rbp),%rsi
  mov    -0xa8(%rbp),%rax
  sub    $0x8,%rsp
  lea    -0x90(%rbp),%rdi
  push   %rdi
  mov    %rax,%rdi
  call   <difmag@plt>
  add    $0x10,%rsp
  mov    -0x98(%rbp),%rax
  sub    $0x1,%rax
  movss  -0x60(%rbp,%rax,4),%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2ssq -0x78(%rbp),%xmm0
  comiss %xmm1,%xmm0
  jbe    L84
  mov    -0x98(%rbp),%rax
  sub    $0x1,%rax
  mov    -0x40(%rbp,%rax,8),%rdx
  mov    -0xd0(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0x98(%rbp),%rax
  sub    $0x1,%rax
  movss  -0x60(%rbp,%rax,4),%xmm0
  cvttss2si %xmm0,%rax
  mov    %rax,-0x78(%rbp)
  mov    -0xc0(%rbp),%rax
  mov    (%rax),%rax
  lea    -0x14(%rax),%rdx
  mov    -0xc0(%rbp),%rax
  mov    %rdx,(%rax)
L84:
  mov    -0xc0(%rbp),%rax
  mov    (%rax),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0xb8(%rbp),%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  cvtsi2ssq -0x78(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0xc0(%rbp),%rax
  mov    (%rax),%rax
  mov    $0x6,%edx
  cmp    %rdx,%rax
  cmovl  %rdx,%rax
  lea    -0x5(%rax),%rdx
  mov    -0xc8(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0xc0(%rbp),%rax
  mov    (%rax),%rax
  mov    $0x37,%edx
  cmp    %rdx,%rax
  cmovg  %rdx,%rax
  add    $0x5,%rax
  mov    %rax,-0x68(%rbp)
  mov    -0xc8(%rbp),%rax
  mov    (%rax),%rax
  add    $0x1,%rax
  mov    %rax,-0x80(%rbp)
  jmp    L66
L121:
  mov    -0x80(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0xb8(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0xc8(%rbp),%rax
  mov    (%rax),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0xb8(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  comiss %xmm1,%xmm0
  jbe    L149
  mov    -0xc8(%rbp),%rax
  mov    -0x80(%rbp),%rdx
  mov    %rdx,(%rax)
L149:
  addq   $0x1,-0x80(%rbp)
L66:
  mov    -0x80(%rbp),%rax
  cmp    -0x68(%rbp),%rax
  jle    L121
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L125
  call   <__stack_chk_fail@plt>
L125:
  leave
  ret
```

assistant: ```c
void tbdm(float *speech, long *tau, float *amdf, long *minptr, long *maxptr, long *mintau) {
  float amdf2[6];
  long minp2, ltau2, maxp2, i, j;
  long minamd, ptr, tau2[6];
  --amdf;
  --tau;
  difmag(speech, &tau[1], 60, tau[60], &amdf[1], minptr, maxptr);
  *mintau = tau[*minptr];
  minamd = (long)amdf[*minptr];
  ltau2 = 0;
  ptr = *minptr - 2;
  j = ((*mintau + 3) <= (tau[60] - 1) ? (*mintau + 3) : (tau[60] - 1));
  i = ((*mintau - 3) >= (41) ? (*mintau - 3) : (41));
  for (; i <= j; ++i) {
    while (tau[ptr] < i) {
      ++ptr;
    }
    if (tau[ptr] != i) {
      ++ltau2;
      tau2[ltau2 - 1] = i;
    }
  }
  if (ltau2 > 0) {
    difmag(speech, tau2, ltau2, tau[60], amdf2, &minp2, &maxp2);
    if (amdf2[minp2 - 1] < (float)minamd) {
      *mintau = tau2[minp2 - 1];
      minamd = (long)amdf2[minp2 - 1];
    }
  }
  if (*mintau >= 80) {
    i = *mintau / 2;
    if ((i & 1) == 0) {
      ltau2 = 2;
      tau2[0] = i - 1;
      tau2[1] = i + 1;
    } else {
      ltau2 = 1;
      tau2[0] = i;
    }
    difmag(speech, tau2, ltau2, tau[60], amdf2, &minp2, &maxp2);
    if (amdf2[minp2 - 1] < (float)minamd) {
      *mintau = tau2[minp2 - 1];
      minamd = (long)amdf2[minp2 - 1];
      *minptr += -20;
    }
  }
  amdf[*minptr] = (float)minamd;
  *maxptr = ((*minptr - 5) >= (1) ? (*minptr - 5) : (1));
  j = ((*minptr + 5) <= (60) ? (*minptr + 5) : (60));
  for (i = *maxptr + 1; i <= j; ++i) {
    if (amdf[i] > amdf[*maxptr]) {
      *maxptr = i;
    }
  }
}
```