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

```asm
<fromToRotation>:
  endbr64
  movss  0x4(%rdi),%xmm3
  movss  (%rdi),%xmm4
  movss  0x8(%rdi),%xmm1
  movss  (%rsi),%xmm8
  movaps %xmm4,%xmm5
  movaps %xmm3,%xmm2
  movaps %xmm3,%xmm6
  movss  0x4(%rsi),%xmm0
  unpcklps %xmm1,%xmm5
  unpcklps %xmm1,%xmm2
  unpcklps %xmm4,%xmm6
  movss  0x8(%rsi),%xmm10
  movlhps %xmm5,%xmm2
  movaps %xmm1,%xmm5
  movaps %xmm4,%xmm9
  unpcklps %xmm4,%xmm5
  unpcklps %xmm3,%xmm9
  movaps %xmm3,%xmm7
  mulss  %xmm0,%xmm7
  movlhps %xmm6,%xmm5
  movaps %xmm1,%xmm6
  unpcklps %xmm3,%xmm6
  movlhps %xmm6,%xmm9
  movaps %xmm8,%xmm6
  mulss  %xmm4,%xmm6
  addss  %xmm7,%xmm6
  movaps %xmm10,%xmm7
  mulss  %xmm1,%xmm7
  addss  %xmm7,%xmm6
  pxor   %xmm7,%xmm7
  cvtss2sd %xmm6,%xmm7
  comisd D31(%rip),%xmm7
  ja     L6
  movsd  D24(%rip),%xmm11
  comisd %xmm7,%xmm11
  jbe    L48
  movaps %xmm1,%xmm12
  push   %rbx
  movaps %xmm3,%xmm13
  pxor   %xmm7,%xmm7
  mulss  %xmm1,%xmm12
  movaps %xmm3,%xmm0
  mulss  %xmm3,%xmm13
  sub    $0xb0,%rsp
  movsd  D26(%rip),%xmm6
  movss  D88(%rip),%xmm11
  xorps  %xmm11,%xmm0
  movss  %xmm12,0x48(%rsp)
  addss  %xmm7,%xmm12
  movd   %xmm0,%ebx
  movaps %xmm12,%xmm0
  addss  %xmm13,%xmm0
  cvtss2sd %xmm0,%xmm0
  comisd %xmm0,%xmm6
  ja     L20
  movd   %ebx,%xmm10
  movaps %xmm1,%xmm8
  movaps %xmm7,%xmm6
L33:
  movaps %xmm8,%xmm7
  movaps %xmm6,%xmm14
  unpcklps %xmm8,%xmm7
  unpcklps %xmm8,%xmm14
  movaps %xmm7,%xmm15
  movaps %xmm8,%xmm7
  movlhps %xmm14,%xmm15
  unpcklps %xmm10,%xmm7
  movaps %xmm15,0x20(%rsp)
  movaps %xmm10,%xmm15
  movaps %xmm7,%xmm12
  unpcklps %xmm10,%xmm15
  movlhps %xmm15,%xmm12
  movaps %xmm10,%xmm15
  unpcklps %xmm8,%xmm15
  movaps %xmm12,0x30(%rsp)
  movaps %xmm14,%xmm12
  movaps %xmm8,%xmm14
  movlhps %xmm15,%xmm12
  movaps %xmm10,%xmm15
  unpcklps %xmm6,%xmm14
  unpcklps %xmm6,%xmm15
  movaps %xmm12,0x10(%rsp)
  movaps %xmm15,%xmm12
  movlhps %xmm14,%xmm12
  movaps %xmm6,%xmm14
  unpcklps %xmm10,%xmm14
  movaps %xmm12,(%rsp)
  movlhps %xmm14,%xmm7
  pxor   %xmm14,%xmm14
  ucomisd %xmm0,%xmm14
  ja     L7
  sqrtsd %xmm0,%xmm0
L23:
  movsd  D34(%rip),%xmm15
  movaps %xmm1,%xmm12
  divsd  %xmm0,%xmm15
  movaps (%rsp),%xmm0
  cvtsd2ss %xmm15,%xmm15
  mulss  %xmm15,%xmm8
  movaps %xmm15,%xmm14
  shufps $0x0,%xmm14,%xmm14
  mulss  %xmm15,%xmm10
  mulps  %xmm14,%xmm7
  mulps  %xmm14,%xmm0
  mulss  %xmm15,%xmm6
  mulss  %xmm8,%xmm12
  mulss  %xmm3,%xmm10
  mulps  %xmm7,%xmm5
  shufps $0x55,%xmm7,%xmm7
  mulps  %xmm2,%xmm0
  mulss  %xmm4,%xmm8
  mulss  %xmm7,%xmm7
  movaps %xmm12,%xmm15
  subss  %xmm10,%xmm15
  movaps %xmm4,%xmm10
  xorps  %xmm11,%xmm10
  xorps  %xmm6,%xmm11
  subps  %xmm0,%xmm5
  mulss  %xmm3,%xmm6
  movd   %xmm11,%eax
  movaps %xmm15,%xmm11
  shufps $0x0,%xmm11,%xmm11
  mulps  %xmm5,%xmm11
  movaps %xmm5,%xmm2
  movaps %xmm5,%xmm0
  unpckhps %xmm5,%xmm2
  shufps $0x55,%xmm5,%xmm0
  movaps %xmm10,%xmm5
  shufps $0x0,%xmm5,%xmm5
  mulps  %xmm9,%xmm5
  movaps 0x10(%rsp),%xmm9
  subss  %xmm8,%xmm6
  mulss  %xmm1,%xmm10
  mulps  %xmm14,%xmm9
  mulss  %xmm15,%xmm6
  addps  %xmm11,%xmm5
  movd   %eax,%xmm11
  shufps $0x0,%xmm11,%xmm11
  mulps  %xmm9,%xmm11
  movd   %ebx,%xmm9
  mulss  %xmm1,%xmm9
  movaps 0x20(%rsp),%xmm1
  addss  %xmm10,%xmm6
  mulps  %xmm14,%xmm1
  mulps  0x30(%rsp),%xmm14
  addps  %xmm11,%xmm5
  movaps %xmm0,%xmm11
  mulss  %xmm2,%xmm11
  mulss  %xmm0,%xmm0
  mulss  %xmm2,%xmm2
  movups %xmm5,(%rdx)
  mulps  %xmm14,%xmm1
  subss  0x48(%rsp),%xmm2
  addss  %xmm11,%xmm9
  subss  %xmm13,%xmm0
  movaps %xmm2,%xmm4
  subss  %xmm7,%xmm4
  unpcklps %xmm9,%xmm6
  unpcklps %xmm9,%xmm0
  movlhps %xmm6,%xmm0
  movss  %xmm4,0x20(%rdx)
  subps  %xmm1,%xmm0
  movups %xmm0,0x10(%rdx)
  add    $0xb0,%rsp
  pop    %rbx
  ret
  xchg   %ax,%ax
L6:
  movss  D87(%rip),%xmm0
  movss  D87(%rip),%xmm4
  movaps %xmm0,%xmm5
  movups %xmm0,0x10(%rdx)
  movups %xmm5,(%rdx)
  movss  %xmm4,0x20(%rdx)
  ret
L48:
  movaps %xmm3,%xmm2
  movaps %xmm1,%xmm5
  mulss  %xmm0,%xmm5
  mulss  %xmm10,%xmm2
  mulss  %xmm8,%xmm1
  mulss  %xmm4,%xmm10
  mulss  %xmm8,%xmm3
  mulss  %xmm0,%xmm4
  movsd  D34(%rip),%xmm0
  subss  %xmm5,%xmm2
  subsd  %xmm7,%xmm0
  subss  %xmm10,%xmm1
  subss  %xmm3,%xmm4
  movaps %xmm2,%xmm3
  movaps %xmm1,%xmm5
  movaps %xmm1,%xmm9
  movaps %xmm1,%xmm8
  mulss  %xmm2,%xmm3
  movaps %xmm1,%xmm10
  mulss  %xmm1,%xmm5
  movaps %xmm4,%xmm7
  addss  %xmm5,%xmm3
  movaps %xmm4,%xmm5
  mulss  %xmm4,%xmm5
  addss  %xmm5,%xmm3
  movaps %xmm2,%xmm5
  cvtss2sd %xmm3,%xmm3
  divsd  %xmm3,%xmm0
  movaps %xmm4,%xmm3
  cvtsd2ss %xmm0,%xmm0
  mulss  %xmm0,%xmm5
  mulss  %xmm0,%xmm3
  mulss  %xmm1,%xmm0
  mulss  %xmm5,%xmm9
  mulss  %xmm5,%xmm7
  mulss  %xmm3,%xmm8
  mulss  %xmm2,%xmm5
  mulss  %xmm1,%xmm0
  movaps %xmm9,%xmm11
  addss  %xmm4,%xmm9
  addss  %xmm7,%xmm10
  subss  %xmm4,%xmm11
  mulss  %xmm3,%xmm4
  subss  %xmm1,%xmm7
  addss  %xmm6,%xmm5
  unpcklps %xmm9,%xmm10
  movaps %xmm8,%xmm9
  addss  %xmm6,%xmm0
  subss  %xmm2,%xmm9
  addss  %xmm8,%xmm2
  addss  %xmm6,%xmm4
  unpcklps %xmm11,%xmm5
  movlhps %xmm10,%xmm5
  unpcklps %xmm2,%xmm7
  unpcklps %xmm9,%xmm0
  movups %xmm5,(%rdx)
  movlhps %xmm7,%xmm0
  movss  %xmm4,0x20(%rdx)
  movups %xmm0,0x10(%rdx)
  ret
  nopl   0x0(%rax,%rax,1)
L20:
  movaps %xmm4,%xmm0
  movaps %xmm1,%xmm6
  movaps %xmm4,%xmm10
  mulss  %xmm4,%xmm0
  xorps  %xmm11,%xmm6
  movaps %xmm7,%xmm8
  addss  %xmm12,%xmm0
  cvtss2sd %xmm0,%xmm0
  jmp    L33
L7:
  mov    %rdx,0xa8(%rsp)
  movaps %xmm2,0x90(%rsp)
  movaps %xmm7,0x80(%rsp)
  movaps %xmm5,0x70(%rsp)
  movaps %xmm9,0x60(%rsp)
  movss  %xmm13,0xa4(%rsp)
  movss  %xmm6,0xa0(%rsp)
  movss  %xmm8,0x5c(%rsp)
  movss  %xmm10,0x58(%rsp)
  movss  %xmm4,0x54(%rsp)
  movss  %xmm1,0x50(%rsp)
  movss  %xmm3,0x4c(%rsp)
  call   <sqrt@plt>
  movaps 0x70(%rsp),%xmm5
  movaps 0x60(%rsp),%xmm9
  movss  D88(%rip),%xmm11
  mov    0xa8(%rsp),%rdx
  movss  0x54(%rsp),%xmm4
  movaps 0x90(%rsp),%xmm2
  movss  0x5c(%rsp),%xmm8
  movaps 0x80(%rsp),%xmm7
  movss  0x58(%rsp),%xmm10
  movss  0xa4(%rsp),%xmm13
  movss  0x50(%rsp),%xmm1
  movss  0xa0(%rsp),%xmm6
  movss  0x4c(%rsp),%xmm3
  jmp    L23
```

tool_calls: name: unpack_data
arguments: tag: D31
type_infered: byte[16]
name: unpack_data
arguments: tag: D24
type_infered: byte[8]
name: unpack_data
arguments: tag: D26
type_infered: f64
name: unpack_data
arguments: tag: D88
type_infered: byte[4]
name: unpack_data
arguments: tag: D34
type_infered: f64
name: unpack_data
arguments: tag: D87
type_infered: byte[4]

tool: {"D31": [0xe9,0x0b,0x21,0xe7,0xfd,0xff,0xef,0x3f,0xe9,0x0b,0x21,0xe7,0xfd,0xff,0xef,0xbf]}

tool: {"D24": [0xe9,0x0b,0x21,0xe7,0xfd,0xff,0xef,0xbf]}

tool: D26: 1e-06

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

tool: D34: 1

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

assistant: ```c
void fromToRotation(float from[3], float to[3], float mtx[3][3]) {
  float v[3];
  float e, h;
  {
    v[0] = from[1] * to[2] - from[2] * to[1];
    v[1] = from[2] * to[0] - from[0] * to[2];
    v[2] = from[0] * to[1] - from[1] * to[0];
  };
  e = (from[0] * to[0] + from[1] * to[1] + from[2] * to[2]);
  if (e > 1.0 - 0.000001) {
    mtx[0][0] = 1.0;
    mtx[0][1] = 0.0;
    mtx[0][2] = 0.0;
    mtx[1][0] = 0.0;
    mtx[1][1] = 1.0;
    mtx[1][2] = 0.0;
    mtx[2][0] = 0.0;
    mtx[2][1] = 0.0;
    mtx[2][2] = 1.0;
  } else if (e < -1.0 + 0.000001) {
    float up[3], left[3];
    float invlen;
    float fxx, fyy, fzz, fxy, fxz, fyz;
    float uxx, uyy, uzz, uxy, uxz, uyz;
    float lxx, lyy, lzz, lxy, lxz, lyz;
    left[0] = 0.0;
    left[1] = from[2];
    left[2] = -from[1];
    if ((left[0] * left[0] + left[1] * left[1] + left[2] * left[2]) < 0.000001) {
      left[0] = -from[2];
      left[1] = 0.0;
      left[2] = from[0];
    }
    invlen = 1.0 / sqrt((left[0] * left[0] + left[1] * left[1] + left[2] * left[2]));
    left[0] *= invlen;
    left[1] *= invlen;
    left[2] *= invlen;
    {
      up[0] = left[1] * from[2] - left[2] * from[1];
      up[1] = left[2] * from[0] - left[0] * from[2];
      up[2] = left[0] * from[1] - left[1] * from[0];
    };
    fxx = -from[0] * from[0];
    fyy = -from[1] * from[1];
    fzz = -from[2] * from[2];
    fxy = -from[0] * from[1];
    fxz = -from[0] * from[2];
    fyz = -from[1] * from[2];
    uxx = up[0] * up[0];
    uyy = up[1] * up[1];
    uzz = up[2] * up[2];
    uxy = up[0] * up[1];
    uxz = up[0] * up[2];
    uyz = up[1] * up[2];
    lxx = -left[0] * left[0];
    lyy = -left[1] * left[1];
    lzz = -left[2] * left[2];
    lxy = -left[0] * left[1];
    lxz = -left[0] * left[2];
    lyz = -left[1] * left[2];
    mtx[0][0] = fxx + uxx + lxx;
    mtx[0][1] = fxy + uxy + lxy;
    mtx[0][2] = fxz + uxz + lxz;
    mtx[1][0] = mtx[0][1];
    mtx[1][1] = fyy + uyy + lyy;
    mtx[1][2] = fyz + uyz + lyz;
    mtx[2][0] = mtx[0][2];
    mtx[2][1] = mtx[1][2];
    mtx[2][2] = fzz + uzz + lzz;
  } else {
    float hvx, hvz, hvxy, hvxz, hvyz;
    h = (1.0 - e) / (v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
    hvx = h * v[0];
    hvz = h * v[2];
    hvxy = hvx * v[1];
    hvxz = hvx * v[2];
    hvyz = hvz * v[1];
    mtx[0][0] = e + hvx * v[0];
    mtx[0][1] = hvxy - v[2];
    mtx[0][2] = hvxz + v[1];
    mtx[1][0] = hvxy + v[2];
    mtx[1][1] = e + h * v[1] * v[1];
    mtx[1][2] = hvyz - v[0];
    mtx[2][0] = hvxz - v[1];
    mtx[2][1] = hvyz + v[0];
    mtx[2][2] = e + hvz * v[2];
  }
}
```