user: What would the C source look like for the assembly code provided here?

```asm
<invert8>:
  endbr64
  movss  0x8(%rdi),%xmm8
  movss  0x18(%rdi),%xmm4
  mov    %rsi,%rdx
  movss  0x1c(%rdi),%xmm6
  movss  0xc(%rdi),%xmm7
  movss  0x38(%rdi),%xmm3
  movaps %xmm8,%xmm9
  movaps %xmm4,%xmm0
  movaps %xmm8,%xmm2
  mulss  %xmm7,%xmm0
  movaps %xmm7,%xmm1
  movss  0x28(%rdi),%xmm5
  movaps %xmm8,%xmm10
  movss  0x3c(%rdi),%xmm12
  mulss  %xmm6,%xmm9
  movaps %xmm4,%xmm11
  mulss  %xmm3,%xmm7
  mulss  %xmm12,%xmm2
  mulss  %xmm5,%xmm1
  mulss  %xmm12,%xmm4
  subss  %xmm0,%xmm9
  movss  0x2c(%rdi),%xmm0
  subss  %xmm7,%xmm2
  mulss  %xmm0,%xmm10
  movaps %xmm6,%xmm7
  mulss  %xmm5,%xmm7
  mulss  %xmm3,%xmm6
  mulss  %xmm0,%xmm11
  mulss  %xmm12,%xmm5
  mulss  %xmm3,%xmm0
  movss  0x24(%rdi),%xmm3
  subss  %xmm1,%xmm10
  subss  %xmm6,%xmm4
  subss  %xmm7,%xmm11
  subss  %xmm0,%xmm5
  movss  0x14(%rdi),%xmm0
  mulss  %xmm4,%xmm3
  mulss  %xmm5,%xmm0
  movaps %xmm5,%xmm1
  subss  %xmm3,%xmm0
  movss  0x34(%rdi),%xmm3
  mulss  %xmm11,%xmm3
  addss  %xmm3,%xmm0
  movss  %xmm0,(%rsi)
  movss  0x24(%rdi),%xmm7
  movss  0x34(%rdi),%xmm3
  mulss  %xmm2,%xmm7
  mulss  %xmm10,%xmm3
  subss  %xmm3,%xmm7
  movss  0x4(%rdi),%xmm3
  mulss  %xmm5,%xmm3
  subss  %xmm3,%xmm7
  movss  %xmm7,0x4(%rsi)
  movss  0x34(%rdi),%xmm6
  movss  0x14(%rdi),%xmm3
  mulss  %xmm9,%xmm6
  mulss  %xmm2,%xmm3
  subss  %xmm3,%xmm6
  movss  0x4(%rdi),%xmm3
  mulss  %xmm4,%xmm3
  addss  %xmm3,%xmm6
  movss  %xmm6,0x8(%rsi)
  movss  0x14(%rdi),%xmm5
  movss  0x4(%rdi),%xmm3
  mulss  %xmm10,%xmm5
  mulss  %xmm11,%xmm3
  subss  %xmm3,%xmm5
  movss  0x24(%rdi),%xmm3
  mulss  %xmm9,%xmm3
  subss  %xmm3,%xmm5
  movss  %xmm5,0xc(%rsi)
  movss  0x20(%rdi),%xmm8
  movss  0x10(%rdi),%xmm3
  mulss  %xmm4,%xmm8
  mulss  %xmm1,%xmm3
  subss  %xmm3,%xmm8
  movss  0x30(%rdi),%xmm3
  mulss  %xmm11,%xmm3
  subss  %xmm3,%xmm8
  movss  %xmm8,0x10(%rsi)
  mulss  (%rdi),%xmm1
  movaps %xmm1,%xmm3
  movss  0x20(%rdi),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm3
  movss  0x30(%rdi),%xmm1
  mulss  %xmm10,%xmm1
  addss  %xmm1,%xmm3
  movss  %xmm3,0x14(%rsi)
  mulss  0x10(%rdi),%xmm2
  movss  0x30(%rdi),%xmm1
  mulss  (%rdi),%xmm4
  mulss  %xmm9,%xmm1
  subss  %xmm1,%xmm2
  subss  %xmm4,%xmm2
  movss  %xmm2,0x18(%rsi)
  movss  (%rdi),%xmm1
  movss  0x10(%rdi),%xmm3
  movss  0x20(%rdi),%xmm2
  mulss  %xmm10,%xmm3
  mulss  %xmm11,%xmm1
  mulss  %xmm9,%xmm2
  subss  %xmm3,%xmm1
  addss  %xmm2,%xmm1
  movss  %xmm1,0x1c(%rsi)
  movss  0x4(%rdi),%xmm14
  movss  (%rdi),%xmm1
  movss  0x10(%rdi),%xmm4
  movss  0x24(%rdi),%xmm10
  movss  0x20(%rdi),%xmm2
  movaps %xmm1,%xmm9
  movaps %xmm14,%xmm12
  movaps %xmm1,%xmm8
  movss  0x14(%rdi),%xmm11
  mulss  %xmm10,%xmm9
  movaps %xmm4,%xmm3
  movss  0x34(%rdi),%xmm13
  mulss  %xmm2,%xmm12
  mulss  %xmm14,%xmm3
  mulss  %xmm11,%xmm8
  mulss  %xmm13,%xmm1
  subss  %xmm12,%xmm9
  movss  0x30(%rdi),%xmm12
  subss  %xmm3,%xmm8
  movaps %xmm14,%xmm3
  movaps %xmm11,%xmm14
  mulss  %xmm12,%xmm3
  mulss  %xmm2,%xmm14
  mulss  %xmm12,%xmm11
  mulss  %xmm13,%xmm2
  subss  %xmm3,%xmm1
  movaps %xmm4,%xmm3
  mulss  %xmm10,%xmm3
  mulss  %xmm13,%xmm4
  mulss  %xmm12,%xmm10
  subss  %xmm14,%xmm3
  subss  %xmm11,%xmm4
  movss  0x2c(%rdi),%xmm11
  subss  %xmm10,%xmm2
  movss  0x1c(%rdi),%xmm10
  mulss  %xmm4,%xmm11
  mulss  %xmm2,%xmm10
  subss  %xmm11,%xmm10
  movss  0x3c(%rdi),%xmm11
  mulss  %xmm3,%xmm11
  addss  %xmm11,%xmm10
  movss  %xmm10,0x20(%rsi)
  movss  0x2c(%rdi),%xmm10
  movss  0x3c(%rdi),%xmm11
  mulss  %xmm1,%xmm10
  mulss  %xmm9,%xmm11
  subss  %xmm11,%xmm10
  movss  0xc(%rdi),%xmm11
  mulss  %xmm2,%xmm11
  subss  %xmm11,%xmm10
  movss  %xmm10,0x24(%rsi)
  movss  0x3c(%rdi),%xmm10
  movss  0x1c(%rdi),%xmm11
  mulss  %xmm8,%xmm10
  mulss  %xmm1,%xmm11
  subss  %xmm11,%xmm10
  movss  0xc(%rdi),%xmm11
  mulss  %xmm4,%xmm11
  addss  %xmm11,%xmm10
  movss  %xmm10,0x28(%rsi)
  movss  0x1c(%rdi),%xmm10
  movss  0xc(%rdi),%xmm11
  mulss  %xmm9,%xmm10
  mulss  %xmm3,%xmm11
  subss  %xmm11,%xmm10
  movss  0x2c(%rdi),%xmm11
  mulss  %xmm8,%xmm11
  subss  %xmm11,%xmm10
  movss  %xmm10,0x2c(%rsi)
  movss  0x28(%rdi),%xmm10
  movss  0x18(%rdi),%xmm11
  mulss  %xmm4,%xmm10
  mulss  %xmm2,%xmm11
  subss  %xmm11,%xmm10
  movss  0x38(%rdi),%xmm11
  mulss  %xmm3,%xmm11
  subss  %xmm11,%xmm10
  movss  %xmm10,0x30(%rsi)
  movss  0x28(%rdi),%xmm10
  mulss  0x8(%rdi),%xmm2
  mulss  %xmm1,%xmm10
  subss  %xmm10,%xmm2
  movss  0x38(%rdi),%xmm10
  mulss  %xmm9,%xmm10
  addss  %xmm10,%xmm2
  movss  %xmm2,0x34(%rsi)
  movss  0x18(%rdi),%xmm2
  mulss  0x8(%rdi),%xmm4
  mulss  %xmm1,%xmm2
  movss  0x38(%rdi),%xmm1
  mulss  %xmm8,%xmm1
  subss  %xmm1,%xmm2
  subss  %xmm4,%xmm2
  movss  %xmm2,0x38(%rsi)
  movss  0x8(%rdi),%xmm1
  movss  0x28(%rdi),%xmm2
  mulss  %xmm3,%xmm1
  movss  0x18(%rdi),%xmm3
  mulss  %xmm8,%xmm2
  mulss  %xmm9,%xmm3
  subss  %xmm3,%xmm1
  addss  %xmm2,%xmm1
  movss  %xmm1,0x3c(%rsi)
  mulss  (%rdi),%xmm0
  mulss  0x10(%rdi),%xmm7
  mulss  0x20(%rdi),%xmm6
  mulss  0x30(%rdi),%xmm5
  addss  %xmm7,%xmm0
  addss  %xmm6,%xmm0
  pxor   %xmm6,%xmm6
  addss  %xmm5,%xmm0
  ucomiss %xmm6,%xmm0
  jp     L1
  je     L14
L1:
  movss  D0(%rip),%xmm1
  movups (%rdx),%xmm2
  movups 0x30(%rdx),%xmm6
  divss  %xmm0,%xmm1
  shufps $0x0,%xmm1,%xmm1
  mulps  %xmm1,%xmm2
  movups %xmm2,(%rdx)
  movups 0x10(%rdx),%xmm2
  mulps  %xmm1,%xmm2
  movups %xmm2,0x10(%rdx)
  movups 0x20(%rdx),%xmm2
  mulps  %xmm1,%xmm2
  mulps  %xmm6,%xmm1
  movups %xmm2,0x20(%rdx)
  movups %xmm1,0x30(%rdx)
  ret
  nopl   0x0(%rax)
L14:
  pxor   %xmm0,%xmm0
  ret
```

tool_calls: name: parse_data
arguments: label: D0
type_guessed: f32

tool: D0: 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;
}
```