user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<det5x5>:
  endbr64
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x2a0,%rsp
  movsd  0x30(%rdi),%xmm5
  movsd  0x38(%rdi),%xmm4
  mov    %fs:0x28,%rax
  mov    %rax,0x298(%rsp)
  xor    %eax,%eax
  movsd  0x60(%rdi),%xmm3
  movsd  0x88(%rdi),%xmm1
  movapd %xmm5,%xmm2
  movsd  0x28(%rdi),%xmm6
  movsd  0xb0(%rdi),%xmm0
  unpcklpd %xmm4,%xmm2
  movupd 0x40(%rdi),%xmm10
  movupd 0x68(%rdi),%xmm9
  movaps %xmm2,0x10(%rsp)
  movsd  0x58(%rdi),%xmm2
  movapd %xmm6,%xmm15
  movupd 0x90(%rdi),%xmm8
  unpcklpd %xmm4,%xmm15
  movupd 0xb8(%rdi),%xmm7
  movupd 0x50(%rdi),%xmm13
  movaps %xmm10,0x20(%rsp)
  unpcklpd %xmm3,%xmm2
  movupd 0x78(%rdi),%xmm12
  movapd %xmm6,%xmm14
  movaps %xmm15,0x90(%rsp)
  movaps %xmm2,0x30(%rsp)
  movsd  0x80(%rdi),%xmm2
  unpcklpd %xmm5,%xmm14
  movsd  0x50(%rdi),%xmm15
  movaps %xmm9,0x40(%rsp)
  unpcklpd %xmm1,%xmm2
  unpcklpd %xmm3,%xmm15
  movaps %xmm8,0x60(%rsp)
  movaps %xmm2,0x50(%rsp)
  movsd  0xa8(%rdi),%xmm2
  movaps %xmm10,0xa0(%rsp)
  unpcklpd %xmm0,%xmm2
  movaps %xmm7,0x80(%rsp)
  movaps %xmm2,0x70(%rsp)
  movsd  0xa0(%rdi),%xmm2
  movapd %xmm2,%xmm11
  movhpd 0xa8(%rdi),%xmm11
  movaps %xmm15,0xb0(%rsp)
  movsd  0x78(%rdi),%xmm15
  movaps %xmm7,0x100(%rsp)
  movaps %xmm7,0x180(%rsp)
  movapd %xmm4,%xmm7
  unpcklpd %xmm1,%xmm15
  movaps %xmm15,0xd0(%rsp)
  movhpd 0x48(%rdi),%xmm7
  movapd %xmm2,%xmm15
  movaps %xmm7,0x1a0(%rsp)
  movapd %xmm3,%xmm7
  unpcklpd %xmm0,%xmm15
  movsd  %xmm5,0x218(%rsp)
  movhpd 0x70(%rdi),%xmm7
  movsd  0x50(%rdi),%xmm5
  movaps %xmm7,0x1c0(%rsp)
  movapd %xmm1,%xmm7
  movhpd 0x98(%rdi),%xmm7
  movsd  %xmm4,0x220(%rsp)
  movsd  0x40(%rdi),%xmm4
  movaps %xmm7,0x1e0(%rsp)
  movapd %xmm0,%xmm7
  movhpd 0xc0(%rdi),%xmm7
  movaps %xmm9,0xc0(%rsp)
  movaps %xmm8,0xe0(%rsp)
  movaps %xmm15,0xf0(%rsp)
  movaps %xmm14,0x110(%rsp)
  movaps %xmm10,0x120(%rsp)
  movaps %xmm13,0x130(%rsp)
  movaps %xmm9,0x140(%rsp)
  movaps %xmm12,0x150(%rsp)
  movaps %xmm8,0x160(%rsp)
  movaps %xmm11,0x170(%rsp)
  movaps %xmm14,0x190(%rsp)
  movaps %xmm13,0x1b0(%rsp)
  movaps %xmm12,0x1d0(%rsp)
  movaps %xmm11,0x1f0(%rsp)
  movaps %xmm7,0x200(%rsp)
  movsd  %xmm6,0x210(%rsp)
  movsd  %xmm4,0x228(%rsp)
  movsd  %xmm5,0x230(%rsp)
  movsd  0x58(%rdi),%xmm6
  movsd  0x90(%rdi),%xmm5
  movsd  %xmm3,0x240(%rsp)
  movsd  0x68(%rdi),%xmm3
  movsd  0x80(%rdi),%xmm4
  movsd  %xmm6,0x238(%rsp)
  movsd  0xa8(%rdi),%xmm6
  movsd  %xmm3,0x248(%rsp)
  movsd  0x78(%rdi),%xmm3
  movsd  %xmm5,0x268(%rsp)
  movsd  (%rdi),%xmm5
  movsd  %xmm3,0x250(%rsp)
  movsd  0xb8(%rdi),%xmm3
  lea    0x10(%rsp),%rdi
  movsd  %xmm2,0x270(%rsp)
  movsd  %xmm3,0x288(%rsp)
  movsd  %xmm6,0x278(%rsp)
  movsd  %xmm5,(%rsp)
  movsd  %xmm4,0x258(%rsp)
  movsd  %xmm1,0x260(%rsp)
  movsd  %xmm0,0x280(%rsp)
  call   <det4x4@plt>
  pxor   %xmm0,%xmm0
  movsd  (%rsp),%xmm1
  movsd  0x8(%rbx),%xmm4
  cvtsi2sd %eax,%xmm0
  lea    0x90(%rsp),%rdi
  xor    %eax,%eax
  movsd  %xmm4,(%rsp)
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x8(%rsp)
  call   <det4x4@plt>
  pxor   %xmm0,%xmm0
  movsd  0x8(%rsp),%xmm1
  movsd  0x10(%rbx),%xmm5
  cvtsi2sd %eax,%xmm0
  mulsd  (%rsp),%xmm0
  lea    0x110(%rsp),%rdi
  xor    %eax,%eax
  movsd  %xmm5,0x8(%rsp)
  subsd  %xmm0,%xmm1
  movsd  %xmm1,(%rsp)
  call   <det4x4@plt>
  pxor   %xmm0,%xmm0
  movsd  0x18(%rbx),%xmm6
  lea    0x190(%rsp),%rdi
  cvtsi2sd %eax,%xmm0
  mulsd  0x8(%rsp),%xmm0
  xor    %eax,%eax
  addsd  (%rsp),%xmm0
  movsd  %xmm6,(%rsp)
  movsd  %xmm0,0x8(%rsp)
  call   <det4x4@plt>
  pxor   %xmm1,%xmm1
  movsd  0x8(%rsp),%xmm0
  movsd  0x20(%rbx),%xmm3
  cvtsi2sd %eax,%xmm1
  mulsd  (%rsp),%xmm1
  lea    0x210(%rsp),%rdi
  xor    %eax,%eax
  movsd  %xmm3,0x8(%rsp)
  subsd  %xmm1,%xmm0
  movsd  %xmm0,(%rsp)
  call   <det4x4@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  0x8(%rsp),%xmm0
  addsd  (%rsp),%xmm0
  mov    0x298(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L8
  add    $0x2a0,%rsp
  pop    %rbx
  ret
L8:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
double det5x5(double M[5 * 5]) {
  double minor11[4 * 4] = {M[6], M[7], M[8], M[9], M[11], M[12], M[13], M[14], M[16], M[17], M[18], M[19], M[21], M[22], M[23], M[24]};
  double minor12[4 * 4] = {M[5], M[7], M[8], M[9], M[10], M[12], M[13], M[14], M[15], M[17], M[18], M[19], M[20], M[22], M[23], M[24]};
  double minor13[4 * 4] = {M[5], M[6], M[8], M[9], M[10], M[11], M[13], M[14], M[15], M[16], M[18], M[19], M[20], M[21], M[23], M[24]};
  double minor14[4 * 4] = {M[5], M[6], M[7], M[9], M[10], M[11], M[12], M[14], M[15], M[16], M[17], M[19], M[20], M[21], M[22], M[24]};
  double minor15[4 * 4] = {M[5], M[6], M[7], M[8], M[10], M[11], M[12], M[13], M[15], M[16], M[17], M[18], M[20], M[21], M[22], M[23]};
  return M[0] * (det4x4(minor11)) - M[1] * (det4x4(minor12)) + M[2] * (det4x4(minor13)) - M[3] * (det4x4(minor14)) + M[4] * (det4x4(minor15));
}
```