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

```asm
<mat4_getRotation>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  movss  (%rax),%xmm1
  mov    -0x20(%rbp),%rax
  add    $0x14,%rax
  movss  (%rax),%xmm0
  addss  %xmm0,%xmm1
  mov    -0x20(%rbp),%rax
  add    $0x28,%rax
  movss  (%rax),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x4(%rbp)
  movss  -0x8(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comiss %xmm1,%xmm0
  jbe    L51
  pxor   %xmm1,%xmm1
  cvtss2sd -0x8(%rbp),%xmm1
  movsd  D74(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <sqrtf@plt>
  add    %eax,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x4(%rbp)
  mov    -0x18(%rbp),%rax
  add    $0xc,%rax
  movss  -0x4(%rbp),%xmm1
  movss  D40(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0x18,%rax
  movss  (%rax),%xmm0
  mov    -0x20(%rbp),%rax
  add    $0x24,%rax
  movss  (%rax),%xmm1
  subss  %xmm1,%xmm0
  divss  -0x4(%rbp),%xmm0
  mov    -0x18(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0x20,%rax
  movss  (%rax),%xmm0
  mov    -0x20(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm1
  subss  %xmm1,%xmm0
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  divss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mov    -0x20(%rbp),%rax
  add    $0x10,%rax
  movss  (%rax),%xmm1
  subss  %xmm1,%xmm0
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  divss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  jmp    L56
L51:
  mov    -0x20(%rbp),%rax
  movss  (%rax),%xmm0
  mov    -0x20(%rbp),%rax
  add    $0x14,%rax
  movss  (%rax),%xmm1
  comiss %xmm1,%xmm0
  jbe    L18
  mov    -0x20(%rbp),%rax
  movss  (%rax),%xmm0
  mov    -0x20(%rbp),%rax
  add    $0x28,%rax
  movss  (%rax),%xmm1
  comiss %xmm1,%xmm0
  jbe    L18
  mov    -0x20(%rbp),%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D74(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mov    -0x20(%rbp),%rax
  add    $0x14,%rax
  movss  (%rax),%xmm1
  cvtss2sd %xmm1,%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x20(%rbp),%rax
  add    $0x28,%rax
  movss  (%rax),%xmm1
  cvtss2sd %xmm1,%xmm1
  subsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrtf@plt>
  add    %eax,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x4(%rbp)
  mov    -0x20(%rbp),%rax
  add    $0x18,%rax
  movss  (%rax),%xmm0
  mov    -0x20(%rbp),%rax
  add    $0x24,%rax
  movss  (%rax),%xmm1
  subss  %xmm1,%xmm0
  mov    -0x18(%rbp),%rax
  add    $0xc,%rax
  divss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  movss  -0x4(%rbp),%xmm1
  movss  D40(%rip),%xmm0
  mulss  %xmm1,%xmm0
  mov    -0x18(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm1
  mov    -0x20(%rbp),%rax
  add    $0x10,%rax
  movss  (%rax),%xmm0
  addss  %xmm1,%xmm0
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  divss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0x20,%rax
  movss  (%rax),%xmm1
  mov    -0x20(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  addss  %xmm1,%xmm0
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  divss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  jmp    L56
L18:
  mov    -0x20(%rbp),%rax
  add    $0x14,%rax
  movss  (%rax),%xmm0
  mov    -0x20(%rbp),%rax
  add    $0x28,%rax
  movss  (%rax),%xmm1
  comiss %xmm1,%xmm0
  jbe    L64
  mov    -0x20(%rbp),%rax
  add    $0x14,%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D74(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mov    -0x20(%rbp),%rax
  movss  (%rax),%xmm1
  cvtss2sd %xmm1,%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x20(%rbp),%rax
  add    $0x28,%rax
  movss  (%rax),%xmm1
  cvtss2sd %xmm1,%xmm1
  subsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrtf@plt>
  add    %eax,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x4(%rbp)
  mov    -0x20(%rbp),%rax
  add    $0x20,%rax
  movss  (%rax),%xmm0
  mov    -0x20(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm1
  subss  %xmm1,%xmm0
  mov    -0x18(%rbp),%rax
  add    $0xc,%rax
  divss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm1
  mov    -0x20(%rbp),%rax
  add    $0x10,%rax
  movss  (%rax),%xmm0
  addss  %xmm1,%xmm0
  divss  -0x4(%rbp),%xmm0
  mov    -0x18(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  movss  -0x4(%rbp),%xmm1
  movss  D40(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0x18,%rax
  movss  (%rax),%xmm1
  mov    -0x20(%rbp),%rax
  add    $0x24,%rax
  movss  (%rax),%xmm0
  addss  %xmm1,%xmm0
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  divss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  jmp    L56
L64:
  mov    -0x20(%rbp),%rax
  add    $0x28,%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D74(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mov    -0x20(%rbp),%rax
  movss  (%rax),%xmm1
  cvtss2sd %xmm1,%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x20(%rbp),%rax
  add    $0x14,%rax
  movss  (%rax),%xmm1
  cvtss2sd %xmm1,%xmm1
  subsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrtf@plt>
  add    %eax,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x4(%rbp)
  mov    -0x20(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mov    -0x20(%rbp),%rax
  add    $0x10,%rax
  movss  (%rax),%xmm1
  subss  %xmm1,%xmm0
  mov    -0x18(%rbp),%rax
  add    $0xc,%rax
  divss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0x20,%rax
  movss  (%rax),%xmm1
  mov    -0x20(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  addss  %xmm1,%xmm0
  divss  -0x4(%rbp),%xmm0
  mov    -0x18(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0x18,%rax
  movss  (%rax),%xmm1
  mov    -0x20(%rbp),%rax
  add    $0x24,%rax
  movss  (%rax),%xmm0
  addss  %xmm1,%xmm0
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  divss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  movss  -0x4(%rbp),%xmm1
  movss  D40(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
L56:
  nop
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D74
datatype: f64
name: parse_data
arguments: label: D40
datatype: f32

tool: D74: 1

tool: D40: 0.25

assistant: ```c
void mat4_getRotation(float *dst, float *mat) {
  float trace = mat[0] + mat[5] + mat[10];
  float S = 0;
  if (trace > 0) {
    S = sqrtf(trace + 1.0) * 2;
    dst[3] = 0.25 * S;
    dst[0] = (mat[6] - mat[9]) / S;
    dst[1] = (mat[8] - mat[2]) / S;
    dst[2] = (mat[1] - mat[4]) / S;
  } else if ((mat[0] > mat[5]) && (mat[0] > mat[10])) {
    S = sqrtf(1.0 + mat[0] - mat[5] - mat[10]) * 2;
    dst[3] = (mat[6] - mat[9]) / S;
    dst[0] = 0.25 * S;
    dst[1] = (mat[1] + mat[4]) / S;
    dst[2] = (mat[8] + mat[2]) / S;
  } else if (mat[5] > mat[10]) {
    S = sqrtf(1.0 + mat[5] - mat[0] - mat[10]) * 2;
    dst[3] = (mat[8] - mat[2]) / S;
    dst[0] = (mat[1] + mat[4]) / S;
    dst[1] = 0.25 * S;
    dst[2] = (mat[6] + mat[9]) / S;
  } else {
    S = sqrtf(1.0 + mat[10] - mat[0] - mat[5]) * 2;
    dst[3] = (mat[1] - mat[4]) / S;
    dst[0] = (mat[8] + mat[2]) / S;
    dst[1] = (mat[6] + mat[9]) / S;
    dst[2] = 0.25 * S;
  }
}
```