user: Please show me the C implementation that matches the assembly code listed below:

```asm
<splitspeci>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %edx,-0x24(%rbp)
  mov    %ecx,-0x28(%rbp)
  mov    %r8,-0x30(%rbp)
  mov    %r9,-0x38(%rbp)
  movss  %xmm0,-0x3c(%rbp)
  movss  %xmm1,-0x40(%rbp)
  movl   $0x0,-0x8(%rbp)
  jmp    L73
L64:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x8(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x38(%rbp),%rdx
  add    %rcx,%rdx
  movss  (%rax),%xmm0
  movss  %xmm0,(%rdx)
  addl   $0x1,-0x8(%rbp)
L73:
  mov    -0x8(%rbp),%eax
  cmp    0x30(%rbp),%eax
  jl     L64
  mov    0x20(%rbp),%eax
  mov    %eax,-0x8(%rbp)
  jmp    L99
L32:
  mov    -0x8(%rbp),%edx
  mov    -0x28(%rbp),%eax
  add    %edx,%eax
  cltd
  idivl  0x30(%rbp)
  mov    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  cltd
  idivl  0x30(%rbp)
  mov    %edx,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x10(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x8(%rbp),%edx
  mov    -0x28(%rbp),%eax
  add    %edx,%eax
  cltd
  idivl  0x30(%rbp)
  mov    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  cltd
  idivl  0x30(%rbp)
  mov    %edx,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x10(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x38(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x8(%rbp)
L99:
  mov    -0x8(%rbp),%eax
  cmp    0x28(%rbp),%eax
  jl     L32
  movl   $0x0,-0x8(%rbp)
  jmp    L40
L91:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  ucomiss %xmm1,%xmm0
  jp     L43
  pxor   %xmm1,%xmm1
  ucomiss %xmm1,%xmm0
  jne    L43
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  ucomiss %xmm1,%xmm0
  jp     L43
  pxor   %xmm1,%xmm1
  ucomiss %xmm1,%xmm0
  jne    L43
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x18(%rbp),%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  jmp    L90
L43:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x3c(%rbp),%xmm1
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  -0x40(%rbp),%xmm0
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x18(%rbp),%rax
  add    %rdx,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
L90:
  addl   $0x1,-0x8(%rbp)
L40:
  mov    -0x8(%rbp),%eax
  cmp    0x30(%rbp),%eax
  jl     L91
  nop
  nop
  pop    %rbp
  ret
```

assistant: ```c
void splitspeci(int *current_binsplit, int *last_binsplit, int bin_offset, int table_offset, float *current_mag, float *last_mag, float *inmag, float *dest_mag, int start, int end, int n, float oldfrac, float newfrac) {
  int i;
  int bindex;
  for (i = 0; i < n; i++) {
    last_mag[i] = current_mag[i] = 0.0;
  }
  for (i = start; i < end; i++) {
    bindex = current_binsplit[(i + table_offset) % n];
    bindex = (bindex + bin_offset) % n;
    current_mag[bindex] = inmag[bindex];
    bindex = last_binsplit[(i + table_offset) % n];
    bindex = (bindex + bin_offset) % n;
    last_mag[bindex] = inmag[bindex];
  }
  for (i = 0; i < n; i++) {
    if (!current_mag[i] && !last_mag[i]) {
      dest_mag[i] = 0.0;
    } else {
      dest_mag[i] = oldfrac * last_mag[i] + newfrac * current_mag[i];
    }
  }
}
```