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

```asm
<convolve_kernel_inside_fast>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x68,%rsp
  mov    %rdi,%r15
  mov    %rsi,0x48(%rsp)
  mov    %edx,%r10d
  mov    %edx,0x20(%rsp)
  mov    %ecx,0x24(%rsp)
  mov    %r8d,%ebx
  mov    %r9,%r13
  mov    0xa8(%rsp),%rax
  mov    0xa0(%rsp),%esi
  lea    -0x1(%rsi),%edx
  mov    %edx,%r14d
  shr    %r14d
  mov    %r14d,%edi
  add    (%rax),%edi
  mov    %edi,0x50(%rsp)
  mov    %r14d,%esi
  add    0x4(%rax),%esi
  mov    %esi,0x54(%rsp)
  mov    %r14d,%ebp
  add    0x8(%rax),%ebp
  mov    %ebp,0x38(%rsp)
  movsd  D14(%rip),%xmm1
  divsd  %xmm0,%xmm1
  movsd  %xmm1,0x40(%rsp)
  mov    %ecx,%esi
  imul   %r8d,%esi
  imul   %r10d,%esi
  mov    (%r15),%rdi
  call   <zero_vect@plt>
  sub    %ebp,%ebx
  mov    %ebx,0x58(%rsp)
  mov    %r15,%rax
  mov    %r14d,%r15d
  mov    %rax,%r14
  cmp    %ebx,%ebp
  jb     L15
L55:
  add    $0x68,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L93:
  addl   $0x1,0x18(%rsp)
  mov    0x18(%rsp),%eax
  cmp    0x3c(%rsp),%eax
  je     L111
L57:
  mov    0x20(%rsp),%r8d
  mov    0x24(%rsp),%ecx
  mov    0x18(%rsp),%edx
  mov    0x34(%rsp),%esi
  mov    0x38(%rsp),%edi
  call   <gidz_general@plt>
  cltq
  mov    0x48(%rsp),%rsi
  movsd  0x40(%rsp),%xmm3
  mulsd  (%rsi,%rax,8),%xmm3
  movsd  %xmm3,0x28(%rsp)
  ucomisd D0(%rip),%xmm3
  jp     L12
  je     L93
L12:
  mov    0x38(%rsp),%eax
  sub    %r15d,%eax
  mov    %eax,0x1c(%rsp)
  movl   $0x0,0x14(%rsp)
L50:
  mov    0x34(%rsp),%eax
  sub    %r15d,%eax
  mov    %eax,0x10(%rsp)
  movl   $0x0,0xc(%rsp)
L84:
  mov    0x30(%rsp),%ebx
L128:
  lea    (%r15,%rbx,1),%edx
  mov    0xa0(%rsp),%ecx
  mov    0xc(%rsp),%esi
  mov    0x14(%rsp),%edi
  call   <gidz_cube@plt>
  cltq
  movsd  0x28(%rsp),%xmm2
  mulsd  0x0(%r13,%rax,8),%xmm2
  movq   %xmm2,%rbp
  mov    (%r14),%r12
  mov    0x18(%rsp),%eax
  lea    (%rbx,%rax,1),%edx
  mov    0x20(%rsp),%r8d
  mov    0x24(%rsp),%ecx
  mov    0x10(%rsp),%esi
  mov    0x1c(%rsp),%edi
  call   <gidz_general@plt>
  cltq
  mov    (%r14),%rdx
  movq   %rbp,%xmm0
  addsd  (%r12,%rax,8),%xmm0
  movsd  %xmm0,(%rdx,%rax,8)
  add    $0x1,%ebx
  cmp    %ebx,%r15d
  jge    L128
  addl   $0x1,0xc(%rsp)
  mov    0xc(%rsp),%eax
  addl   $0x1,0x10(%rsp)
  sub    %r15d,%eax
  cmp    %r15d,%eax
  jle    L84
  addl   $0x1,0x14(%rsp)
  mov    0x14(%rsp),%eax
  addl   $0x1,0x1c(%rsp)
  sub    %r15d,%eax
  cmp    %r15d,%eax
  jle    L50
  jmp    L93
L111:
  addl   $0x1,0x34(%rsp)
  mov    0x34(%rsp),%eax
  cmp    0x5c(%rsp),%eax
  je     L70
L24:
  mov    0x50(%rsp),%eax
  mov    %eax,0x18(%rsp)
  mov    %r15d,%edi
  neg    %edi
  mov    %edi,0x30(%rsp)
  cmp    0x3c(%rsp),%eax
  jb     L57
  jmp    L111
L70:
  addl   $0x1,0x38(%rsp)
  mov    0x38(%rsp),%eax
  cmp    0x58(%rsp),%eax
  je     L55
L15:
  mov    0x24(%rsp),%eax
  mov    0x54(%rsp),%esi
  sub    %esi,%eax
  mov    %eax,0x5c(%rsp)
  mov    %esi,0x34(%rsp)
  mov    0x20(%rsp),%edi
  sub    0x50(%rsp),%edi
  mov    %edi,0x3c(%rsp)
  cmp    %eax,%esi
  jb     L24
  jmp    L70
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D14
type_infered: f64
name: extract_symbolic_data
arguments: data_tag: D0
type_infered: f64

tool: D14: 1

tool: D0: 0

assistant: ```c
void convolve_kernel_inside_fast(double **outmap, double *inmap, unsigned in_extx, unsigned in_exty, unsigned in_extz, double *kernel, unsigned kernel_size, double normfac, unsigned ignored[3]) {
  double dval, inv_normfac;
  unsigned long out_nvox;
  unsigned indx, indy, indz;
  int indx2, indy2, indz2, margin, marginx, marginy, marginz;
  margin = (kernel_size - 1) / 2;
  marginx = margin + ignored[0];
  marginy = margin + ignored[1];
  marginz = margin + ignored[2];
  out_nvox = in_extx * in_exty * in_extz;
  inv_normfac = 1.0 / normfac;
  zero_vect(*outmap, out_nvox);
  for (indz = marginz; indz < in_extz - marginz; indz++)
    for (indy = marginy; indy < in_exty - marginy; indy++)
      for (indx = marginx; indx < in_extx - marginx; indx++) {
        dval = (*(inmap + gidz_general(indz, indy, indx, in_exty, in_extx))) * inv_normfac;
        if (dval != 0.0)
          for (indz2 = -margin; indz2 <= margin; indz2++)
            for (indy2 = -margin; indy2 <= margin; indy2++)
              for (indx2 = -margin; indx2 <= margin; indx2++) {
                *(*outmap + gidz_general(indz + indz2, indy + indy2, indx + indx2, in_exty, in_extx)) += *(kernel + gidz_cube(indz2 + margin, indy2 + margin, indx2 + margin, kernel_size)) * dval;
              }
      }
}
```