user: Converte this assembly snippet into its equivalent C code:

```asm
<solve6x6>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  mov    %rsi,%r12
  push   %rbp
  mov    %rdx,%rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x858,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x848(%rsp)
  xor    %eax,%eax
  call   <det6x6@plt>
  movupd 0x10(%rbx),%xmm8
  movsd  0x18(%rbx),%xmm1
  movupd (%rbx),%xmm2
  movsd  0x28(%rbx),%xmm6
  movsd  %xmm0,0x80(%rsp)
  movapd %xmm8,%xmm4
  movq   %xmm1,%rax
  movsd  0x48(%rbx),%xmm13
  movsd  0x50(%rbx),%xmm12
  unpcklpd %xmm1,%xmm4
  movsd  0x20(%rbx),%xmm1
  movaps %xmm2,(%rsp)
  movq   %xmm6,%r15
  movsd  0x40(%rbx),%xmm2
  movq   %xmm13,%rcx
  movaps %xmm4,0xc0(%rsp)
  movq   %r15,%xmm4
  movq   %xmm1,%r13
  movapd %xmm1,%xmm6
  mov    %rcx,%rsi
  movsd  0x38(%rbx),%xmm1
  unpcklpd %xmm4,%xmm6
  movapd %xmm2,%xmm4
  movsd  %xmm12,0x88(%rsp)
  movsd  0x78(%rbx),%xmm14
  unpcklpd %xmm2,%xmm1
  unpcklpd %xmm13,%xmm4
  movsd  0x58(%rbx),%xmm13
  movsd  0x88(%rbx),%xmm10
  movq   %xmm14,%rdx
  movaps %xmm1,0xd0(%rsp)
  movapd %xmm12,%xmm1
  movsd  0x68(%rbx),%xmm12
  unpcklpd %xmm13,%xmm1
  movq   %xmm10,%r9
  movq   %xmm13,%r14
  movsd  0xa0(%rbx),%xmm0
  movaps %xmm1,0x20(%rsp)
  movsd  0x70(%rbx),%xmm1
  movapd %xmm12,%xmm11
  movsd  0x10(%r12),%xmm13
  movsd  (%r12),%xmm7
  movaps %xmm4,0x10(%rsp)
  movsd  0x18(%r12),%xmm4
  movaps %xmm8,0x170(%rsp)
  unpcklpd %xmm1,%xmm11
  unpcklpd %xmm14,%xmm1
  movsd  0x80(%rbx),%xmm14
  movaps %xmm11,0xe0(%rsp)
  movapd %xmm6,%xmm8
  movsd  0x98(%rbx),%xmm11
  movsd  0x8(%r12),%xmm6
  movsd  %xmm14,0x90(%rsp)
  movapd %xmm14,%xmm5
  movapd %xmm11,%xmm14
  unpcklpd %xmm10,%xmm5
  unpcklpd %xmm0,%xmm14
  movaps %xmm5,0x30(%rsp)
  movaps %xmm14,0xf0(%rsp)
  movsd  0x20(%r12),%xmm3
  movsd  0xa8(%rbx),%xmm10
  movsd  0xb0(%rbx),%xmm9
  mov    0x110(%rbx),%r11
  movaps %xmm8,0x1a0(%rsp)
  movsd  %xmm10,0x160(%rsp)
  unpcklpd %xmm10,%xmm0
  movsd  0xb8(%rbx),%xmm10
  movsd  0xc8(%rbx),%xmm14
  movsd  %xmm9,0x98(%rsp)
  movsd  %xmm14,0xa0(%rsp)
  movq   %xmm10,%r8
  movapd %xmm9,%xmm10
  movsd  0xd0(%rbx),%xmm9
  movq   %r8,%xmm5
  unpcklpd %xmm5,%xmm10
  movapd %xmm10,%xmm5
  movapd %xmm14,%xmm10
  movsd  0xd8(%rbx),%xmm14
  unpcklpd %xmm9,%xmm10
  movsd  %xmm14,0x168(%rsp)
  movapd %xmm14,%xmm15
  movapd %xmm9,%xmm14
  movsd  0xe8(%rbx),%xmm9
  movaps %xmm10,0x100(%rsp)
  unpcklpd %xmm15,%xmm14
  movsd  0xe0(%rbx),%xmm10
  movq   %xmm9,%rdi
  movaps %xmm14,0x40(%rsp)
  movsd  0x28(%r12),%xmm14
  mov    0x108(%rbx),%r12
  movq   %rdi,%xmm15
  movapd %xmm10,%xmm9
  movsd  %xmm10,0xb0(%rsp)
  unpcklpd %xmm15,%xmm9
  movq   %r12,%xmm2
  movsd  0x100(%rbx),%xmm15
  movaps %xmm9,0x50(%rsp)
  movsd  0xf8(%rbx),%xmm9
  movapd %xmm9,%xmm10
  unpcklpd %xmm15,%xmm10
  movaps %xmm10,0x110(%rsp)
  movapd %xmm15,%xmm10
  movapd %xmm7,%xmm15
  unpcklpd %xmm2,%xmm10
  movhpd 0x8(%rbx),%xmm15
  movsd  0x118(%rbx),%xmm2
  movaps %xmm10,0x60(%rsp)
  movq   %r11,%xmm10
  movaps %xmm15,0x180(%rsp)
  unpcklpd %xmm2,%xmm10
  movapd 0xc0(%rsp),%xmm15
  movsd  %xmm2,0xb8(%rsp)
  movapd %xmm6,%xmm2
  movaps %xmm10,0x70(%rsp)
  movaps %xmm15,0x190(%rsp)
  movhpd 0x38(%rbx),%xmm2
  movapd 0x20(%rsp),%xmm15
  movapd 0x60(%rsp),%xmm10
  mov    0x30(%rbx),%r10
  movaps %xmm2,0x1b0(%rsp)
  movapd 0x10(%rsp),%xmm2
  movaps %xmm15,0x1d0(%rsp)
  movapd 0x30(%rsp),%xmm15
  movaps %xmm10,0x280(%rsp)
  movapd 0x70(%rsp),%xmm10
  movaps %xmm15,0x200(%rsp)
  movapd 0x40(%rsp),%xmm15
  movaps %xmm10,0x290(%rsp)
  movq   %r10,%xmm10
  movaps %xmm15,0x250(%rsp)
  movapd 0x50(%rsp),%xmm15
  movhpd 0x38(%rbx),%xmm10
  movaps %xmm2,0x1c0(%rsp)
  movapd %xmm13,%xmm2
  movaps %xmm15,0x260(%rsp)
  movsd  0x60(%rbx),%xmm15
  unpcklpd %xmm12,%xmm2
  movaps %xmm10,0x120(%rsp)
  movapd %xmm15,%xmm10
  movaps %xmm2,0x1e0(%rsp)
  movapd %xmm4,%xmm2
  unpcklpd %xmm12,%xmm10
  unpcklpd %xmm11,%xmm2
  movsd  0x90(%rbx),%xmm12
  movaps %xmm1,0x1f0(%rsp)
  movaps %xmm2,0x210(%rsp)
  movapd %xmm3,%xmm2
  movaps %xmm10,0x130(%rsp)
  movapd %xmm12,%xmm10
  movhpd 0xa0(%rsp),%xmm2
  unpcklpd %xmm11,%xmm10
  movaps %xmm2,0x240(%rsp)
  movsd  0xc0(%rbx),%xmm11
  movapd %xmm14,%xmm2
  unpcklpd %xmm9,%xmm2
  movaps %xmm0,0x220(%rsp)
  movaps %xmm10,0x140(%rsp)
  movapd %xmm11,%xmm10
  movaps %xmm5,0x230(%rsp)
  movaps %xmm2,0x270(%rsp)
  movhpd 0xa0(%rsp),%xmm10
  movaps %xmm10,0xa0(%rsp)
  movsd  0xf0(%rbx),%xmm10
  movaps %xmm8,0x2c0(%rsp)
  movapd %xmm10,%xmm2
  movaps %xmm1,0x310(%rsp)
  unpcklpd %xmm9,%xmm2
  movsd  (%rbx),%xmm9
  movaps %xmm0,0x340(%rsp)
  movaps %xmm2,0x150(%rsp)
  movapd 0x10(%rsp),%xmm2
  unpcklpd %xmm7,%xmm9
  movaps %xmm5,0x350(%rsp)
  movaps %xmm9,0x2a0(%rsp)
  movapd 0xc0(%rsp),%xmm9
  movaps %xmm2,0x2e0(%rsp)
  movapd %xmm15,%xmm2
  movaps %xmm9,0x2b0(%rsp)
  movq   %r10,%xmm9
  unpcklpd %xmm13,%xmm2
  unpcklpd %xmm6,%xmm9
  movaps %xmm2,0x300(%rsp)
  movapd %xmm12,%xmm2
  movaps %xmm9,0x2d0(%rsp)
  movapd 0x20(%rsp),%xmm9
  unpcklpd %xmm4,%xmm2
  movaps %xmm2,0x330(%rsp)
  movapd %xmm11,%xmm2
  movaps %xmm9,0x2f0(%rsp)
  movapd 0x30(%rsp),%xmm9
  unpcklpd %xmm3,%xmm2
  movaps %xmm2,0x360(%rsp)
  movapd %xmm10,%xmm2
  movaps %xmm9,0x320(%rsp)
  movapd 0x40(%rsp),%xmm9
  unpcklpd %xmm14,%xmm2
  movaps %xmm2,0x390(%rsp)
  movapd (%rsp),%xmm2
  movaps %xmm9,0x370(%rsp)
  movapd 0x50(%rsp),%xmm9
  movaps %xmm9,0x380(%rsp)
  movapd 0x60(%rsp),%xmm9
  movaps %xmm9,0x3a0(%rsp)
  movapd 0x70(%rsp),%xmm9
  movaps %xmm9,0x3b0(%rsp)
  movq   %rax,%xmm9
  movaps %xmm2,0x3c0(%rsp)
  movapd %xmm7,%xmm2
  mov    0x168(%rsp),%rax
  movaps %xmm8,0x3e0(%rsp)
  unpcklpd %xmm9,%xmm2
  movapd 0x120(%rsp),%xmm8
  movq   %rcx,%xmm9
  mov    0x160(%rsp),%rcx
  movaps %xmm5,0x470(%rsp)
  movapd %xmm3,%xmm5
  movaps %xmm8,0x3f0(%rsp)
  movapd %xmm6,%xmm8
  unpcklpd %xmm9,%xmm8
  movapd 0x20(%rsp),%xmm9
  movaps %xmm2,0x3d0(%rsp)
  movapd 0x150(%rsp),%xmm2
  movaps %xmm8,0x400(%rsp)
  movapd 0x130(%rsp),%xmm8
  movaps %xmm9,0x410(%rsp)
  movq   %rdx,%xmm9
  movaps %xmm8,0x420(%rsp)
  movapd %xmm13,%xmm8
  unpcklpd %xmm9,%xmm8
  movapd 0x30(%rsp),%xmm9
  movaps %xmm2,0x4b0(%rsp)
  movapd (%rsp),%xmm2
  movaps %xmm8,0x430(%rsp)
  movapd 0x140(%rsp),%xmm8
  movaps %xmm9,0x440(%rsp)
  movq   %rcx,%xmm9
  movaps %xmm8,0x450(%rsp)
  movapd %xmm4,%xmm8
  unpcklpd %xmm9,%xmm8
  movq   %r13,%xmm9
  movaps %xmm2,0x4e0(%rsp)
  movaps %xmm8,0x460(%rsp)
  movapd 0xa0(%rsp),%xmm8
  movaps %xmm8,0x480(%rsp)
  movq   %rax,%xmm8
  unpcklpd %xmm8,%xmm5
  movq   %r12,%xmm8
  movaps %xmm5,0x490(%rsp)
  movapd 0x50(%rsp),%xmm5
  movaps %xmm5,0x4a0(%rsp)
  movapd %xmm14,%xmm5
  unpcklpd %xmm8,%xmm5
  movapd 0x170(%rsp),%xmm8
  movaps %xmm5,0x4c0(%rsp)
  movapd 0x70(%rsp),%xmm5
  movlpd %xmm8,0x4f0(%rsp)
  movaps %xmm5,0x4d0(%rsp)
  movapd %xmm7,%xmm5
  unpcklpd %xmm9,%xmm5
  movq   %r10,%xmm9
  movups %xmm5,0x4f8(%rsp)
  movq   %r15,%xmm5
  unpcklpd %xmm9,%xmm5
  movapd 0x100(%rsp),%xmm9
  movaps %xmm2,0x600(%rsp)
  movapd 0x10(%rsp),%xmm2
  movups %xmm5,0x508(%rsp)
  movapd 0xd0(%rsp),%xmm5
  movups %xmm9,0x5a8(%rsp)
  movq   %r11,%xmm9
  movups %xmm5,0x518(%rsp)
  movapd %xmm6,%xmm5
  movhpd 0x88(%rsp),%xmm5
  movaps %xmm8,0x610(%rsp)
  movups %xmm5,0x528(%rsp)
  movq   %r14,%xmm5
  unpcklpd %xmm15,%xmm5
  movups %xmm5,0x538(%rsp)
  movapd 0xe0(%rsp),%xmm5
  movups %xmm5,0x548(%rsp)
  movapd %xmm13,%xmm5
  movhpd 0x90(%rsp),%xmm5
  movups %xmm5,0x558(%rsp)
  movq   %r9,%xmm5
  unpcklpd %xmm12,%xmm5
  movups %xmm5,0x568(%rsp)
  movapd 0xf0(%rsp),%xmm5
  movups %xmm5,0x578(%rsp)
  movapd %xmm4,%xmm5
  movhpd 0x98(%rsp),%xmm5
  movups %xmm5,0x588(%rsp)
  movq   %r8,%xmm5
  unpcklpd %xmm11,%xmm5
  movups %xmm5,0x598(%rsp)
  movapd %xmm3,%xmm5
  movhpd 0xb0(%rsp),%xmm5
  movups %xmm5,0x5b8(%rsp)
  movq   %rdi,%xmm5
  unpcklpd %xmm10,%xmm5
  movups %xmm5,0x5c8(%rsp)
  movapd 0x110(%rsp),%xmm5
  movups %xmm5,0x5d8(%rsp)
  movapd %xmm14,%xmm5
  unpcklpd %xmm9,%xmm5
  movsd  0xb8(%rsp),%xmm9
  movups %xmm5,0x5e8(%rsp)
  movapd %xmm7,%xmm5
  movsd  %xmm9,0x5f8(%rsp)
  movq   %r15,%xmm9
  unpcklpd %xmm9,%xmm5
  movapd 0x120(%rsp),%xmm9
  movaps %xmm5,0x620(%rsp)
  movaps %xmm9,0x630(%rsp)
  movapd %xmm6,%xmm9
  movaps %xmm2,0x640(%rsp)
  movq   %r14,%xmm2
  movapd 0xd0(%rsp),%xmm5
  unpcklpd %xmm2,%xmm9
  movapd 0x130(%rsp),%xmm2
  movaps %xmm1,0x670(%rsp)
  movapd %xmm13,%xmm1
  movaps %xmm0,0x6a0(%rsp)
  movapd %xmm4,%xmm0
  movaps %xmm2,0x660(%rsp)
  movq   %r9,%xmm2
  unpcklpd %xmm2,%xmm1
  movapd 0x140(%rsp),%xmm2
  movaps %xmm9,0x650(%rsp)
  movapd 0x40(%rsp),%xmm9
  movaps %xmm1,0x680(%rsp)
  movq   %r8,%xmm1
  movaps %xmm2,0x690(%rsp)
  unpcklpd %xmm1,%xmm0
  movapd 0xa0(%rsp),%xmm2
  movq   %rdi,%xmm1
  movaps %xmm0,0x6b0(%rsp)
  movapd %xmm3,%xmm0
  xor    %edi,%edi
  movaps %xmm2,0x6c0(%rsp)
  unpcklpd %xmm1,%xmm0
  movapd 0x150(%rsp),%xmm2
  movaps %xmm9,0x6d0(%rsp)
  movapd 0x60(%rsp),%xmm9
  movaps %xmm2,0x6f0(%rsp)
  movapd (%rsp),%xmm2
  movaps %xmm0,0x6e0(%rsp)
  movapd %xmm14,%xmm0
  movaps %xmm2,0x720(%rsp)
  movapd %xmm7,%xmm2
  movq   %r10,%xmm7
  movhpd 0xb8(%rsp),%xmm0
  unpcklpd %xmm7,%xmm2
  movq   %rsi,%xmm7
  movups %xmm5,0x758(%rsp)
  movapd 0xe0(%rsp),%xmm5
  movhpd 0x88(%rsp),%xmm7
  movups %xmm2,0x748(%rsp)
  movups %xmm7,0x768(%rsp)
  movapd %xmm6,%xmm7
  movq   %rdx,%xmm6
  unpcklpd %xmm15,%xmm7
  movaps %xmm8,0x730(%rsp)
  movaps %xmm0,0x710(%rsp)
  movaps %xmm9,0x700(%rsp)
  movups %xmm7,0x778(%rsp)
  movq   %rcx,%xmm7
  movups %xmm5,0x788(%rsp)
  mov    %r13,0x740(%rsp)
  movhpd 0x90(%rsp),%xmm6
  movapd 0xf0(%rsp),%xmm5
  movhpd 0x98(%rsp),%xmm7
  movups %xmm6,0x798(%rsp)
  movapd %xmm13,%xmm6
  movapd 0x100(%rsp),%xmm9
  unpcklpd %xmm12,%xmm6
  movups %xmm5,0x7b8(%rsp)
  movapd 0x110(%rsp),%xmm5
  movups %xmm6,0x7a8(%rsp)
  movapd %xmm4,%xmm6
  movq   %rax,%xmm4
  mov    $0x1,%eax
  movhpd 0xb0(%rsp),%xmm4
  unpcklpd %xmm11,%xmm6
  movups %xmm7,0x7c8(%rsp)
  movq   %r11,%xmm7
  movups %xmm4,0x7f8(%rsp)
  movapd %xmm3,%xmm4
  movsd  0x80(%rsp),%xmm3
  ucomisd D0(%rip),%xmm3
  unpcklpd %xmm10,%xmm4
  movups %xmm6,0x7d8(%rsp)
  movups %xmm4,0x808(%rsp)
  movq   %r12,%xmm4
  setp   %dil
  unpcklpd %xmm7,%xmm4
  movups %xmm9,0x7e8(%rsp)
  cmovne %eax,%edi
  movups %xmm5,0x818(%rsp)
  movups %xmm4,0x828(%rsp)
  movsd  %xmm14,0x838(%rsp)
  call   <assert@plt>
  lea    0x180(%rsp),%rdi
  call   <det6x6@plt>
  lea    0x2a0(%rsp),%rdi
  divsd  0x80(%rsp),%xmm0
  movsd  %xmm0,0x0(%rbp)
  call   <det6x6@plt>
  lea    0x3c0(%rsp),%rdi
  divsd  0x80(%rsp),%xmm0
  movsd  %xmm0,0x8(%rbp)
  call   <det6x6@plt>
  lea    0x4e0(%rsp),%rdi
  divsd  0x80(%rsp),%xmm0
  movsd  %xmm0,0x10(%rbp)
  call   <det6x6@plt>
  lea    0x600(%rsp),%rdi
  divsd  0x80(%rsp),%xmm0
  movsd  %xmm0,0x18(%rbp)
  call   <det6x6@plt>
  lea    0x720(%rsp),%rdi
  divsd  0x80(%rsp),%xmm0
  movsd  %xmm0,0x20(%rbp)
  call   <det6x6@plt>
  divsd  0x80(%rsp),%xmm0
  movsd  %xmm0,0x28(%rbp)
  mov    0x848(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L8
  add    $0x858,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L8:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_tag: D0
type_guessed: byte[8]

tool: {"D0": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

assistant: ```c
void solve6x6(double M[6 * 6], double P[6], double C[6]) {
  double detM = det6x6(M);
  double minorM1[6 * 6] = {P[0], M[1], M[2], M[3], M[4], M[5], P[1], M[7], M[8], M[9], M[10], M[11], P[2], M[13], M[14], M[15], M[16], M[17], P[3], M[19], M[20], M[21], M[22], M[23], P[4], M[25], M[26], M[27], M[28], M[29], P[5], M[31], M[32], M[33], M[34], M[35]};
  double minorM2[6 * 6] = {M[0], P[0], M[2], M[3], M[4], M[5], M[6], P[1], M[8], M[9], M[10], M[11], M[12], P[2], M[14], M[15], M[16], M[17], M[18], P[3], M[20], M[21], M[22], M[23], M[24], P[4], M[26], M[27], M[28], M[29], M[30], P[5], M[32], M[33], M[34], M[35]};
  double minorM3[6 * 6] = {M[0], M[1], P[0], M[3], M[4], M[5], M[6], M[7], P[1], M[9], M[10], M[11], M[12], M[13], P[2], M[15], M[16], M[17], M[18], M[19], P[3], M[21], M[22], M[23], M[24], M[25], P[4], M[27], M[28], M[29], M[30], M[31], P[5], M[33], M[34], M[35]};
  double minorM4[6 * 6] = {M[0], M[1], M[2], P[0], M[4], M[5], M[6], M[7], M[8], P[1], M[10], M[11], M[12], M[13], M[14], P[2], M[16], M[17], M[18], M[19], M[20], P[3], M[22], M[23], M[24], M[25], M[26], P[4], M[28], M[29], M[30], M[31], M[32], P[5], M[34], M[35]};
  double minorM5[6 * 6] = {M[0], M[1], M[2], M[3], P[0], M[5], M[6], M[7], M[8], M[9], P[1], M[11], M[12], M[13], M[14], M[15], P[2], M[17], M[18], M[19], M[20], M[21], P[3], M[23], M[24], M[25], M[26], M[27], P[4], M[29], M[30], M[31], M[32], M[33], P[5], M[35]};
  double minorM6[6 * 6] = {M[0], M[1], M[2], M[3], M[4], P[0], M[6], M[7], M[8], M[9], M[10], P[1], M[12], M[13], M[14], M[15], M[16], P[2], M[18], M[19], M[20], M[21], M[22], P[3], M[24], M[25], M[26], M[27], M[28], P[4], M[30], M[31], M[32], M[33], M[34], P[5]};
  assert(detM != 0.f);
  C[0] = det6x6(minorM1) / detM;
  C[1] = det6x6(minorM2) / detM;
  C[2] = det6x6(minorM3) / detM;
  C[3] = det6x6(minorM4) / detM;
  C[4] = det6x6(minorM5) / detM;
  C[5] = det6x6(minorM6) / detM;
}
```