user: Converte this assembly snippet into its equivalent C code:

```asm
<stdlib_strided_scusumkbn2>:
  endbr64
  test   %rdi,%rdi
  jle    L24
  push   %r15
  movaps %xmm0,%xmm2
  mov    %rdi,%r15
  mov    %rcx,%rax
  push   %r14
  xor    %edi,%edi
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  test   %rdx,%rdx
  js     L82
  xor    %ecx,%ecx
  test   %r8,%r8
  js     L38
L86:
  lea    (%rsi,%rdi,4),%r13
  pxor   %xmm3,%xmm3
  lea    (%rax,%rcx,4),%r12
  xor    %ebp,%ebp
  lea    0x0(,%r8,4),%rsi
  lea    0x0(,%rdx,4),%r14
  movss  %xmm3,0x4(%rsp)
  mov    %rsi,0x18(%rsp)
  jmp    L34
  nopl   0x0(%rax,%rax,1)
L28:
  subss  %xmm2,%xmm4
  addss  %xmm4,%xmm1
L37:
  movaps %xmm1,%xmm4
  movaps %xmm3,%xmm0
  movss  %xmm2,0x14(%rsp)
  addss  %xmm3,%xmm4
  movss  %xmm3,0xc(%rsp)
  movss  %xmm1,0x8(%rsp)
  movss  %xmm4,0x10(%rsp)
  call   <fabsf@plt>
  movss  0x8(%rsp),%xmm1
  mov    %rax,%rbx
  movaps %xmm1,%xmm0
  call   <fabsf@plt>
  movss  0x8(%rsp),%xmm1
  movss  0xc(%rsp),%xmm3
  cmp    %rax,%rbx
  movss  0x10(%rsp),%xmm4
  movss  0x14(%rsp),%xmm2
  jl     L41
  subss  %xmm4,%xmm3
  addss  %xmm3,%xmm1
L15:
  movaps %xmm2,%xmm0
  addss  0x4(%rsp),%xmm1
  add    $0x1,%rbp
  add    %r14,%r13
  addss  %xmm4,%xmm0
  movss  %xmm1,0x4(%rsp)
  addss  %xmm1,%xmm0
  movss  %xmm0,(%r12)
  add    0x18(%rsp),%r12
  cmp    %rbp,%r15
  je     L8
  movaps %xmm4,%xmm3
L34:
  movss  0x0(%r13),%xmm1
  movaps %xmm2,%xmm4
  movss  %xmm3,0x14(%rsp)
  movaps %xmm4,%xmm0
  movss  %xmm4,0xc(%rsp)
  addss  %xmm1,%xmm2
  movss  %xmm1,0x8(%rsp)
  movss  %xmm2,0x10(%rsp)
  call   <fabsf@plt>
  movss  0x8(%rsp),%xmm1
  mov    %rax,%rbx
  movaps %xmm1,%xmm0
  call   <fabsf@plt>
  movss  0x8(%rsp),%xmm1
  movss  0xc(%rsp),%xmm4
  cmp    %rax,%rbx
  movss  0x10(%rsp),%xmm2
  movss  0x14(%rsp),%xmm3
  jge    L28
  subss  %xmm2,%xmm1
  addss  %xmm4,%xmm1
  jmp    L37
  nopw   0x0(%rax,%rax,1)
L41:
  subss  %xmm4,%xmm1
  addss  %xmm3,%xmm1
  jmp    L15
  nopl   (%rax)
L8:
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nop
L38:
  mov    $0x1,%ecx
  sub    %r15,%rcx
  imul   %r8,%rcx
  jmp    L86
  nopl   0x0(%rax)
L82:
  mov    $0x1,%edi
  xor    %ecx,%ecx
  sub    %r15,%rdi
  imul   %rdx,%rdi
  test   %r8,%r8
  jns    L86
  jmp    L38
  nopl   0x0(%rax)
L24:
  ret
```

assistant: ```c
void stdlib_strided_scusumkbn2(const int64_t N, const float sum, const float *X, const int64_t strideX, float *Y, const int64_t strideY) {
  int64_t ix;
  int64_t iy;
  int64_t i;
  float ccs;
  float cs;
  float cc;
  float v;
  float t;
  float c;
  float s;
  if (N <= 0) {
    return;
  }
  if (strideX < 0) {
    ix = (1 - N) * strideX;
  } else {
    ix = 0;
  }
  if (strideY < 0) {
    iy = (1 - N) * strideY;
  } else {
    iy = 0;
  }
  s = sum;
  ccs = 0.0f;
  cs = 0.0f;
  for (i = 0; i < N; i++) {
    v = X[ix];
    t = s + v;
    if (fabsf(s) >= fabsf(v)) {
      c = (s - t) + v;
    } else {
      c = (v - t) + s;
    }
    s = t;
    t = cs + c;
    if (fabsf(cs) >= fabsf(c)) {
      cc = (cs - t) + c;
    } else {
      cc = (c - t) + cs;
    }
    cs = t;
    ccs += cc;
    Y[iy] = s + cs + ccs;
    ix += strideX;
    iy += strideY;
  }
  return;
}
```