user: 请从给定的汇编指令推导出C源代码:

```asm
<gint2_nai_S_P>:
  endbr64
  push   %r14
  push   %rbp
  push   %rbx
  sub    $0x60,%rsp
  movapd %xmm0,%xmm8
  mov    %rsi,%rbx
  movapd %xmm1,%xmm10
  mov    %rcx,%rbp
  movapd %xmm0,%xmm9
  addsd  %xmm1,%xmm9
  movsd  (%rdi),%xmm1
  movsd  (%rsi),%xmm6
  mulsd  %xmm1,%xmm0
  movapd %xmm10,%xmm2
  mulsd  %xmm6,%xmm2
  addsd  %xmm2,%xmm0
  divsd  %xmm9,%xmm0
  movapd %xmm0,%xmm11
  movsd  0x8(%rdi),%xmm2
  movsd  0x8(%rsi),%xmm5
  movapd %xmm8,%xmm0
  mulsd  %xmm2,%xmm0
  movapd %xmm10,%xmm3
  mulsd  %xmm5,%xmm3
  addsd  %xmm3,%xmm0
  divsd  %xmm9,%xmm0
  movapd %xmm0,%xmm12
  movsd  0x10(%rdi),%xmm0
  movsd  0x10(%rsi),%xmm4
  movapd %xmm8,%xmm3
  mulsd  %xmm0,%xmm3
  movapd %xmm10,%xmm7
  mulsd  %xmm4,%xmm7
  addsd  %xmm7,%xmm3
  movapd %xmm9,%xmm7
  divsd  %xmm9,%xmm3
  subsd  %xmm6,%xmm1
  subsd  %xmm5,%xmm2
  subsd  %xmm4,%xmm0
  movsd  %xmm11,0x18(%rsp)
  movapd %xmm11,%xmm6
  subsd  (%rdx),%xmm6
  movsd  %xmm12,0x20(%rsp)
  movapd %xmm12,%xmm13
  subsd  0x8(%rdx),%xmm13
  movsd  %xmm3,0x28(%rsp)
  movapd %xmm3,%xmm5
  subsd  0x10(%rdx),%xmm5
  movapd %xmm6,%xmm3
  movsd  %xmm6,0x30(%rsp)
  mulsd  %xmm6,%xmm3
  movapd %xmm13,%xmm4
  movsd  %xmm13,0x38(%rsp)
  mulsd  %xmm13,%xmm4
  addsd  %xmm4,%xmm3
  movapd %xmm5,%xmm4
  movsd  %xmm5,0x40(%rsp)
  mulsd  %xmm5,%xmm4
  addsd  %xmm4,%xmm3
  mulsd  %xmm7,%xmm3
  movsd  %xmm3,0x10(%rsp)
  mulsd  %xmm1,%xmm1
  mulsd  %xmm2,%xmm2
  addsd  %xmm2,%xmm1
  mulsd  %xmm0,%xmm0
  addsd  %xmm0,%xmm1
  movsd  %xmm8,0x50(%rsp)
  movapd %xmm8,%xmm5
  xorpd  D6(%rip),%xmm5
  movapd %xmm5,%xmm0
  movsd  %xmm10,0x58(%rsp)
  mulsd  %xmm10,%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm7,0x8(%rsp)
  divsd  %xmm7,%xmm0
  call   <exp@plt>
  divsd  0x8(%rsp),%xmm0
  movapd %xmm0,%xmm7
  mulsd  D30(%rip),%xmm7
  movsd  %xmm7,0x8(%rsp)
  mov    $0x0,%edi
  movsd  0x10(%rsp),%xmm0
  call   <gaux@plt>
  movapd %xmm0,%xmm4
  mulsd  0x8(%rsp),%xmm4
  movsd  %xmm4,0x48(%rsp)
  mov    $0x1,%edi
  movsd  0x10(%rsp),%xmm0
  call   <gaux@plt>
  movapd %xmm0,%xmm7
  mulsd  0x8(%rsp),%xmm7
  movsd  %xmm7,0x8(%rsp)
  movsd  D45(%rip),%xmm1
  movsd  0x50(%rsp),%xmm0
  call   <pow@plt>
  movq   %xmm0,%r14
  movsd  D41(%rip),%xmm1
  movsd  0x58(%rsp),%xmm0
  call   <pow@plt>
  movq   %r14,%xmm3
  mulsd  %xmm3,%xmm0
  mulsd  D31(%rip),%xmm0
  movsd  0x18(%rsp),%xmm1
  subsd  (%rbx),%xmm1
  movsd  0x48(%rsp),%xmm6
  mulsd  %xmm6,%xmm1
  movsd  0x30(%rsp),%xmm2
  movsd  0x8(%rsp),%xmm4
  mulsd  %xmm4,%xmm2
  subsd  %xmm2,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x0(%rbp)
  movsd  0x20(%rsp),%xmm1
  subsd  0x8(%rbx),%xmm1
  mulsd  %xmm6,%xmm1
  movsd  0x38(%rsp),%xmm2
  mulsd  %xmm4,%xmm2
  subsd  %xmm2,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x8(%rbp)
  movsd  0x28(%rsp),%xmm1
  subsd  0x10(%rbx),%xmm1
  mulsd  %xmm6,%xmm1
  movsd  0x40(%rsp),%xmm2
  mulsd  %xmm4,%xmm2
  subsd  %xmm2,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x10(%rbp)
  add    $0x60,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r14
  ret
```

tool_calls: name: parse_data
arguments: label: D6
data_type: byte[16]
name: parse_data
arguments: label: D30
data_type: f64
name: parse_data
arguments: label: D45
data_type: f64
name: parse_data
arguments: label: D41
data_type: f64
name: parse_data
arguments: label: D31
data_type: f64

tool: {"D6": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: D30: 6.28318530717959

tool: D45: 0.75

tool: D41: 1.25

tool: D31: 1.01589817494786

assistant: ```c
void gint2_nai_S_P(double *a, double a_a, double *b, double b_a, double *c, double *out) {
  double ab_a, d_0, d_1, d_2, p_0, p_1, p_2, u_0, u_1, u_2, usq;
  ab_a = a_a + b_a;
  p_0 = (a[0] * a_a + b[0] * b_a) / ab_a;
  p_1 = (a[1] * a_a + b[1] * b_a) / ab_a;
  p_2 = (a[2] * a_a + b[2] * b_a) / ab_a;
  d_0 = a[0] - b[0];
  d_1 = a[1] - b[1];
  d_2 = a[2] - b[2];
  u_0 = p_0 - c[0];
  u_1 = p_1 - c[1];
  u_2 = p_2 - c[2];
  usq = ab_a * (u_0 * u_0 + u_1 * u_1 + u_2 * u_2);
  ab_a = exp(-a_a * b_a * (d_0 * d_0 + d_1 * d_1 + d_2 * d_2) / ab_a) / ab_a;
  d_0 = 6.28318530717959 * ab_a * gaux(usq, 0);
  d_1 = 6.28318530717959 * ab_a * gaux(usq, 1);
  d_2 = pow(a_a, 0.75) * pow(b_a, 1.25);
  out[0] = 1.01589817494786 * d_2 * (d_0 * (p_0 - b[0]) - d_1 * u_0);
  out[1] = 1.01589817494786 * d_2 * (d_0 * (p_1 - b[1]) - d_1 * u_1);
  out[2] = 1.01589817494786 * d_2 * (d_0 * (p_2 - b[2]) - d_1 * u_2);
}
```