user: Translate the below assembly code into C programming language:

```asm
<segmentation_acc>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  lea    -0x22000(%rsp),%r11
L66:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L66
  sub    $0xc0,%rsp
  mov    %rdi,-0x220a8(%rbp)
  mov    %rsi,-0x220b0(%rbp)
  mov    %rdx,-0x220b8(%rbp)
  mov    %rcx,-0x220c0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x220c0(%rbp),%rax
  mov    (%rax),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x22098(%rbp)
  mov    -0x220c0(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x22094(%rbp)
  lea    -0x22090(%rbp),%rdx
  mov    -0x220a8(%rbp),%rax
  mov    %rax,%rsi
  mov    $0x0,%edi
  call   <fetch@plt>
  lea    -0x1dc80(%rbp),%rdx
  mov    -0x220a8(%rbp),%rax
  mov    %rax,%rsi
  mov    $0x1,%edi
  call   <fetch@plt>
  lea    -0x19870(%rbp),%rdx
  mov    -0x220a8(%rbp),%rax
  mov    %rax,%rsi
  mov    $0x2,%edi
  call   <fetch@plt>
  lea    -0x11050(%rbp),%rdx
  mov    -0x220b0(%rbp),%rax
  mov    %rax,%rsi
  mov    $0x1,%edi
  call   <fetch@plt>
  movss  -0x22094(%rbp),%xmm0
  mov    -0x22098(%rbp),%edi
  lea    -0x4420(%rbp),%r8
  lea    -0x11050(%rbp),%rcx
  lea    -0x19870(%rbp),%rdx
  lea    -0x1dc80(%rbp),%rsi
  lea    -0x22090(%rbp),%rax
  movaps %xmm0,%xmm1
  movd   %edi,%xmm0
  mov    %rax,%rdi
  call   <compute@plt>
  lea    -0x15460(%rbp),%rdx
  mov    -0x220a8(%rbp),%rax
  mov    %rax,%rsi
  mov    $0x3,%edi
  call   <fetch@plt>
  lea    -0xcc40(%rbp),%rdx
  mov    -0x220b0(%rbp),%rax
  mov    %rax,%rsi
  mov    $0x2,%edi
  call   <fetch@plt>
  movl   $0x2,-0x2209c(%rbp)
  jmp    L16
L99:
  mov    -0x2209c(%rbp),%eax
  and    $0x3,%eax
  test   %eax,%eax
  jne    L5
  mov    -0x2209c(%rbp),%eax
  lea    0x2(%rax),%ecx
  lea    -0x19870(%rbp),%rdx
  mov    -0x220a8(%rbp),%rax
  mov    %rax,%rsi
  mov    %ecx,%edi
  call   <fetch@plt>
  mov    -0x2209c(%rbp),%eax
  lea    0x1(%rax),%ecx
  lea    -0x11050(%rbp),%rdx
  mov    -0x220b0(%rbp),%rax
  mov    %rax,%rsi
  mov    %ecx,%edi
  call   <fetch@plt>
  movss  -0x22094(%rbp),%xmm0
  mov    -0x22098(%rbp),%edi
  lea    -0x8830(%rbp),%r8
  lea    -0xcc40(%rbp),%rcx
  lea    -0x1dc80(%rbp),%rdx
  lea    -0x22090(%rbp),%rsi
  lea    -0x15460(%rbp),%rax
  movaps %xmm0,%xmm1
  movd   %edi,%xmm0
  mov    %rax,%rdi
  call   <compute@plt>
  lea    -0x4420(%rbp),%rdx
  mov    -0x220b8(%rbp),%rcx
  mov    -0x2209c(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <seg_write@plt>
  jmp    L81
L5:
  mov    -0x2209c(%rbp),%eax
  cltd
  shr    $0x1e,%edx
  add    %edx,%eax
  and    $0x3,%eax
  sub    %edx,%eax
  cmp    $0x1,%eax
  jne    L95
  mov    -0x2209c(%rbp),%eax
  lea    0x2(%rax),%ecx
  lea    -0x15460(%rbp),%rdx
  mov    -0x220a8(%rbp),%rax
  mov    %rax,%rsi
  mov    %ecx,%edi
  call   <fetch@plt>
  mov    -0x2209c(%rbp),%eax
  lea    0x1(%rax),%ecx
  lea    -0xcc40(%rbp),%rdx
  mov    -0x220b0(%rbp),%rax
  mov    %rax,%rsi
  mov    %ecx,%edi
  call   <fetch@plt>
  movss  -0x22094(%rbp),%xmm0
  mov    -0x22098(%rbp),%edi
  lea    -0x4420(%rbp),%r8
  lea    -0x11050(%rbp),%rcx
  lea    -0x19870(%rbp),%rdx
  lea    -0x1dc80(%rbp),%rsi
  lea    -0x22090(%rbp),%rax
  movaps %xmm0,%xmm1
  movd   %edi,%xmm0
  mov    %rax,%rdi
  call   <compute@plt>
  lea    -0x8830(%rbp),%rdx
  mov    -0x220b8(%rbp),%rcx
  mov    -0x2209c(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <seg_write@plt>
  jmp    L81
L95:
  mov    -0x2209c(%rbp),%eax
  cltd
  shr    $0x1e,%edx
  add    %edx,%eax
  and    $0x3,%eax
  sub    %edx,%eax
  cmp    $0x2,%eax
  jne    L57
  mov    -0x2209c(%rbp),%eax
  lea    0x2(%rax),%ecx
  lea    -0x22090(%rbp),%rdx
  mov    -0x220a8(%rbp),%rax
  mov    %rax,%rsi
  mov    %ecx,%edi
  call   <fetch@plt>
  mov    -0x2209c(%rbp),%eax
  lea    0x1(%rax),%ecx
  lea    -0x11050(%rbp),%rdx
  mov    -0x220b0(%rbp),%rax
  mov    %rax,%rsi
  mov    %ecx,%edi
  call   <fetch@plt>
  movss  -0x22094(%rbp),%xmm0
  mov    -0x22098(%rbp),%edi
  lea    -0x8830(%rbp),%r8
  lea    -0xcc40(%rbp),%rcx
  lea    -0x15460(%rbp),%rdx
  lea    -0x19870(%rbp),%rsi
  lea    -0x1dc80(%rbp),%rax
  movaps %xmm0,%xmm1
  movd   %edi,%xmm0
  mov    %rax,%rdi
  call   <compute@plt>
  lea    -0x4420(%rbp),%rdx
  mov    -0x220b8(%rbp),%rcx
  mov    -0x2209c(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <seg_write@plt>
  jmp    L81
L57:
  mov    -0x2209c(%rbp),%eax
  lea    0x2(%rax),%ecx
  lea    -0x1dc80(%rbp),%rdx
  mov    -0x220a8(%rbp),%rax
  mov    %rax,%rsi
  mov    %ecx,%edi
  call   <fetch@plt>
  mov    -0x2209c(%rbp),%eax
  lea    0x1(%rax),%ecx
  lea    -0xcc40(%rbp),%rdx
  mov    -0x220b0(%rbp),%rax
  mov    %rax,%rsi
  mov    %ecx,%edi
  call   <fetch@plt>
  movss  -0x22094(%rbp),%xmm0
  mov    -0x22098(%rbp),%edi
  lea    -0x4420(%rbp),%r8
  lea    -0x11050(%rbp),%rcx
  lea    -0x22090(%rbp),%rdx
  lea    -0x15460(%rbp),%rsi
  lea    -0x19870(%rbp),%rax
  movaps %xmm0,%xmm1
  movd   %edi,%xmm0
  mov    %rax,%rdi
  call   <compute@plt>
  lea    -0x8830(%rbp),%rdx
  mov    -0x220b8(%rbp),%rcx
  mov    -0x2209c(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <seg_write@plt>
L81:
  addl   $0x1,-0x2209c(%rbp)
L16:
  cmpl   $0x3a,-0x2209c(%rbp)
  jle    L99
  movss  -0x22094(%rbp),%xmm0
  mov    -0x22098(%rbp),%edi
  lea    -0x4420(%rbp),%r8
  lea    -0x11050(%rbp),%rcx
  lea    -0x22090(%rbp),%rdx
  lea    -0x15460(%rbp),%rsi
  lea    -0x19870(%rbp),%rax
  movaps %xmm0,%xmm1
  movd   %edi,%xmm0
  mov    %rax,%rdi
  call   <compute@plt>
  lea    -0x8830(%rbp),%rdx
  mov    -0x220b8(%rbp),%rax
  mov    %rax,%rsi
  mov    $0x3a,%edi
  call   <seg_write@plt>
  lea    -0x4420(%rbp),%rdx
  mov    -0x220b8(%rbp),%rax
  mov    %rax,%rsi
  mov    $0x3b,%edi
  call   <seg_write@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L84
  call   <__stack_chk_fail@plt>
L84:
  leave
  ret
```

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);
}
```