user: 这段汇编代码用C语言表示是什么样的：

```asm
<math_find_minimum_brent>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xf0,%rsp
  mov    %rdi,-0xa8(%rbp)
  mov    %rsi,-0xb0(%rbp)
  movsd  %xmm0,-0xb8(%rbp)
  movsd  %xmm1,-0xc0(%rbp)
  movsd  %xmm2,-0xc8(%rbp)
  mov    %rdx,-0xd0(%rbp)
  movsd  %xmm3,-0xd8(%rbp)
  mov    %ecx,-0xdc(%rbp)
  mov    %r8,-0xe8(%rbp)
  mov    %r9,-0xf0(%rbp)
  cmpq   $0x0,-0xd0(%rbp)
  jne    L186
  mov    -0xe8(%rbp),%rcx
  mov    -0xc0(%rbp),%rdx
  mov    -0xb0(%rbp),%rax
  mov    -0xa8(%rbp),%r8
  mov    %rcx,%rsi
  movq   %rdx,%xmm0
  mov    %rax,%rdi
  call   *%r8
  movq   %xmm0,%rax
  mov    %rax,-0x98(%rbp)
  jmp    L228
L186:
  mov    -0xd0(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x98(%rbp)
L228:
  movsd  -0xc8(%rbp),%xmm0
  subsd  -0xb8(%rbp),%xmm0
  movq   D44(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  -0xd8(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0xd8(%rbp)
  movsd  -0xc0(%rbp),%xmm0
  movsd  %xmm0,-0x90(%rbp)
  movsd  -0xc0(%rbp),%xmm0
  movsd  %xmm0,-0x88(%rbp)
  movsd  -0xc0(%rbp),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0x98(%rbp),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0x98(%rbp),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  -0x98(%rbp),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movl   $0x0,-0x9c(%rbp)
  jmp    L199
L437:
  movsd  -0xb8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  -0xc0(%rbp),%xmm1
  movsd  D199(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x90(%rbp),%xmm0
  movq   D44(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0xd8(%rbp),%xmm1
  movsd  D50(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x40(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  -0x90(%rbp),%xmm0
  subsd  -0x48(%rbp),%xmm0
  movq   D44(%rip),%xmm1
  andpd  %xmm0,%xmm1
  movsd  -0xc0(%rbp),%xmm0
  movapd %xmm0,%xmm2
  subsd  -0xb8(%rbp),%xmm2
  movsd  D199(%rip),%xmm0
  mulsd  %xmm0,%xmm2
  movsd  -0x38(%rbp),%xmm0
  subsd  %xmm2,%xmm0
  comisd %xmm1,%xmm0
  jae    L343
  movsd  -0x58(%rbp),%xmm0
  movq   D44(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x40(%rbp),%xmm0
  jbe    L284
  movsd  -0x90(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x88(%rbp),%xmm1
  movsd  -0x68(%rbp),%xmm0
  subsd  -0x70(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x90(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x80(%rbp),%xmm1
  movsd  -0x68(%rbp),%xmm0
  subsd  -0x78(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x90(%rbp),%xmm0
  subsd  -0x80(%rbp),%xmm0
  mulsd  -0x28(%rbp),%xmm0
  movsd  -0x90(%rbp),%xmm1
  subsd  -0x88(%rbp),%xmm1
  mulsd  -0x30(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  -0x28(%rbp),%xmm0
  subsd  -0x30(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x28(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L435
  movsd  -0x50(%rbp),%xmm0
  movq   D149(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  %xmm0,-0x50(%rbp)
L435:
  movsd  -0x28(%rbp),%xmm0
  movq   D44(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0x50(%rbp),%xmm0
  movq   D44(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  -0x28(%rbp),%xmm2
  movsd  D199(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movq   D44(%rip),%xmm2
  andpd  %xmm2,%xmm1
  comisd %xmm1,%xmm0
  jae    L11
  movsd  -0xb8(%rbp),%xmm0
  subsd  -0x90(%rbp),%xmm0
  mulsd  -0x28(%rbp),%xmm0
  comisd -0x50(%rbp),%xmm0
  jae    L11
  movsd  -0xc0(%rbp),%xmm0
  subsd  -0x90(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x28(%rbp),%xmm1
  movsd  -0x50(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jb     L261
L11:
  movsd  -0x90(%rbp),%xmm0
  comisd -0x48(%rbp),%xmm0
  jb     L216
  movsd  -0xb8(%rbp),%xmm0
  subsd  -0x90(%rbp),%xmm0
  jmp    L64
L216:
  movsd  -0xc0(%rbp),%xmm0
  subsd  -0x90(%rbp),%xmm0
L64:
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0x58(%rbp),%xmm1
  movsd  D110(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  jmp    L268
L261:
  movsd  -0x50(%rbp),%xmm0
  divsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x90(%rbp),%xmm0
  addsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x18(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0xb8(%rbp),%xmm1
  movsd  -0x38(%rbp),%xmm0
  comisd %xmm1,%xmm0
  ja     L416
  movsd  -0xc0(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x18(%rbp),%xmm1
  movsd  -0x38(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jbe    L268
L416:
  movsd  -0x48(%rbp),%xmm0
  subsd  -0x90(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L233
  movsd  -0x40(%rbp),%xmm0
  movq   D44(%rip),%xmm1
  andpd  %xmm1,%xmm0
  jmp    L135
L233:
  movsd  -0x40(%rbp),%xmm0
  movq   D44(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movq   D149(%rip),%xmm1
  xorpd  %xmm1,%xmm0
L135:
  movsd  %xmm0,-0x60(%rbp)
  jmp    L268
L284:
  movsd  -0x90(%rbp),%xmm0
  comisd -0x48(%rbp),%xmm0
  jb     L394
  movsd  -0xb8(%rbp),%xmm0
  subsd  -0x90(%rbp),%xmm0
  jmp    L123
L394:
  movsd  -0xc0(%rbp),%xmm0
  subsd  -0x90(%rbp),%xmm0
L123:
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0x58(%rbp),%xmm1
  movsd  D110(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x60(%rbp)
L268:
  movsd  -0x60(%rbp),%xmm0
  movq   D44(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x40(%rbp),%xmm0
  jb     L410
  movsd  -0x90(%rbp),%xmm0
  addsd  -0x60(%rbp),%xmm0
  jmp    L235
L410:
  movsd  -0x60(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L242
  movsd  -0x40(%rbp),%xmm0
  movq   D44(%rip),%xmm1
  andpd  %xmm1,%xmm0
  jmp    L346
L242:
  movsd  -0x40(%rbp),%xmm0
  movq   D44(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movq   D149(%rip),%xmm1
  xorpd  %xmm1,%xmm0
L346:
  addsd  -0x90(%rbp),%xmm0
L235:
  movsd  %xmm0,-0x10(%rbp)
  mov    -0xe8(%rbp),%rcx
  mov    -0x10(%rbp),%rdx
  mov    -0xb0(%rbp),%rax
  mov    -0xa8(%rbp),%r8
  mov    %rcx,%rsi
  movq   %rdx,%xmm0
  mov    %rax,%rdi
  call   *%r8
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  movsd  -0x68(%rbp),%xmm0
  comisd -0x8(%rbp),%xmm0
  jb     L155
  movsd  -0x10(%rbp),%xmm0
  comisd -0x90(%rbp),%xmm0
  jb     L356
  movsd  -0x90(%rbp),%xmm0
  movsd  %xmm0,-0xb8(%rbp)
  jmp    L257
L356:
  movsd  -0x90(%rbp),%xmm0
  movsd  %xmm0,-0xc0(%rbp)
L257:
  movsd  -0x88(%rbp),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0x90(%rbp),%xmm0
  movsd  %xmm0,-0x88(%rbp)
  movsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x90(%rbp)
  movsd  -0x78(%rbp),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  jmp    L332
L155:
  movsd  -0x90(%rbp),%xmm0
  comisd -0x10(%rbp),%xmm0
  jbe    L407
  movsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0xb8(%rbp)
  jmp    L184
L407:
  movsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0xc0(%rbp)
L184:
  movsd  -0x78(%rbp),%xmm0
  comisd -0x8(%rbp),%xmm0
  jae    L127
  movsd  -0x88(%rbp),%xmm0
  ucomisd -0x90(%rbp),%xmm0
  jp     L84
  movsd  -0x88(%rbp),%xmm0
  ucomisd -0x90(%rbp),%xmm0
  jne    L84
L127:
  movsd  -0x88(%rbp),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x88(%rbp)
  movsd  -0x78(%rbp),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  jmp    L332
L84:
  movsd  -0x70(%rbp),%xmm0
  comisd -0x8(%rbp),%xmm0
  jae    L256
  movsd  -0x80(%rbp),%xmm0
  ucomisd -0x90(%rbp),%xmm0
  jp     L137
  movsd  -0x80(%rbp),%xmm0
  ucomisd -0x90(%rbp),%xmm0
  je     L256
L137:
  movsd  -0x80(%rbp),%xmm0
  ucomisd -0x88(%rbp),%xmm0
  jp     L332
  movsd  -0x80(%rbp),%xmm0
  ucomisd -0x88(%rbp),%xmm0
  jne    L332
L256:
  movsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,-0x70(%rbp)
L332:
  addl   $0x1,-0x9c(%rbp)
L199:
  mov    -0x9c(%rbp),%eax
  cmp    -0xdc(%rbp),%eax
  jl     L437
  jmp    L179
L343:
  nop
L179:
  cmpq   $0x0,-0xf0(%rbp)
  je     L159
  mov    -0xf0(%rbp),%rax
  movsd  -0x90(%rbp),%xmm0
  movsd  %xmm0,(%rax)
L159:
  cmpq   $0x0,0x10(%rbp)
  je     L56
  mov    0x10(%rbp),%rax
  movsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,(%rax)
L56:
  mov    -0x9c(%rbp),%eax
  cmp    -0xdc(%rbp),%eax
  jge    L400
  mov    -0x9c(%rbp),%eax
  jmp    L283
L400:
  mov    $0xffffffff,%eax
L283:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: label: D44
datatype: qword
name: unpack_data
arguments: label: D199
datatype: f64
name: unpack_data
arguments: label: D50
datatype: byte[8]
name: unpack_data
arguments: label: D149
datatype: f32[2]
name: unpack_data
arguments: label: D110
datatype: f64

tool: D44: 9223372036854775807

tool: D199: 0.5

tool: {"D50": [0x16,0x56,0xe7,0x9e,0xaf,0x03,0xd2,0x3c]}

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

tool: D110: 0.381966

assistant: ```c
int math_find_minimum_brent(double (*f)(const struct pumas_physics *physics, double x, void *params), const struct pumas_physics *physics, double xa, double xb, double xc, const double *fb_p, double tol, int max_iter, void *params, double *xopt, double *fopt) {
  double fb;
  if (fb_p == NULL)
    fb = (*f)(physics, xb, params);
  else
    fb = *fb_p;
  tol *= fabs(xc - xa);
  double x = xb, w = xb, v = xb;
  double fw = fb, fv = fb, fx = fb;
  double d = 0., e = 0.;
  int i;
  for (i = 0; i < max_iter; i++) {
    const double xm = 0.5 * (xa + xb);
    const double tol1 = tol * fabs(x) + 1E-15;
    const double tol2 = 2 * tol1;
    if (fabs(x - xm) <= (tol2 - 0.5 * (xb - xa))) {
      break;
    }
    if (fabs(e) > tol1) {
      const double r = (x - w) * (fx - fv);
      double q = (x - v) * (fx - fw);
      double p = (x - v) * q - (x - w) * r;
      q = 2. * (q - r);
      if (q > 0.)
        p = -p;
      q = fabs(q);
      const double etemp = e;
      e = d;
      if (fabs(p) >= fabs(0.5 * q * etemp) || (p <= q * (xa - x)) || (p >= q * (xb - x))) {
        e = (x >= xm) ? xa - x : xb - x;
        d = 0.3819660 * e;
      } else {
        d = p / q;
        const double u = x + d;
        if ((u - xa < tol2) || (xb - u < tol2)) {
          d = ((xm - x) >= 0.0 ? fabs(tol1) : -fabs(tol1));
        }
      }
    } else {
      e = (x >= xm) ? xa - x : xb - x;
      d = 0.3819660 * e;
    }
    const double u = (fabs(d) >= tol1) ? x + d : x + ((d) >= 0.0 ? fabs(tol1) : -fabs(tol1));
    const double fu = (*f)(physics, u, params);
    if (fu <= fx) {
      if (u >= x) {
        xa = x;
      } else {
        xb = x;
      }
      v = w, w = x, x = u;
      fv = fw, fw = fx, fx = fu;
    } else {
      if (u < x) {
        xa = u;
      } else {
        xb = u;
      }
      if ((fu <= fw) || (w == x)) {
        v = w;
        w = u;
        fv = fw;
        fw = fu;
      } else if ((fu <= fv) || (v == x) || (v == w)) {
        v = u;
        fv = fu;
      }
    }
  }
  if (xopt != NULL)
    *xopt = x;
  if (fopt != NULL)
    *fopt = fx;
  return (i < max_iter) ? i : -1;
}
```