user: 下面的汇编指令对应的C源代码是什么:

```asm
<invert8>:
  endbr64
  movss  0x8(%rdi),%xmm8
  movss  0x18(%rdi),%xmm4
  mov    %rsi,%rax
  movss  0x1c(%rdi),%xmm6
  movss  0xc(%rdi),%xmm7
  movaps %xmm8,%xmm0
  movaps %xmm4,%xmm1
  movaps %xmm8,%xmm3
  movss  0x28(%rdi),%xmm5
  movss  0x3c(%rdi),%xmm13
  mulss  %xmm7,%xmm1
  movaps %xmm7,%xmm2
  movaps %xmm8,%xmm10
  movss  0x38(%rdi),%xmm12
  mulss  %xmm6,%xmm0
  movaps %xmm4,%xmm11
  mulss  %xmm13,%xmm3
  mulss  %xmm12,%xmm7
  mulss  %xmm5,%xmm2
  mulss  %xmm13,%xmm4
  subss  %xmm1,%xmm0
  movss  0x2c(%rdi),%xmm1
  subss  %xmm7,%xmm3
  mulss  %xmm1,%xmm10
  movaps %xmm6,%xmm7
  mulss  %xmm5,%xmm7
  mulss  %xmm12,%xmm6
  mulss  %xmm1,%xmm11
  mulss  %xmm13,%xmm5
  mulss  %xmm12,%xmm1
  subss  %xmm2,%xmm10
  subss  %xmm6,%xmm4
  subss  %xmm7,%xmm11
  subss  %xmm1,%xmm5
  movss  0x14(%rdi),%xmm1
  movaps %xmm4,%xmm9
  mulss  0x24(%rdi),%xmm4
  mulss  %xmm5,%xmm1
  movaps %xmm5,%xmm2
  subss  %xmm4,%xmm1
  movss  0x34(%rdi),%xmm4
  mulss  %xmm11,%xmm4
  addss  %xmm4,%xmm1
  movss  %xmm1,(%rsi)
  movss  0x24(%rdi),%xmm8
  movss  0x34(%rdi),%xmm4
  mulss  %xmm3,%xmm8
  mulss  %xmm10,%xmm4
  subss  %xmm4,%xmm8
  movss  0x4(%rdi),%xmm4
  mulss  %xmm5,%xmm4
  subss  %xmm4,%xmm8
  movss  %xmm8,0x4(%rsi)
  movss  0x34(%rdi),%xmm7
  movss  0x14(%rdi),%xmm4
  mulss  %xmm0,%xmm7
  mulss  %xmm3,%xmm4
  subss  %xmm4,%xmm7
  movss  0x4(%rdi),%xmm4
  mulss  %xmm9,%xmm4
  addss  %xmm4,%xmm7
  movss  %xmm7,0x8(%rsi)
  movss  0x14(%rdi),%xmm6
  movss  0x4(%rdi),%xmm4
  mulss  %xmm10,%xmm6
  mulss  %xmm11,%xmm4
  subss  %xmm4,%xmm6
  movss  0x24(%rdi),%xmm4
  mulss  %xmm0,%xmm4
  subss  %xmm4,%xmm6
  movss  %xmm6,0xc(%rsi)
  movss  0x20(%rdi),%xmm5
  movss  0x10(%rdi),%xmm4
  mulss  %xmm9,%xmm5
  mulss  %xmm2,%xmm4
  subss  %xmm4,%xmm5
  movss  0x30(%rdi),%xmm4
  mulss  %xmm11,%xmm4
  subss  %xmm4,%xmm5
  movss  %xmm5,0x10(%rsi)
  mulss  (%rdi),%xmm2
  movaps %xmm2,%xmm4
  movss  0x20(%rdi),%xmm2
  mulss  %xmm3,%xmm2
  subss  %xmm2,%xmm4
  movss  0x30(%rdi),%xmm2
  mulss  %xmm10,%xmm2
  addss  %xmm2,%xmm4
  movss  %xmm4,0x14(%rsi)
  mulss  0x10(%rdi),%xmm3
  movss  0x30(%rdi),%xmm2
  movss  (%rdi),%xmm4
  mulss  %xmm0,%xmm2
  mulss  %xmm9,%xmm4
  subss  %xmm2,%xmm3
  subss  %xmm4,%xmm3
  movss  %xmm3,0x18(%rsi)
  movss  (%rdi),%xmm2
  movss  0x10(%rdi),%xmm3
  mulss  0x20(%rdi),%xmm0
  mulss  %xmm10,%xmm3
  mulss  %xmm11,%xmm2
  subss  %xmm3,%xmm2
  addss  %xmm0,%xmm2
  movss  %xmm2,0x1c(%rsi)
  movss  (%rdi),%xmm2
  movss  0x10(%rdi),%xmm5
  movss  0x14(%rdi),%xmm11
  movss  0x4(%rdi),%xmm4
  movaps %xmm2,%xmm0
  movaps %xmm5,%xmm3
  movss  0x24(%rdi),%xmm10
  movaps %xmm2,%xmm9
  mulss  %xmm4,%xmm3
  movaps %xmm4,%xmm12
  movss  0x34(%rdi),%xmm13
  movaps %xmm11,%xmm14
  mulss  %xmm11,%xmm0
  mulss  %xmm10,%xmm9
  mulss  %xmm13,%xmm2
  subss  %xmm3,%xmm0
  movss  0x20(%rdi),%xmm3
  mulss  %xmm3,%xmm12
  mulss  %xmm3,%xmm14
  mulss  %xmm13,%xmm3
  subss  %xmm12,%xmm9
  movss  0x30(%rdi),%xmm12
  mulss  %xmm12,%xmm4
  mulss  %xmm12,%xmm11
  subss  %xmm4,%xmm2
  movaps %xmm5,%xmm4
  mulss  %xmm10,%xmm4
  mulss  %xmm13,%xmm5
  mulss  %xmm12,%xmm10
  subss  %xmm14,%xmm4
  subss  %xmm11,%xmm5
  movss  0x2c(%rdi),%xmm11
  subss  %xmm10,%xmm3
  movss  0x1c(%rdi),%xmm10
  mulss  %xmm5,%xmm11
  mulss  %xmm3,%xmm10
  subss  %xmm11,%xmm10
  movss  0x3c(%rdi),%xmm11
  mulss  %xmm4,%xmm11
  addss  %xmm11,%xmm10
  movss  %xmm10,0x20(%rsi)
  movss  0x2c(%rdi),%xmm10
  movss  0x3c(%rdi),%xmm11
  mulss  %xmm2,%xmm10
  mulss  %xmm9,%xmm11
  subss  %xmm11,%xmm10
  movss  0xc(%rdi),%xmm11
  mulss  %xmm3,%xmm11
  subss  %xmm11,%xmm10
  movss  %xmm10,0x24(%rsi)
  movss  0x3c(%rdi),%xmm10
  movss  0x1c(%rdi),%xmm11
  mulss  %xmm0,%xmm10
  mulss  %xmm2,%xmm11
  subss  %xmm11,%xmm10
  movss  0xc(%rdi),%xmm11
  mulss  %xmm5,%xmm11
  addss  %xmm11,%xmm10
  movss  %xmm10,0x28(%rsi)
  movss  0x1c(%rdi),%xmm10
  movss  0xc(%rdi),%xmm11
  mulss  %xmm9,%xmm10
  mulss  %xmm4,%xmm11
  subss  %xmm11,%xmm10
  movss  0x2c(%rdi),%xmm11
  mulss  %xmm0,%xmm11
  subss  %xmm11,%xmm10
  movss  %xmm10,0x2c(%rsi)
  movss  0x28(%rdi),%xmm10
  movss  0x18(%rdi),%xmm11
  mulss  %xmm5,%xmm10
  mulss  %xmm3,%xmm11
  subss  %xmm11,%xmm10
  movss  0x38(%rdi),%xmm11
  mulss  %xmm4,%xmm11
  subss  %xmm11,%xmm10
  movss  %xmm10,0x30(%rsi)
  movss  0x28(%rdi),%xmm10
  mulss  0x8(%rdi),%xmm3
  mulss  %xmm2,%xmm10
  subss  %xmm10,%xmm3
  movss  0x38(%rdi),%xmm10
  mulss  %xmm9,%xmm10
  addss  %xmm10,%xmm3
  movss  %xmm3,0x34(%rsi)
  movss  0x18(%rdi),%xmm3
  mulss  0x8(%rdi),%xmm5
  mulss  %xmm2,%xmm3
  movss  0x38(%rdi),%xmm2
  mulss  %xmm0,%xmm2
  subss  %xmm2,%xmm3
  subss  %xmm5,%xmm3
  movss  %xmm3,0x38(%rsi)
  movss  0x8(%rdi),%xmm2
  movss  0x18(%rdi),%xmm3
  mulss  0x28(%rdi),%xmm0
  mulss  %xmm4,%xmm2
  mulss  %xmm9,%xmm3
  subss  %xmm3,%xmm2
  addss  %xmm0,%xmm2
  movss  %xmm2,0x3c(%rsi)
  movss  (%rdi),%xmm0
  mulss  0x10(%rdi),%xmm8
  mulss  0x20(%rdi),%xmm7
  mulss  %xmm1,%xmm0
  mulss  0x30(%rdi),%xmm6
  addss  %xmm8,%xmm0
  addss  %xmm7,%xmm0
  addss  %xmm6,%xmm0
  pxor   %xmm6,%xmm6
  ucomiss %xmm6,%xmm0
  jp     L21
  je     L31
L21:
  movss  D8(%rip),%xmm2
  lea    0x40(%rax),%rdx
  divss  %xmm0,%xmm2
  jmp    L26
  nopl   0x0(%rax)
L25:
  movss  (%rax),%xmm1
L26:
  mulss  %xmm2,%xmm1
  add    $0x4,%rax
  movss  %xmm1,-0x4(%rax)
  cmp    %rdx,%rax
  jne    L25
  ret
  nop
L31:
  pxor   %xmm0,%xmm0
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D8
datatype: f32

tool: D8: 1

assistant: ```c
float invert8(float const s[16], float d[16]) {
  float t[6], det, scale;
  unsigned i;
  t[0] = s[2] * s[7] - s[6] * s[3];
  t[1] = s[2] * s[11] - s[10] * s[3];
  t[2] = s[2] * s[15] - s[14] * s[3];
  t[3] = s[6] * s[11] - s[10] * s[7];
  t[4] = s[6] * s[15] - s[14] * s[7];
  t[5] = s[10] * s[15] - s[14] * s[11];
  d[0] = s[5] * t[5] - s[9] * t[4] + s[13] * t[3];
  d[1] = s[9] * t[2] - s[13] * t[1] - s[1] * t[5];
  d[2] = s[13] * t[0] - s[5] * t[2] + s[1] * t[4];
  d[3] = s[5] * t[1] - s[1] * t[3] - s[9] * t[0];
  d[4] = s[8] * t[4] - s[4] * t[5] - s[12] * t[3];
  d[5] = s[0] * t[5] - s[8] * t[2] + s[12] * t[1];
  d[6] = s[4] * t[2] - s[12] * t[0] - s[0] * t[4];
  d[7] = s[0] * t[3] - s[4] * t[1] + s[8] * t[0];
  t[0] = s[0] * s[5] - s[4] * s[1];
  t[1] = s[0] * s[9] - s[8] * s[1];
  t[2] = s[0] * s[13] - s[12] * s[1];
  t[3] = s[4] * s[9] - s[8] * s[5];
  t[4] = s[4] * s[13] - s[12] * s[5];
  t[5] = s[8] * s[13] - s[12] * s[9];
  d[8] = s[7] * t[5] - s[11] * t[4] + s[15] * t[3];
  d[9] = s[11] * t[2] - s[15] * t[1] - s[3] * t[5];
  d[10] = s[15] * t[0] - s[7] * t[2] + s[3] * t[4];
  d[11] = s[7] * t[1] - s[3] * t[3] - s[11] * t[0];
  d[12] = s[10] * t[4] - s[6] * t[5] - s[14] * t[3];
  d[13] = s[2] * t[5] - s[10] * t[2] + s[14] * t[1];
  d[14] = s[6] * t[2] - s[14] * t[0] - s[2] * t[4];
  d[15] = s[2] * t[3] - s[6] * t[1] + s[10] * t[0];
  det = s[0] * d[0] + s[4] * d[1] + s[8] * d[2] + s[12] * d[3];
  if (det == 0)
    return 0;
  scale = (float)1.0 / det;
  for (i = 0; i != 16; ++i) {
    d[i] *= scale;
  }
  return det;
}
```