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

```asm
<dbrent>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x50,%rsp
  mov    %rdi,%r12
  mov    %rsi,%r13
  movss  %xmm3,0x48(%rsp)
  mov    %rdx,%r14
  movaps %xmm0,%xmm7
  minss  %xmm2,%xmm7
  movss  %xmm7,0x8(%rsp)
  maxss  %xmm2,%xmm0
  movss  %xmm0,0xc(%rsp)
  movss  %xmm1,0x40(%rsp)
  movaps %xmm1,%xmm0
  call   *%rdi
  movss  %xmm0,0x44(%rsp)
  movss  0x40(%rsp),%xmm0
  call   *%r13
  movss  %xmm0,0x38(%rsp)
  movss  0x40(%rsp),%xmm1
  movss  %xmm1,0x4(%rsp)
  movss  %xmm1,0x28(%rsp)
  movss  0x44(%rsp),%xmm3
  movss  %xmm3,0x24(%rsp)
  movss  %xmm3,0x2c(%rsp)
  movss  %xmm0,0x10(%rsp)
  movss  %xmm0,0x20(%rsp)
  mov    $0x64,%ebp
  mov    D31(%rip),%ebx
  jmp    L334
L149:
  movss  0x4(%rsp),%xmm2
  movss  %xmm2,(%r14)
L22:
  movss  0x24(%rsp),%xmm0
  add    $0x50,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L473:
  movss  0x28(%rsp),%xmm0
  subss  0x4(%rsp),%xmm0
  movss  0x10(%rsp),%xmm6
  mulss  %xmm6,%xmm0
  subss  0x20(%rsp),%xmm6
  divss  %xmm6,%xmm0
  movss  %xmm0,0x34(%rsp)
  jmp    L447
L37:
  movss  0x40(%rsp),%xmm0
  subss  0x4(%rsp),%xmm0
  movss  0x10(%rsp),%xmm4
  mulss  %xmm4,%xmm0
  subss  0x38(%rsp),%xmm4
  divss  %xmm4,%xmm0
  movss  %xmm0,0x3c(%rsp)
  jmp    L402
L56:
  movss  0x14(%rsp),%xmm0
  call   <fabs@plt>
  xorps  D70(%rip),%xmm0
  mov    0x1c(%rsp),%ebx
  movss  %xmm0,0x1c(%rsp)
  jmp    L518
L83:
  movss  0x10(%rsp),%xmm6
  comiss D31(%rip),%xmm6
  jb     L92
  movss  0x8(%rsp),%xmm3
  subss  0x4(%rsp),%xmm3
  movd   %xmm3,%ebx
L452:
  movd   %ebx,%xmm3
  mulss  D80(%rip),%xmm3
  movss  %xmm3,0x1c(%rsp)
  jmp    L518
L92:
  movss  0xc(%rsp),%xmm3
  subss  0x4(%rsp),%xmm3
  movd   %xmm3,%ebx
  jmp    L452
L128:
  movss  0xc(%rsp),%xmm4
  subss  0x4(%rsp),%xmm4
  movd   %xmm4,%ebx
  jmp    L441
L245:
  movss  0x10(%rsp),%xmm7
  comiss D31(%rip),%xmm7
  jb     L1
  movss  0x8(%rsp),%xmm3
  subss  0x4(%rsp),%xmm3
  movd   %xmm3,%ebx
L100:
  movd   %ebx,%xmm4
  mulss  D80(%rip),%xmm4
  movss  %xmm4,0x1c(%rsp)
L518:
  movss  0x1c(%rsp),%xmm0
  call   <fabs@plt>
  comiss 0x14(%rsp),%xmm0
  jb     L50
  movss  0x1c(%rsp),%xmm3
  addss  0x4(%rsp),%xmm3
  movss  %xmm3,0x14(%rsp)
  movaps %xmm3,%xmm0
  call   *%r12
  movss  %xmm0,0x18(%rsp)
L508:
  movss  0x14(%rsp),%xmm0
  call   *%r13
  movss  0x24(%rsp),%xmm6
  movss  0x18(%rsp),%xmm2
  comiss %xmm2,%xmm6
  jb     L266
  movss  0x14(%rsp),%xmm4
  movss  0x4(%rsp),%xmm5
  comiss %xmm5,%xmm4
  jae    L282
  movss  0x28(%rsp),%xmm1
  movss  %xmm1,0x40(%rsp)
  movss  %xmm5,0x28(%rsp)
  movss  0x2c(%rsp),%xmm3
  movss  %xmm3,0x44(%rsp)
  movss  %xmm6,0x2c(%rsp)
  movss  %xmm2,0x24(%rsp)
  movss  0x20(%rsp),%xmm6
  movss  %xmm6,0x38(%rsp)
  movss  0x10(%rsp),%xmm2
  movss  %xmm2,0x20(%rsp)
  movss  %xmm0,0x10(%rsp)
  movss  %xmm5,0xc(%rsp)
  movss  %xmm4,0x4(%rsp)
L243:
  sub    $0x1,%ebp
  je     L17
L334:
  movss  0x8(%rsp),%xmm0
  addss  0xc(%rsp),%xmm0
  movaps %xmm0,%xmm3
  mulss  D80(%rip),%xmm3
  movss  %xmm3,0x30(%rsp)
  movss  0x4(%rsp),%xmm0
  call   <fabs@plt>
  mulss  0x48(%rsp),%xmm0
  cvtss2sd %xmm0,%xmm0
  addsd  D129(%rip),%xmm0
  pxor   %xmm4,%xmm4
  cvtsd2ss %xmm0,%xmm4
  movss  %xmm4,0x14(%rsp)
  addss  %xmm4,%xmm4
  movss  %xmm4,0x18(%rsp)
  movss  0x4(%rsp),%xmm5
  subss  0x30(%rsp),%xmm5
  movaps %xmm5,%xmm0
  call   <fabs@plt>
  movss  0xc(%rsp),%xmm6
  subss  0x8(%rsp),%xmm6
  movss  %xmm6,0x34(%rsp)
  cvtss2sd %xmm0,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd 0x18(%rsp),%xmm1
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm6,%xmm2
  mulsd  D108(%rip),%xmm2
  subsd  %xmm2,%xmm1
  comisd %xmm0,%xmm1
  jae    L149
  movd   %ebx,%xmm0
  call   <fabs@plt>
  comiss 0x14(%rsp),%xmm0
  jbe    L245
  movss  0x34(%rsp),%xmm5
  addss  %xmm5,%xmm5
  movss  %xmm5,0x3c(%rsp)
  movss  0x20(%rsp),%xmm4
  movss  0x10(%rsp),%xmm2
  ucomiss %xmm2,%xmm4
  jp     L473
  movss  %xmm5,0x34(%rsp)
  jne    L473
L447:
  movss  0x38(%rsp),%xmm5
  movss  0x10(%rsp),%xmm7
  ucomiss %xmm7,%xmm5
  jp     L37
  jne    L37
L402:
  movss  0x3c(%rsp),%xmm3
  movss  0x4(%rsp),%xmm6
  addss  %xmm6,%xmm3
  movss  0x34(%rsp),%xmm7
  movaps %xmm7,%xmm1
  addss  %xmm6,%xmm1
  movss  0x8(%rsp),%xmm2
  subss  %xmm1,%xmm2
  subss  0xc(%rsp),%xmm1
  mulss  %xmm1,%xmm2
  comiss D31(%rip),%xmm2
  jbe    L105
  pxor   %xmm1,%xmm1
  mulss  0x10(%rsp),%xmm7
  comiss %xmm7,%xmm1
  jae    L73
L105:
  movss  0x8(%rsp),%xmm0
  subss  %xmm3,%xmm0
  subss  0xc(%rsp),%xmm3
  mulss  %xmm3,%xmm0
  mov    $0x0,%eax
  comiss D31(%rip),%xmm0
  jbe    L177
L298:
  pxor   %xmm1,%xmm1
  movss  0x3c(%rsp),%xmm0
  mulss  0x10(%rsp),%xmm0
  comiss %xmm0,%xmm1
  jae    L110
  test   %eax,%eax
  jne    L436
L177:
  movss  0x10(%rsp),%xmm2
  comiss D31(%rip),%xmm2
  jb     L128
  movss  0x8(%rsp),%xmm5
  subss  0x4(%rsp),%xmm5
  movd   %xmm5,%ebx
L441:
  movd   %ebx,%xmm2
  mulss  D80(%rip),%xmm2
  movss  %xmm2,0x1c(%rsp)
  jmp    L518
L1:
  movss  0xc(%rsp),%xmm1
  subss  0x4(%rsp),%xmm1
  movd   %xmm1,%ebx
  jmp    L100
L416:
  mov    0x1c(%rsp),%ebx
  movss  0x34(%rsp),%xmm4
  movss  %xmm4,0x1c(%rsp)
  jmp    L518
L50:
  movss  0x1c(%rsp),%xmm2
  comiss D31(%rip),%xmm2
  jb     L102
  movss  0x14(%rsp),%xmm0
  call   <fabs@plt>
L45:
  addss  0x4(%rsp),%xmm0
  movss  %xmm0,0x14(%rsp)
  call   *%r12
  movss  %xmm0,0x18(%rsp)
  comiss 0x24(%rsp),%xmm0
  jbe    L508
  movss  0x4(%rsp),%xmm6
  movss  %xmm6,(%r14)
  jmp    L22
L102:
  movss  0x14(%rsp),%xmm0
  call   <fabs@plt>
  xorps  D70(%rip),%xmm0
  jmp    L45
L266:
  movss  0x14(%rsp),%xmm7
  movaps %xmm7,%xmm1
  movss  0x4(%rsp),%xmm3
  cmpltss %xmm3,%xmm1
  movss  0xc(%rsp),%xmm2
  andps  %xmm1,%xmm2
  andnps %xmm7,%xmm1
  orps   %xmm2,%xmm1
  movss  %xmm1,0xc(%rsp)
  movaps %xmm7,%xmm1
  cmpltss %xmm3,%xmm1
  andps  %xmm1,%xmm7
  movaps %xmm7,%xmm2
  movss  0x8(%rsp),%xmm7
  andnps %xmm7,%xmm1
  orps   %xmm2,%xmm1
  movss  %xmm1,0x8(%rsp)
  movss  0x2c(%rsp),%xmm2
  comiss 0x18(%rsp),%xmm2
  jae    L469
  movss  0x28(%rsp),%xmm7
  ucomiss %xmm3,%xmm7
  jp     L319
  jne    L319
  movss  0x28(%rsp),%xmm2
  movss  %xmm2,0x40(%rsp)
  movss  0x14(%rsp),%xmm6
  movss  %xmm6,0x28(%rsp)
  movss  0x2c(%rsp),%xmm7
  movss  %xmm7,0x44(%rsp)
  movss  0x18(%rsp),%xmm5
  movss  %xmm5,0x2c(%rsp)
  movss  0x20(%rsp),%xmm4
  movss  %xmm4,0x38(%rsp)
  movss  %xmm0,0x20(%rsp)
  jmp    L243
L319:
  movss  0x44(%rsp),%xmm4
  comiss 0x18(%rsp),%xmm4
  ja     L478
  movss  0x40(%rsp),%xmm5
  ucomiss 0x4(%rsp),%xmm5
  setnp  %al
  mov    $0x0,%edx
  cmovne %edx,%eax
  test   %al,%al
  jne    L25
  ucomiss 0x28(%rsp),%xmm5
  setnp  %al
  cmovne %edx,%eax
  test   %al,%al
  je     L243
L25:
  movss  0x14(%rsp),%xmm4
  movss  %xmm4,0x40(%rsp)
  movss  0x18(%rsp),%xmm2
  movss  %xmm2,0x44(%rsp)
  movss  %xmm0,0x38(%rsp)
  jmp    L243
L282:
  movss  0x28(%rsp),%xmm4
  movss  %xmm4,0x40(%rsp)
  movss  0x4(%rsp),%xmm3
  movss  %xmm3,0x28(%rsp)
  movss  0x2c(%rsp),%xmm5
  movss  %xmm5,0x44(%rsp)
  movss  0x24(%rsp),%xmm7
  movss  %xmm7,0x2c(%rsp)
  movss  0x18(%rsp),%xmm1
  movss  %xmm1,0x24(%rsp)
  movss  0x20(%rsp),%xmm4
  movss  %xmm4,0x38(%rsp)
  movss  0x10(%rsp),%xmm5
  movss  %xmm5,0x20(%rsp)
  movss  %xmm0,0x10(%rsp)
  movss  %xmm3,0x8(%rsp)
  movss  0x14(%rsp),%xmm6
  movss  %xmm6,0x4(%rsp)
  jmp    L243
L469:
  movss  0x28(%rsp),%xmm3
  movss  %xmm3,0x40(%rsp)
  movss  0x14(%rsp),%xmm2
  movss  %xmm2,0x28(%rsp)
  movss  0x2c(%rsp),%xmm7
  movss  %xmm7,0x44(%rsp)
  movss  0x18(%rsp),%xmm1
  movss  %xmm1,0x2c(%rsp)
  movss  0x20(%rsp),%xmm4
  movss  %xmm4,0x38(%rsp)
  movss  %xmm0,0x20(%rsp)
  jmp    L243
L478:
  movss  0x14(%rsp),%xmm2
  movss  %xmm2,0x40(%rsp)
  movss  0x18(%rsp),%xmm6
  movss  %xmm6,0x44(%rsp)
  movss  %xmm0,0x38(%rsp)
  jmp    L243
L17:
  lea    D74(%rip),%rdi
  call   <nrerror@plt>
  pxor   %xmm3,%xmm3
  movss  %xmm3,0x24(%rsp)
  jmp    L22
L110:
  test   %eax,%eax
  je     L386
  movss  0x34(%rsp),%xmm0
  call   <fabs@plt>
  movss  %xmm0,0x4c(%rsp)
  movss  0x3c(%rsp),%xmm0
  call   <fabs@plt>
  movss  0x4c(%rsp),%xmm7
  cmpltss %xmm0,%xmm7
  movaps %xmm7,%xmm0
  movss  0x34(%rsp),%xmm1
  andps  %xmm7,%xmm1
  movss  0x3c(%rsp),%xmm2
  andnps %xmm2,%xmm0
  orps   %xmm1,%xmm0
  movss  %xmm0,0x34(%rsp)
L436:
  movss  0x34(%rsp),%xmm0
  call   <fabs@plt>
  movss  %xmm0,0x3c(%rsp)
  movd   %ebx,%xmm6
  mulss  D80(%rip),%xmm6
  movaps %xmm6,%xmm0
  call   <fabs@plt>
  comiss 0x3c(%rsp),%xmm0
  jb     L83
  movss  0x34(%rsp),%xmm0
  addss  0x4(%rsp),%xmm0
  movaps %xmm0,%xmm1
  subss  0x8(%rsp),%xmm1
  movss  0x18(%rsp),%xmm2
  comiss %xmm1,%xmm2
  ja     L374
  movss  0xc(%rsp),%xmm1
  subss  %xmm0,%xmm1
  comiss %xmm1,%xmm2
  jbe    L416
L374:
  movss  0x30(%rsp),%xmm0
  subss  0x4(%rsp),%xmm0
  comiss D31(%rip),%xmm0
  jb     L56
  movss  0x14(%rsp),%xmm0
  call   <fabs@plt>
  mov    0x1c(%rsp),%ebx
  movss  %xmm0,0x1c(%rsp)
  jmp    L518
L386:
  movss  0x3c(%rsp),%xmm6
  movss  %xmm6,0x34(%rsp)
  jmp    L436
L73:
  movss  0x8(%rsp),%xmm0
  subss  %xmm3,%xmm0
  subss  0xc(%rsp),%xmm3
  mulss  %xmm3,%xmm0
  mov    $0x1,%eax
  comiss D31(%rip),%xmm0
  ja     L298
  jmp    L436
```

tool_calls: name: unpack_data
arguments: data_label: D31
type: f64
name: unpack_data
arguments: data_label: D70
type: byte[16]
name: unpack_data
arguments: data_label: D80
type: f32
name: unpack_data
arguments: data_label: D129
type: byte[8]
name: unpack_data
arguments: data_label: D108
type: byte[8]
name: unpack_data
arguments: data_label: D74
type: string

tool: D31: 0

tool: {"D70": [0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: D80: 0.5

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

tool: {"D108": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f]}

tool: D74: Too many iterations in routine dbrent

assistant: ```c
float dbrent(float ax, float bx, float cx, float (*f)(float), float (*df)(float), float tol, float *xmin) {
  int iter, ok1, ok2;
  float a, b, d, d1, d2, du, dv, dw, dx, e = 0.0;
  float fu, fv, fw, fx, olde, tol1, tol2, u, u1, u2, v, w, x, xm;
  a = (ax < cx ? ax : cx);
  b = (ax > cx ? ax : cx);
  x = w = v = bx;
  fw = fv = fx = (*f)(x);
  dw = dv = dx = (*df)(x);
  for (iter = 1; iter <= 100; iter++) {
    xm = 0.5 * (a + b);
    tol1 = tol * fabs(x) + 1.0e-10;
    tol2 = 2.0 * tol1;
    if (fabs(x - xm) <= (tol2 - 0.5 * (b - a))) {
      *xmin = x;
      return fx;
    }
    if (fabs(e) > tol1) {
      d1 = 2.0 * (b - a);
      d2 = d1;
      if (dw != dx)
        d1 = (w - x) * dx / (dx - dw);
      if (dv != dx)
        d2 = (v - x) * dx / (dx - dv);
      u1 = x + d1;
      u2 = x + d2;
      ok1 = (a - u1) * (u1 - b) > 0.0 && dx * d1 <= 0.0;
      ok2 = (a - u2) * (u2 - b) > 0.0 && dx * d2 <= 0.0;
      olde = e;
      e = d;
      if (ok1 || ok2) {
        if (ok1 && ok2)
          d = (fabs(d1) < fabs(d2) ? d1 : d2);
        else if (ok1)
          d = d1;
        else
          d = d2;
        if (fabs(d) <= fabs(0.5 * olde)) {
          u = x + d;
          if (u - a < tol2 || b - u < tol2)
            d = ((xm - x) >= 0.0 ? fabs(tol1) : -fabs(tol1));
        } else {
          d = 0.5 * (e = (dx >= 0.0 ? a - x : b - x));
        }
      } else {
        d = 0.5 * (e = (dx >= 0.0 ? a - x : b - x));
      }
    } else {
      d = 0.5 * (e = (dx >= 0.0 ? a - x : b - x));
    }
    if (fabs(d) >= tol1) {
      u = x + d;
      fu = (*f)(u);
    } else {
      u = x + ((d) >= 0.0 ? fabs(tol1) : -fabs(tol1));
      fu = (*f)(u);
      if (fu > fx) {
        *xmin = x;
        return fx;
      }
    }
    du = (*df)(u);
    if (fu <= fx) {
      if (u >= x)
        a = x;
      else
        b = x;
      (v) = (w);
      (fv) = (fw);
      (dv) = (dw);
      (w) = (x);
      (fw) = (fx);
      (dw) = (dx);
      (x) = (u);
      (fx) = (fu);
      (dx) = (du);
    } else {
      if (u < x)
        a = u;
      else
        b = u;
      if (fu <= fw || w == x) {
        (v) = (w);
        (fv) = (fw);
        (dv) = (dw);
        (w) = (u);
        (fw) = (fu);
        (dw) = (du);
      } else if (fu < fv || v == x || v == w) {
        (v) = (u);
        (fv) = (fu);
        (dv) = (du);
      }
    }
  }
  nrerror("Too many iterations in routine dbrent");
  return 0.0;
}
```