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

```asm
<cgmjpost2l>:
  endbr64
  test   %edx,%edx
  jle    L1
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  movaps %xmm0,%xmm6
  mov    %edx,%r13d
  lea    0x0(,%r8,4),%r15d
  movslq %ecx,%rcx
  lea    0x0(,%rcx,4),%rax
  mov    %rax,-0x8(%rsp)
  mov    $0x0,%r14d
  movss  D3(%rip),%xmm7
L11:
  movss  (%rdi),%xmm4
  cvttss2si %xmm4,%eax
  movss  0x4(%rdi),%xmm0
  cvttss2si %xmm0,%edx
  pxor   %xmm1,%xmm1
  cvtsi2ss %eax,%xmm1
  subss  %xmm1,%xmm4
  mulss  %xmm6,%xmm4
  pxor   %xmm1,%xmm1
  cvtsi2ss %edx,%xmm1
  subss  %xmm1,%xmm0
  shl    $0x2,%eax
  imul   %r15d,%edx
  movaps %xmm6,%xmm10
  subss  %xmm4,%xmm10
  lea    (%r15,%rdx,1),%ecx
  movaps %xmm7,%xmm9
  subss  %xmm0,%xmm9
  lea    0x4(%rax),%r12d
  movaps %xmm4,%xmm8
  mulss  %xmm0,%xmm8
  mulss  %xmm10,%xmm0
  movss  0x8(%rdi),%xmm1
  movss  0xc(%rdi),%xmm5
  movss  0x10(%rdi),%xmm11
  movaps %xmm1,%xmm3
  mulss  %xmm1,%xmm3
  movaps %xmm5,%xmm2
  mulss  %xmm5,%xmm2
  subss  %xmm2,%xmm3
  movaps %xmm1,%xmm2
  mulss  %xmm5,%xmm2
  mulss  %xmm11,%xmm1
  mulss  %xmm11,%xmm5
  lea    (%rcx,%r12,1),%r8d
  movslq %r8d,%r8
  lea    (%rsi,%r8,4),%r8
  movaps %xmm8,%xmm11
  mulss  %xmm3,%xmm11
  addss  (%r8),%xmm11
  movss  %xmm11,(%r8)
  lea    0x5(%rax),%ebp
  lea    0x0(%rbp,%rcx,1),%r8d
  movslq %r8d,%r8
  lea    (%rsi,%r8,4),%r8
  movaps %xmm8,%xmm11
  mulss  %xmm2,%xmm11
  addss  (%r8),%xmm11
  movss  %xmm11,(%r8)
  lea    0x6(%rax),%ebx
  lea    (%rbx,%rcx,1),%r8d
  movslq %r8d,%r8
  lea    (%rsi,%r8,4),%r8
  movaps %xmm8,%xmm11
  mulss  %xmm1,%xmm11
  addss  (%r8),%xmm11
  movss  %xmm11,(%r8)
  lea    0x7(%rax),%r11d
  lea    (%r11,%rcx,1),%r8d
  movslq %r8d,%r8
  lea    (%rsi,%r8,4),%r8
  mulss  %xmm5,%xmm8
  addss  (%r8),%xmm8
  movss  %xmm8,(%r8)
  mulss  %xmm9,%xmm4
  lea    (%rax,%rcx,1),%r8d
  movslq %r8d,%r8
  lea    (%rsi,%r8,4),%r8
  movaps %xmm0,%xmm8
  mulss  %xmm3,%xmm8
  addss  (%r8),%xmm8
  movss  %xmm8,(%r8)
  lea    0x1(%rax),%r10d
  lea    (%r10,%rcx,1),%r8d
  movslq %r8d,%r8
  lea    (%rsi,%r8,4),%r8
  movaps %xmm0,%xmm8
  mulss  %xmm2,%xmm8
  addss  (%r8),%xmm8
  movss  %xmm8,(%r8)
  lea    0x2(%rax),%r9d
  lea    (%r9,%rcx,1),%r8d
  movslq %r8d,%r8
  lea    (%rsi,%r8,4),%r8
  movaps %xmm0,%xmm8
  mulss  %xmm1,%xmm8
  addss  (%r8),%xmm8
  movss  %xmm8,(%r8)
  lea    0x3(%rax),%r8d
  add    %r8d,%ecx
  movslq %ecx,%rcx
  lea    (%rsi,%rcx,4),%rcx
  mulss  %xmm5,%xmm0
  addss  (%rcx),%xmm0
  movss  %xmm0,(%rcx)
  mulss  %xmm10,%xmm9
  add    %edx,%r12d
  movslq %r12d,%r12
  lea    (%rsi,%r12,4),%rcx
  movaps %xmm3,%xmm0
  mulss  %xmm4,%xmm0
  addss  (%rcx),%xmm0
  movss  %xmm0,(%rcx)
  add    %edx,%ebp
  movslq %ebp,%rbp
  lea    (%rsi,%rbp,4),%rcx
  movaps %xmm2,%xmm0
  mulss  %xmm4,%xmm0
  addss  (%rcx),%xmm0
  movss  %xmm0,(%rcx)
  add    %edx,%ebx
  movslq %ebx,%rbx
  lea    (%rsi,%rbx,4),%rcx
  movaps %xmm1,%xmm0
  mulss  %xmm4,%xmm0
  addss  (%rcx),%xmm0
  movss  %xmm0,(%rcx)
  add    %edx,%r11d
  movslq %r11d,%r11
  lea    (%rsi,%r11,4),%rcx
  mulss  %xmm5,%xmm4
  addss  (%rcx),%xmm4
  movss  %xmm4,(%rcx)
  add    %edx,%eax
  cltq
  lea    (%rsi,%rax,4),%rax
  mulss  %xmm9,%xmm3
  addss  (%rax),%xmm3
  movss  %xmm3,(%rax)
  add    %edx,%r10d
  movslq %r10d,%r10
  lea    (%rsi,%r10,4),%rax
  mulss  %xmm9,%xmm2
  addss  (%rax),%xmm2
  movss  %xmm2,(%rax)
  add    %edx,%r9d
  movslq %r9d,%r9
  lea    (%rsi,%r9,4),%rax
  mulss  %xmm9,%xmm1
  addss  (%rax),%xmm1
  movss  %xmm1,(%rax)
  add    %edx,%r8d
  movslq %r8d,%r8
  lea    (%rsi,%r8,4),%rax
  mulss  %xmm9,%xmm5
  addss  (%rax),%xmm5
  movss  %xmm5,(%rax)
  add    $0x1,%r14d
  add    -0x8(%rsp),%rdi
  cmp    %r14d,%r13d
  jne    L11
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L1:
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D3
datatype: f32

tool: D3: 1

assistant: ```c
void cgmjpost2l(float part[], float amu[], float qm, int nop, int idimp, int nxv, int nyv) {
  int j, nn, mm, np, mp, nxv4;
  float dxp, dyp, amx, amy;
  float dx, dy, vx, vy, vz, v1, v2, v3, v4;
  nxv4 = 4 * nxv;
  for (j = 0; j < nop; j++) {
    nn = part[idimp * j];
    mm = part[1 + idimp * j];
    dxp = qm * (part[idimp * j] - (float)nn);
    dyp = part[1 + idimp * j] - (float)mm;
    nn = 4 * nn;
    mm = nxv4 * mm;
    amx = qm - dxp;
    mp = mm + nxv4;
    amy = 1.0 - dyp;
    np = nn + 4;
    dx = dxp * dyp;
    dy = amx * dyp;
    vx = part[2 + idimp * j];
    vy = part[3 + idimp * j];
    vz = part[4 + idimp * j];
    v1 = vx * vx - vy * vy;
    v2 = vx * vy;
    v3 = vz * vx;
    v4 = vz * vy;
    amu[np + mp] += v1 * dx;
    amu[1 + np + mp] += v2 * dx;
    amu[2 + np + mp] += v3 * dx;
    amu[3 + np + mp] += v4 * dx;
    dx = dxp * amy;
    amu[nn + mp] += v1 * dy;
    amu[1 + nn + mp] += v2 * dy;
    amu[2 + nn + mp] += v3 * dy;
    amu[3 + nn + mp] += v4 * dy;
    dy = amx * amy;
    amu[np + mm] += v1 * dx;
    amu[1 + np + mm] += v2 * dx;
    amu[2 + np + mm] += v3 * dx;
    amu[3 + np + mm] += v4 * dx;
    amu[nn + mm] += v1 * dy;
    amu[1 + nn + mm] += v2 * dy;
    amu[2 + nn + mm] += v3 * dy;
    amu[3 + nn + mm] += v4 * dy;
  }
  return;
}
```