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

```asm
<BatchInterpolatedAll3DZeroWarp>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xc8,%rsp
  mov    0x110(%rsp),%rax
  mov    %rdi,0x28(%rsp)
  mov    %rsi,0x30(%rsp)
  mov    %rax,0x58(%rsp)
  mov    0x118(%rsp),%rax
  mov    %rdx,0x38(%rsp)
  mov    %rax,0x68(%rsp)
  mov    0x128(%rsp),%rax
  mov    %rcx,0x40(%rsp)
  mov    %r8,0x48(%rsp)
  mov    %rax,0x78(%rsp)
  movsd  %xmm7,0x70(%rsp)
  pxor   %xmm7,%xmm7
  movsd  %xmm0,0x18(%rsp)
  movsd  %xmm1,0x50(%rsp)
  movsd  %xmm2,0x8(%rsp)
  movsd  %xmm3,0x90(%rsp)
  movsd  %xmm4,0x60(%rsp)
  movsd  %xmm5,0x10(%rsp)
  movsd  %xmm6,0x98(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0xb8(%rsp)
  xor    %eax,%eax
  comisd %xmm7,%xmm6
  movq   $0x0,0x88(%rsp)
  jbe    L40
  xor    %r15d,%r15d
  lea    0xb0(%rsp),%r13
  mov    %r9,%r12
  mov    %r15,%r14
  mov    %r13,%r15
  nopl   0x0(%rax)
L0:
  movsd  0x90(%rsp),%xmm6
  pxor   %xmm7,%xmm7
  movq   $0x0,0x80(%rsp)
  comisd %xmm7,%xmm6
  jbe    L11
  nopl   0x0(%rax,%rax,1)
L2:
  movsd  0x18(%rsp),%xmm7
  pxor   %xmm6,%xmm6
  comisd %xmm6,%xmm7
  jbe    L64
  pxor   %xmm7,%xmm7
  xor    %r13d,%r13d
  mov    %r15,%rax
  lea    0xa8(%rsp),%rbp
  lea    0xa0(%rsp),%rbx
  cvtsi2ssq 0x80(%rsp),%xmm7
  mov    %rbp,%rdx
  mov    %rbx,%r15
  mov    %r13,%rbp
  mov    %r14,%rbx
  mov    %r12,%r13
  mov    %rax,%r14
  mov    %rdx,%r12
  movss  %xmm7,0x20(%rsp)
  pxor   %xmm7,%xmm7
  cvtsi2ssq 0x88(%rsp),%xmm7
  movss  %xmm7,0x24(%rsp)
  nop
L35:
  mov    0x78(%rsp),%rax
  pxor   %xmm0,%xmm0
  mov    %r14,%rdx
  mov    %r13,%r8
  movss  0x24(%rsp),%xmm2
  movss  0x20(%rsp),%xmm1
  mov    %r12,%rsi
  mov    %r15,%rdi
  cvtsi2ss %rbp,%xmm0
  addss  (%rax,%rbx,4),%xmm2
  mov    0x68(%rsp),%rax
  add    $0x1,%rbp
  addss  (%rax,%rbx,4),%xmm1
  mov    0x58(%rsp),%rax
  cvtss2sd %xmm2,%xmm2
  subsd  0x70(%rsp),%xmm2
  addss  (%rax,%rbx,4),%xmm0
  cvtss2sd %xmm1,%xmm1
  subsd  0x60(%rsp),%xmm1
  cvtss2sd %xmm0,%xmm0
  subsd  0x50(%rsp),%xmm0
  divsd  0x8(%rsp),%xmm0
  push   0x130(%rsp)
  push   0x110(%rsp)
  divsd  0x20(%rsp),%xmm1
  divsd  0x130(%rsp),%xmm2
  mov    0x110(%rsp),%r9
  mov    0x58(%rsp),%rcx
  call   <InterpolatedAll3DZero@plt>
  mov    0x38(%rsp),%rax
  movss  %xmm0,(%rax,%rbx,4)
  mov    0x40(%rsp),%rax
  movsd  0xb0(%rsp),%xmm0
  divsd  0x18(%rsp),%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rax,%rbx,4)
  mov    0x48(%rsp),%rax
  movsd  0xb8(%rsp),%xmm0
  divsd  0x20(%rsp),%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rax,%rbx,4)
  mov    0x50(%rsp),%rax
  add    $0x1,%rbx
  movsd  0xc0(%rsp),%xmm0
  divsd  0x130(%rsp),%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x4(%rax,%rbx,4)
  pxor   %xmm0,%xmm0
  pop    %rax
  pop    %rdx
  cvtsi2sd %rbp,%xmm0
  movsd  0x18(%rsp),%xmm5
  comisd %xmm0,%xmm5
  ja     L35
  mov    %r14,%r15
  mov    %r13,%r12
  mov    %rbx,%r14
L64:
  addq   $0x1,0x80(%rsp)
  pxor   %xmm0,%xmm0
  mov    0x80(%rsp),%rax
  movsd  0x90(%rsp),%xmm6
  cvtsi2sd %rax,%xmm0
  comisd %xmm0,%xmm6
  ja     L2
L11:
  addq   $0x1,0x88(%rsp)
  pxor   %xmm0,%xmm0
  mov    0x88(%rsp),%rax
  movsd  0x98(%rsp),%xmm6
  cvtsi2sd %rax,%xmm0
  comisd %xmm0,%xmm6
  ja     L0
L40:
  mov    0xb8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L20
  add    $0xc8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L20:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
extern void BatchInterpolatedAll3DZeroWarp(float *Bo, float *Bogx, float *Bogy, float *Bogz, float *Bcoeff, long Width, long Height, long Slice, double nx, double offx, double mx, float *WarpX, double ny, double offy, double my, float *WarpY, double nz, double offz, double mz, float *WarpZ, long SplineDegree) {
  double x, y, z, gradx, grady, gradz;
  long idx;
  long idcoordx, idcoordy, idcoordz;
  idx = 0;
  for (idcoordz = 0; idcoordz < nz; idcoordz++) {
    for (idcoordy = 0; idcoordy < ny; idcoordy++) {
      for (idcoordx = 0; idcoordx < nx; idcoordx++) {
        x = (idcoordx + WarpX[idx] - offx) / mx;
        y = (idcoordy + WarpY[idx] - offy) / my;
        z = (idcoordz + WarpZ[idx] - offz) / mz;
        Bo[idx] = InterpolatedAll3DZero(&gradx, &grady, &gradz, Bcoeff, Width, Height, Slice, x, y, z, SplineDegree);
        Bogx[idx] = gradx / mx;
        Bogy[idx] = grady / my;
        Bogz[idx++] = gradz / mz;
      }
    }
  }
}
```