user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<eigens>:
  endbr64
  push   %r15
  mov    %ecx,%eax
  mov    %rdi,%r10
  push   %r14
  imul   %ecx,%eax
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xa8,%rsp
  mov    %rsi,0x30(%rsp)
  mov    %rdx,0x68(%rsp)
  mov    %ecx,0x54(%rsp)
  test   %eax,%eax
  je     L265
  cltq
  mov    %rsi,%rdi
  xor    %esi,%esi
  mov    %r10,(%rsp)
  lea    0x0(,%rax,8),%rdx
  call   <memset@plt>
  mov    (%rsp),%r10
L265:
  mov    0x54(%rsp),%ecx
  test   %ecx,%ecx
  jle    L101
  movslq 0x54(%rsp),%rax
  xor    %r9d,%r9d
  movsd  D26(%rip),%xmm12
  lea    0x8(,%rax,8),%rdx
  mov    0x30(%rsp),%rax
L298:
  mov    %r9d,(%rsp)
  add    $0x1,%r9d
  movsd  %xmm12,(%rax)
  add    %rdx,%rax
  cmp    %r9d,0x54(%rsp)
  jne    L298
  pxor   %xmm8,%xmm8
  mov    (%rsp),%esi
  xor    %ecx,%ecx
  movapd %xmm8,%xmm0
L93:
  xor    %edx,%edx
  lea    0x1(%rcx),%edi
  cmp    %edx,%ecx
  je     L343
L180:
  mov    %edx,%eax
  imul   %edx,%eax
  add    %edx,%eax
  sar    %eax
  add    %ecx,%eax
  cltq
  movsd  (%r10,%rax,8),%xmm1
  lea    0x1(%rdx),%eax
  mulsd  %xmm1,%xmm1
  addsd  %xmm1,%xmm0
  cmp    %edx,%esi
  je     L83
L335:
  mov    %eax,%edx
  cmp    %edx,%ecx
  jne    L180
L343:
  mov    %edi,%eax
  cmp    %ecx,%esi
  jne    L335
L83:
  cmp    %esi,%ecx
  je     L244
  mov    %edi,%ecx
  jmp    L93
  xchg   %ax,%ax
L59:
  add    %r9d,0x50(%rsp)
  mov    (%rsp),%edi
  add    %r9d,0x44(%rsp)
  cmp    %edi,0x40(%rsp)
  jne    L2
  mov    %r9d,%r10d
  mov    %r13,%r9
  test   %eax,%eax
  jne    L39
L329:
  movsd  0x48(%rsp),%xmm13
  comisd 0x60(%rsp),%xmm13
  ja     L35
  mov    %r9,%r10
L279:
  mov    $0x1,%eax
  xor    %edx,%edx
L300:
  add    %eax,%edx
  mov    0x68(%rsp),%rbx
  movslq %edx,%rcx
  movsd  -0x8(%r10,%rcx,8),%xmm0
  movsd  %xmm0,-0x8(%rbx,%rax,8)
  add    $0x1,%rax
  cmp    %eax,0x54(%rsp)
  jge    L300
L101:
  add    $0xa8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L244:
  comisd %xmm0,%xmm8
  jae    L279
  addsd  %xmm0,%xmm0
  ucomisd %xmm0,%xmm8
  ja     L216
  sqrtsd %xmm0,%xmm0
  movapd %xmm0,%xmm13
L281:
  movsd  D116(%rip),%xmm0
  pxor   %xmm7,%xmm7
  cvtsi2sd %r9d,%xmm7
  mulsd  %xmm13,%xmm0
  movsd  %xmm7,0x58(%rsp)
  divsd  %xmm7,%xmm0
  comisd %xmm0,%xmm13
  movsd  %xmm0,0x60(%rsp)
  jbe    L279
  movq   D86(%rip),%xmm11
  mov    %r10,%rax
  mov    %r9d,%r10d
  mov    %rax,%r9
L35:
  divsd  0x58(%rsp),%xmm13
  movsd  %xmm13,0x48(%rsp)
L39:
  mov    (%rsp),%edx
  test   %edx,%edx
  je     L329
  mov    %r10d,0x50(%rsp)
  mov    %r9,%r13
  xor    %eax,%eax
  mov    %r10d,%r9d
  movl   $0x0,0x44(%rsp)
  movl   $0x0,0x40(%rsp)
  xchg   %ax,%ax
L2:
  mov    0x40(%rsp),%edi
  mov    %edi,0x2c(%rsp)
  mov    %edi,%r12d
  add    $0x1,%edi
  mov    %edi,0x40(%rsp)
  mov    %edi,%ebx
  cmp    %edi,%r9d
  jle    L59
  mov    %edi,%edx
  movslq 0x44(%rsp),%rcx
  mov    0x50(%rsp),%r10d
  imul   %r12d,%edx
  movsd  0x48(%rsp),%xmm13
  mov    %rcx,0x38(%rsp)
  sar    %edx
  mov    %edx,0x28(%rsp)
  add    %r12d,%edx
  movslq %edx,%rdx
  lea    0x0(%r13,%rdx,8),%rdi
  mov    %rdi,0x10(%rsp)
  mov    0x30(%rsp),%rdi
  lea    (%rdi,%rcx,8),%r14
  jmp    L34
  nopw   0x0(%rax,%rax,1)
L255:
  lea    0x1(%rbx),%edx
  add    %r9d,%r10d
  cmp    (%rsp),%ebx
  je     L59
  mov    %edx,%ebx
L34:
  mov    %ebx,%edx
  imul   %ebx,%edx
  add    %ebx,%edx
  mov    %edx,%ebp
  shr    $0x1f,%ebp
  add    %edx,%ebp
  sar    %ebp
  lea    0x0(%rbp,%r12,1),%edx
  movslq %edx,%rdx
  lea    0x0(%r13,%rdx,8),%r15
  movsd  (%r15),%xmm4
  movapd %xmm4,%xmm0
  andpd  %xmm11,%xmm0
  comisd %xmm0,%xmm13
  ja     L255
  mov    0x10(%rsp),%rax
  movsd  D68(%rip),%xmm2
  movapd %xmm4,%xmm0
  movapd %xmm4,%xmm1
  mulsd  %xmm4,%xmm0
  xorpd  D107(%rip),%xmm1
  movsd  (%rax),%xmm6
  lea    0x0(%rbp,%rbx,1),%eax
  cltq
  lea    0x0(%r13,%rax,8),%rax
  movapd %xmm6,%xmm5
  movsd  (%rax),%xmm7
  mov    %rax,0x18(%rsp)
  subsd  %xmm7,%xmm5
  mulsd  %xmm5,%xmm2
  movsd  %xmm5,0x20(%rsp)
  movapd %xmm2,%xmm3
  mulsd  %xmm2,%xmm3
  addsd  %xmm3,%xmm0
  ucomisd %xmm0,%xmm8
  ja     L208
  sqrtsd %xmm0,%xmm0
L1:
  divsd  %xmm0,%xmm1
  comisd %xmm2,%xmm8
  jbe    L48
  xorpd  D107(%rip),%xmm1
L48:
  movapd %xmm1,%xmm2
  movapd %xmm12,%xmm0
  mulsd  %xmm1,%xmm2
  subsd  %xmm2,%xmm0
  ucomisd %xmm0,%xmm8
  ja     L382
  sqrtsd %xmm0,%xmm0
L398:
  addsd  %xmm12,%xmm0
  addsd  %xmm0,%xmm0
  ucomisd %xmm0,%xmm8
  ja     L385
  sqrtsd %xmm0,%xmm0
L82:
  divsd  %xmm0,%xmm1
  movapd %xmm12,%xmm0
  movapd %xmm1,%xmm10
  mulsd  %xmm1,%xmm10
  subsd  %xmm10,%xmm0
  ucomisd %xmm0,%xmm8
  ja     L364
  sqrtsd %xmm0,%xmm0
L61:
  mov    0x2c(%rsp),%eax
  movapd %xmm0,%xmm5
  movapd %xmm1,%xmm9
  mulsd  %xmm0,%xmm5
  mulsd  %xmm0,%xmm9
  test   %eax,%eax
  je     L69
  cmp    %r12d,%r9d
  movslq %r10d,%rdi
  mov    %r12d,%r8d
  mov    %r14,%rax
  cmovle %r9d,%r8d
  mov    %rdi,0x8(%rsp)
  xor    %edx,%edx
  sub    0x38(%rsp),%rdi
  jmp    L388
  nopw   0x0(%rax,%rax,1)
L64:
  mov    %ecx,%edx
L388:
  lea    0x1(%rdx),%ecx
  cmp    %edx,%ebx
  je     L185
  cmp    %edx,%r12d
  je     L185
  mov    %ecx,%esi
  lea    (%rdx,%rbp,1),%r11d
  movapd %xmm1,%xmm14
  imul   %edx,%esi
  sar    %esi
  add    %ebx,%esi
  cmp    %edx,%ebx
  cmovge %r11d,%esi
  mov    0x28(%rsp),%r11d
  movslq %esi,%rsi
  add    %edx,%r11d
  lea    0x0(%r13,%rsi,8),%rsi
  movslq %r11d,%r11
  movsd  (%rsi),%xmm3
  lea    0x0(%r13,%r11,8),%r11
  movsd  (%r11),%xmm2
  movapd %xmm3,%xmm15
  mulsd  %xmm2,%xmm14
  mulsd  %xmm0,%xmm15
  mulsd  %xmm0,%xmm2
  mulsd  %xmm1,%xmm3
  addsd  %xmm15,%xmm14
  subsd  %xmm3,%xmm2
  movsd  %xmm14,(%rsi)
  movsd  %xmm2,(%r11)
L185:
  movsd  (%rax),%xmm2
  movsd  (%rax,%rdi,8),%xmm3
  movapd %xmm1,%xmm15
  movslq %ecx,%rsi
  mulsd  %xmm3,%xmm15
  movapd %xmm2,%xmm14
  mulsd  %xmm0,%xmm14
  mulsd  %xmm1,%xmm2
  mulsd  %xmm0,%xmm3
  subsd  %xmm15,%xmm14
  addsd  %xmm3,%xmm2
  movsd  %xmm14,(%rax)
  movsd  %xmm2,(%rax,%rdi,8)
  add    $0x8,%rax
  cmp    %r8d,%ecx
  jl     L64
  cmp    (%rsp),%edx
  jge    L132
L47:
  mov    0x30(%rsp),%rax
  mov    0x8(%rsp),%rdi
  lea    (%rax,%rdi,8),%rdi
L70:
  cmp    %esi,%r12d
  je     L79
  cmp    %esi,%ebx
  je     L79
  lea    0x0(%rbp,%rsi,1),%edx
  movapd %xmm0,%xmm14
  movapd %xmm1,%xmm15
  mov    %esi,%eax
  imul   %esi,%eax
  add    %esi,%eax
  sar    %eax
  cmp    %ebx,%esi
  lea    (%rbx,%rax,1),%r8d
  cmovg  %r8d,%edx
  add    %r12d,%eax
  cltq
  movslq %edx,%rdx
  lea    0x0(%r13,%rax,8),%rax
  lea    0x0(%r13,%rdx,8),%rdx
  movsd  (%rax),%xmm2
  movsd  (%rdx),%xmm3
  mulsd  %xmm2,%xmm15
  mulsd  %xmm3,%xmm14
  mulsd  %xmm0,%xmm2
  mulsd  %xmm1,%xmm3
  addsd  %xmm15,%xmm14
  subsd  %xmm3,%xmm2
  movsd  %xmm14,(%rdx)
  movsd  %xmm2,(%rax)
L79:
  movsd  (%r14,%rsi,8),%xmm3
  movsd  (%rdi,%rsi,8),%xmm2
  movapd %xmm0,%xmm14
  movapd %xmm1,%xmm15
  mulsd  %xmm3,%xmm14
  mulsd  %xmm2,%xmm15
  mulsd  %xmm1,%xmm3
  mulsd  %xmm0,%xmm2
  subsd  %xmm15,%xmm14
  addsd  %xmm3,%xmm2
  movsd  %xmm14,(%r14,%rsi,8)
  movsd  %xmm2,(%rdi,%rsi,8)
  add    $0x1,%rsi
  cmp    %esi,%r9d
  jg     L70
L132:
  movapd %xmm6,%xmm0
  movapd %xmm7,%xmm2
  movapd %xmm4,%xmm1
  mov    0x10(%rsp),%rax
  mulsd  %xmm5,%xmm0
  addsd  %xmm4,%xmm1
  mulsd  %xmm10,%xmm2
  mulsd  %xmm5,%xmm7
  subsd  %xmm10,%xmm5
  mulsd  %xmm10,%xmm6
  mulsd  %xmm9,%xmm1
  mulsd  %xmm4,%xmm5
  mulsd  0x20(%rsp),%xmm9
  addsd  %xmm2,%xmm0
  addsd  %xmm7,%xmm6
  subsd  %xmm1,%xmm0
  addsd  %xmm1,%xmm6
  addsd  %xmm9,%xmm5
  movsd  %xmm0,(%rax)
  mov    0x18(%rsp),%rax
  movsd  %xmm6,(%rax)
  mov    $0x1,%eax
  movsd  %xmm5,(%r15)
  jmp    L255
  nopl   (%rax)
L69:
  movslq %r10d,%rax
  xor    %esi,%esi
  mov    %rax,0x8(%rsp)
  jmp    L47
L208:
  mov    %r10d,0x9c(%rsp)
  mov    %r9d,0x98(%rsp)
  movsd  %xmm13,0x90(%rsp)
  movsd  %xmm2,0x88(%rsp)
  movsd  %xmm7,0x80(%rsp)
  movsd  %xmm6,0x78(%rsp)
  movsd  %xmm4,0x70(%rsp)
  movsd  %xmm1,0x8(%rsp)
  call   <sqrt@plt>
  movsd  0x78(%rsp),%xmm6
  pxor   %xmm8,%xmm8
  mov    D26(%rip),%rax
  mov    0x9c(%rsp),%r10d
  movsd  0x70(%rsp),%xmm4
  mov    0x98(%rsp),%r9d
  movsd  0x8(%rsp),%xmm1
  movq   %rax,%xmm12
  movsd  0x90(%rsp),%xmm13
  movq   D86(%rip),%xmm11
  movsd  0x88(%rsp),%xmm2
  movsd  0x80(%rsp),%xmm7
  jmp    L1
L364:
  mov    %r10d,0x9c(%rsp)
  mov    %r9d,0x98(%rsp)
  movsd  %xmm13,0x90(%rsp)
  movsd  %xmm10,0x88(%rsp)
  movsd  %xmm1,0x80(%rsp)
  movsd  %xmm7,0x78(%rsp)
  movsd  %xmm6,0x70(%rsp)
  movsd  %xmm4,0x8(%rsp)
  call   <sqrt@plt>
  movsd  0x78(%rsp),%xmm7
  pxor   %xmm8,%xmm8
  mov    D26(%rip),%rax
  mov    0x9c(%rsp),%r10d
  movsd  0x70(%rsp),%xmm6
  mov    0x98(%rsp),%r9d
  movsd  0x8(%rsp),%xmm4
  movq   %rax,%xmm12
  movsd  0x90(%rsp),%xmm13
  movq   D86(%rip),%xmm11
  movsd  0x88(%rsp),%xmm10
  movsd  0x80(%rsp),%xmm1
  jmp    L61
L385:
  mov    %r10d,0x98(%rsp)
  mov    %r9d,0x90(%rsp)
  movsd  %xmm13,0x88(%rsp)
  movsd  %xmm7,0x80(%rsp)
  movsd  %xmm6,0x78(%rsp)
  movsd  %xmm4,0x70(%rsp)
  movsd  %xmm1,0x8(%rsp)
  call   <sqrt@plt>
  movsd  0x78(%rsp),%xmm6
  pxor   %xmm8,%xmm8
  mov    D26(%rip),%rax
  mov    0x98(%rsp),%r10d
  movsd  0x70(%rsp),%xmm4
  mov    0x90(%rsp),%r9d
  movsd  0x8(%rsp),%xmm1
  movq   %rax,%xmm12
  movsd  0x88(%rsp),%xmm13
  movq   D86(%rip),%xmm11
  movsd  0x80(%rsp),%xmm7
  jmp    L82
L382:
  mov    %r10d,0x98(%rsp)
  mov    %r9d,0x90(%rsp)
  movsd  %xmm13,0x88(%rsp)
  movsd  %xmm7,0x80(%rsp)
  movsd  %xmm6,0x78(%rsp)
  movsd  %xmm4,0x70(%rsp)
  movsd  %xmm1,0x8(%rsp)
  call   <sqrt@plt>
  movsd  0x78(%rsp),%xmm6
  pxor   %xmm8,%xmm8
  mov    D26(%rip),%rax
  mov    0x98(%rsp),%r10d
  movsd  0x70(%rsp),%xmm4
  mov    0x90(%rsp),%r9d
  movsd  0x8(%rsp),%xmm1
  movq   %rax,%xmm12
  movsd  0x88(%rsp),%xmm13
  movq   D86(%rip),%xmm11
  movsd  0x80(%rsp),%xmm7
  jmp    L398
L216:
  mov    %r10,0x8(%rsp)
  mov    %r9d,0x28(%rsp)
  call   <sqrt@plt>
  mov    0x8(%rsp),%r10
  mov    0x28(%rsp),%r9d
  pxor   %xmm8,%xmm8
  mov    D26(%rip),%rax
  movapd %xmm0,%xmm13
  movq   %rax,%xmm12
  jmp    L281
```

tool_calls: name: retrieve_data
arguments: data_tag: D26
type_infered: f64
name: retrieve_data
arguments: data_tag: D116
type_infered: byte[8]
name: retrieve_data
arguments: data_tag: D86
type_infered: qword
name: retrieve_data
arguments: data_tag: D68
type_infered: f32[2]
name: retrieve_data
arguments: data_tag: D107
type_infered: f32[4]

tool: D26: 1

tool: {"D116": [0xbb,0xbd,0xd7,0xd9,0xdf,0x7c,0xdb,0x3d]}

tool: D86: 9223372036854775807

tool: {"D68": [0.0,1.75]}

tool: {"D107": [0.0,-0.0,0.0,0.0]}

assistant: ```c
void eigens(A, RR, E, N) double A[], RR[], E[];
int N;
{
  int IND, L, LL, LM, M, MM, MQ, I, J, IA, LQ;
  int IQ, IM, IL, NLI, NMI;
  double ANORM, ANORMX, AIA, THR, ALM, ALL, AMM, X, Y;
  double SINX, SINX2, COSX, COSX2, SINCS, AIL, AIM;
  double RLI, RMI;
  static double RANGE = 1.0e-10;
  for (J = 0; J < N * N; J++)
    RR[J] = 0.0;
  MM = 0;
  for (J = 0; J < N; J++) {
    RR[MM + J] = 1.0;
    MM += N;
  }
  ANORM = 0.0;
  for (I = 0; I < N; I++) {
    for (J = 0; J < N; J++) {
      if (I != J) {
        IA = I + (J * J + J) / 2;
        AIA = A[IA];
        ANORM += AIA * AIA;
      }
    }
  }
  if (ANORM <= 0.0)
    goto done;
  ANORM = sqrt(ANORM + ANORM);
  ANORMX = ANORM * RANGE / N;
  THR = ANORM;
  while (THR > ANORMX) {
    THR = THR / N;
    do {
      IND = 0;
      for (L = 0; L < N - 1; L++) {
        for (M = L + 1; M < N; M++) {
          MQ = (M * M + M) / 2;
          LM = L + MQ;
          ALM = A[LM];
          if (fabs(ALM) < THR)
            continue;
          IND = 1;
          LQ = (L * L + L) / 2;
          LL = L + LQ;
          MM = M + MQ;
          ALL = A[LL];
          AMM = A[MM];
          X = (ALL - AMM) / 2.0;
          Y = -ALM / sqrt(ALM * ALM + X * X);
          if (X < 0.0)
            Y = -Y;
          SINX = Y / sqrt(2.0 * (1.0 + sqrt(1.0 - Y * Y)));
          SINX2 = SINX * SINX;
          COSX = sqrt(1.0 - SINX2);
          COSX2 = COSX * COSX;
          SINCS = SINX * COSX;
          for (I = 0; I < N; I++) {
            IQ = (I * I + I) / 2;
            if ((I != M) && (I != L)) {
              if (I > M)
                IM = M + IQ;
              else
                IM = I + MQ;
              if (I >= L)
                IL = L + IQ;
              else
                IL = I + LQ;
              AIL = A[IL];
              AIM = A[IM];
              X = AIL * COSX - AIM * SINX;
              A[IM] = AIL * SINX + AIM * COSX;
              A[IL] = X;
            }
            NLI = N * L + I;
            NMI = N * M + I;
            RLI = RR[NLI];
            RMI = RR[NMI];
            RR[NLI] = RLI * COSX - RMI * SINX;
            RR[NMI] = RLI * SINX + RMI * COSX;
          }
          X = 2.0 * ALM * SINCS;
          A[LL] = ALL * COSX2 + AMM * SINX2 - X;
          A[MM] = ALL * SINX2 + AMM * COSX2 + X;
          A[LM] = (ALL - AMM) * SINCS + ALM * (COSX2 - SINX2);
        }
      }
    } while (IND != 0);
  }
done:;
  L = 0;
  for (J = 1; J <= N; J++) {
    L = L + J;
    E[J - 1] = A[L - 1];
  }
}
```