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

```asm
<setbv>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x90,%rsp
  mov    %rdi,-0x78(%rbp)
  mov    %esi,-0x7c(%rbp)
  mov    %edx,-0x80(%rbp)
  mov    %ecx,-0x84(%rbp)
  mov    %r8d,-0x88(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x6c(%rbp)
  jmp    L97
L123:
  movl   $0x0,-0x70(%rbp)
  jmp    L44
L100:
  mov    -0x84(%rbp),%r8d
  mov    -0x7c(%rbp),%edi
  lea    -0x60(%rbp),%rdx
  mov    -0x6c(%rbp),%esi
  mov    -0x70(%rbp),%eax
  sub    $0x8,%rsp
  mov    -0x88(%rbp),%ecx
  push   %rcx
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %rdx,%rcx
  mov    $0x0,%edx
  mov    %eax,%edi
  call   <exact@plt>
  add    $0x10,%rsp
  mov    -0x88(%rbp),%eax
  lea    -0x1(%rax),%edi
  mov    -0x84(%rbp),%r9d
  mov    -0x7c(%rbp),%r8d
  lea    -0x30(%rbp),%rdx
  mov    -0x6c(%rbp),%esi
  mov    -0x70(%rbp),%eax
  sub    $0x8,%rsp
  mov    -0x88(%rbp),%ecx
  push   %rcx
  mov    %rdx,%rcx
  mov    %edi,%edx
  mov    %eax,%edi
  call   <exact@plt>
  add    $0x10,%rsp
  movl   $0x0,-0x64(%rbp)
  jmp    L95
L92:
  mov    -0x64(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x70(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    -0x64(%rbp),%edx
  movslq %edx,%rdx
  movsd  -0x60(%rbp,%rdx,8),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x64(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x70(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x88(%rbp),%eax
  cltq
  shl    $0x3,%rax
  sub    $0x8,%rax
  add    %rax,%rdx
  mov    -0x64(%rbp),%eax
  cltq
  movsd  -0x30(%rbp,%rax,8),%xmm0
  movsd  %xmm0,(%rdx)
  addl   $0x1,-0x64(%rbp)
L95:
  cmpl   $0x4,-0x64(%rbp)
  jle    L92
  addl   $0x1,-0x70(%rbp)
L44:
  mov    -0x70(%rbp),%eax
  cmp    -0x7c(%rbp),%eax
  jl     L100
  addl   $0x1,-0x6c(%rbp)
L97:
  mov    -0x6c(%rbp),%eax
  cmp    -0x84(%rbp),%eax
  jl     L123
  movl   $0x0,-0x68(%rbp)
  jmp    L86
L91:
  movl   $0x0,-0x70(%rbp)
  jmp    L83
L152:
  mov    -0x84(%rbp),%r8d
  mov    -0x7c(%rbp),%edi
  lea    -0x60(%rbp),%rcx
  mov    -0x68(%rbp),%edx
  mov    -0x70(%rbp),%eax
  sub    $0x8,%rsp
  mov    -0x88(%rbp),%esi
  push   %rsi
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    $0x0,%esi
  mov    %eax,%edi
  call   <exact@plt>
  add    $0x10,%rsp
  mov    -0x84(%rbp),%eax
  lea    -0x1(%rax),%esi
  mov    -0x84(%rbp),%r9d
  mov    -0x7c(%rbp),%r8d
  lea    -0x30(%rbp),%rcx
  mov    -0x68(%rbp),%edx
  mov    -0x70(%rbp),%eax
  sub    $0x8,%rsp
  mov    -0x88(%rbp),%edi
  push   %rdi
  mov    %eax,%edi
  call   <exact@plt>
  add    $0x10,%rsp
  movl   $0x0,-0x64(%rbp)
  jmp    L112
L184:
  mov    -0x64(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x70(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    (%rax),%rdx
  mov    -0x68(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rdx
  mov    -0x64(%rbp),%eax
  cltq
  movsd  -0x60(%rbp,%rax,8),%xmm0
  movsd  %xmm0,(%rdx)
  mov    -0x64(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x70(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x84(%rbp),%eax
  cltq
  shl    $0x3,%rax
  sub    $0x8,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x68(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rdx
  mov    -0x64(%rbp),%eax
  cltq
  movsd  -0x30(%rbp,%rax,8),%xmm0
  movsd  %xmm0,(%rdx)
  addl   $0x1,-0x64(%rbp)
L112:
  cmpl   $0x4,-0x64(%rbp)
  jle    L184
  addl   $0x1,-0x70(%rbp)
L83:
  mov    -0x70(%rbp),%eax
  cmp    -0x7c(%rbp),%eax
  jl     L152
  addl   $0x1,-0x68(%rbp)
L86:
  mov    -0x68(%rbp),%eax
  cmp    -0x88(%rbp),%eax
  jl     L91
  movl   $0x0,-0x68(%rbp)
  jmp    L165
L96:
  movl   $0x0,-0x6c(%rbp)
  jmp    L2
L17:
  mov    -0x84(%rbp),%r8d
  mov    -0x7c(%rbp),%edi
  lea    -0x60(%rbp),%rcx
  mov    -0x68(%rbp),%edx
  mov    -0x6c(%rbp),%eax
  sub    $0x8,%rsp
  mov    -0x88(%rbp),%esi
  push   %rsi
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %eax,%esi
  mov    $0x0,%edi
  call   <exact@plt>
  add    $0x10,%rsp
  mov    -0x7c(%rbp),%eax
  lea    -0x1(%rax),%edi
  mov    -0x84(%rbp),%r9d
  mov    -0x7c(%rbp),%r8d
  lea    -0x30(%rbp),%rcx
  mov    -0x68(%rbp),%edx
  mov    -0x6c(%rbp),%eax
  sub    $0x8,%rsp
  mov    -0x88(%rbp),%esi
  push   %rsi
  mov    %eax,%esi
  call   <exact@plt>
  add    $0x10,%rsp
  movl   $0x0,-0x64(%rbp)
  jmp    L25
L45:
  mov    -0x64(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x68(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rdx
  mov    -0x64(%rbp),%eax
  cltq
  movsd  -0x60(%rbp,%rax,8),%xmm0
  movsd  %xmm0,(%rdx)
  mov    -0x64(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x7c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  sub    $0x8,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x68(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rdx
  mov    -0x64(%rbp),%eax
  cltq
  movsd  -0x30(%rbp,%rax,8),%xmm0
  movsd  %xmm0,(%rdx)
  addl   $0x1,-0x64(%rbp)
L25:
  cmpl   $0x4,-0x64(%rbp)
  jle    L45
  addl   $0x1,-0x70(%rbp)
L2:
  mov    -0x70(%rbp),%eax
  cmp    -0x84(%rbp),%eax
  jl     L17
  addl   $0x1,-0x68(%rbp)
L165:
  mov    -0x68(%rbp),%eax
  cmp    -0x88(%rbp),%eax
  jl     L96
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L182
  call   <__stack_chk_fail@plt>
L182:
  leave
  ret
```

assistant: ```c
void setbv(double ****u, int nx, int nxmax, int ny, int nz) {
  int i, j, k, m;
  double temp1[5], temp2[5];
  for (j = 0; j < ny; j++) {
    for (i = 0; i < nx; i++) {
      exact(i, j, 0, temp1, nx, ny, nz);
      exact(i, j, nz - 1, temp2, nx, ny, nz);
      for (m = 0; m < 5; m++) {
        u[m][i][j][0] = temp1[m];
        u[m][i][j][nz - 1] = temp2[m];
      }
    }
  }
  for (k = 0; k < nz; k++) {
    for (i = 0; i < nx; i++) {
      exact(i, 0, k, temp1, nx, ny, nz);
      exact(i, ny - 1, k, temp2, nx, ny, nz);
      for (m = 0; m < 5; m++) {
        u[m][i][0][k] = temp1[m];
        u[m][i][ny - 1][k] = temp2[m];
      }
    }
  }
  for (k = 0; k < nz; k++) {
    for (j = 0; i < ny; i++) {
      exact(0, j, k, temp1, nx, ny, nz);
      exact(nx - 1, j, k, temp2, nx, ny, nz);
      for (m = 0; m < 5; m++) {
        u[m][1][j][k] = temp1[m];
        u[m][nx - 1][j][k] = temp2[m];
      }
    }
  }
}
```