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

```asm
<Mat4_RotateRByQuaternion>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x50(%rbp),%rax
  movss  (%rax),%xmm0
  movss  D20(%rip),%xmm1
  xorps  %xmm1,%xmm0
  movss  %xmm0,-0x30(%rbp)
  mov    -0x50(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  movss  D20(%rip),%xmm1
  xorps  %xmm1,%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    -0x50(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  movss  D20(%rip),%xmm1
  xorps  %xmm1,%xmm0
  movss  %xmm0,-0x28(%rbp)
  mov    -0x50(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x24(%rbp)
  mov    -0x48(%rbp),%rax
  mov    %rax,-0x38(%rbp)
  mov    -0x50(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm1
  mov    -0x38(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x50(%rbp),%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x50(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  mov    -0x50(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x20(%rbp)
  mov    -0x50(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm1
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x50(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x50(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  mov    -0x50(%rbp),%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x1c(%rbp)
  mov    -0x50(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm1
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x50(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x50(%rbp),%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  mov    -0x50(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  movss  (%rax),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x18(%rbp)
  mov    -0x50(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm1
  mov    -0x38(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  mov    -0x50(%rbp),%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  movss  (%rax),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  mov    -0x50(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  mov    -0x50(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x14(%rbp)
  movss  -0x14(%rbp),%xmm1
  movss  -0x30(%rbp),%xmm0
  mulss  %xmm0,%xmm1
  movss  -0x20(%rbp),%xmm2
  movss  -0x24(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  movss  -0x1c(%rbp),%xmm2
  movss  -0x28(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  movss  -0x18(%rbp),%xmm2
  movss  -0x2c(%rbp),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  mov    -0x38(%rbp),%rax
  movss  %xmm0,(%rax)
  movss  -0x14(%rbp),%xmm1
  movss  -0x2c(%rbp),%xmm0
  mulss  %xmm0,%xmm1
  movss  -0x1c(%rbp),%xmm2
  movss  -0x24(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  movss  -0x18(%rbp),%xmm2
  movss  -0x30(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  movss  -0x20(%rbp),%xmm2
  movss  -0x28(%rbp),%xmm1
  mulss  %xmm2,%xmm1
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x14(%rbp),%xmm1
  movss  -0x28(%rbp),%xmm0
  mulss  %xmm0,%xmm1
  movss  -0x18(%rbp),%xmm2
  movss  -0x24(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  movss  -0x20(%rbp),%xmm2
  movss  -0x2c(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  movss  -0x1c(%rbp),%xmm2
  movss  -0x30(%rbp),%xmm1
  mulss  %xmm2,%xmm1
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x14(%rbp),%xmm1
  movss  -0x24(%rbp),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x20(%rbp),%xmm2
  movss  -0x30(%rbp),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  -0x1c(%rbp),%xmm2
  movss  -0x2c(%rbp),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  -0x18(%rbp),%xmm2
  movss  -0x28(%rbp),%xmm1
  mulss  %xmm2,%xmm1
  mov    -0x38(%rbp),%rax
  add    $0xc,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x48(%rbp),%rax
  add    $0xc,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x10,%rax
  mov    %rax,-0x38(%rbp)
  mov    -0x50(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm1
  mov    -0x38(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x50(%rbp),%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x50(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  mov    -0x50(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x20(%rbp)
  mov    -0x50(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm1
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x50(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x50(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  mov    -0x50(%rbp),%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x1c(%rbp)
  mov    -0x50(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm1
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x50(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x50(%rbp),%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  mov    -0x50(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  movss  (%rax),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x18(%rbp)
  mov    -0x50(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm1
  mov    -0x38(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  mov    -0x50(%rbp),%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  movss  (%rax),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  mov    -0x50(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  mov    -0x50(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x14(%rbp)
  movss  -0x14(%rbp),%xmm1
  movss  -0x30(%rbp),%xmm0
  mulss  %xmm0,%xmm1
  movss  -0x20(%rbp),%xmm2
  movss  -0x24(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  movss  -0x1c(%rbp),%xmm2
  movss  -0x28(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  movss  -0x18(%rbp),%xmm2
  movss  -0x2c(%rbp),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  mov    -0x38(%rbp),%rax
  movss  %xmm0,(%rax)
  movss  -0x14(%rbp),%xmm1
  movss  -0x2c(%rbp),%xmm0
  mulss  %xmm0,%xmm1
  movss  -0x1c(%rbp),%xmm2
  movss  -0x24(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  movss  -0x18(%rbp),%xmm2
  movss  -0x30(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  movss  -0x20(%rbp),%xmm2
  movss  -0x28(%rbp),%xmm1
  mulss  %xmm2,%xmm1
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x14(%rbp),%xmm1
  movss  -0x28(%rbp),%xmm0
  mulss  %xmm0,%xmm1
  movss  -0x18(%rbp),%xmm2
  movss  -0x24(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  movss  -0x20(%rbp),%xmm2
  movss  -0x2c(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  movss  -0x1c(%rbp),%xmm2
  movss  -0x30(%rbp),%xmm1
  mulss  %xmm2,%xmm1
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x14(%rbp),%xmm1
  movss  -0x24(%rbp),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x20(%rbp),%xmm2
  movss  -0x30(%rbp),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  -0x1c(%rbp),%xmm2
  movss  -0x2c(%rbp),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  -0x18(%rbp),%xmm2
  movss  -0x28(%rbp),%xmm1
  mulss  %xmm2,%xmm1
  mov    -0x38(%rbp),%rax
  add    $0xc,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x1c,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x20,%rax
  mov    %rax,-0x38(%rbp)
  mov    -0x50(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm1
  mov    -0x38(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x50(%rbp),%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x50(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  mov    -0x50(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x20(%rbp)
  mov    -0x50(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm1
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x50(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x50(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  mov    -0x50(%rbp),%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x1c(%rbp)
  mov    -0x50(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm1
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x50(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x50(%rbp),%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  mov    -0x50(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  movss  (%rax),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x18(%rbp)
  mov    -0x50(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm1
  mov    -0x38(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  mov    -0x50(%rbp),%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  movss  (%rax),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  mov    -0x50(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  mov    -0x50(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm2
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x14(%rbp)
  movss  -0x14(%rbp),%xmm1
  movss  -0x30(%rbp),%xmm0
  mulss  %xmm0,%xmm1
  movss  -0x20(%rbp),%xmm2
  movss  -0x24(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  movss  -0x1c(%rbp),%xmm2
  movss  -0x28(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  movss  -0x18(%rbp),%xmm2
  movss  -0x2c(%rbp),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  mov    -0x38(%rbp),%rax
  movss  %xmm0,(%rax)
  movss  -0x14(%rbp),%xmm1
  movss  -0x2c(%rbp),%xmm0
  mulss  %xmm0,%xmm1
  movss  -0x1c(%rbp),%xmm2
  movss  -0x24(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  movss  -0x18(%rbp),%xmm2
  movss  -0x30(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  movss  -0x20(%rbp),%xmm2
  movss  -0x28(%rbp),%xmm1
  mulss  %xmm2,%xmm1
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x14(%rbp),%xmm1
  movss  -0x28(%rbp),%xmm0
  mulss  %xmm0,%xmm1
  movss  -0x18(%rbp),%xmm2
  movss  -0x24(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  movss  -0x20(%rbp),%xmm2
  movss  -0x2c(%rbp),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  movss  -0x1c(%rbp),%xmm2
  movss  -0x30(%rbp),%xmm1
  mulss  %xmm2,%xmm1
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x14(%rbp),%xmm1
  movss  -0x24(%rbp),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x20(%rbp),%xmm2
  movss  -0x30(%rbp),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  -0x1c(%rbp),%xmm2
  movss  -0x2c(%rbp),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  -0x18(%rbp),%xmm2
  movss  -0x28(%rbp),%xmm1
  mulss  %xmm2,%xmm1
  mov    -0x38(%rbp),%rax
  add    $0xc,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x2c,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L4
  call   <__stack_chk_fail@plt>
L4:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D20
type: byte[4]

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

assistant: ```c
void Mat4_RotateRByQuaternion(float mat[16], const float q[4]) {
  float qt[4], *v, buf[4];
  {
    (qt)[0] = -(q)[0];
    (qt)[1] = -(q)[1];
    (qt)[2] = -(q)[2];
    (qt)[3] = (q)[3];
  };
  v = mat + 0;
  {
    (buf)[0] = (q)[3] * (v)[0] + (q)[0] * (v)[3] + (q)[1] * (v)[2] - (q)[2] * (v)[1];
    (buf)[1] = (q)[3] * (v)[1] + (q)[1] * (v)[3] + (q)[2] * (v)[0] - (q)[0] * (v)[2];
    (buf)[2] = (q)[3] * (v)[2] + (q)[2] * (v)[3] + (q)[0] * (v)[1] - (q)[1] * (v)[0];
    (buf)[3] = (q)[3] * (v)[3] - (q)[0] * (v)[0] - (q)[1] * (v)[1] - (q)[2] * (v)[2];
  };
  {
    (v)[0] = (buf)[3] * (qt)[0] + (buf)[0] * (qt)[3] + (buf)[1] * (qt)[2] - (buf)[2] * (qt)[1];
    (v)[1] = (buf)[3] * (qt)[1] + (buf)[1] * (qt)[3] + (buf)[2] * (qt)[0] - (buf)[0] * (qt)[2];
    (v)[2] = (buf)[3] * (qt)[2] + (buf)[2] * (qt)[3] + (buf)[0] * (qt)[1] - (buf)[1] * (qt)[0];
    (v)[3] = (buf)[3] * (qt)[3] - (buf)[0] * (qt)[0] - (buf)[1] * (qt)[1] - (buf)[2] * (qt)[2];
  };
  mat[0 + 3] = 0.0f;
  v = mat + 4;
  {
    (buf)[0] = (q)[3] * (v)[0] + (q)[0] * (v)[3] + (q)[1] * (v)[2] - (q)[2] * (v)[1];
    (buf)[1] = (q)[3] * (v)[1] + (q)[1] * (v)[3] + (q)[2] * (v)[0] - (q)[0] * (v)[2];
    (buf)[2] = (q)[3] * (v)[2] + (q)[2] * (v)[3] + (q)[0] * (v)[1] - (q)[1] * (v)[0];
    (buf)[3] = (q)[3] * (v)[3] - (q)[0] * (v)[0] - (q)[1] * (v)[1] - (q)[2] * (v)[2];
  };
  {
    (v)[0] = (buf)[3] * (qt)[0] + (buf)[0] * (qt)[3] + (buf)[1] * (qt)[2] - (buf)[2] * (qt)[1];
    (v)[1] = (buf)[3] * (qt)[1] + (buf)[1] * (qt)[3] + (buf)[2] * (qt)[0] - (buf)[0] * (qt)[2];
    (v)[2] = (buf)[3] * (qt)[2] + (buf)[2] * (qt)[3] + (buf)[0] * (qt)[1] - (buf)[1] * (qt)[0];
    (v)[3] = (buf)[3] * (qt)[3] - (buf)[0] * (qt)[0] - (buf)[1] * (qt)[1] - (buf)[2] * (qt)[2];
  };
  mat[4 + 3] = 0.0f;
  v = mat + 8;
  {
    (buf)[0] = (q)[3] * (v)[0] + (q)[0] * (v)[3] + (q)[1] * (v)[2] - (q)[2] * (v)[1];
    (buf)[1] = (q)[3] * (v)[1] + (q)[1] * (v)[3] + (q)[2] * (v)[0] - (q)[0] * (v)[2];
    (buf)[2] = (q)[3] * (v)[2] + (q)[2] * (v)[3] + (q)[0] * (v)[1] - (q)[1] * (v)[0];
    (buf)[3] = (q)[3] * (v)[3] - (q)[0] * (v)[0] - (q)[1] * (v)[1] - (q)[2] * (v)[2];
  };
  {
    (v)[0] = (buf)[3] * (qt)[0] + (buf)[0] * (qt)[3] + (buf)[1] * (qt)[2] - (buf)[2] * (qt)[1];
    (v)[1] = (buf)[3] * (qt)[1] + (buf)[1] * (qt)[3] + (buf)[2] * (qt)[0] - (buf)[0] * (qt)[2];
    (v)[2] = (buf)[3] * (qt)[2] + (buf)[2] * (qt)[3] + (buf)[0] * (qt)[1] - (buf)[1] * (qt)[0];
    (v)[3] = (buf)[3] * (qt)[3] - (buf)[0] * (qt)[0] - (buf)[1] * (qt)[1] - (buf)[2] * (qt)[2];
  };
  mat[8 + 3] = 0.0f;
}
```