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

```asm
<segmentation_acc>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  lea    -0x22000(%rsp),%r11
L5:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L5
  sub    $0xd8,%rsp
  pxor   %xmm2,%xmm2
  pxor   %xmm3,%xmm3
  cvtsi2ssl (%rcx),%xmm2
  mov    %rdi,0x28(%rsp)
  mov    %rdi,%rbx
  mov    %rdx,%rbp
  cvtsi2ssl 0x4(%rcx),%xmm3
  mov    %rsi,0x8(%rsp)
  lea    0x40(%rsp),%r13
  mov    %rdi,%rsi
  lea    0x4450(%rsp),%r15
  mov    %r13,%rdx
  xor    %edi,%edi
  lea    0x8860(%rsp),%r12
  lea    0x11080(%rsp),%r14
  mov    %fs:0x28,%rax
  mov    %rax,0x220c8(%rsp)
  xor    %eax,%eax
  movss  %xmm2,(%rsp)
  movss  %xmm3,0x4(%rsp)
  call   <fetch@plt>
  mov    %r15,%rdx
  mov    %rbx,%rsi
  mov    $0x1,%edi
  mov    %r15,0x30(%rsp)
  call   <fetch@plt>
  mov    %rbx,%rsi
  mov    %r12,%rdx
  mov    $0x2,%edi
  call   <fetch@plt>
  mov    0x8(%rsp),%rsi
  mov    %r14,%rdx
  mov    $0x1,%edi
  call   <fetch@plt>
  movss  (%rsp),%xmm0
  mov    %r14,%rcx
  mov    %r15,%rsi
  movss  0x4(%rsp),%xmm1
  lea    0x1dcb0(%rsp),%rax
  mov    %r12,%rdx
  mov    %r13,%rdi
  mov    %rax,%r8
  lea    0xcc70(%rsp),%r15
  mov    %rax,0x18(%rsp)
  call   <compute@plt>
  mov    %rbx,%rsi
  mov    %r15,%rdx
  mov    $0x3,%edi
  call   <fetch@plt>
  mov    0x8(%rsp),%rsi
  mov    $0x2,%edi
  lea    0x15490(%rsp),%rax
  mov    %rax,%rdx
  mov    %rax,0x38(%rsp)
  mov    $0x2,%ebx
  call   <fetch@plt>
  lea    0x198a0(%rsp),%rax
  mov    %rbp,0x20(%rsp)
  mov    %rax,0x10(%rsp)
  jmp    L99
  nopw   0x0(%rax,%rax,1)
L97:
  cmp    $0x1,%eax
  je     L22
  cmp    $0x2,%eax
  je     L46
  mov    0x30(%rsp),%rdx
  mov    0x28(%rsp),%rsi
  call   <fetch@plt>
  mov    0x38(%rsp),%rdx
  mov    0x8(%rsp),%rsi
  mov    %ebx,%edi
  call   <fetch@plt>
  movss  (%rsp),%xmm0
  mov    %r14,%rcx
  mov    %r13,%rdx
  movss  0x4(%rsp),%xmm1
  mov    0x18(%rsp),%r8
  mov    %r15,%rsi
  mov    %r12,%rdi
L78:
  call   <compute@plt>
  mov    0x10(%rsp),%rdx
  mov    0x20(%rsp),%rsi
  mov    %ebp,%edi
  call   <seg_write@plt>
  cmp    $0x3b,%ebx
  je     L34
L99:
  mov    %ebx,%ebp
  lea    0x2(%rbx),%edi
  add    $0x1,%ebx
  mov    %ebp,%eax
  and    $0x3,%eax
  jne    L97
  mov    0x28(%rsp),%rsi
  mov    %r12,%rdx
  call   <fetch@plt>
  mov    0x8(%rsp),%rsi
  mov    %r14,%rdx
  mov    %ebx,%edi
  call   <fetch@plt>
  movss  0x4(%rsp),%xmm1
  movss  (%rsp),%xmm0
  mov    %r13,%rsi
  mov    0x10(%rsp),%r8
  mov    0x38(%rsp),%rcx
  mov    %r15,%rdi
  mov    0x30(%rsp),%rdx
L82:
  call   <compute@plt>
  mov    0x18(%rsp),%rdx
  mov    0x20(%rsp),%rsi
  mov    %ebp,%edi
  call   <seg_write@plt>
  cmp    $0x3b,%ebx
  jne    L99
L34:
  mov    0x18(%rsp),%rbx
  movss  (%rsp),%xmm0
  mov    %r14,%rcx
  mov    %r13,%rdx
  movss  0x4(%rsp),%xmm1
  mov    0x20(%rsp),%rbp
  mov    %r15,%rsi
  mov    %r12,%rdi
  mov    %rbx,%r8
  call   <compute@plt>
  mov    0x10(%rsp),%rdx
  mov    %rbp,%rsi
  mov    $0x3a,%edi
  call   <seg_write@plt>
  mov    %rbx,%rdx
  mov    %rbp,%rsi
  mov    $0x3b,%edi
  call   <seg_write@plt>
  mov    0x220c8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L79
  add    $0x220d8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L46:
  mov    0x28(%rsp),%rsi
  mov    %r13,%rdx
  call   <fetch@plt>
  mov    0x8(%rsp),%rsi
  mov    %r14,%rdx
  mov    %ebx,%edi
  call   <fetch@plt>
  movss  0x4(%rsp),%xmm1
  movss  (%rsp),%xmm0
  mov    %r15,%rdx
  mov    0x10(%rsp),%r8
  mov    0x38(%rsp),%rcx
  mov    %r12,%rsi
  mov    0x30(%rsp),%rdi
  jmp    L82
  nopl   0x0(%rax)
L22:
  mov    0x28(%rsp),%rsi
  mov    %r15,%rdx
  call   <fetch@plt>
  mov    0x38(%rsp),%rdx
  mov    0x8(%rsp),%rsi
  mov    %ebx,%edi
  call   <fetch@plt>
  movss  (%rsp),%xmm0
  mov    %r14,%rcx
  mov    %r12,%rdx
  movss  0x4(%rsp),%xmm1
  mov    0x18(%rsp),%r8
  mov    %r13,%rdi
  mov    0x30(%rsp),%rsi
  jmp    L78
L79:
  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);
      seg_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);
      seg_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);
      seg_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);
      seg_write(i, C_bus, curvature_motion_part0);
    }
  }
  compute(phi2, phi3, phi0, u0, curvature_motion_part1, c1, c2);
  seg_write(58, C_bus, curvature_motion_part0);
  seg_write(59, C_bus, curvature_motion_part1);
}
```