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

```asm
<rg4th>:
  endbr64
  push   %r12
  pxor   %xmm5,%xmm5
  mov    %rsi,%r12
  cvtss2sd %xmm3,%xmm3
  push   %rbp
  cvtss2sd %xmm0,%xmm5
  mov    %rdi,%rbp
  movapd %xmm5,%xmm0
  push   %rbx
  cvtss2sd %xmm2,%xmm2
  mov    %rdx,%rbx
  cvtss2sd %xmm1,%xmm1
  sub    $0xf0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0xe8(%rsp)
  xor    %eax,%eax
  lea    0x70(%rsp),%rdi
  mov    $0x4,%eax
  movsd  %xmm3,0x18(%rsp)
  movsd  %xmm2,0x10(%rsp)
  movsd  %xmm1,0x8(%rsp)
  movsd  %xmm5,(%rsp)
  call   <aceleracion@plt>
  mov    0x70(%rsp),%rax
  movss  (%rbx),%xmm0
  lea    0x28(%rsp),%rdx
  movsd  (%rsp),%xmm5
  movss  D18(%rip),%xmm4
  lea    0x34(%rsp),%rsi
  lea    0x90(%rsp),%rdi
  movss  (%rax),%xmm6
  mov    0x78(%rsp),%rax
  movsd  0x18(%rsp),%xmm3
  movsd  0x10(%rsp),%xmm2
  mulss  %xmm4,%xmm6
  movsd  0x8(%rsp),%xmm1
  addss  %xmm0,%xmm6
  mulss  %xmm4,%xmm0
  addss  (%r12),%xmm0
  movss  %xmm6,0x28(%rsp)
  movss  %xmm0,0x34(%rsp)
  movss  (%rax),%xmm6
  movss  0x4(%rbx),%xmm0
  mov    0x80(%rsp),%rax
  mulss  %xmm4,%xmm6
  addss  %xmm0,%xmm6
  mulss  %xmm4,%xmm0
  addss  0x4(%r12),%xmm0
  movss  %xmm6,0x2c(%rsp)
  movss  %xmm0,0x38(%rsp)
  movss  (%rax),%xmm6
  movss  0x8(%rbx),%xmm0
  mov    $0x4,%eax
  mulss  %xmm4,%xmm6
  addss  %xmm0,%xmm6
  mulss  %xmm4,%xmm0
  addss  0x8(%r12),%xmm0
  movss  %xmm6,0x30(%rsp)
  movss  %xmm0,0x3c(%rsp)
  movapd %xmm5,%xmm0
  call   <aceleracion@plt>
  movsd  (%rsp),%xmm5
  lea    0x40(%rsp),%rdx
  mov    0x90(%rsp),%rax
  movss  D18(%rip),%xmm4
  movsd  0x18(%rsp),%xmm3
  lea    0x4c(%rsp),%rsi
  lea    0xb0(%rsp),%rdi
  movss  (%rax),%xmm0
  mov    0x98(%rsp),%rax
  movsd  0x10(%rsp),%xmm2
  movsd  0x8(%rsp),%xmm1
  mulss  %xmm4,%xmm0
  addss  (%rbx),%xmm0
  movss  %xmm0,0x40(%rsp)
  movss  0x28(%rsp),%xmm0
  mulss  %xmm4,%xmm0
  addss  (%r12),%xmm0
  movss  %xmm0,0x4c(%rsp)
  movss  (%rax),%xmm0
  mov    0xa0(%rsp),%rax
  mulss  %xmm4,%xmm0
  addss  0x4(%rbx),%xmm0
  movss  %xmm0,0x44(%rsp)
  movss  0x2c(%rsp),%xmm0
  mulss  %xmm4,%xmm0
  addss  0x4(%r12),%xmm0
  movss  %xmm0,0x50(%rsp)
  movss  (%rax),%xmm0
  mov    $0x4,%eax
  mulss  %xmm4,%xmm0
  addss  0x8(%rbx),%xmm0
  mulss  0x30(%rsp),%xmm4
  movss  %xmm0,0x48(%rsp)
  movss  0x8(%r12),%xmm0
  addss  %xmm4,%xmm0
  movss  %xmm0,0x54(%rsp)
  movapd %xmm5,%xmm0
  call   <aceleracion@plt>
  movsd  (%rsp),%xmm5
  lea    0x58(%rsp),%rdx
  mov    0xb0(%rsp),%rax
  movsd  0x18(%rsp),%xmm3
  movsd  0x10(%rsp),%xmm2
  lea    0x64(%rsp),%rsi
  lea    0xd0(%rsp),%rdi
  movss  (%rax),%xmm0
  addss  (%rbx),%xmm0
  mov    0xb8(%rsp),%rax
  movsd  0x8(%rsp),%xmm1
  movss  %xmm0,0x58(%rsp)
  movss  0x40(%rsp),%xmm0
  addss  (%r12),%xmm0
  movss  %xmm0,0x64(%rsp)
  movss  (%rax),%xmm0
  addss  0x4(%rbx),%xmm0
  mov    0xc0(%rsp),%rax
  movss  %xmm0,0x5c(%rsp)
  movss  0x44(%rsp),%xmm0
  addss  0x4(%r12),%xmm0
  movss  %xmm0,0x68(%rsp)
  movss  (%rax),%xmm0
  addss  0x8(%rbx),%xmm0
  mov    $0x4,%eax
  movss  %xmm0,0x60(%rsp)
  movss  0x8(%r12),%xmm0
  addss  0x48(%rsp),%xmm0
  movss  %xmm0,0x6c(%rsp)
  movapd %xmm5,%xmm0
  call   <aceleracion@plt>
  pxor   %xmm0,%xmm0
  mov    0x90(%rsp),%rax
  pxor   %xmm1,%xmm1
  movsd  D21(%rip),%xmm3
  pxor   %xmm5,%xmm5
  pxor   %xmm4,%xmm4
  pxor   %xmm6,%xmm6
  cvtss2sd (%rax),%xmm0
  addsd  %xmm0,%xmm0
  pxor   %xmm2,%xmm2
  pxor   %xmm7,%xmm7
  mov    0x70(%rsp),%rax
  cvtss2sd 0x8(%rbx),%xmm2
  cvtss2sd (%rax),%xmm1
  mov    0xb0(%rsp),%rax
  addsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd (%rax),%xmm1
  addsd  %xmm1,%xmm1
  mov    0xd0(%rsp),%rax
  addsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd (%rax),%xmm1
  mov    0x98(%rsp),%rax
  addsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  mulsd  %xmm3,%xmm0
  cvtsd2ss %xmm0,%xmm5
  pxor   %xmm0,%xmm0
  cvtss2sd (%rax),%xmm0
  mov    0x78(%rsp),%rax
  addsd  %xmm0,%xmm0
  cvtss2sd (%rax),%xmm1
  mov    0xb8(%rsp),%rax
  addsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd (%rax),%xmm1
  addsd  %xmm1,%xmm1
  mov    0xd8(%rsp),%rax
  addsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd (%rax),%xmm1
  mov    0xa0(%rsp),%rax
  addsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  mulsd  %xmm3,%xmm0
  cvtsd2ss %xmm0,%xmm4
  pxor   %xmm0,%xmm0
  cvtss2sd (%rax),%xmm0
  mov    0x80(%rsp),%rax
  addsd  %xmm0,%xmm0
  cvtss2sd (%rax),%xmm1
  mov    0xc0(%rsp),%rax
  addsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd (%rax),%xmm1
  addsd  %xmm1,%xmm1
  mov    0xe0(%rsp),%rax
  addsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd (%rax),%xmm1
  addsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd 0x4(%rbx),%xmm1
  mulsd  %xmm3,%xmm0
  cvtsd2ss %xmm0,%xmm6
  pxor   %xmm0,%xmm0
  cvtss2sd 0x2c(%rsp),%xmm0
  addsd  %xmm0,%xmm0
  addsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd 0x44(%rsp),%xmm1
  addsd  %xmm1,%xmm1
  addsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd 0x5c(%rsp),%xmm1
  addsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  mulsd  %xmm3,%xmm0
  cvtsd2ss %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtss2sd 0x30(%rsp),%xmm0
  addsd  %xmm0,%xmm0
  addsd  %xmm2,%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd 0x48(%rsp),%xmm2
  addsd  %xmm2,%xmm2
  addsd  %xmm2,%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd 0x60(%rsp),%xmm2
  cvtss2sd (%rbx),%xmm7
  mov    0x0(%rbp),%rax
  addsd  %xmm2,%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd 0x28(%rsp),%xmm2
  addsd  %xmm2,%xmm2
  mulsd  %xmm3,%xmm0
  addsd  %xmm7,%xmm2
  pxor   %xmm7,%xmm7
  cvtss2sd 0x40(%rsp),%xmm7
  addsd  %xmm7,%xmm7
  addsd  %xmm7,%xmm2
  pxor   %xmm7,%xmm7
  cvtsd2ss %xmm0,%xmm0
  cvtss2sd 0x58(%rsp),%xmm7
  addsd  %xmm7,%xmm2
  mulsd  %xmm3,%xmm2
  cvtsd2ss %xmm2,%xmm2
  addss  (%r12),%xmm2
  movss  %xmm2,(%rax)
  addss  0x4(%r12),%xmm1
  mov    0x8(%rbp),%rax
  movss  %xmm1,(%rax)
  addss  0x8(%r12),%xmm0
  mov    0x10(%rbp),%rax
  movss  %xmm0,(%rax)
  addss  (%rbx),%xmm5
  mov    0x18(%rbp),%rax
  movss  %xmm5,(%rax)
  addss  0x4(%rbx),%xmm4
  mov    0x20(%rbp),%rax
  movss  %xmm4,(%rax)
  addss  0x8(%rbx),%xmm6
  mov    0x28(%rbp),%rax
  movss  %xmm6,(%rax)
  mov    0xe8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L7
  add    $0xf0,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L7:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: label: D18
datatype: byte[4]
name: extract_symbolic_data
arguments: label: D21
datatype: byte[8]

tool: {"D18": [0x00,0x00,0x00,0x3f]}

tool: {"D21": [0x55,0x55,0x55,0x55,0x55,0x55,0xc5,0x3f]}

assistant: ```c
void rg4th(float *pyv[6], float pos[3], float vel[3], float m, float gamma, float q, float rt) {
  int i;
  float v1[3];
  float r1[3];
  float v2[3];
  float r2[3];
  float v3[3];
  float r3[3];
  float *ace1[3];
  float *ace2[3];
  float *ace3[3];
  float *ace4[3];
  aceleracion(ace1, pos, vel, m, gamma, q, rt);
  for (i = 0; i < 3; i++) {
    v1[i] = vel[i] + *ace1[i] / 2;
    r1[i] = pos[i] + vel[i] / 2;
  }
  aceleracion(ace2, r1, v1, m, gamma, q, rt);
  for (i = 0; i < 3; i++) {
    v2[i] = vel[i] + *ace2[i] / 2;
    r2[i] = pos[i] + v1[i] / 2;
  }
  aceleracion(ace3, r2, v2, m, gamma, q, rt);
  for (i = 0; i < 3; i++) {
    v3[i] = vel[i] + *ace3[i];
    r3[i] = pos[i] + v2[i];
  }
  aceleracion(ace4, r3, v3, m, gamma, q, rt);
  float va[3];
  float ra[3];
  for (i = 0; i < 3; i++) {
    va[i] = (1.0 / 6.0) * (*ace1[i] + 2.0 * (*ace2[i]) + 2.0 * (*ace3[i]) + *ace4[i]);
    ra[i] = (1.0 / 6.0) * (vel[i] + 2.0 * (v1[i]) + 2.0 * (v2[i]) + v3[i]);
  }
  *pyv[0] = pos[0] + ra[0];
  *pyv[1] = pos[1] + ra[1];
  *pyv[2] = pos[2] + ra[2];
  *pyv[3] = vel[0] + va[0];
  *pyv[4] = vel[1] + va[1];
  *pyv[5] = vel[2] + va[2];
}
```