user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<matrix_ij_G>:
  endbr64
  movsd  D7(%rip),%xmm5
  push   %r12
  mov    %rsi,%rax
  mov    %edi,%r8d
  movapd %xmm4,%xmm6
  addsd  %xmm4,%xmm4
  movapd %xmm1,%xmm7
  push   %rbp
  mulsd  %xmm3,%xmm5
  push   %rbx
  movapd %xmm6,%xmm13
  movapd %xmm6,%xmm10
  mulsd  %xmm1,%xmm7
  lea    0x0(,%rdi,4),%edx
  movapd %xmm0,%xmm9
  subsd  %xmm4,%xmm3
  movapd %xmm0,%xmm4
  movslq %edx,%rdx
  mulsd  %xmm0,%xmm4
  mulsd  %xmm0,%xmm13
  mulsd  %xmm2,%xmm10
  movapd %xmm5,%xmm14
  movapd %xmm5,%xmm15
  mulsd  %xmm2,%xmm5
  mulsd  %xmm0,%xmm14
  mulsd  %xmm1,%xmm15
  movapd %xmm4,%xmm8
  movapd %xmm7,%xmm4
  movsd  %xmm4,-0x8(%rsp)
  movapd %xmm8,%xmm12
  movapd %xmm8,%xmm11
  movsd  %xmm8,-0x10(%rsp)
  mulsd  %xmm1,%xmm12
  movapd %xmm1,%xmm8
  mulsd  %xmm2,%xmm11
  movapd %xmm5,%xmm7
  movapd %xmm6,%xmm5
  mulsd  %xmm1,%xmm5
  movapd %xmm4,%xmm6
  movsd  (%rsi),%xmm4
  mulsd  %xmm1,%xmm9
  addsd  %xmm14,%xmm4
  mulsd  %xmm2,%xmm6
  mulsd  %xmm3,%xmm12
  mulsd  %xmm3,%xmm11
  movsd  %xmm4,(%rsi)
  movsd  0x8(%rsi),%xmm4
  mulsd  %xmm9,%xmm8
  addsd  %xmm15,%xmm4
  mulsd  %xmm2,%xmm9
  mulsd  %xmm3,%xmm6
  movsd  %xmm4,0x8(%rsi)
  movsd  0x10(%rsi),%xmm4
  mulsd  %xmm3,%xmm8
  addsd  %xmm7,%xmm4
  mulsd  %xmm3,%xmm9
  movsd  %xmm4,0x10(%rsi)
  lea    (%rsi,%rdx,8),%rsi
  lea    0x8(,%rdx,8),%rdx
  addsd  (%rsi),%xmm14
  lea    (%rax,%rdx,1),%rcx
  lea    0x8(%rax,%rdx,1),%rdi
  movslq %r8d,%rdx
  lea    0x0(,%rdx,4),%r9
  lea    0x0(,%rdx,8),%r10
  movsd  %xmm14,(%rsi)
  addsd  (%rcx),%xmm15
  sub    %r9,%rdx
  lea    0x8(%rax,%r10,1),%rbp
  lea    (%rsi,%rdx,8),%rbx
  lea    (%r8,%r8,1),%r9d
  lea    (%rbx,%r10,1),%rdx
  movslq %r9d,%r12
  add    %r8d,%r9d
  movsd  %xmm15,(%rcx)
  movsd  (%rdi),%xmm14
  lea    0x10(%rax,%r12,8),%r11
  movslq %r9d,%r9
  lea    0x8(,%r9,8),%r8
  addsd  %xmm7,%xmm14
  lea    (%rax,%r8,1),%r9
  lea    0x8(%rax,%r8,1),%r8
  movsd  %xmm14,(%rdi)
  movapd %xmm13,%xmm14
  addsd  %xmm13,%xmm14
  addsd  (%rax),%xmm14
  movsd  %xmm14,(%rax)
  movsd  (%rbx),%xmm14
  addsd  %xmm5,%xmm14
  movsd  %xmm14,(%rbx)
  movsd  0x0(%rbp),%xmm14
  addsd  %xmm13,%xmm14
  movsd  %xmm14,0x0(%rbp)
  movsd  (%rdx),%xmm14
  addsd  %xmm10,%xmm14
  movsd  %xmm14,(%rdx)
  addsd  (%r11),%xmm13
  movsd  %xmm13,(%r11)
  addsd  (%r9),%xmm10
  movsd  %xmm10,(%r9)
  movsd  (%r8),%xmm10
  addsd  %xmm5,%xmm10
  addsd  %xmm5,%xmm5
  movsd  %xmm10,(%r8)
  addsd  (%rcx),%xmm5
  movsd  -0x10(%rsp),%xmm4
  mulsd  %xmm0,%xmm4
  movsd  %xmm5,(%rcx)
  mulsd  %xmm2,%xmm0
  mulsd  %xmm3,%xmm4
  addsd  (%rax),%xmm4
  mulsd  %xmm2,%xmm0
  movsd  %xmm4,(%rax)
  movsd  0x8(%rax),%xmm4
  addsd  %xmm12,%xmm4
  mulsd  %xmm3,%xmm0
  movsd  %xmm4,0x8(%rax)
  movsd  0x10(%rax),%xmm4
  addsd  %xmm11,%xmm4
  movsd  %xmm4,0x10(%rax)
  addsd  (%rbx),%xmm12
  movsd  %xmm12,(%rbx)
  movsd  0x0(%rbp),%xmm4
  lea    0x10(%rax,%r10,1),%rbx
  lea    0x8(%rax,%r12,8),%rax
  addsd  %xmm8,%xmm4
  movsd  %xmm4,0x0(%rbp)
  movsd  (%rbx),%xmm4
  addsd  %xmm9,%xmm4
  movsd  %xmm4,(%rbx)
  addsd  (%rdx),%xmm11
  movsd  %xmm11,(%rdx)
  movsd  (%rax),%xmm4
  add    %r10,%rdx
  addsd  %xmm9,%xmm4
  movsd  %xmm4,(%rax)
  addsd  (%r11),%xmm0
  movsd  %xmm0,(%r11)
  addsd  (%rdx),%xmm9
  movsd  %xmm9,(%rdx)
  movsd  (%r9),%xmm0
  addsd  %xmm6,%xmm0
  movsd  %xmm0,(%r9)
  movapd %xmm1,%xmm0
  mulsd  %xmm2,%xmm0
  mulsd  -0x8(%rsp),%xmm1
  mulsd  %xmm2,%xmm0
  mulsd  %xmm3,%xmm1
  mulsd  %xmm3,%xmm0
  addsd  (%r8),%xmm0
  movsd  %xmm0,(%r8)
  addsd  (%rsi),%xmm8
  movsd  %xmm8,(%rsi)
  addsd  (%rcx),%xmm1
  movsd  %xmm1,(%rcx)
  addsd  (%rdi),%xmm6
  movsd  %xmm6,(%rdi)
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
```

tool_calls: name: read_data
arguments: label: D7
type_guessed: byte[8]

tool: {"D7": [0x55,0x55,0x55,0x55,0x55,0x55,0xd5,0xbf]}

assistant: ```c
void matrix_ij_G(int n, double *mat, double ex, double ey, double ez, double xg, double yg) {
  double g1, g2, g3;
  double g1x, g1y, g1z;
  double g2x, g2y, g2z;
  double g3xxx, g3xxy, g3xxz, g3xyy, g3xyz, g3yyy, g3yyz, g3yzz, g3xzz, g3zzz;
  double exx, eyy, ezz, exy, eyz, exz;
  double exxx, exxy, exxz, exyy, exyz, exzz, eyyy, eyyz, eyzz, ezzz;
  g1 = -1.0 / 3.0 * xg;
  g2 = yg;
  g3 = xg - 2.0 * yg;
  exx = ex * ex;
  eyy = ey * ey;
  ezz = ez * ez;
  exy = ex * ey;
  eyz = ey * ez;
  exz = ez * ex;
  exxx = exx * ex;
  exxy = exx * ey;
  exxz = exx * ez;
  exyy = exy * ey;
  exyz = exy * ez;
  exzz = exz * ez;
  eyyy = eyy * ey;
  eyyz = eyy * ez;
  eyzz = eyz * ez;
  ezzz = ezz * ez;
  g1x = g1 * ex;
  g1y = g1 * ey;
  g1z = g1 * ez;
  g2x = g2 * ex;
  g2y = g2 * ey;
  g2z = g2 * ez;
  g3xxx = g3 * exxx;
  g3xxy = g3 * exxy;
  g3xxz = g3 * exxz;
  g3xyy = g3 * exyy;
  g3xyz = g3 * exyz;
  g3xzz = g3 * exzz;
  g3yyy = g3 * eyyy;
  g3yyz = g3 * eyyz;
  g3yzz = g3 * eyzz;
  g3zzz = g3 * ezzz;
  mat[0 * n + 0] += g1x;
  mat[0 * n + 1] += g1y;
  mat[0 * n + 2] += g1z;
  mat[4 * n + 0] += g1x;
  mat[4 * n + 1] += g1y;
  mat[4 * n + 2] += g1z;
  mat[0 * n + 0] += 2.0 * g2x;
  mat[1 * n + 0] += g2y;
  mat[1 * n + 1] += g2x;
  mat[2 * n + 0] += g2z;
  mat[2 * n + 2] += g2x;
  mat[3 * n + 1] += g2z;
  mat[3 * n + 2] += g2y;
  mat[4 * n + 1] += 2.0 * g2y;
  mat[0 * n + 0] += g3xxx;
  mat[0 * n + 1] += g3xxy;
  mat[0 * n + 2] += g3xxz;
  mat[1 * n + 0] += g3xxy;
  mat[1 * n + 1] += g3xyy;
  mat[1 * n + 2] += g3xyz;
  mat[2 * n + 0] += g3xxz;
  mat[2 * n + 1] += g3xyz;
  mat[2 * n + 2] += g3xzz;
  mat[3 * n + 0] += g3xyz;
  mat[3 * n + 1] += g3yyz;
  mat[3 * n + 2] += g3yzz;
  mat[4 * n + 0] += g3xyy;
  mat[4 * n + 1] += g3yyy;
  mat[4 * n + 2] += g3yyz;
}
```