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

```asm
<segmentation_acc>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  lea    -0x22000(%rsp),%r11
L56:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L56
  sub    $0xa8,%rsp
  mov    %rdi,%r13
  mov    %rsi,%r15
  mov    %rdx,%r14
  mov    %fs:0x28,%rax
  mov    %rax,0x22098(%rsp)
  xor    %eax,%eax
  pxor   %xmm2,%xmm2
  cvtsi2ssl (%rcx),%xmm2
  movss  %xmm2,(%rsp)
  pxor   %xmm3,%xmm3
  cvtsi2ssl 0x4(%rcx),%xmm3
  movss  %xmm3,0x4(%rsp)
  lea    0x10(%rsp),%rax
  mov    %rax,0x8(%rsp)
  mov    %rax,%rdx
  mov    %rdi,%rsi
  mov    $0x0,%edi
  call   <fetch@plt>
  lea    0x4420(%rsp),%rbx
  mov    %rbx,%rdx
  mov    %r13,%rsi
  mov    $0x1,%edi
  call   <fetch@plt>
  lea    0x8830(%rsp),%rbp
  mov    %rbp,%rdx
  mov    %r13,%rsi
  mov    $0x2,%edi
  call   <fetch@plt>
  lea    0x11050(%rsp),%r12
  mov    %r12,%rdx
  mov    %r15,%rsi
  mov    $0x1,%edi
  call   <fetch@plt>
  movss  0x4(%rsp),%xmm1
  movss  (%rsp),%xmm0
  lea    0x1dc80(%rsp),%r8
  mov    %r12,%rcx
  mov    %rbp,%rdx
  mov    %rbx,%rsi
  mov    0x8(%rsp),%rdi
  call   <compute@plt>
  lea    0xcc40(%rsp),%rdx
  mov    %r13,%rsi
  mov    $0x3,%edi
  call   <fetch@plt>
  lea    0x15460(%rsp),%rdx
  mov    %r15,%rsi
  mov    $0x2,%edi
  call   <fetch@plt>
  mov    $0x4,%r12d
  mov    $0x3,%ebx
  lea    0x4420(%rsp),%rax
  mov    %rax,0x8(%rsp)
  jmp    L93
L98:
  lea    0x8830(%rsp),%rdx
  mov    %r13,%rsi
  mov    %r12d,%edi
  call   <fetch@plt>
  lea    0x11050(%rsp),%rdx
  mov    %r15,%rsi
  mov    %ebx,%edi
  call   <fetch@plt>
  lea    0x15460(%rsp),%rcx
  lea    0x10(%rsp),%rsi
  lea    0xcc40(%rsp),%rdi
  movss  0x4(%rsp),%xmm1
  movss  (%rsp),%xmm0
  lea    0x19870(%rsp),%r8
  mov    0x8(%rsp),%rdx
  call   <compute@plt>
  lea    0x1dc80(%rsp),%rdx
  mov    %r14,%rsi
  mov    %ebp,%edi
  call   <write@plt>
L8:
  add    $0x1,%ebx
  add    $0x1,%r12d
  cmp    $0x3c,%ebx
  je     L82
L93:
  lea    -0x1(%rbx),%ebp
  test   $0x3,%bpl
  je     L98
  mov    %ebp,%edx
  sar    $0x1f,%edx
  shr    $0x1e,%edx
  lea    0x0(%rbp,%rdx,1),%eax
  and    $0x3,%eax
  sub    %edx,%eax
  cmp    $0x1,%eax
  je     L9
  cmp    $0x2,%eax
  je     L67
  mov    0x8(%rsp),%rdx
  mov    %r13,%rsi
  mov    %r12d,%edi
  call   <fetch@plt>
  lea    0x15460(%rsp),%rdx
  mov    %r15,%rsi
  mov    %ebx,%edi
  call   <fetch@plt>
  lea    0x11050(%rsp),%rcx
  lea    0x10(%rsp),%rdx
  lea    0xcc40(%rsp),%rsi
  lea    0x8830(%rsp),%rdi
  movss  0x4(%rsp),%xmm1
  movss  (%rsp),%xmm0
  lea    0x1dc80(%rsp),%r8
  call   <compute@plt>
  lea    0x19870(%rsp),%rdx
  mov    %r14,%rsi
  mov    %ebp,%edi
  call   <write@plt>
  jmp    L8
L9:
  lea    0xcc40(%rsp),%rdx
  mov    %r13,%rsi
  mov    %r12d,%edi
  call   <fetch@plt>
  lea    0x15460(%rsp),%rdx
  mov    %r15,%rsi
  mov    %ebx,%edi
  call   <fetch@plt>
  lea    0x11050(%rsp),%rcx
  lea    0x8830(%rsp),%rdx
  lea    0x10(%rsp),%rdi
  movss  0x4(%rsp),%xmm1
  movss  (%rsp),%xmm0
  lea    0x1dc80(%rsp),%r8
  mov    0x8(%rsp),%rsi
  call   <compute@plt>
  lea    0x19870(%rsp),%rdx
  mov    %r14,%rsi
  mov    %ebp,%edi
  call   <write@plt>
  jmp    L8
L67:
  lea    0x10(%rsp),%rdx
  mov    %r13,%rsi
  mov    %r12d,%edi
  call   <fetch@plt>
  lea    0x11050(%rsp),%rdx
  mov    %r15,%rsi
  mov    %ebx,%edi
  call   <fetch@plt>
  lea    0x15460(%rsp),%rcx
  lea    0xcc40(%rsp),%rdx
  lea    0x8830(%rsp),%rsi
  movss  0x4(%rsp),%xmm1
  movss  (%rsp),%xmm0
  lea    0x19870(%rsp),%r8
  mov    0x8(%rsp),%rdi
  call   <compute@plt>
  lea    0x1dc80(%rsp),%rdx
  mov    %r14,%rsi
  mov    %ebp,%edi
  call   <write@plt>
  jmp    L8
L82:
  lea    0x1dc80(%rsp),%rbx
  lea    0x11050(%rsp),%rcx
  lea    0x10(%rsp),%rdx
  lea    0xcc40(%rsp),%rsi
  lea    0x8830(%rsp),%rdi
  movss  0x4(%rsp),%xmm1
  movss  (%rsp),%xmm0
  mov    %rbx,%r8
  call   <compute@plt>
  lea    0x19870(%rsp),%rdx
  mov    %r14,%rsi
  mov    $0x3a,%edi
  call   <write@plt>
  mov    %rbx,%rdx
  mov    %r14,%rsi
  mov    $0x3b,%edi
  call   <write@plt>
  mov    0x22098(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L22
  add    $0x220a8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L22:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void segmentation_acc(volatile float *A_bus, volatile float *B_bus, volatile float *C_bus, int c[2]) {
  float phi0[66][66], phi1[66][66], phi2[66][66], phi3[66][66], u0[66][66], u1[66][66];
  float curvature_motion_part0[66][66];
  float curvature_motion_part1[66][66];
  int i;
  float c1;
  float c2;
  c1 = c[0];
  c2 = c[1];
  fetch(0, A_bus, phi0);
  fetch(1, A_bus, phi1);
  fetch(2, A_bus, phi2);
  fetch(1, B_bus, u0);
  compute(phi0, phi1, phi2, u0, curvature_motion_part1, c1, c2);
  fetch(3, A_bus, phi3);
  fetch(2, B_bus, u1);
  for (i = 2; i < 61 - 2; i++) {
    if (i % 4 == 0) {
      fetch(i + 2, A_bus, phi2);
      fetch(i + 1, B_bus, u0);
      compute(phi3, phi0, phi1, u1, curvature_motion_part0, c1, c2);
      write(i, C_bus, curvature_motion_part1);
    } else if (i % 4 == 1) {
      fetch(i + 2, A_bus, phi3);
      fetch(i + 1, B_bus, u1);
      compute(phi0, phi1, phi2, u0, curvature_motion_part1, c1, c2);
      write(i, C_bus, curvature_motion_part0);
    } else if (i % 4 == 2) {
      fetch(i + 2, A_bus, phi0);
      fetch(i + 1, B_bus, u0);
      compute(phi1, phi2, phi3, u1, curvature_motion_part0, c1, c2);
      write(i, C_bus, curvature_motion_part1);
    } else {
      fetch(i + 2, A_bus, phi1);
      fetch(i + 1, B_bus, u1);
      compute(phi2, phi3, phi0, u0, curvature_motion_part1, c1, c2);
      write(i, C_bus, curvature_motion_part0);
    }
  }
  compute(phi2, phi3, phi0, u0, curvature_motion_part1, c1, c2);
  write(58, C_bus, curvature_motion_part0);
  write(59, C_bus, curvature_motion_part1);
}
```