user: Demonstrate the C code that generates the assembly output below:

```asm
<logarithmic_gradient>:
  endbr64
  sub    $0x68,%rsp
  movsd  0x28(%rdi),%xmm5
  movsd  (%rsi),%xmm2
  movsd  0x8(%rsi),%xmm3
  movsd  0x30(%rdi),%xmm1
  movapd %xmm5,%xmm4
  movsd  0x10(%rsi),%xmm0
  movsd  0x40(%rdi),%xmm7
  movapd %xmm2,%xmm6
  mulsd  %xmm2,%xmm4
  mulsd  %xmm3,%xmm1
  mulsd  %xmm7,%xmm6
  addsd  %xmm4,%xmm1
  movsd  0x38(%rdi),%xmm4
  mulsd  %xmm0,%xmm4
  addsd  %xmm4,%xmm1
  movsd  0x48(%rdi),%xmm4
  mulsd  %xmm3,%xmm4
  mulsd  0x60(%rdi),%xmm3
  movapd %xmm1,%xmm13
  mulsd  %xmm1,%xmm13
  addsd  %xmm6,%xmm4
  movsd  0x50(%rdi),%xmm6
  mulsd  %xmm0,%xmm6
  mulsd  0x68(%rdi),%xmm0
  addsd  %xmm6,%xmm4
  movsd  0x58(%rdi),%xmm6
  mulsd  %xmm6,%xmm2
  movapd %xmm4,%xmm12
  mulsd  %xmm4,%xmm12
  addsd  %xmm2,%xmm3
  pxor   %xmm2,%xmm2
  addsd  %xmm0,%xmm3
  movapd %xmm13,%xmm0
  addsd  %xmm12,%xmm0
  movapd %xmm3,%xmm11
  mulsd  %xmm3,%xmm11
  addsd  %xmm11,%xmm0
  ucomisd %xmm0,%xmm2
  ja     L18
L7:
  movsd  0x10(%rdi),%xmm10
  movsd  0x18(%rdi),%xmm9
  movsd  0x20(%rdi),%xmm8
  movsd  0x8(%rdi),%xmm2
  mulsd  %xmm10,%xmm10
  movsd  (%rdi),%xmm0
  mulsd  %xmm9,%xmm9
  mulsd  %xmm8,%xmm8
  mulsd  %xmm2,%xmm2
  mulsd  %xmm0,%xmm0
  divsd  %xmm10,%xmm13
  divsd  %xmm9,%xmm12
  addsd  %xmm13,%xmm2
  divsd  %xmm8,%xmm11
  addsd  %xmm12,%xmm2
  addsd  %xmm11,%xmm2
  divsd  %xmm2,%xmm0
  mulsd  %xmm0,%xmm1
  mulsd  %xmm0,%xmm4
  mulsd  %xmm3,%xmm0
  divsd  %xmm10,%xmm1
  divsd  %xmm9,%xmm4
  mulsd  %xmm1,%xmm5
  divsd  %xmm8,%xmm0
  mulsd  %xmm4,%xmm7
  addsd  %xmm7,%xmm5
  mulsd  %xmm0,%xmm6
  addsd  %xmm6,%xmm5
  movsd  %xmm5,(%rdx)
  movsd  0x30(%rdi),%xmm2
  movsd  0x48(%rdi),%xmm3
  mulsd  %xmm1,%xmm2
  mulsd  %xmm4,%xmm3
  addsd  %xmm3,%xmm2
  movsd  0x60(%rdi),%xmm3
  mulsd  %xmm0,%xmm3
  addsd  %xmm3,%xmm2
  movsd  %xmm2,0x8(%rdx)
  mulsd  0x38(%rdi),%xmm1
  mulsd  0x50(%rdi),%xmm4
  mulsd  0x68(%rdi),%xmm0
  addsd  %xmm4,%xmm1
  addsd  %xmm0,%xmm1
  movsd  %xmm1,0x10(%rdx)
  add    $0x68,%rsp
  ret
L18:
  mov    %rdx,0x58(%rsp)
  mov    %rdi,0x50(%rsp)
  movsd  %xmm3,0x48(%rsp)
  movsd  %xmm4,0x40(%rsp)
  movsd  %xmm1,0x38(%rsp)
  movsd  %xmm11,0x30(%rsp)
  movsd  %xmm12,0x28(%rsp)
  movsd  %xmm13,0x20(%rsp)
  movsd  %xmm6,0x18(%rsp)
  movsd  %xmm7,0x10(%rsp)
  movsd  %xmm5,0x8(%rsp)
  call   <sqrt@plt>
  mov    0x58(%rsp),%rdx
  mov    0x50(%rsp),%rdi
  movsd  0x48(%rsp),%xmm3
  movsd  0x40(%rsp),%xmm4
  movsd  0x38(%rsp),%xmm1
  movsd  0x30(%rsp),%xmm11
  movsd  0x28(%rsp),%xmm12
  movsd  0x20(%rsp),%xmm13
  movsd  0x18(%rsp),%xmm6
  movsd  0x10(%rsp),%xmm7
  movsd  0x8(%rsp),%xmm5
  jmp    L7
```

assistant: ```c
void logarithmic_gradient(double *pars, double *r, double *grad) {
  double x, y, z, _r, _r2, ax, ay, az, fac;
  x = pars[5] * r[0] + pars[6] * r[1] + pars[7] * r[2];
  y = pars[8] * r[0] + pars[9] * r[1] + pars[10] * r[2];
  z = pars[11] * r[0] + pars[12] * r[1] + pars[13] * r[2];
  _r2 = x * x + y * y + z * z;
  _r = sqrt(_r2);
  fac = pars[0] * pars[0] / (pars[1] * pars[1] + x * x / (pars[2] * pars[2]) + y * y / (pars[3] * pars[3]) + z * z / (pars[4] * pars[4]));
  ax = fac * x / (pars[2] * pars[2]);
  ay = fac * y / (pars[3] * pars[3]);
  az = fac * z / (pars[4] * pars[4]);
  grad[0] = pars[5] * ax + pars[8] * ay + pars[11] * az;
  grad[1] = pars[6] * ax + pars[9] * ay + pars[12] * az;
  grad[2] = pars[7] * ax + pars[10] * ay + pars[13] * az;
}
```