user: 下面的汇编指令对应的C源代码是什么:

```asm
<dJacTx3D>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x4c8,%rsp
  mov    %rdi,0xa8(%rsp)
  mov    %rsi,0xb0(%rsp)
  mov    %rdx,0xf0(%rsp)
  mov    %fs:0x28,%rdx
  mov    %rdx,0x4b8(%rsp)
  xor    %edx,%edx
  cvttsd2si (%rcx),%ebx
  mov    %ebx,0xe4(%rsp)
  cvttsd2si 0x8(%rcx),%edi
  mov    %edi,0xdc(%rsp)
  cvttsd2si 0x10(%rcx),%eax
  mov    %eax,0xa4(%rsp)
  lea    0x1(%rbx),%esi
  mov    %esi,0xe0(%rsp)
  lea    0x1(%rdi),%ecx
  imul   %esi,%ecx
  add    $0x1,%eax
  imul   %ecx,%eax
  test   %ebx,%ebx
  jle    L80
  movslq %esi,%rdx
  shl    $0x3,%rdx
  lea    0x8(%rdx),%rsi
  mov    %rsi,0xe8(%rsp)
  movslq %ecx,%rsi
  mov    %rsi,0xb8(%rsp)
  shl    $0x3,%rsi
  mov    %rsi,0x80(%rsp)
  sub    %rdx,%rsi
  mov    %rsi,0x88(%rsp)
  mov    %ebx,%esi
  mov    %rsi,0xf8(%rsp)
  imul   %ebx,%edi
  movslq %edi,%rdx
  lea    0x0(,%rdx,8),%rbx
  mov    %rbx,0xc0(%rsp)
  cltq
  shl    $0x3,%rax
  mov    %rax,0x90(%rsp)
  movq   $0x0,0xd0(%rsp)
  jmp    L37
L82:
  addl   $0x1,0xa0(%rsp)
  mov    0xa0(%rsp),%eax
  mov    0xb8(%rsp),%rdi
  add    %rdi,0x68(%rsp)
  mov    0xc0(%rsp),%rdi
  add    %rdi,0x70(%rsp)
  cmp    %eax,0xa4(%rsp)
  je     L95
  mov    %r13,%r12
L87:
  mov    0x68(%rsp),%rax
  shl    $0x3,%rax
  mov    %rax,0x98(%rsp)
  mov    0xb0(%rsp),%rdi
  add    %rax,%rdi
  mov    0x78(%rsp),%rcx
  mov    %rcx,%rdx
  mov    0x80(%rsp),%rax
  add    %rax,%rcx
  mov    %rcx,0x78(%rsp)
  mov    0x88(%rsp),%rax
  lea    (%rax,%rdx,1),%rsi
  mov    $0x0,%eax
  mov    0x90(%rsp),%r8
L99:
  movsd  (%rdi),%xmm2
  movsd  %xmm2,0x100(%rsp,%rax,1)
  movsd  0x8(%rdi),%xmm3
  movsd  %xmm3,0x120(%rsp,%rax,1)
  movsd  (%rdx),%xmm1
  movsd  %xmm1,0x160(%rsp,%rax,1)
  movsd  -0x8(%rdx),%xmm8
  movsd  %xmm8,0x140(%rsp,%rax,1)
  movsd  -0x8(%rcx),%xmm5
  movsd  %xmm5,0x1c0(%rsp,%rax,1)
  movsd  (%rcx),%xmm6
  movsd  %xmm6,0x1e0(%rsp,%rax,1)
  movsd  (%rsi),%xmm0
  movsd  %xmm0,0x1a0(%rsp,%rax,1)
  movsd  -0x8(%rsi),%xmm7
  movsd  %xmm7,0x180(%rsp,%rax,1)
  movapd %xmm2,%xmm9
  addsd  %xmm3,%xmm9
  movapd %xmm1,%xmm4
  addsd  %xmm9,%xmm4
  addsd  %xmm8,%xmm4
  mulsd  D62(%rip),%xmm4
  movsd  %xmm4,0x200(%rsp,%rax,1)
  addsd  %xmm1,%xmm3
  addsd  %xmm6,%xmm3
  addsd  %xmm0,%xmm3
  mulsd  D62(%rip),%xmm3
  movsd  %xmm3,0x220(%rsp,%rax,1)
  addsd  %xmm0,%xmm9
  addsd  %xmm7,%xmm9
  mulsd  D62(%rip),%xmm9
  movsd  %xmm9,0x240(%rsp,%rax,1)
  addsd  %xmm8,%xmm2
  addsd  %xmm7,%xmm2
  addsd  %xmm5,%xmm2
  mulsd  D62(%rip),%xmm2
  movsd  %xmm2,0x260(%rsp,%rax,1)
  addsd  %xmm8,%xmm1
  addsd  %xmm5,%xmm1
  addsd  %xmm6,%xmm1
  mulsd  D62(%rip),%xmm1
  movsd  %xmm1,0x280(%rsp,%rax,1)
  addsd  %xmm7,%xmm0
  addsd  %xmm6,%xmm0
  addsd  %xmm5,%xmm0
  mulsd  D62(%rip),%xmm0
  movsd  %xmm0,0x2a0(%rsp,%rax,1)
  addsd  %xmm0,%xmm4
  mulsd  D45(%rip),%xmm4
  movsd  %xmm4,0x2c0(%rsp,%rax,1)
  movq   $0x0,0x2e0(%rsp,%rax,1)
  movq   $0x0,0x300(%rsp,%rax,1)
  movq   $0x0,0x320(%rsp,%rax,1)
  movq   $0x0,0x340(%rsp,%rax,1)
  movq   $0x0,0x360(%rsp,%rax,1)
  movq   $0x0,0x380(%rsp,%rax,1)
  movq   $0x0,0x3a0(%rsp,%rax,1)
  movq   $0x0,0x3c0(%rsp,%rax,1)
  movq   $0x0,0x3e0(%rsp,%rax,1)
  movq   $0x0,0x400(%rsp,%rax,1)
  movq   $0x0,0x420(%rsp,%rax,1)
  movq   $0x0,0x440(%rsp,%rax,1)
  movq   $0x0,0x460(%rsp,%rax,1)
  movq   $0x0,0x480(%rsp,%rax,1)
  movq   $0x0,0x4a0(%rsp,%rax,1)
  add    %r8,%rdi
  add    %r8,%rdx
  add    %r8,%rcx
  add    %r8,%rsi
  add    $0x8,%rax
  cmp    $0x18,%rax
  jne    L99
  mov    0x70(%rsp),%rax
  movsd  (%rax),%xmm3
  movsd  %xmm3,(%rsp)
  movapd %xmm3,%xmm6
  xorpd  D20(%rip),%xmm6
  movq   %xmm6,%r14
  lea    0x300(%rsp),%rax
  lea    0x2e0(%rsp),%rdi
  lea    0x2c0(%rsp),%rbx
  lea    0x200(%rsp),%r13
  lea    0x120(%rsp),%rsi
  lea    0x100(%rsp),%r10
  lea    0x4a0(%rsp),%rbp
  push   %rbp
  lea    0x3e8(%rsp),%r15
  push   %r15
  mov    %rax,0x48(%rsp)
  mov    %rax,%r9
  mov    %rdi,0x70(%rsp)
  mov    %rdi,%r8
  movapd %xmm6,%xmm0
  mov    %rbx,%rcx
  mov    %r13,%rdx
  mov    %rsi,0x18(%rsp)
  mov    %r10,0x20(%rsp)
  mov    %r10,%rdi
  call   <dVTTetra3D@plt>
  lea    0x350(%rsp),%rcx
  lea    0x170(%rsp),%r10
  push   %rbp
  push   %r15
  mov    %rcx,0x38(%rsp)
  mov    %rcx,%r9
  mov    0x58(%rsp),%r8
  movq   %r14,%xmm0
  mov    %rbx,%rcx
  mov    %r13,%rdx
  mov    %r10,0x40(%rsp)
  mov    %r10,%rsi
  mov    0x28(%rsp),%rdi
  call   <dVTTetra3D@plt>
  add    $0x20,%rsp
  lea    0x320(%rsp),%rax
  lea    0x140(%rsp),%r11
  push   %rbp
  push   %r15
  mov    %rax,0x38(%rsp)
  mov    %rax,%r9
  mov    0x28(%rsp),%r8
  movq   %r14,%xmm0
  mov    %rbx,%rcx
  mov    %r13,%rdx
  mov    %r11,0x40(%rsp)
  mov    %r11,%rsi
  mov    0x30(%rsp),%rdi
  call   <dVTTetra3D@plt>
  push   %rbp
  push   %r15
  mov    0x80(%rsp),%r9
  mov    0x48(%rsp),%r8
  movq   %r14,%xmm0
  mov    %rbx,%rcx
  mov    %r13,%rdx
  mov    0x30(%rsp),%rsi
  mov    0x50(%rsp),%rdi
  call   <dVTTetra3D@plt>
  add    $0x20,%rsp
  lea    0x220(%rsp),%r13
  push   %rbp
  lea    0x408(%rsp),%r14
  push   %r14
  mov    0x28(%rsp),%r9
  mov    0x48(%rsp),%r15
  mov    %r15,%r8
  movsd  0x10(%rsp),%xmm0
  mov    %rbx,%rcx
  mov    %r13,%rdx
  mov    0x30(%rsp),%rsi
  mov    0x18(%rsp),%rdi
  call   <dVTTetra3D@plt>
  lea    0x3d0(%rsp),%rdx
  lea    0x1f0(%rsp),%r10
  push   %rbp
  push   %r14
  mov    %rdx,0x58(%rsp)
  mov    %rdx,%r9
  mov    0x38(%rsp),%r8
  movsd  0x20(%rsp),%xmm0
  mov    %rbx,%rcx
  mov    %r13,%rdx
  mov    %r10,0x60(%rsp)
  mov    %r10,%rsi
  mov    0x40(%rsp),%rdi
  call   <dVTTetra3D@plt>
  add    $0x20,%rsp
  lea    0x380(%rsp),%rcx
  lea    0x1a0(%rsp),%rax
  push   %rbp
  push   %r14
  mov    %rcx,0x58(%rsp)
  mov    %rcx,%r9
  mov    0x48(%rsp),%r8
  movsd  0x10(%rsp),%xmm0
  mov    %rbx,%rcx
  mov    %r13,%rdx
  mov    %rax,0x60(%rsp)
  mov    %rax,%rsi
  mov    0x50(%rsp),%rdi
  call   <dVTTetra3D@plt>
  push   %rbp
  push   %r14
  mov    %r15,%r9
  mov    0x68(%rsp),%r8
  movsd  0x20(%rsp),%xmm0
  mov    %rbx,%rcx
  mov    %r13,%rdx
  mov    0x28(%rsp),%rsi
  mov    0x70(%rsp),%rdi
  call   <dVTTetra3D@plt>
  add    $0x20,%rsp
  lea    0x240(%rsp),%r13
  push   %rbp
  lea    0x428(%rsp),%r14
  push   %r14
  mov    %r15,%r9
  mov    0x70(%rsp),%r8
  movsd  0x10(%rsp),%xmm0
  mov    %rbx,%rcx
  mov    %r13,%rdx
  mov    0x18(%rsp),%rsi
  mov    0x20(%rsp),%rdi
  call   <dVTTetra3D@plt>
  push   %rbp
  push   %r14
  mov    0x68(%rsp),%r9
  mov    %r15,%r8
  movsd  0x20(%rsp),%xmm0
  mov    %rbx,%rcx
  mov    %r13,%rdx
  mov    0x70(%rsp),%r15
  mov    %r15,%rsi
  mov    0x28(%rsp),%rdi
  call   <dVTTetra3D@plt>
  add    $0x20,%rsp
  lea    0x360(%rsp),%rsi
  lea    0x180(%rsp),%rax
  push   %rbp
  push   %r14
  mov    %rsi,0x18(%rsp)
  mov    %rsi,%r9
  mov    0x58(%rsp),%r8
  movsd  0x10(%rsp),%xmm0
  mov    %rbx,%rcx
  mov    %r13,%rdx
  mov    %rax,0x68(%rsp)
  mov    %rax,%rsi
  mov    %r15,0x60(%rsp)
  mov    %r15,%rdi
  call   <dVTTetra3D@plt>
  push   %rbp
  push   %r14
  mov    0x80(%rsp),%r9
  mov    0x28(%rsp),%r8
  movsd  0x20(%rsp),%xmm0
  mov    %rbx,%rcx
  mov    %r13,%rdx
  mov    0x30(%rsp),%rsi
  mov    0x78(%rsp),%rdi
  call   <dVTTetra3D@plt>
  add    $0x20,%rsp
  lea    0x260(%rsp),%r14
  push   %rbp
  lea    0x448(%rsp),%r15
  push   %r15
  mov    0x70(%rsp),%r13
  mov    %r13,%r9
  mov    0x38(%rsp),%r8
  movsd  0x10(%rsp),%xmm0
  mov    %rbx,%rcx
  mov    %r14,%rdx
  mov    0x20(%rsp),%rsi
  mov    0x40(%rsp),%rdi
  call   <dVTTetra3D@plt>
  push   %rbp
  push   %r15
  mov    0x28(%rsp),%r9
  mov    %r13,%r8
  movsd  0x20(%rsp),%xmm0
  mov    %rbx,%rcx
  mov    %r14,%rdx
  mov    0x78(%rsp),%rsi
  mov    0x30(%rsp),%rdi
  call   <dVTTetra3D@plt>
  add    $0x20,%rsp
  lea    0x3a0(%rsp),%r13
  lea    0x1c0(%rsp),%r11
  push   %rbp
  push   %r15
  mov    %r13,%r9
  mov    0x18(%rsp),%r8
  movsd  0x10(%rsp),%xmm0
  mov    %rbx,%rcx
  mov    %r14,%rdx
  mov    %r11,0x20(%rsp)
  mov    %r11,%rsi
  mov    0x68(%rsp),%rdi
  call   <dVTTetra3D@plt>
  push   %rbp
  push   %r15
  mov    0x48(%rsp),%r9
  mov    %r13,%r8
  movsd  0x20(%rsp),%xmm0
  mov    %rbx,%rcx
  mov    %r14,%rdx
  mov    0x50(%rsp),%rsi
  mov    0x30(%rsp),%rdi
  call   <dVTTetra3D@plt>
  add    $0x20,%rsp
  lea    0x280(%rsp),%r14
  push   %rbp
  lea    0x468(%rsp),%r15
  push   %r15
  mov    0x38(%rsp),%r9
  mov    0x28(%rsp),%r8
  movsd  0x10(%rsp),%xmm0
  mov    %rbx,%rcx
  mov    %r14,%rdx
  mov    0x40(%rsp),%rsi
  mov    0x30(%rsp),%rdi
  call   <dVTTetra3D@plt>
  push   %rbp
  push   %r15
  mov    %r13,%r9
  mov    0x48(%rsp),%r8
  movsd  0x20(%rsp),%xmm0
  mov    %rbx,%rcx
  mov    %r14,%rdx
  mov    0x30(%rsp),%rsi
  mov    0x50(%rsp),%rdi
  call   <dVTTetra3D@plt>
  add    $0x20,%rsp
  push   %rbp
  push   %r15
  mov    0x48(%rsp),%r9
  mov    %r13,%r8
  movsd  0x10(%rsp),%xmm0
  mov    %rbx,%rcx
  mov    %r14,%rdx
  mov    0x50(%rsp),%rsi
  mov    0x20(%rsp),%rdi
  call   <dVTTetra3D@plt>
  push   %rbp
  push   %r15
  mov    0x38(%rsp),%r9
  mov    0x58(%rsp),%r8
  movsd  0x20(%rsp),%xmm0
  mov    %rbx,%rcx
  mov    %r14,%rdx
  mov    0x40(%rsp),%rsi
  mov    0x60(%rsp),%rdi
  call   <dVTTetra3D@plt>
  add    $0x20,%rsp
  lea    0x2a0(%rsp),%r14
  push   %rbp
  lea    0x488(%rsp),%r15
  push   %r15
  mov    0x58(%rsp),%r9
  mov    0x18(%rsp),%r8
  movsd  0x10(%rsp),%xmm0
  mov    %rbx,%rcx
  mov    %r14,%rdx
  mov    0x60(%rsp),%rsi
  mov    0x68(%rsp),%rdi
  call   <dVTTetra3D@plt>
  push   %rbp
  push   %r15
  mov    0x58(%rsp),%r9
  mov    0x68(%rsp),%r8
  movsd  0x20(%rsp),%xmm0
  mov    %rbx,%rcx
  mov    %r14,%rdx
  mov    0x60(%rsp),%rsi
  mov    0x70(%rsp),%rdi
  call   <dVTTetra3D@plt>
  add    $0x20,%rsp
  push   %rbp
  push   %r15
  mov    %r13,%r9
  mov    0x48(%rsp),%r8
  movsd  0x10(%rsp),%xmm0
  mov    %rbx,%rcx
  mov    %r14,%rdx
  mov    0x20(%rsp),%rsi
  mov    0x50(%rsp),%rdi
  call   <dVTTetra3D@plt>
  push   %rbp
  push   %r15
  mov    0x28(%rsp),%r9
  mov    %r13,%r8
  movsd  0x20(%rsp),%xmm0
  mov    %rbx,%rcx
  mov    %r14,%rdx
  mov    0x78(%rsp),%rsi
  mov    0x30(%rsp),%rdi
  call   <dVTTetra3D@plt>
  mov    0xb8(%rsp),%rdx
  add    0xc8(%rsp),%rdx
  mov    0xa0(%rsp),%rax
  lea    (%rax,%r12,1),%r13
  mov    0xa8(%rsp),%rax
  lea    (%rax,%r12,1),%rsi
  add    $0x20,%rsp
  mov    %r13,%rcx
  mov    $0x0,%eax
  movsd  D144(%rip),%xmm3
  lea    0x2e0(%rsp),%r14
  lea    0x300(%rsp),%rbp
  lea    0x340(%rsp),%rbx
  lea    0x320(%rsp),%r11
  lea    0x3a0(%rsp),%r10
  lea    0x3c0(%rsp),%r9
  lea    0x380(%rsp),%r8
  lea    0x360(%rsp),%rdi
  mov    0x90(%rsp),%r15
L17:
  movsd  0x3e0(%rsp,%rax,1),%xmm5
  mulsd  D62(%rip),%xmm5
  movsd  %xmm5,0x3e0(%rsp,%rax,1)
  movsd  0x400(%rsp,%rax,1),%xmm1
  mulsd  D62(%rip),%xmm1
  movsd  %xmm1,0x400(%rsp,%rax,1)
  movsd  0x420(%rsp,%rax,1),%xmm0
  mulsd  D62(%rip),%xmm0
  movsd  %xmm0,0x420(%rsp,%rax,1)
  movsd  0x440(%rsp,%rax,1),%xmm7
  mulsd  D62(%rip),%xmm7
  movsd  %xmm7,0x440(%rsp,%rax,1)
  movsd  0x460(%rsp,%rax,1),%xmm8
  mulsd  D62(%rip),%xmm8
  movsd  %xmm8,0x460(%rsp,%rax,1)
  movsd  0x480(%rsp,%rax,1),%xmm6
  mulsd  D62(%rip),%xmm6
  movsd  %xmm6,0x480(%rsp,%rax,1)
  movapd %xmm3,%xmm4
  mulsd  0x4a0(%rsp,%rax,1),%xmm4
  movsd  %xmm4,0x4a0(%rsp,%rax,1)
  movapd %xmm5,%xmm2
  addsd  (%rax,%r14,1),%xmm2
  addsd  %xmm0,%xmm2
  addsd  %xmm7,%xmm2
  addsd  %xmm4,%xmm2
  addsd  (%rdx),%xmm2
  movsd  %xmm2,(%rdx)
  movapd %xmm5,%xmm2
  addsd  (%rax,%rbp,1),%xmm2
  addsd  %xmm1,%xmm2
  addsd  %xmm0,%xmm2
  addsd  %xmm4,%xmm2
  addsd  0x8(%rdx),%xmm2
  movsd  %xmm2,0x8(%rdx)
  movapd %xmm5,%xmm2
  addsd  (%rax,%rbx,1),%xmm2
  addsd  %xmm1,%xmm2
  addsd  %xmm8,%xmm2
  addsd  %xmm4,%xmm2
  addsd  (%r12),%xmm2
  movsd  %xmm2,(%r12)
  addsd  (%rax,%r11,1),%xmm5
  addsd  %xmm7,%xmm5
  addsd  %xmm8,%xmm5
  addsd  %xmm4,%xmm5
  addsd  -0x8(%r12),%xmm5
  movsd  %xmm5,-0x8(%r12)
  movapd %xmm7,%xmm2
  addsd  (%rax,%r10,1),%xmm2
  addsd  %xmm8,%xmm2
  addsd  %xmm6,%xmm2
  addsd  %xmm4,%xmm2
  addsd  -0x8(%rcx),%xmm2
  movsd  %xmm2,-0x8(%rcx)
  movapd %xmm1,%xmm2
  addsd  (%rax,%r9,1),%xmm2
  addsd  %xmm8,%xmm2
  addsd  %xmm6,%xmm2
  addsd  %xmm4,%xmm2
  addsd  (%rcx),%xmm2
  movsd  %xmm2,(%rcx)
  addsd  (%rax,%r8,1),%xmm1
  addsd  %xmm0,%xmm1
  addsd  %xmm6,%xmm1
  addsd  %xmm4,%xmm1
  addsd  (%rsi),%xmm1
  movsd  %xmm1,(%rsi)
  addsd  (%rax,%rdi,1),%xmm0
  addsd  %xmm7,%xmm0
  addsd  %xmm6,%xmm0
  addsd  %xmm4,%xmm0
  addsd  -0x8(%rsi),%xmm0
  movsd  %xmm0,-0x8(%rsi)
  add    %r15,%rdx
  add    %r15,%r12
  add    %r15,%rcx
  add    %r15,%rsi
  add    $0x8,%rax
  cmp    $0x18,%rax
  jne    L17
  jmp    L82
L95:
  addl   $0x1,0xc8(%rsp)
  mov    0xc8(%rsp),%eax
  mov    0xe0(%rsp),%edi
  add    %edi,0xcc(%rsp)
  mov    0xe4(%rsp),%edi
  add    %edi,0xd8(%rsp)
  cmp    %eax,0xdc(%rsp)
  je     L9
L61:
  cmpl   $0x0,0xa4(%rsp)
  jle    L95
  movslq 0xcc(%rsp),%rax
  mov    %rax,0x68(%rsp)
  mov    0xe8(%rsp),%rbx
  lea    (%rbx,%rax,8),%rdx
  mov    0xa8(%rsp),%rax
  lea    (%rax,%rdx,1),%r12
  movslq 0xd8(%rsp),%rax
  add    0xd0(%rsp),%rax
  mov    0xf0(%rsp),%rbx
  lea    (%rbx,%rax,8),%rax
  mov    %rax,0x70(%rsp)
  add    0xb0(%rsp),%rdx
  mov    %rdx,0x78(%rsp)
  movl   $0x0,0xa0(%rsp)
  jmp    L87
L9:
  addq   $0x1,0xd0(%rsp)
  mov    0xd0(%rsp),%rax
  cmp    0xf8(%rsp),%rax
  je     L80
L37:
  mov    0xd0(%rsp),%eax
  mov    %eax,0xcc(%rsp)
  cmpl   $0x0,0xdc(%rsp)
  jle    L9
  movl   $0x0,0xd8(%rsp)
  movl   $0x0,0xc8(%rsp)
  jmp    L61
L80:
  mov    0x4b8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L43
  add    $0x4c8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L43:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_label: D62
type: f64
name: parse_data
arguments: data_label: D45
type: f64
name: parse_data
arguments: data_label: D20
type: f32[4]
name: parse_data
arguments: data_label: D144
type: f64

tool: D62: 0.25

tool: D45: 0.5

tool: {"D20": [0.0,-0.0,0.0,0.0]}

tool: D144: 0.125

assistant: ```c
void dJacTx3D(double *prod, const double *yc, const double *x, 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 rA[3], rB[3], rC[3], rD[3], rE[3], rF[3], rG[3], rH[3], rABDC[3], rBDHF[3], rABFE[3], rCAEG[3], rDCGH[3], rEFHG[3], rM[3];
  double xp;
  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;
  double *wptr;
#pragma omp parallel for default(shared) private(rptr, wptr, id, i1, i2, i3, r, comp, idn, xp, yA, yB, yC, yD, yE, yF, yG, yH, yABDC, yBDHF, yABFE, yCAEG, yDCGH, yEFHG, yM, rA, rB, rC, rD, rE, rF, rG, rH, rABDC, rBDHF, rABFE, rCAEG, rDCGH, rEFHG, rM)
  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;
        id = i1 + m1 * (i2 + i3 * m2);
        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;
          rA[r] = 0.0;
          rB[r] = 0.0;
          rC[r] = 0.0;
          rD[r] = 0.0;
          rE[r] = 0.0;
          rF[r] = 0.0;
          rG[r] = 0.0;
          rH[r] = 0.0;
          rABDC[r] = 0.0;
          rBDHF[r] = 0.0;
          rABFE[r] = 0.0;
          rCAEG[r] = 0.0;
          rDCGH[r] = 0.0;
          rEFHG[r] = 0.0;
          rM[r] = 0.0;
        }
        xp = x[id];
        dVTTetra3D(yA, yB, yABDC, yM, -xp, rA, rB, rABDC, rM);
        dVTTetra3D(yB, yD, yABDC, yM, -xp, rB, rD, rABDC, rM);
        dVTTetra3D(yD, yC, yABDC, yM, -xp, rD, rC, rABDC, rM);
        dVTTetra3D(yC, yA, yABDC, yM, -xp, rC, rA, rABDC, rM);
        dVTTetra3D(yB, yD, yBDHF, yM, xp, rB, rD, rBDHF, rM);
        dVTTetra3D(yD, yH, yBDHF, yM, xp, rD, rH, rBDHF, rM);
        dVTTetra3D(yH, yF, yBDHF, yM, xp, rH, rF, rBDHF, rM);
        dVTTetra3D(yF, yB, yBDHF, yM, xp, rF, rB, rBDHF, rM);
        dVTTetra3D(yA, yB, yABFE, yM, xp, rA, rB, rABFE, rM);
        dVTTetra3D(yB, yF, yABFE, yM, xp, rB, rF, rABFE, rM);
        dVTTetra3D(yF, yE, yABFE, yM, xp, rF, rE, rABFE, rM);
        dVTTetra3D(yE, yA, yABFE, yM, xp, rE, rA, rABFE, rM);
        dVTTetra3D(yC, yA, yCAEG, yM, xp, rC, rA, rCAEG, rM);
        dVTTetra3D(yA, yE, yCAEG, yM, xp, rA, rE, rCAEG, rM);
        dVTTetra3D(yE, yG, yCAEG, yM, xp, rE, rG, rCAEG, rM);
        dVTTetra3D(yG, yC, yCAEG, yM, xp, rG, rC, rCAEG, rM);
        dVTTetra3D(yD, yC, yDCGH, yM, xp, rD, rC, rDCGH, rM);
        dVTTetra3D(yC, yG, yDCGH, yM, xp, rC, rG, rDCGH, rM);
        dVTTetra3D(yG, yH, yDCGH, yM, xp, rG, rH, rDCGH, rM);
        dVTTetra3D(yH, yD, yDCGH, yM, xp, rH, rD, rDCGH, rM);
        dVTTetra3D(yE, yF, yEFHG, yM, xp, rE, rF, rEFHG, rM);
        dVTTetra3D(yF, yH, yEFHG, yM, xp, rF, rH, rEFHG, rM);
        dVTTetra3D(yH, yG, yEFHG, yM, xp, rH, rG, rEFHG, rM);
        dVTTetra3D(yG, yE, yEFHG, yM, xp, rG, rE, rEFHG, rM);
        comp = 0;
        for (r = 0; r < 3; r++) {
          rABDC[r] *= 0.25;
          rBDHF[r] *= 0.25;
          rABFE[r] *= 0.25;
          rCAEG[r] *= 0.25;
          rDCGH[r] *= 0.25;
          rEFHG[r] *= 0.25;
          rM[r] *= 0.125;
          wptr = prod + idn + comp;
#pragma omp atomic
          *wptr += rA[r] + rABDC[r] + rABFE[r] + rCAEG[r] + rM[r];
          wptr += inc_x;
#pragma omp atomic
          *wptr += rB[r] + rABDC[r] + rBDHF[r] + rABFE[r] + rM[r];
          wptr += inc_y;
#pragma omp atomic
          *wptr += rD[r] + rABDC[r] + rBDHF[r] + rDCGH[r] + rM[r];
          wptr -= inc_x;
#pragma omp atomic
          *wptr += rC[r] + rABDC[r] + rCAEG[r] + rDCGH[r] + rM[r];
          wptr += inc_z;
#pragma omp atomic
          *wptr += rG[r] + rCAEG[r] + rDCGH[r] + rEFHG[r] + rM[r];
          wptr += inc_x;
#pragma omp atomic
          *wptr += rH[r] + rBDHF[r] + rDCGH[r] + rEFHG[r] + rM[r];
          wptr -= inc_y;
#pragma omp atomic
          *wptr += rF[r] + rBDHF[r] + rABFE[r] + rEFHG[r] + rM[r];
          wptr -= inc_x;
#pragma omp atomic
          *wptr += rE[r] + rABFE[r] + rCAEG[r] + rEFHG[r] + rM[r];
          comp += nn;
        }
      }
    }
  }
}
```