user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<mat4_getRotation>:
  endbr64
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  mov    %rsi,%rbx
  sub    $0x8,%rsp
  movss  (%rsi),%xmm2
  movss  0x14(%rsi),%xmm1
  movss  0x28(%rsi),%xmm3
  movaps %xmm2,%xmm0
  addss  %xmm1,%xmm0
  addss  %xmm3,%xmm0
  comiss D1(%rip),%xmm0
  ja     L15
  comiss %xmm1,%xmm2
  pxor   %xmm4,%xmm4
  pxor   %xmm6,%xmm6
  pxor   %xmm5,%xmm5
  cvtss2sd %xmm3,%xmm4
  cvtss2sd %xmm2,%xmm6
  cvtss2sd %xmm1,%xmm5
  ja     L6
L17:
  comiss %xmm3,%xmm1
  jbe    L26
  addsd  D1(%rip),%xmm5
  movapd %xmm5,%xmm0
  subsd  %xmm6,%xmm0
  subsd  %xmm4,%xmm0
  call   <sqrtf@plt>
  pxor   %xmm1,%xmm1
  movss  0x20(%rbx),%xmm0
  subss  0x8(%rbx),%xmm0
  add    %eax,%eax
  cvtsi2ss %eax,%xmm1
  divss  %xmm1,%xmm0
  movss  %xmm0,0xc(%rbp)
  movss  0x4(%rbx),%xmm0
  addss  0x10(%rbx),%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,0x0(%rbp)
  movss  D84(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,0x4(%rbp)
  movss  0x18(%rbx),%xmm0
  addss  0x24(%rbx),%xmm0
  divss  %xmm1,%xmm0
L46:
  movss  %xmm0,0x8(%rbp)
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
L6:
  comiss %xmm3,%xmm2
  jbe    L17
  addsd  D1(%rip),%xmm6
  movapd %xmm6,%xmm0
  subsd  %xmm5,%xmm0
  subsd  %xmm4,%xmm0
  call   <sqrtf@plt>
  pxor   %xmm1,%xmm1
  movss  0x18(%rbx),%xmm0
  subss  0x24(%rbx),%xmm0
  add    %eax,%eax
  cvtsi2ss %eax,%xmm1
  divss  %xmm1,%xmm0
  movss  %xmm0,0xc(%rbp)
  movss  D84(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,0x0(%rbp)
  movss  0x4(%rbx),%xmm0
  addss  0x10(%rbx),%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,0x4(%rbp)
  movss  0x20(%rbx),%xmm0
  addss  0x8(%rbx),%xmm0
  divss  %xmm1,%xmm0
  jmp    L46
  nopl   0x0(%rax,%rax,1)
L15:
  cvtss2sd %xmm0,%xmm0
  addsd  D1(%rip),%xmm0
  call   <sqrtf@plt>
  pxor   %xmm1,%xmm1
  movss  D84(%rip),%xmm0
  add    %eax,%eax
  cvtsi2ss %eax,%xmm1
  mulss  %xmm1,%xmm0
  movss  %xmm0,0xc(%rbp)
  movss  0x18(%rbx),%xmm0
  subss  0x24(%rbx),%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,0x0(%rbp)
  movss  0x20(%rbx),%xmm0
  subss  0x8(%rbx),%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,0x4(%rbp)
  movss  0x4(%rbx),%xmm0
  subss  0x10(%rbx),%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,0x8(%rbp)
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
  nopl   0x0(%rax)
L26:
  addsd  D1(%rip),%xmm4
  movapd %xmm4,%xmm0
  subsd  %xmm6,%xmm0
  subsd  %xmm5,%xmm0
  call   <sqrtf@plt>
  pxor   %xmm0,%xmm0
  movss  0x4(%rbx),%xmm1
  subss  0x10(%rbx),%xmm1
  add    %eax,%eax
  cvtsi2ss %eax,%xmm0
  divss  %xmm0,%xmm1
  movss  %xmm1,0xc(%rbp)
  movss  0x20(%rbx),%xmm1
  addss  0x8(%rbx),%xmm1
  divss  %xmm0,%xmm1
  movss  %xmm1,0x0(%rbp)
  movss  0x18(%rbx),%xmm1
  addss  0x24(%rbx),%xmm1
  divss  %xmm0,%xmm1
  mulss  D84(%rip),%xmm0
  movss  %xmm0,0x8(%rbp)
  movss  %xmm1,0x4(%rbp)
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
```

tool_calls: name: retrieve_data
arguments: tag: D1
type: f64
name: retrieve_data
arguments: tag: D84
type: f32

tool: D1: 1

tool: D84: 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;
  }
}
```