user: 请将以下的汇编代码转换成C语言代码：

```asm
<trsrch>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xd0,%rsp
  mov    %rdi,-0x68(%rbp)
  mov    %rsi,-0x70(%rbp)
  mov    %rdx,-0x78(%rbp)
  mov    %rcx,-0x80(%rbp)
  mov    %r8d,-0x84(%rbp)
  mov    %r9,-0x90(%rbp)
  movsd  %xmm0,-0x98(%rbp)
  movsd  %xmm1,-0xb0(%rbp)
  movsd  %xmm2,-0xc0(%rbp)
  mov    0x18(%rbp),%rax
  mov    %rax,-0xa0(%rbp)
  mov    0x20(%rbp),%rax
  mov    %rax,-0xa8(%rbp)
  mov    0x28(%rbp),%rax
  mov    %rax,-0xb8(%rbp)
  mov    0x30(%rbp),%rax
  mov    %rax,-0xc8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x4,-0x58(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  mov    -0xb8(%rbp),%rax
  add    $0x38,%rax
  movsd  D4(%rip),%xmm0
  movsd  %xmm0,(%rax)
  movl   $0x0,-0x4c(%rbp)
  mov    -0x84(%rbp),%eax
  cltq
  shl    $0x3,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    %rax,-0x28(%rbp)
  mov    -0x84(%rbp),%eax
  cltq
  shl    $0x3,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    %rax,-0x20(%rbp)
  mov    -0x84(%rbp),%eax
  cltq
  shl    $0x3,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    %rax,-0x18(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movl   $0x0,-0x54(%rbp)
  jmp    L125
L9:
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm0,%xmm1
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm0,%xmm1
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x38(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  addl   $0x1,-0x54(%rbp)
L125:
  mov    -0x54(%rbp),%eax
  cmp    -0x84(%rbp),%eax
  jl     L9
  mov    -0x38(%rbp),%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x38(%rbp)
  cmpl   $0x1,0x10(%rbp)
  je     L142
  mov    -0xb8(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  D22(%rip),%xmm1
  ucomisd %xmm1,%xmm0
  jp     L77
  movsd  D22(%rip),%xmm1
  ucomisd %xmm1,%xmm0
  jne    L133
L142:
  mov    -0xb8(%rbp),%rax
  add    $0x8,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  movl   $0x0,-0x54(%rbp)
  jmp    L127
L137:
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x54(%rbp)
L127:
  mov    -0x54(%rbp),%eax
  cmp    -0x84(%rbp),%eax
  jl     L137
  mov    -0x84(%rbp),%edx
  mov    -0x28(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <l2norm@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x10(%rbp)
  movsd  -0x10(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movl   $0x0,-0x54(%rbp)
  jmp    L145
L6:
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  mov    -0x54(%rbp),%eax
  mov    %eax,-0x50(%rbp)
  jmp    L136
L108:
  mov    -0x50(%rbp),%eax
  imul   -0x84(%rbp),%eax
  mov    %eax,%edx
  mov    -0x54(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm2
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mulsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  movsd  -0x30(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  addl   $0x1,-0x50(%rbp)
L136:
  mov    -0x50(%rbp),%eax
  cmp    -0x84(%rbp),%eax
  jl     L108
  movsd  -0x30(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  -0x40(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  addl   $0x1,-0x54(%rbp)
L145:
  mov    -0x54(%rbp),%eax
  cmp    -0x84(%rbp),%eax
  jl     L6
  mov    -0x10(%rbp),%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  mulsd  -0x10(%rbp),%xmm0
  divsd  -0x40(%rbp),%xmm0
  mov    -0xb8(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0xb8(%rbp),%rax
  movsd  (%rax),%xmm0
  comisd -0x98(%rbp),%xmm0
  jbe    L133
  mov    -0xb8(%rbp),%rax
  movsd  -0x98(%rbp),%xmm0
  movsd  %xmm0,(%rax)
L133:
  jmp    L77
L1:
  movsd  -0xc0(%rbp),%xmm0
  mov    -0x38(%rbp),%rdi
  mov    -0xa8(%rbp),%r9
  mov    -0xa0(%rbp),%r8
  mov    -0x90(%rbp),%rcx
  mov    -0x84(%rbp),%edx
  mov    -0x80(%rbp),%rsi
  mov    -0x78(%rbp),%rax
  push   -0x20(%rbp)
  push   -0xb8(%rbp)
  movapd %xmm0,%xmm1
  movq   %rdi,%xmm0
  mov    %rax,%rdi
  call   <trstep@plt>
  add    $0x10,%rsp
  mov    -0xb8(%rbp),%rax
  lea    0x10(%rax),%rdx
  mov    -0xb8(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,(%rdx)
  movsd  -0xb0(%rbp),%xmm0
  mov    -0x98(%rbp),%rdi
  mov    -0x90(%rbp),%r9
  mov    -0x84(%rbp),%r10d
  mov    -0x20(%rbp),%rcx
  mov    -0x78(%rbp),%rdx
  mov    -0x70(%rbp),%rsi
  mov    -0x68(%rbp),%rax
  push   -0xc8(%rbp)
  lea    -0x48(%rbp),%r8
  push   %r8
  push   -0x18(%rbp)
  push   -0xb8(%rbp)
  mov    -0x4c(%rbp),%r8d
  push   %r8
  push   -0xa8(%rbp)
  push   -0xa0(%rbp)
  mov    -0x58(%rbp),%r8d
  push   %r8
  movapd %xmm0,%xmm1
  movq   %rdi,%xmm0
  mov    %r10d,%r8d
  mov    %rax,%rdi
  call   <trupdate@plt>
  add    $0x40,%rsp
  mov    %eax,-0x58(%rbp)
L77:
  cmpl   $0x1,-0x58(%rbp)
  jle    L4
  cmpl   $0xf,-0x58(%rbp)
  jne    L1
L4:
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x58(%rbp),%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L38
  call   <__stack_chk_fail@plt>
L38:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D4
data_type: f64
name: extract_symbolic_data
arguments: tag: D22
data_type: f32[2]

tool: D4: 1

tool: {"D22": [0.0,-1.875]}

assistant: ```c
int trsrch(double (*funcpt)(double *, int), double *xi, double *jac, double *sN, int N, double *dx, double maxstep, int iter, double *L, double *hess, double stol, double *ioval, double eps, double *x) {
  int retval, i, j, method;
  double alpha, beta;
  double nlen, t1, funcprev;
  double *temp, *step, *xprev;
  retval = 4;
  nlen = 0.0;
  ioval[7] = 1.0;
  method = 0;
  temp = (double *)malloc(sizeof(double) * N);
  step = (double *)malloc(sizeof(double) * N);
  xprev = (double *)malloc(sizeof(double) * N);
  funcprev = 0.0;
  for (i = 0; i < N; ++i) {
    nlen += dx[i] * sN[i] * dx[i] * sN[i];
  }
  nlen = sqrt(nlen);
  if (iter == 1 || ioval[0] == -1) {
    ioval[1] = 0.;
    for (i = 0; i < N; ++i) {
      temp[i] = jac[i] / dx[i];
    }
    alpha = l2norm(temp, N);
    alpha = alpha * alpha;
    beta = 0;
    for (i = 0; i < N; ++i) {
      t1 = 0.;
      for (j = i; j < N; ++j) {
        t1 += L[j * N + i] * jac[j] / (dx[j] * dx[j]);
      }
      beta += t1 * t1;
    }
    ioval[0] = alpha * sqrt(alpha) / beta;
    if (ioval[0] > maxstep) {
      ioval[0] = maxstep;
    }
  }
  while (retval >= 2 && retval != 15) {
    trstep(jac, sN, N, dx, L, hess, nlen, ioval, eps, step);
    ioval[2] = ioval[0];
    retval = trupdate(funcpt, xi, jac, step, N, dx, maxstep, retval, L, hess, stol, method, ioval, xprev, &funcprev, x);
  }
  free(temp);
  free(step);
  free(xprev);
  return retval;
}
```