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

```asm
<get_evec>:
  endbr64
  push   %r15
  movapd %xmm1,%xmm4
  mov    %r8d,%r15d
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  mov    %rcx,%rbp
  push   %rbx
  mov    %rdx,%rbx
  sub    $0x58,%rsp
  movq   D26(%rip),%xmm3
  mov    0x90(%rsp),%rax
  mov    %rsi,(%rsp)
  mov    %r8d,%esi
  andpd  %xmm3,%xmm4
  movsd  %xmm0,0x28(%rsp)
  imul   %r8d,%esi
  maxsd  %xmm4,%xmm0
  mov    %rax,0x20(%rsp)
  mov    0x98(%rsp),%rax
  mov    %r9d,0x30(%rsp)
  mov    %rax,0x38(%rsp)
  movl   $0x0,(%rax)
  movapd %xmm0,%xmm4
  test   %esi,%esi
  je     L40
  lea    -0x1(%rsi),%eax
  cmp    $0x2,%eax
  jbe    L214
  mov    (%rsp),%rdx
  lea    0x8(%rdi),%rax
  cmp    %rax,%rdx
  je     L214
  mov    %esi,%ecx
  xor    %eax,%eax
  shr    %ecx
  shl    $0x4,%rcx
  nopl   0x0(%rax)
L319:
  movupd (%rdi,%rax,1),%xmm7
  movups %xmm7,(%rdx,%rax,1)
  add    $0x10,%rax
  cmp    %rcx,%rax
  jne    L319
  mov    %esi,%eax
  and    $0xfffffffe,%eax
  and    $0x1,%esi
  je     L40
  movsd  (%rdi,%rax,8),%xmm0
  mov    (%rsp),%rdi
  movsd  %xmm0,(%rdi,%rax,8)
L40:
  test   %r15d,%r15d
  jle    L15
  movsd  0x28(%rsp),%xmm7
  lea    0x1(%r15),%esi
  mov    (%rsp),%rax
  xor    %ecx,%ecx
  movslq %esi,%rsi
  movapd %xmm7,%xmm2
  shl    $0x3,%rsi
  mulsd  %xmm7,%xmm2
  mulsd  %xmm4,%xmm2
  xchg   %ax,%ax
L185:
  movsd  (%rax),%xmm0
  add    $0x1,%ecx
  subsd  %xmm1,%xmm0
  subsd  %xmm2,%xmm0
  movsd  %xmm0,(%rax)
  add    %rsi,%rax
  cmp    %ecx,%r15d
  jne    L185
  mov    0x38(%rsp),%r14
  mov    0x20(%rsp),%rcx
  xor    %eax,%eax
  mov    %r15d,%edx
  mov    (%rsp),%rdi
  mov    %r15d,%esi
  xor    %r13d,%r13d
  movslq %r15d,%r12
  mov    %r14,%r8
  call   <sgefa@plt>
  cmpl   $0xffffffff,(%r14)
  jne    L314
  nopl   0x0(%rax)
L58:
  xor    %eax,%eax
  call   <ndrand48@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  D12(%rip),%xmm0
  addsd  D56(%rip),%xmm0
  movsd  %xmm0,(%rbx,%r13,8)
  movsd  %xmm0,0x0(%rbp,%r13,8)
  add    $0x1,%r13
  cmp    %r13,%r12
  jne    L58
L85:
  mov    0x38(%rsp),%rax
  mov    %r15d,%edi
  lea    -0x1(%r15),%edx
  lea    -0x2(%r15),%r13d
  and    $0xfffffffe,%edi
  mov    %rbx,0x48(%rsp)
  mov    %rbx,%r8
  movl   $0x0,(%rax)
  mov    %r15d,%eax
  movslq %edi,%r12
  shr    %eax
  mov    %edi,0x1c(%rsp)
  sub    $0x1,%eax
  mov    %edi,0x40(%rsp)
  mov    %rax,%rcx
  lea    0x1(%rax),%r10
  mov    %edx,0x44(%rsp)
  shl    $0x4,%rcx
  lea    0x10(%rbx,%rcx,1),%r14
  lea    0x8(%rbx),%rcx
  cmp    %rcx,%rbp
  setne  %sil
  cmp    $0x1,%edx
  mov    %r15d,%edx
  seta   %cl
  shl    $0x3,%r12
  xor    %eax,%eax
  add    $0x2,%r13
  and    %ecx,%esi
  lea    (%rbx,%r12,1),%r11
  shl    $0x4,%r10
  add    %rbp,%r12
  mov    %sil,0x37(%rsp)
  mov    %r11,%rbx
  mov    %eax,%r15d
  nopl   0x0(%rax,%rax,1)
L317:
  mov    0x20(%rsp),%rcx
  mov    (%rsp),%rdi
  xor    %r9d,%r9d
  mov    %edx,%esi
  xor    %eax,%eax
  mov    %r10,0x10(%rsp)
  mov    %r8,0x8(%rsp)
  mov    %edx,0x18(%rsp)
  call   <sgesl@plt>
  mov    0x8(%rsp),%r8
  mov    0x18(%rsp),%edx
  movq   D26(%rip),%xmm3
  movapd D53(%rip),%xmm4
  movsd  (%r8),%xmm0
  test   %edx,%edx
  mov    0x10(%rsp),%r10
  movapd %xmm0,%xmm1
  andpd  %xmm3,%xmm1
  jle    L93
  cmp    $0x1,%edx
  je     L201
  mov    $0x1,%eax
  xor    %ecx,%ecx
  xchg   %ax,%ax
L235:
  movsd  (%r8,%rax,8),%xmm0
  andpd  %xmm3,%xmm0
  comisd %xmm1,%xmm0
  maxsd  %xmm1,%xmm0
  cmova  %eax,%ecx
  add    $0x1,%rax
  movapd %xmm0,%xmm1
  cmp    %r13,%rax
  jne    L235
  movslq %ecx,%rcx
  mov    %r8,%rax
  movsd  (%r8,%rcx,8),%xmm1
  movapd %xmm1,%xmm2
  unpcklpd %xmm2,%xmm2
  cs nopw 0x0(%rax,%rax,1)
L145:
  movupd (%rax),%xmm0
  add    $0x10,%rax
  divpd  %xmm2,%xmm0
  movups %xmm0,-0x10(%rax)
  cmp    %r14,%rax
  jne    L145
  movslq 0x1c(%rsp),%rax
  cmp    %eax,%edx
  je     L73
L104:
  lea    (%r8,%rax,8),%rax
  movsd  (%rax),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
L73:
  cmpb   $0x0,0x37(%rsp)
  je     L74
  xor    %eax,%eax
  pxor   %xmm0,%xmm0
  nop
L212:
  movupd (%r8,%rax,1),%xmm5
  movupd 0x0(%rbp,%rax,1),%xmm6
  movapd %xmm5,%xmm2
  movups %xmm5,0x0(%rbp,%rax,1)
  add    $0x10,%rax
  subpd  %xmm6,%xmm2
  andpd  %xmm4,%xmm2
  addsd  %xmm2,%xmm0
  unpckhpd %xmm2,%xmm2
  addsd  %xmm2,%xmm0
  cmp    %r10,%rax
  jne    L212
  cmp    0x1c(%rsp),%edx
  je     L4
  movsd  (%rbx),%xmm2
  movapd %xmm2,%xmm1
  subsd  (%r12),%xmm1
  movsd  %xmm2,(%r12)
  andpd  %xmm3,%xmm1
  addsd  %xmm1,%xmm0
L4:
  movsd  0x28(%rsp),%xmm7
  comisd %xmm0,%xmm7
  ja     L174
L150:
  add    $0x1,%r15d
  cmp    0x30(%rsp),%r15d
  jle    L317
  lea    D34(%rip),%rdi
  xor    %eax,%eax
  call   <plintf@plt>
  mov    0x38(%rsp),%rax
  movl   $0x1,(%rax)
L175:
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L74:
  mov    0x44(%rsp),%esi
  xor    %eax,%eax
  pxor   %xmm0,%xmm0
  nopw   0x0(%rax,%rax,1)
L154:
  movsd  (%r8,%rax,8),%xmm2
  mov    %rax,%rcx
  movapd %xmm2,%xmm1
  subsd  0x0(%rbp,%rax,8),%xmm1
  movsd  %xmm2,0x0(%rbp,%rax,8)
  add    $0x1,%rax
  andpd  %xmm3,%xmm1
  addsd  %xmm1,%xmm0
  cmp    %rcx,%rsi
  jne    L154
  movsd  0x28(%rsp),%xmm7
  comisd %xmm0,%xmm7
  jbe    L150
L174:
  mov    0x38(%rsp),%rax
  mov    %r8,%rbx
  mov    %edx,%r15d
  mov    (%rax),%ecx
  test   %ecx,%ecx
  jne    L175
  movsd  (%r8),%xmm0
  movapd %xmm0,%xmm1
  andpd  %xmm3,%xmm1
  test   %edx,%edx
  jle    L175
  cmp    $0x1,%edx
  je     L196
  lea    -0x2(%rdx),%esi
  mov    $0x1,%eax
  add    $0x2,%rsi
  nopl   (%rax)
L296:
  movsd  (%rbx,%rax,8),%xmm0
  andpd  %xmm3,%xmm0
  comisd %xmm1,%xmm0
  maxsd  %xmm1,%xmm0
  cmova  %eax,%ecx
  add    $0x1,%rax
  movapd %xmm0,%xmm1
  cmp    %rax,%rsi
  jne    L296
  movslq %ecx,%rcx
  mov    0x48(%rsp),%rax
  movsd  (%rbx,%rcx,8),%xmm1
  movapd %xmm1,%xmm2
  unpcklpd %xmm2,%xmm2
  xchg   %ax,%ax
L51:
  movupd (%rax),%xmm0
  add    $0x10,%rax
  divpd  %xmm2,%xmm0
  movups %xmm0,-0x10(%rax)
  cmp    %rax,%r14
  jne    L51
  cmp    0x1c(%rsp),%r15d
  je     L175
L169:
  movslq 0x40(%rsp),%rax
  lea    (%rbx,%rax,8),%rax
  movsd  (%rax),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L93:
  pxor   %xmm0,%xmm0
  jmp    L4
  nopl   0x0(%rax)
L201:
  movapd %xmm0,%xmm1
  xor    %eax,%eax
  jmp    L104
L15:
  mov    0x38(%rsp),%r14
  mov    0x20(%rsp),%rcx
  xor    %eax,%eax
  mov    %r15d,%edx
  mov    (%rsp),%rdi
  mov    %r15d,%esi
  mov    %r14,%r8
  call   <sgefa@plt>
  cmpl   $0xffffffff,(%r14)
  je     L85
L314:
  add    $0x58,%rsp
  lea    D43(%rip),%rdi
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    10b0 <plintf@plt>
L214:
  mov    (%rsp),%rdx
  xor    %eax,%eax
  nopl   (%rax)
L128:
  movsd  (%rdi,%rax,8),%xmm0
  movsd  %xmm0,(%rdx,%rax,8)
  add    $0x1,%rax
  cmp    %rsi,%rax
  jne    L128
  jmp    L40
L196:
  movl   $0x0,0x40(%rsp)
  movapd %xmm0,%xmm1
  jmp    L169
```

tool_calls: name: extract_symbolic_data
arguments: label: D26
datatype: qword
name: extract_symbolic_data
arguments: label: D12
datatype: byte[8]
name: extract_symbolic_data
arguments: label: D56
datatype: f32[2]
name: extract_symbolic_data
arguments: label: D53
datatype: qword[2]
name: extract_symbolic_data
arguments: label: D34
datatype: string
name: extract_symbolic_data
arguments: label: D43
datatype: string

tool: D26: 9223372036854775807

tool: {"D12": [0x9a,0x99,0x99,0x99,0x99,0x99,0xb9,0x3f]}

tool: {"D56": [0.0,1.875]}

tool: {"D53": [0x7fffffffffffffff,0x7fffffffffffffff]}

tool: D34:  max iterates exceeded


tool: D43:  Pivot failed


assistant: ```c
void get_evec(a, anew, b, bp, n, maxit, err, ipivot, eval, ierr) double *a, *anew, *b, *bp, err, eval;
int n, maxit, *ipivot, *ierr;
{
  int j, iter, jmax;
  double temp;
  double zz = fabs(eval);
  if (zz < err)
    zz = err;
  *ierr = 0;
  for (j = 0; j < n * n; j++) {
    anew[j] = a[j];
  }
  for (j = 0; j < n; j++)
    anew[j * (1 + n)] = anew[j * (1 + n)] - eval - err * err * zz;
  sgefa(anew, n, n, ipivot, ierr);
  if (*ierr != -1) {
    plintf(" Pivot failed\n");
    return;
  }
  for (j = 0; j < n; j++) {
    b[j] = 1 + .1 * ndrand48();
    bp[j] = b[j];
  }
  iter = 0;
  *ierr = 0;
  while (1) {
    sgesl(anew, n, n, ipivot, b, 0);
    temp = fabs(b[0]);
    jmax = 0;
    for (j = 0; j < n; j++) {
      if (fabs(b[j]) > temp) {
        temp = fabs(b[j]);
        jmax = j;
      }
    }
    temp = b[jmax];
    for (j = 0; j < n; j++)
      b[j] = b[j] / temp;
    temp = 0.0;
    for (j = 0; j < n; j++) {
      temp = temp + fabs(b[j] - bp[j]);
      bp[j] = b[j];
    }
    if (temp < err)
      break;
    iter++;
    if (iter > maxit) {
      plintf(" max iterates exceeded\n");
      *ierr = 1;
      break;
    }
  }
  if (*ierr == 0) {
    temp = fabs(b[0]);
    jmax = 0;
    for (j = 0; j < n; j++) {
      if (fabs(b[j]) > temp) {
        temp = fabs(b[j]);
        jmax = j;
      }
    }
    temp = b[jmax];
    for (j = 0; j < n; j++)
      b[j] = b[j] / temp;
  }
  return;
}
```