user: What would the C source look like for the assembly code provided here:

```asm
<glmGenerateQuaternionMatrix4d>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    -0x60(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  mov    -0x60(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  mov    -0x60(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  mov    -0x60(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  mov    -0x60(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  mov    -0x60(%rbp),%rax
  add    $0x18,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  mov    -0x60(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  mov    -0x60(%rbp),%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  mov    -0x60(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  mov    -0x60(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x60(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  mov    -0x60(%rbp),%rax
  add    $0x18,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  mov    -0x60(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  mov    -0x60(%rbp),%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    -0x60(%rbp),%rax
  add    $0x18,%rax
  movsd  (%rax),%xmm1
  mov    -0x60(%rbp),%rax
  add    $0x18,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  mov    -0x60(%rbp),%rax
  add    $0x18,%rax
  movsd  (%rax),%xmm1
  mov    -0x60(%rbp),%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x28(%rbp),%xmm0
  addsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  %xmm0,%xmm1
  movsd  D11(%rip),%xmm0
  subsd  %xmm1,%xmm0
  mov    -0x58(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0x40(%rbp),%xmm0
  addsd  -0x8(%rbp),%xmm0
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  addsd  %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x38(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  mov    -0x58(%rbp),%rax
  add    $0x10,%rax
  addsd  %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x40(%rbp),%xmm0
  subsd  -0x8(%rbp),%xmm0
  mov    -0x58(%rbp),%rax
  add    $0x20,%rax
  addsd  %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x48(%rbp),%xmm0
  addsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  %xmm0,%xmm1
  mov    -0x58(%rbp),%rax
  add    $0x28,%rax
  movsd  D11(%rip),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x20(%rbp),%xmm0
  addsd  -0x30(%rbp),%xmm0
  mov    -0x58(%rbp),%rax
  add    $0x30,%rax
  addsd  %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x38(%rbp),%xmm0
  addsd  -0x18(%rbp),%xmm0
  mov    -0x58(%rbp),%rax
  add    $0x40,%rax
  addsd  %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x20(%rbp),%xmm0
  subsd  -0x30(%rbp),%xmm0
  mov    -0x58(%rbp),%rax
  add    $0x48,%rax
  addsd  %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x48(%rbp),%xmm0
  addsd  -0x28(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  %xmm0,%xmm1
  mov    -0x58(%rbp),%rax
  add    $0x50,%rax
  movsd  D11(%rip),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x58(%rbp),%rax
  add    $0x70,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x58(%rbp),%rdx
  add    $0x68,%rdx
  movsd  (%rax),%xmm0
  movsd  %xmm0,(%rdx)
  mov    -0x58(%rbp),%rax
  add    $0x60,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x58(%rbp),%rdx
  add    $0x58,%rdx
  movsd  (%rax),%xmm0
  movsd  %xmm0,(%rdx)
  mov    -0x58(%rbp),%rax
  add    $0x38,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x58(%rbp),%rdx
  add    $0x18,%rdx
  movsd  (%rax),%xmm0
  movsd  %xmm0,(%rdx)
  mov    -0x58(%rbp),%rax
  add    $0x78,%rax
  movsd  D11(%rip),%xmm0
  movsd  %xmm0,(%rax)
  nop
  pop    %rbp
  ret
```

tool_calls: name: parse_data
arguments: tag: D11
data_type: f64

tool: D11: 1

assistant: ```c
void glmGenerateQuaternionMatrix4d(double m[16], const double q[4]) {
  double xx = q[1] * q[1];
  double xy = q[1] * q[2];
  double xz = q[1] * q[3];
  double xw = q[1] * q[0];
  double yy = q[2] * q[2];
  double yz = q[2] * q[3];
  double yw = q[2] * q[0];
  double zz = q[3] * q[3];
  double zw = q[3] * q[0];
  m[0] = 1 - 2 * (yy + zz);
  m[1] = 2 * (xy + zw);
  m[2] = 2 * (xz - yw);
  m[4] = 2 * (xy - zw);
  m[5] = 1 - 2 * (xx + zz);
  m[6] = 2 * (yz + xw);
  m[8] = 2 * (xz + yw);
  m[9] = 2 * (yz - xw);
  m[10] = 1 - 2 * (xx + yy);
  m[3] = m[7] = m[11] = m[12] = m[13] = m[14] = 0;
  m[15] = 1;
}
```