user: 请将以下的汇编代码转换成C语言代码:

```asm
<qtoR>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm1
  addss  %xmm0,%xmm1
  mov    -0x10(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  movaps %xmm1,%xmm2
  mulss  %xmm0,%xmm2
  movss  D19(%rip),%xmm0
  movaps %xmm0,%xmm1
  subss  %xmm2,%xmm1
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm2
  addss  %xmm0,%xmm2
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm2
  subss  %xmm2,%xmm1
  movaps %xmm1,%xmm0
  mov    -0x8(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    -0x10(%rbp),%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm1
  addss  %xmm0,%xmm1
  mov    -0x10(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x10(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm2
  addss  %xmm0,%xmm2
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm2
  mov    -0x8(%rbp),%rax
  add    $0x10,%rax
  subss  %xmm2,%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x10(%rbp),%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm1
  addss  %xmm0,%xmm1
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x10(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm2
  addss  %xmm0,%xmm2
  mov    -0x10(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  mov    -0x8(%rbp),%rax
  add    $0x20,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x8(%rbp),%rax
  add    $0x30,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x10(%rbp),%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm1
  addss  %xmm0,%xmm1
  mov    -0x10(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x10(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm2
  addss  %xmm0,%xmm2
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x10(%rbp),%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm1
  addss  %xmm0,%xmm1
  mov    -0x10(%rbp),%rax
  movss  (%rax),%xmm0
  movaps %xmm1,%xmm2
  mulss  %xmm0,%xmm2
  movss  D19(%rip),%xmm0
  movaps %xmm0,%xmm1
  subss  %xmm2,%xmm1
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm2
  addss  %xmm0,%xmm2
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm2
  mov    -0x8(%rbp),%rax
  add    $0x14,%rax
  subss  %xmm2,%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x10(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm1
  addss  %xmm0,%xmm1
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x10(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm2
  addss  %xmm0,%xmm2
  mov    -0x10(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm2
  mov    -0x8(%rbp),%rax
  add    $0x24,%rax
  subss  %xmm2,%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x8(%rbp),%rax
  add    $0x34,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x10(%rbp),%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm1
  addss  %xmm0,%xmm1
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x10(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm2
  addss  %xmm0,%xmm2
  mov    -0x10(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm2
  mov    -0x8(%rbp),%rax
  add    $0x8,%rax
  subss  %xmm2,%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x10(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm1
  addss  %xmm0,%xmm1
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x10(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm2
  addss  %xmm0,%xmm2
  mov    -0x10(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  mov    -0x8(%rbp),%rax
  add    $0x18,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x10(%rbp),%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm1
  addss  %xmm0,%xmm1
  mov    -0x10(%rbp),%rax
  movss  (%rax),%xmm0
  movaps %xmm1,%xmm2
  mulss  %xmm0,%xmm2
  movss  D19(%rip),%xmm0
  movaps %xmm0,%xmm1
  subss  %xmm2,%xmm1
  mov    -0x10(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  movaps %xmm0,%xmm2
  addss  %xmm0,%xmm2
  mov    -0x10(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm2
  mov    -0x8(%rbp),%rax
  add    $0x28,%rax
  subss  %xmm2,%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x8(%rbp),%rax
  add    $0x38,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x8(%rbp),%rax
  add    $0xc,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x8(%rbp),%rax
  add    $0x1c,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x8(%rbp),%rax
  add    $0x2c,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x8(%rbp),%rax
  add    $0x3c,%rax
  movss  D19(%rip),%xmm0
  movss  %xmm0,(%rax)
  nop
  pop    %rbp
  ret
```

tool_calls: name: read_data
arguments: label: D19
datatype: byte[4]

tool: {"D19": [0x00,0x00,0x80,0x3f]}

assistant: ```c
void qtoR(float *R, const float *q) {
  R[(0 + (0 << 2))] = (float)(1 - 2 * q[1] * q[1] - 2 * q[2] * q[2]);
  R[(0 + (1 << 2))] = (float)(2 * q[0] * q[1] - 2 * q[3] * q[2]);
  R[(0 + (2 << 2))] = (float)(2 * q[0] * q[2] + 2 * q[3] * q[1]);
  R[(0 + (3 << 2))] = 0;
  R[(1 + (0 << 2))] = (float)(2 * q[0] * q[1] + 2 * q[3] * q[2]);
  R[(1 + (1 << 2))] = (float)(1 - 2 * q[0] * q[0] - 2 * q[2] * q[2]);
  R[(1 + (2 << 2))] = (float)(2 * q[1] * q[2] - 2 * q[3] * q[0]);
  R[(1 + (3 << 2))] = 0;
  R[(2 + (0 << 2))] = (float)(2 * q[0] * q[2] - 2 * q[3] * q[1]);
  R[(2 + (1 << 2))] = (float)(2 * q[1] * q[2] + 2 * q[3] * q[0]);
  R[(2 + (2 << 2))] = (float)(1 - 2 * q[0] * q[0] - 2 * q[1] * q[1]);
  R[(2 + (3 << 2))] = 0;
  R[(3 + (0 << 2))] = 0;
  R[(3 + (1 << 2))] = 0;
  R[(3 + (2 << 2))] = 0;
  R[(3 + (3 << 2))] = 1;
}
```