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

```asm
<fcc>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%r8
  mov    %edx,%ecx
  movapd %xmm0,%xmm1
  lea    (%rdx,%rdx,2),%r9d
  mov    %edx,%eax
  imul   %edx,%eax
  lea    (%rax,%rax,2),%ebx
  mov    $0x0,%r12d
  mov    $0x0,%r10d
  mov    $0x0,%ebp
  jmp    L48
L86:
  add    %ebx,%r10d
  lea    0x1(%r11),%eax
  cmp    %r13d,%r11d
  je     L8
  mov    %eax,%r11d
L26:
  pxor   %xmm3,%xmm3
  cvtsi2sd %r11d,%xmm3
  mulsd  %xmm1,%xmm3
  addsd  %xmm4,%xmm3
  mov    %r10d,%edi
  mov    %ebp,%esi
L78:
  pxor   %xmm2,%xmm2
  cvtsi2sd %esi,%xmm2
  mulsd  %xmm1,%xmm2
  addsd  %xmm4,%xmm2
  movslq %edi,%rax
  lea    (%r8,%rax,8),%rdx
  mov    $0x0,%eax
L63:
  movsd  %xmm3,(%rdx)
  movsd  %xmm2,0x8(%rdx)
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0x10(%rdx)
  mov    %eax,%r13d
  add    $0x1,%eax
  add    $0x18,%rdx
  cmp    %eax,%ecx
  jne    L63
  add    %r9d,%edi
  lea    0x1(%rsi),%eax
  cmp    %r13d,%esi
  je     L86
  mov    %eax,%esi
  jmp    L78
L8:
  add    $0x1,%r12d
  cmp    $0x2,%r12d
  je     L104
L48:
  test   %ecx,%ecx
  jle    L8
  pxor   %xmm4,%xmm4
  cvtsi2sd %r12d,%xmm4
  mulsd  %xmm1,%xmm4
  mulsd  D6(%rip),%xmm4
  mov    %ebp,%r11d
  jmp    L26
L62:
  add    %ebx,%r10d
  lea    0x1(%r11),%eax
  cmp    %r13d,%r11d
  je     L159
  mov    %eax,%r11d
L137:
  pxor   %xmm3,%xmm3
  cvtsi2sd %r11d,%xmm3
  mulsd  %xmm1,%xmm3
  addsd  %xmm6,%xmm3
  mov    %r10d,%edi
  mov    %ebp,%esi
L31:
  pxor   %xmm2,%xmm2
  cvtsi2sd %esi,%xmm2
  mulsd  %xmm1,%xmm2
  addsd  %xmm5,%xmm2
  movslq %edi,%rax
  lea    (%r8,%rax,8),%rdx
  mov    $0x0,%eax
L52:
  movsd  %xmm3,(%rdx)
  movsd  %xmm2,0x8(%rdx)
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  %xmm1,%xmm0
  addsd  %xmm4,%xmm0
  movsd  %xmm0,0x10(%rdx)
  mov    %eax,%r13d
  add    $0x1,%eax
  add    $0x18,%rdx
  cmp    %eax,%ecx
  jne    L52
  add    %r9d,%edi
  lea    0x1(%rsi),%eax
  cmp    %r13d,%esi
  je     L62
  mov    %eax,%esi
  jmp    L31
L159:
  add    $0x1,%r12d
  cmp    $0x2,%r12d
  je     L51
L141:
  test   %ecx,%ecx
  jle    L159
  mov    %r14d,%eax
  sub    %r12d,%eax
  pxor   %xmm6,%xmm6
  cvtsi2sd %eax,%xmm6
  mulsd  %xmm1,%xmm6
  mulsd  %xmm7,%xmm6
  pxor   %xmm5,%xmm5
  cvtsi2sd %r12d,%xmm5
  mulsd  %xmm1,%xmm5
  mulsd  %xmm7,%xmm5
  movapd %xmm1,%xmm4
  mulsd  %xmm7,%xmm4
  mov    %ebp,%r11d
  jmp    L137
L104:
  mov    $0x0,%r12d
  mov    $0x1,%r14d
  movsd  D6(%rip),%xmm7
  mov    $0x0,%ebp
  jmp    L141
L51:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
```

tool_calls: name: parse_data
arguments: data_label: D6
data_type: f64

tool: D6: 0.5

assistant: ```c
void fcc(double x[], int npart, int mm, double a) {
  int ijk = 0;
  int i, j, k, lg;
  for (lg = 0; lg < 2; lg++)
    for (i = 0; i < mm; i++)
      for (j = 0; j < mm; j++)
        for (k = 0; k < mm; k++) {
          x[ijk] = i * a + lg * a * 0.5;
          x[ijk + 1] = j * a + lg * a * 0.5;
          x[ijk + 2] = k * a;
          ijk += 3;
        }
  for (lg = 1; lg < 3; lg++)
    for (i = 0; i < mm; i++)
      for (j = 0; j < mm; j++)
        for (k = 0; k < mm; k++) {
          x[ijk] = i * a + (2 - lg) * a * 0.5;
          x[ijk + 1] = j * a + (lg - 1) * a * 0.5;
          x[ijk + 2] = k * a + a * 0.5;
          ijk += 3;
        }
}
```