user: 请从给定的汇编指令推导出C源代码：

```asm
<determinant_poorly>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %edi,-0x54(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x1,-0x50(%rbp)
  movl   $0x0,-0x4c(%rbp)
  jmp    L127
L147:
  mov    -0x4c(%rbp),%eax
  cltq
  mov    -0x4c(%rbp),%edx
  mov    %edx,-0x30(%rbp,%rax,4)
  addl   $0x1,-0x4c(%rbp)
L127:
  cmpl   $0x6,-0x4c(%rbp)
  jle    L147
  mov    D9(%rip),%rax
  mov    (%rax),%edx
  mov    -0x54(%rbp),%eax
  mov    $0x0,%esi
  mov    %eax,%edi
  call   <mpfr_set_si@plt>
  mov    -0x38(%rbp),%eax
  mov    $0xc8,%esi
  mov    %eax,%edi
  call   <mpfr_init2@plt>
L148:
  mov    D9(%rip),%rax
  mov    (%rax),%edx
  mov    -0x50(%rbp),%ecx
  mov    -0x38(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <mpfr_set_si@plt>
  movl   $0x0,-0x48(%rbp)
  jmp    L10
L137:
  mov    D9(%rip),%rax
  mov    (%rax),%ecx
  mov    -0x48(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  sub    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rax,%rdx
  mov    -0x48(%rbp),%eax
  cltq
  mov    -0x30(%rbp,%rax,4),%eax
  cltq
  mov    (%rdx,%rax,4),%edx
  mov    -0x38(%rbp),%esi
  mov    -0x38(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_mul@plt>
  addl   $0x1,-0x48(%rbp)
L10:
  cmpl   $0x6,-0x48(%rbp)
  jle    L137
  mov    D9(%rip),%rax
  mov    (%rax),%ecx
  mov    -0x38(%rbp),%edx
  mov    -0x54(%rbp),%esi
  mov    -0x54(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_add@plt>
  movl   $0x6,-0x44(%rbp)
  movl   $0x6,-0x40(%rbp)
  jmp    L93
L98:
  subl   $0x1,-0x44(%rbp)
L93:
  cmpl   $0x0,-0x44(%rbp)
  jle    L108
  mov    -0x44(%rbp),%eax
  sub    $0x1,%eax
  cltq
  mov    -0x30(%rbp,%rax,4),%edx
  mov    -0x44(%rbp),%eax
  cltq
  mov    -0x30(%rbp,%rax,4),%eax
  cmp    %eax,%edx
  jge    L98
L108:
  cmpl   $0x0,-0x44(%rbp)
  je     L59
  jmp    L37
L114:
  subl   $0x1,-0x40(%rbp)
L37:
  mov    -0x40(%rbp),%eax
  cltq
  mov    -0x30(%rbp,%rax,4),%edx
  mov    -0x44(%rbp),%eax
  sub    $0x1,%eax
  cltq
  mov    -0x30(%rbp,%rax,4),%eax
  cmp    %eax,%edx
  jle    L114
  mov    -0x44(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x40(%rbp)
  je     L115
  mov    -0x44(%rbp),%eax
  sub    $0x1,%eax
  cltq
  mov    -0x30(%rbp,%rax,4),%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x44(%rbp),%eax
  lea    -0x1(%rax),%ecx
  mov    -0x40(%rbp),%eax
  cltq
  mov    -0x30(%rbp,%rax,4),%edx
  movslq %ecx,%rax
  mov    %edx,-0x30(%rbp,%rax,4)
  mov    -0x40(%rbp),%eax
  cltq
  mov    -0x34(%rbp),%edx
  mov    %edx,-0x30(%rbp,%rax,4)
  negl   -0x50(%rbp)
L115:
  movl   $0x6,-0x3c(%rbp)
  jmp    L77
L14:
  mov    -0x3c(%rbp),%eax
  cltq
  mov    -0x30(%rbp,%rax,4),%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x44(%rbp),%eax
  cltq
  mov    -0x30(%rbp,%rax,4),%edx
  mov    -0x3c(%rbp),%eax
  cltq
  mov    %edx,-0x30(%rbp,%rax,4)
  mov    -0x44(%rbp),%eax
  cltq
  mov    -0x34(%rbp),%edx
  mov    %edx,-0x30(%rbp,%rax,4)
  negl   -0x50(%rbp)
  subl   $0x1,-0x3c(%rbp)
  addl   $0x1,-0x44(%rbp)
L77:
  mov    -0x3c(%rbp),%eax
  cmp    -0x44(%rbp),%eax
  jg     L14
  jmp    L148
L59:
  nop
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L94
  call   <__stack_chk_fail@plt>
L94:
  leave
  ret
```

assistant: ```c
void determinant_poorly(mpfr_t det, mpfr_t A[][5 + 2]) {
  int sgn = 1;
  int sigma[5 + 2];
  mpfr_t prod;
  for (int j = 0; j < (5 + 2); ++j) {
    sigma[j] = j;
  }
  mpfr_set_si(det, 0, MPFR_RNDN);
  mpfr_init2(prod, 200);
  while (1) {
    mpfr_set_si(prod, sgn, MPFR_RNDN);
    for (int j = 0; j < (5 + 2); ++j) {
      mpfr_mul(prod, prod, A[j][sigma[j]], MPFR_RNDN);
    }
    mpfr_add(det, det, prod, MPFR_RNDN);
    int k = 5 + 1;
    int j = 5 + 1;
    int t;
    while (k > 0 && sigma[k - 1] >= sigma[k]) {
      k--;
    }
    if (!k) {
      break;
    }
    while (sigma[j] <= sigma[k - 1]) {
      j--;
    }
    if (k - 1 != j) {
      t = sigma[k - 1];
      sigma[k - 1] = sigma[j];
      sigma[j] = t;
      sgn *= -1;
    }
    for (int l = 5 + 1; l > k; --l, ++k) {
      t = sigma[l];
      sigma[l] = sigma[k];
      sigma[k] = t;
      sgn *= -1;
    }
  }
}
```