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

```asm
<inv_q_normalizef>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x8(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x4(%rbp)
  mov    -0x18(%rbp),%rax
  movss  (%rax),%xmm1
  mov    -0x18(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm2
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm2
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm2
  mov    -0x18(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
  movss  D56(%rip),%xmm0
  comiss -0x8(%rbp),%xmm0
  jbe    L7
  movss  -0x8(%rbp),%xmm1
  movss  D48(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rbp)
  movss  -0x4(%rbp),%xmm0
  mulss  -0x8(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x8(%rbp),%xmm1
  movss  D61(%rip),%xmm0
  subss  %xmm1,%xmm0
  movss  -0x8(%rbp),%xmm1
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
  movss  -0x4(%rbp),%xmm0
  mulss  -0x8(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x8(%rbp),%xmm1
  movss  D61(%rip),%xmm0
  subss  %xmm1,%xmm0
  movss  -0x8(%rbp),%xmm1
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
  movss  -0x4(%rbp),%xmm0
  mulss  -0x8(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x8(%rbp),%xmm1
  movss  D61(%rip),%xmm0
  subss  %xmm1,%xmm0
  movss  -0x8(%rbp),%xmm1
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
  movss  -0x4(%rbp),%xmm0
  mulss  -0x8(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x8(%rbp),%xmm1
  movss  D61(%rip),%xmm0
  subss  %xmm1,%xmm0
  movss  -0x8(%rbp),%xmm1
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
  mov    -0x18(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  -0x8(%rbp),%xmm0
  mov    -0x18(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  mulss  -0x8(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  mulss  -0x8(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mov    -0x18(%rbp),%rax
  add    $0xc,%rax
  mulss  -0x8(%rbp),%xmm0
  movss  %xmm0,(%rax)
  jmp    L4
L7:
  mov    -0x18(%rbp),%rax
  movss  D8(%rip),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0xc,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
L4:
  mov    -0x18(%rbp),%rax
  movss  (%rax),%xmm1
  mov    -0x18(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm2
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm2
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  mov    -0x18(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm2
  mov    -0x18(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
  nop
  pop    %rbp
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D56
data_type: byte[4]
name: disassemble_data
arguments: data_label: D48
data_type: byte[4]
name: disassemble_data
arguments: data_label: D61
data_type: byte[4]
name: disassemble_data
arguments: data_label: D8
data_type: f32

tool: {"D56": [0x00,0x00,0x00,0x40]}

tool: {"D48": [0x00,0x00,0x00,0x3f]}

tool: {"D61": [0x00,0x00,0xc0,0x3f]}

tool: D8: 1

assistant: ```c
void inv_q_normalizef(float *q) {
  typedef int invensensePutFunctionCallsHere;
  float normSF = 0;
  float xHalf = 0;
  normSF = (q[0] * q[0] + q[1] * q[1] + q[2] * q[2] + q[3] * q[3]);
  if (normSF < 2) {
    xHalf = 0.5f * normSF;
    normSF = normSF * (1.5f - xHalf * normSF * normSF);
    normSF = normSF * (1.5f - xHalf * normSF * normSF);
    normSF = normSF * (1.5f - xHalf * normSF * normSF);
    normSF = normSF * (1.5f - xHalf * normSF * normSF);
    q[0] *= normSF;
    q[1] *= normSF;
    q[2] *= normSF;
    q[3] *= normSF;
  } else {
    q[0] = 1.0;
    q[1] = 0.0;
    q[2] = 0.0;
    q[3] = 0.0;
  }
  normSF = (q[0] * q[0] + q[1] * q[1] + q[2] * q[2] + q[3] * q[3]);
}
```