user: What is the c source code of the assembly code below:

```asm
<BatchInterpolatedGradX3DTranMirrWarp>:
  endbr64
  push   %r15
  push   %r14
  mov    %rdi,%r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xa8,%rsp
  movsd  %xmm0,0x38(%rsp)
  mulsd  %xmm3,%xmm0
  mov    0xf8(%rsp),%r15
  movsd  %xmm1,0x40(%rsp)
  movapd %xmm3,%xmm1
  movsd  %xmm2,0x30(%rsp)
  movapd %xmm6,%xmm2
  mov    %rsi,0x80(%rsp)
  mov    %rdx,0x18(%rsp)
  mulsd  %xmm6,%xmm0
  mov    %rcx,0x78(%rsp)
  mov    %r8,0x90(%rsp)
  mov    %r9,0x88(%rsp)
  movsd  %xmm4,0x48(%rsp)
  movsd  %xmm5,0x50(%rsp)
  movapd %xmm0,%xmm3
  movsd  %xmm7,0x58(%rsp)
  movsd  %xmm0,0x98(%rsp)
  pxor   %xmm0,%xmm0
  comisd %xmm0,%xmm3
  jbe    L20
  xor    %eax,%eax
  nopl   0x0(%rax,%rax,1)
L16:
  movl   $0x0,(%r14,%rax,4)
  pxor   %xmm0,%xmm0
  add    $0x1,%rax
  cvtsi2sd %rax,%xmm0
  comisd %xmm0,%xmm3
  ja     L16
  cmpq   $0x0,0x90(%rsp)
  jle    L19
L61:
  movq   $0x0,0x70(%rsp)
  cmpq   $0x0,0x78(%rsp)
  movq   $0x0,0x68(%rsp)
  jle    L64
L52:
  movq   $0x0,0x60(%rsp)
  nopl   0x0(%rax)
L89:
  cmpq   $0x0,0x18(%rsp)
  jle    L30
  pxor   %xmm0,%xmm0
  mov    0x68(%rsp),%rax
  mov    0xe0(%rsp),%r12
  cvtsi2ssq 0x60(%rsp),%xmm0
  mov    0xf0(%rsp),%rbp
  lea    0x0(,%rax,4),%rbx
  mov    0x88(%rsp),%rax
  add    %rbx,%r12
  add    %rbx,%rbp
  lea    (%rax,%rbx,1),%r13
  add    0x80(%rsp),%rbx
  movss  %xmm0,0x28(%rsp)
  pxor   %xmm0,%xmm0
  cvtsi2ssq 0x70(%rsp),%xmm0
  mov    %rbx,0x20(%rsp)
  xor    %ebx,%ebx
  movss  %xmm0,0x2c(%rsp)
  nopl   0x0(%rax)
L93:
  mov    0x20(%rsp),%rax
  pxor   %xmm4,%xmm4
  mov    %r15,%rsi
  mov    %r14,%rdi
  cvtsi2ss %rbx,%xmm4
  movss  0x2c(%rsp),%xmm6
  addss  0x0(%r13,%rbx,4),%xmm4
  movsd  %xmm2,0x10(%rsp)
  addss  0x0(%rbp,%rbx,4),%xmm6
  movss  0x28(%rsp),%xmm5
  movsd  %xmm1,0x8(%rsp)
  addss  (%r12,%rbx,4),%xmm5
  movss  (%rax,%rbx,4),%xmm3
  add    $0x1,%rbx
  movsd  0x38(%rsp),%xmm0
  cvtss2sd %xmm4,%xmm4
  subsd  0x40(%rsp),%xmm4
  divsd  0x30(%rsp),%xmm4
  cvtss2sd %xmm6,%xmm6
  subsd  0x58(%rsp),%xmm6
  divsd  0xe8(%rsp),%xmm6
  cvtss2sd %xmm5,%xmm5
  subsd  0x48(%rsp),%xmm5
  divsd  0x50(%rsp),%xmm5
  call   <InterpolatedGradX3DTranMirr@plt>
  cmp    %rbx,0x18(%rsp)
  movsd  0x8(%rsp),%xmm1
  movsd  0x10(%rsp),%xmm2
  jne    L93
  mov    0x18(%rsp),%rcx
  add    %rcx,0x68(%rsp)
L30:
  addq   $0x1,0x60(%rsp)
  mov    0x60(%rsp),%rax
  cmp    %rax,0x78(%rsp)
  jne    L89
  addq   $0x1,0x70(%rsp)
  mov    0x70(%rsp),%rax
  cmp    %rax,0x90(%rsp)
  jg     L52
L64:
  movsd  0x98(%rsp),%xmm0
  pxor   %xmm7,%xmm7
  comisd %xmm7,%xmm0
  jbe    L91
L19:
  movsd  0x98(%rsp),%xmm1
  movsd  0x30(%rsp),%xmm2
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L29:
  pxor   %xmm0,%xmm0
  cvtss2sd (%r14,%rax,4),%xmm0
  divsd  %xmm2,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%r14,%rax,4)
  add    $0x1,%rax
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  comisd %xmm0,%xmm1
  ja     L29
L91:
  add    $0xa8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L20:
  cmpq   $0x0,0x90(%rsp)
  jg     L61
  jmp    L64
```

assistant: ```c
extern void BatchInterpolatedGradX3DTranMirrWarp(float *Bout, 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;
  long idx;
  long idcoordx, idcoordy, idcoordz;
  for (idx = 0; idx < nx * ny * nz; idx++)
    Bout[idx] = 0;
  idx = 0;
  for (idcoordz = 0; idcoordz < Slice; idcoordz++) {
    for (idcoordy = 0; idcoordy < Height; idcoordy++) {
      for (idcoordx = 0; idcoordx < Width; idcoordx++) {
        x = (idcoordx + WarpX[idx] - offx) / mx;
        y = (idcoordy + WarpY[idx] - offy) / my;
        z = (idcoordz + WarpZ[idx] - offz) / mz;
        InterpolatedGradX3DTranMirr(Bout, nx, ny, nz, Bcoeff[idx++], x, y, z, SplineDegree);
      }
    }
  }
  for (idx = 0; idx < nx * ny * nz; idx++)
    Bout[idx] = Bout[idx] / mx;
}
```