user: Please show me the C implementation that matches the assembly code listed below:

```asm
<Jac3D>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x278,%rsp
  mov    %rdi,0x78(%rsp)
  mov    %rsi,0x80(%rsp)
  mov    %rdx,%rax
  mov    %fs:0x28,%rdx
  mov    %rdx,0x268(%rsp)
  xor    %edx,%edx
  cvttsd2si (%rax),%ebx
  mov    %ebx,0x74(%rsp)
  cvttsd2si 0x8(%rax),%esi
  mov    %esi,0x6c(%rsp)
  cvttsd2si 0x10(%rax),%edx
  mov    %edx,0x2c(%rsp)
  lea    0x1(%rbx),%edi
  mov    %edi,0x70(%rsp)
  lea    0x1(%rsi),%eax
  imul   %edi,%eax
  add    $0x1,%edx
  imul   %eax,%edx
  test   %ebx,%ebx
  jle    L116
  movslq %edi,%rcx
  shl    $0x3,%rcx
  lea    0x8(%rcx),%rdi
  mov    %rdi,0x30(%rsp)
  cltq
  shl    $0x3,%rax
  mov    %rax,0x38(%rsp)
  sub    %rcx,%rax
  mov    %rax,0x48(%rsp)
  mov    %ebx,%eax
  mov    %rax,0x88(%rsp)
  mov    %esi,%eax
  imul   %ebx,%eax
  cltq
  shl    $0x3,%rax
  mov    %rax,0x50(%rsp)
  movslq %edx,%rax
  shl    $0x3,%rax
  mov    %rax,0x40(%rsp)
  movq   $0x0,0x60(%rsp)
  jmp    L0
L4:
  lea    0x250(%rsp),%rbx
  lea    0x190(%rsp),%r15
  lea    0xb0(%rsp),%r12
  lea    0x90(%rsp),%rbp
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <det3D@plt>
  movq   %xmm0,%r13
  lea    0xf0(%rsp),%rax
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %rax,(%rsp)
  mov    %rax,%rsi
  mov    %r12,%rdi
  call   <det3D@plt>
  movq   %r13,%xmm1
  xorpd  D43(%rip),%xmm1
  subsd  %xmm0,%xmm1
  movq   %xmm1,%r13
  lea    0xd0(%rsp),%r14
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    (%rsp),%rdi
  call   <det3D@plt>
  movq   %r13,%xmm5
  subsd  %xmm0,%xmm5
  movq   %xmm5,%r13
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %rbp,%rsi
  mov    %r14,%rdi
  call   <det3D@plt>
  movq   %r13,%xmm6
  subsd  %xmm0,%xmm6
  movsd  %xmm6,0x8(%rsp)
  lea    0x1b0(%rsp),%r15
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    (%rsp),%r13
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <det3D@plt>
  addsd  0x8(%rsp),%xmm0
  movsd  %xmm0,0x20(%rsp)
  lea    0x170(%rsp),%rax
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %rax,0x8(%rsp)
  mov    %rax,%rsi
  mov    %r13,(%rsp)
  mov    %r13,%rdi
  call   <det3D@plt>
  movapd %xmm0,%xmm5
  addsd  0x20(%rsp),%xmm5
  movsd  %xmm5,0x20(%rsp)
  lea    0x130(%rsp),%r13
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %r13,%rsi
  mov    0x8(%rsp),%rdi
  call   <det3D@plt>
  addsd  0x20(%rsp),%xmm0
  movsd  %xmm0,0x20(%rsp)
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %r12,%rsi
  mov    %r13,%rdi
  call   <det3D@plt>
  movapd %xmm0,%xmm6
  addsd  0x20(%rsp),%xmm6
  movsd  %xmm6,0x20(%rsp)
  lea    0x1d0(%rsp),%r15
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <det3D@plt>
  addsd  0x20(%rsp),%xmm0
  movsd  %xmm0,0x20(%rsp)
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <det3D@plt>
  movapd %xmm0,%xmm5
  addsd  0x20(%rsp),%xmm5
  movsd  %xmm5,0x20(%rsp)
  lea    0x110(%rsp),%r12
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %r12,%rsi
  mov    %r13,%rdi
  call   <det3D@plt>
  addsd  0x20(%rsp),%xmm0
  movsd  %xmm0,0x20(%rsp)
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <det3D@plt>
  movapd %xmm0,%xmm6
  addsd  0x20(%rsp),%xmm6
  movsd  %xmm6,0x20(%rsp)
  lea    0x1f0(%rsp),%r15
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %rbp,%rsi
  mov    %r14,%rdi
  call   <det3D@plt>
  addsd  0x20(%rsp),%xmm0
  movsd  %xmm0,0x20(%rsp)
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <det3D@plt>
  movapd %xmm0,%xmm5
  addsd  0x20(%rsp),%xmm5
  movsd  %xmm5,0x20(%rsp)
  lea    0x150(%rsp),%rbp
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <det3D@plt>
  addsd  0x20(%rsp),%xmm0
  movsd  %xmm0,0x20(%rsp)
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <det3D@plt>
  movapd %xmm0,%xmm6
  addsd  0x20(%rsp),%xmm6
  movsd  %xmm6,0x20(%rsp)
  lea    0x210(%rsp),%r15
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    (%rsp),%rdi
  call   <det3D@plt>
  addsd  0x20(%rsp),%xmm0
  movsd  %xmm0,0x20(%rsp)
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %rbp,%rsi
  mov    %r14,%rdi
  call   <det3D@plt>
  movapd %xmm0,%xmm5
  addsd  0x20(%rsp),%xmm5
  movsd  %xmm5,0x20(%rsp)
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    0x8(%rsp),%r14
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <det3D@plt>
  addsd  0x20(%rsp),%xmm0
  movsd  %xmm0,0x8(%rsp)
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    (%rsp),%rsi
  mov    %r14,%r15
  mov    %r14,%rdi
  call   <det3D@plt>
  movapd %xmm0,%xmm6
  addsd  0x8(%rsp),%xmm6
  movsd  %xmm6,(%rsp)
  lea    0x230(%rsp),%r14
  mov    %rbx,%rcx
  mov    %r14,%rdx
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <det3D@plt>
  addsd  (%rsp),%xmm0
  movsd  %xmm0,(%rsp)
  mov    %rbx,%rcx
  mov    %r14,%rdx
  mov    %r15,%rsi
  mov    %r13,%rdi
  call   <det3D@plt>
  movapd %xmm0,%xmm2
  addsd  (%rsp),%xmm2
  movsd  %xmm2,(%rsp)
  mov    %rbx,%rcx
  mov    %r14,%rdx
  mov    %rbp,%rsi
  mov    %r15,%rdi
  call   <det3D@plt>
  addsd  (%rsp),%xmm0
  movsd  %xmm0,(%rsp)
  mov    %rbx,%rcx
  mov    %r14,%rdx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <det3D@plt>
  addsd  (%rsp),%xmm0
  mov    0x10(%rsp),%rax
  movsd  %xmm0,(%rax)
  addl   $0x1,0x28(%rsp)
  mov    0x28(%rsp),%ebx
  mov    0x50(%rsp),%rsi
  add    %rsi,%rax
  mov    %rax,0x10(%rsp)
  cmp    %ebx,0x2c(%rsp)
  je     L65
L83:
  mov    0x18(%rsp),%rcx
  mov    %rcx,%rdi
  sub    0x30(%rsp),%rdi
  mov    %rcx,%rdx
  mov    0x38(%rsp),%rax
  add    %rax,%rcx
  mov    %rcx,0x18(%rsp)
  mov    0x48(%rsp),%rax
  lea    (%rax,%rdx,1),%rsi
  mov    $0x0,%eax
  mov    0x40(%rsp),%r8
L13:
  movsd  (%rdi),%xmm2
  movsd  %xmm2,0x90(%rsp,%rax,1)
  movsd  0x8(%rdi),%xmm3
  movsd  %xmm3,0xb0(%rsp,%rax,1)
  movsd  (%rdx),%xmm1
  movsd  %xmm1,0xf0(%rsp,%rax,1)
  movsd  -0x8(%rdx),%xmm8
  movsd  %xmm8,0xd0(%rsp,%rax,1)
  movsd  -0x8(%rcx),%xmm5
  movsd  %xmm5,0x150(%rsp,%rax,1)
  movsd  (%rcx),%xmm6
  movsd  %xmm6,0x170(%rsp,%rax,1)
  movsd  (%rsi),%xmm0
  movsd  %xmm0,0x130(%rsp,%rax,1)
  movsd  -0x8(%rsi),%xmm7
  movsd  %xmm7,0x110(%rsp,%rax,1)
  movapd %xmm2,%xmm9
  addsd  %xmm3,%xmm9
  movapd %xmm1,%xmm4
  addsd  %xmm9,%xmm4
  addsd  %xmm8,%xmm4
  mulsd  D62(%rip),%xmm4
  movsd  %xmm4,0x190(%rsp,%rax,1)
  addsd  %xmm1,%xmm3
  addsd  %xmm6,%xmm3
  addsd  %xmm0,%xmm3
  mulsd  D62(%rip),%xmm3
  movsd  %xmm3,0x1b0(%rsp,%rax,1)
  addsd  %xmm0,%xmm9
  addsd  %xmm7,%xmm9
  mulsd  D62(%rip),%xmm9
  movsd  %xmm9,0x1d0(%rsp,%rax,1)
  addsd  %xmm8,%xmm2
  addsd  %xmm7,%xmm2
  addsd  %xmm5,%xmm2
  mulsd  D62(%rip),%xmm2
  movsd  %xmm2,0x1f0(%rsp,%rax,1)
  addsd  %xmm8,%xmm1
  addsd  %xmm5,%xmm1
  addsd  %xmm6,%xmm1
  mulsd  D62(%rip),%xmm1
  movsd  %xmm1,0x210(%rsp,%rax,1)
  addsd  %xmm7,%xmm0
  addsd  %xmm6,%xmm0
  addsd  %xmm5,%xmm0
  mulsd  D62(%rip),%xmm0
  movsd  %xmm0,0x230(%rsp,%rax,1)
  addsd  %xmm0,%xmm4
  mulsd  D12(%rip),%xmm4
  movsd  %xmm4,0x250(%rsp,%rax,1)
  add    %r8,%rdi
  add    %r8,%rdx
  add    %r8,%rcx
  add    %r8,%rsi
  add    $0x8,%rax
  cmp    $0x18,%rax
  jne    L13
  jmp    L4
L65:
  addl   $0x1,0x58(%rsp)
  mov    0x58(%rsp),%eax
  mov    0x70(%rsp),%edx
  add    %edx,0x5c(%rsp)
  mov    0x74(%rsp),%edx
  add    %edx,0x68(%rsp)
  cmp    %eax,0x6c(%rsp)
  je     L20
L73:
  cmpl   $0x0,0x2c(%rsp)
  jle    L65
  movslq 0x68(%rsp),%rax
  add    0x60(%rsp),%rax
  mov    0x78(%rsp),%rbx
  lea    (%rbx,%rax,8),%rax
  mov    %rax,0x10(%rsp)
  movslq 0x5c(%rsp),%rax
  mov    0x30(%rsp),%rbx
  lea    (%rbx,%rax,8),%rax
  add    0x80(%rsp),%rax
  mov    %rax,0x18(%rsp)
  movl   $0x0,0x28(%rsp)
  jmp    L83
L20:
  addq   $0x1,0x60(%rsp)
  mov    0x60(%rsp),%rax
  cmp    0x88(%rsp),%rax
  je     L116
L0:
  mov    0x60(%rsp),%eax
  mov    %eax,0x5c(%rsp)
  cmpl   $0x0,0x6c(%rsp)
  jle    L20
  movl   $0x0,0x68(%rsp)
  movl   $0x0,0x58(%rsp)
  jmp    L73
L116:
  mov    0x268(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L46
  add    $0x278,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L46:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_tag: D43
data_type: byte[16]
name: disassemble_data
arguments: data_tag: D62
data_type: f64
name: disassemble_data
arguments: data_tag: D12
data_type: f64

tool: {"D43": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: D62: 0.25

tool: D12: 0.5

assistant: ```c
void Jac3D(double *volu, const double *yc, const double *m, int n) {
  const int m1 = m[0], m2 = m[1], m3 = m[2];
  double yA[3], yB[3], yC[3], yD[3], yE[3], yF[3], yG[3], yH[3], yABDC[3], yBDHF[3], yABFE[3], yCAEG[3], yDCGH[3], yEFHG[3], yM[3];
  double vol;
  int id, i1, i2, i3, r, comp, idn;
  const int nn = (m1 + 1) * (m2 + 1) * (m3 + 1);
  const int inc_x = 1;
  const int inc_y = m1 + 1;
  const int inc_z = (m1 + 1) * (m2 + 1);
  const double *rptr;
#pragma omp parallel for default(shared) private(rptr, id, i1, i2, i3, r, comp, idn, vol, yA, yB, yC, yD, yE, yF, yG, yH, yABDC, yBDHF, yABFE, yCAEG, yDCGH, yEFHG, yM)
  for (i1 = 0; i1 < m1; i1++) {
    for (i2 = 0; i2 < m2; i2++) {
      for (i3 = 0; i3 < m3; i3++) {
        idn = i1 + i2 * inc_y + i3 * inc_z;
        comp = 0;
        for (r = 0; r < 3; r++) {
          rptr = yc + idn + comp;
          yA[r] = *rptr;
          rptr += inc_x;
          yB[r] = *rptr;
          rptr += inc_y;
          yD[r] = *rptr;
          rptr -= inc_x;
          yC[r] = *rptr;
          rptr += inc_z;
          yG[r] = *rptr;
          rptr += inc_x;
          yH[r] = *rptr;
          rptr -= inc_y;
          yF[r] = *rptr;
          rptr -= inc_x;
          yE[r] = *rptr;
          yABDC[r] = 0.25 * (yA[r] + yB[r] + yD[r] + yC[r]);
          yBDHF[r] = 0.25 * (yB[r] + yD[r] + yH[r] + yF[r]);
          yABFE[r] = 0.25 * (yA[r] + yB[r] + yF[r] + yE[r]);
          yCAEG[r] = 0.25 * (yC[r] + yA[r] + yE[r] + yG[r]);
          yDCGH[r] = 0.25 * (yD[r] + yC[r] + yG[r] + yH[r]);
          yEFHG[r] = 0.25 * (yE[r] + yF[r] + yH[r] + yG[r]);
          yM[r] = 0.5 * (yABDC[r] + yEFHG[r]);
          comp += nn;
        }
        vol = -det3D(yA, yB, yABDC, yM);
        vol += -det3D(yB, yD, yABDC, yM);
        vol += -det3D(yD, yC, yABDC, yM);
        vol += -det3D(yC, yA, yABDC, yM);
        vol += det3D(yB, yD, yBDHF, yM);
        vol += det3D(yD, yH, yBDHF, yM);
        vol += det3D(yH, yF, yBDHF, yM);
        vol += det3D(yF, yB, yBDHF, yM);
        vol += det3D(yA, yB, yABFE, yM);
        vol += det3D(yB, yF, yABFE, yM);
        vol += det3D(yF, yE, yABFE, yM);
        vol += det3D(yE, yA, yABFE, yM);
        vol += det3D(yC, yA, yCAEG, yM);
        vol += det3D(yA, yE, yCAEG, yM);
        vol += det3D(yE, yG, yCAEG, yM);
        vol += det3D(yG, yC, yCAEG, yM);
        vol += det3D(yD, yC, yDCGH, yM);
        vol += det3D(yC, yG, yDCGH, yM);
        vol += det3D(yG, yH, yDCGH, yM);
        vol += det3D(yH, yD, yDCGH, yM);
        vol += det3D(yE, yF, yEFHG, yM);
        vol += det3D(yF, yH, yEFHG, yM);
        vol += det3D(yH, yG, yEFHG, yM);
        vol += det3D(yG, yE, yEFHG, yM);
        id = i1 + m1 * (i2 + i3 * m2);
        volu[id] = vol;
      }
    }
  }
  return;
}
```