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

```asm
<eigen>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  mov    %edi,-0x44(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %edx,-0x48(%rbp)
  mov    %rcx,-0x58(%rbp)
  mov    %r8,-0x60(%rbp)
  mov    %r9,-0x68(%rbp)
  mov    0x10(%rbp),%rax
  mov    %rax,-0x70(%rbp)
  mov    0x18(%rbp),%rax
  mov    %rax,-0x78(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x1c(%rbp)
  movsd  D3(%rip),%xmm0
  mov    D1(%rip),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  mov    %eax,%edi
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x78(%rbp),%rdi
  lea    -0x30(%rbp),%rcx
  lea    -0x34(%rbp),%rdx
  mov    -0x48(%rbp),%esi
  mov    -0x50(%rbp),%rax
  mov    %rdi,%r8
  mov    %rax,%rdi
  call   <balance@plt>
  mov    -0x48(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  lea    (%rdx,%rax,1),%rdi
  mov    -0x30(%rbp),%r8d
  mov    -0x34(%rbp),%ecx
  mov    -0x68(%rbp),%r9
  mov    -0x48(%rbp),%edx
  mov    -0x50(%rbp),%rsi
  mov    -0x44(%rbp),%eax
  push   %rdi
  push   -0x70(%rbp)
  mov    %eax,%edi
  call   <elemhess@plt>
  add    $0x10,%rsp
  mov    -0x30(%rbp),%edi
  mov    -0x34(%rbp),%ecx
  mov    -0x58(%rbp),%r8
  mov    -0x48(%rbp),%edx
  mov    -0x50(%rbp),%rsi
  mov    -0x44(%rbp),%eax
  sub    $0x8,%rsp
  push   -0x70(%rbp)
  push   -0x68(%rbp)
  push   -0x60(%rbp)
  mov    %r8,%r9
  mov    %edi,%r8d
  mov    %eax,%edi
  call   <realeig@plt>
  add    $0x20,%rsp
  cmp    $0xffffffff,%eax
  jne    L11
  mov    $0xffffffff,%eax
  jmp    L62
L11:
  cmpl   $0x0,-0x44(%rbp)
  je     L96
  mov    -0x30(%rbp),%edi
  mov    -0x34(%rbp),%ecx
  mov    -0x78(%rbp),%r8
  mov    -0x70(%rbp),%rdx
  mov    -0x68(%rbp),%rsi
  mov    -0x48(%rbp),%eax
  mov    %r8,%r9
  mov    %edi,%r8d
  mov    %eax,%edi
  call   <unbalance@plt>
L96:
  movl   $0x0,-0x2c(%rbp)
  jmp    L57
L102:
  mov    -0x2c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x2c(%rbp),%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  jmp    L22
L29:
  mov    -0x28(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L86
  mov    -0x28(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    -0x28(%rbp),%eax
  mov    %eax,-0x20(%rbp)
L86:
  addl   $0x1,-0x28(%rbp)
L22:
  mov    -0x28(%rbp),%eax
  cmp    -0x48(%rbp),%eax
  jl     L29
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rax,%rdx
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x58(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x60(%rbp),%rax
  add    %rax,%rdx
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x60(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movl   $0x0,-0x24(%rbp)
  jmp    L109
L1:
  mov    -0x24(%rbp),%eax
  imul   -0x48(%rbp),%eax
  mov    %eax,%edx
  mov    -0x20(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    -0x24(%rbp),%eax
  imul   -0x48(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x68(%rbp),%rax
  add    %rax,%rdx
  mov    -0x24(%rbp),%eax
  imul   -0x48(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x20(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x68(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x24(%rbp),%eax
  imul   -0x48(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x24(%rbp),%eax
  imul   -0x48(%rbp),%eax
  mov    %eax,%edx
  mov    -0x20(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    -0x24(%rbp),%eax
  imul   -0x48(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rax,%rdx
  mov    -0x24(%rbp),%eax
  imul   -0x48(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x20(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x70(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x24(%rbp),%eax
  imul   -0x48(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x24(%rbp)
L109:
  mov    -0x24(%rbp),%eax
  cmp    -0x48(%rbp),%eax
  jl     L1
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movq   D2(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x10(%rbp),%xmm0
  jbe    L99
  movl   $0x1,-0x1c(%rbp)
L99:
  addl   $0x1,-0x2c(%rbp)
L57:
  mov    -0x2c(%rbp),%eax
  cmp    -0x48(%rbp),%eax
  jl     L102
  mov    -0x1c(%rbp),%eax
L62:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L79
  call   <__stack_chk_fail@plt>
L79:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D3
type_infered: byte[8]
name: parse_data
arguments: data_label: D1
type_infered: f64
name: parse_data
arguments: data_label: D2
type_infered: qword

tool: {"D3": [0x00,0x00,0x00,0x00,0x00,0x80,0x43,0xc0]}

tool: D1: 2

tool: D2: 9223372036854775807

assistant: ```c
int eigen(int job, double *A, int n, double *rr, double *ri, double *vr, double *vi, double *work) {
  int low, hi, i, j, k, it, istate = 0;
  double tiny = sqrt(pow((double)2, (double)(1 - 40))), t;
  balance(A, n, &low, &hi, work);
  elemhess(job, A, n, low, hi, vr, vi, (int *)(work + n));
  if (-1 == realeig(job, A, n, low, hi, rr, ri, vr, vi))
    return (-1);
  if (job)
    unbalance(n, vr, vi, low, hi, work);
  for (i = 0; i < n; i++) {
    for (j = i + 1, it = i, t = rr[i]; j < n; j++)
      if (t < rr[j]) {
        t = rr[j];
        it = j;
      }
    rr[it] = rr[i];
    rr[i] = t;
    t = ri[it];
    ri[it] = ri[i];
    ri[i] = t;
    for (k = 0; k < n; k++) {
      t = vr[k * n + it];
      vr[k * n + it] = vr[k * n + i];
      vr[k * n + i] = t;
      t = vi[k * n + it];
      vi[k * n + it] = vi[k * n + i];
      vi[k * n + i] = t;
    }
    if (fabs(ri[i]) > tiny)
      istate = 1;
  }
  return (istate);
}
```