user: 下面的汇编指令对应的C源代码是什么：

```asm
<sqrt>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  movsd  %xmm0,-0x48(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movl   $0x33,-0x38(%rbp)
  movsd  -0x48(%rbp),%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jp     L25
  movsd  -0x48(%rbp),%xmm0
  ucomisd -0x10(%rbp),%xmm0
  jp     L150
  movsd  -0x48(%rbp),%xmm0
  ucomisd -0x10(%rbp),%xmm0
  jne    L150
L25:
  mov    -0x48(%rbp),%rax
  jmp    L247
L150:
  movsd  -0x10(%rbp),%xmm0
  comisd -0x48(%rbp),%xmm0
  jbe    L181
  movsd  -0x10(%rbp),%xmm0
  divsd  %xmm0,%xmm0
  movq   %xmm0,%rax
  jmp    L247
L181:
  movsd  -0x48(%rbp),%xmm0
  movq   D300(%rip),%xmm1
  andpd  %xmm0,%xmm1
  movsd  D183(%rip),%xmm0
  ucomisd %xmm1,%xmm0
  setb   %al
  xor    $0x1,%eax
  movzbl %al,%eax
  test   %eax,%eax
  jne    L15
  mov    -0x48(%rbp),%rax
  jmp    L247
L15:
  mov    -0x48(%rbp),%rax
  movq   %rax,%xmm0
  call   <logb@plt>
  cvttsd2si %xmm0,%eax
  mov    %eax,-0x40(%rbp)
  mov    -0x40(%rbp),%eax
  neg    %eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x48(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <scalb@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x48(%rbp)
  mov    -0x48(%rbp),%rax
  movq   %rax,%xmm0
  call   <logb@plt>
  cvttsd2si %xmm0,%eax
  mov    %eax,-0x34(%rbp)
  cmpl   $0x0,-0x34(%rbp)
  je     L44
  mov    -0x34(%rbp),%eax
  neg    %eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x48(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <scalb@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x48(%rbp)
L44:
  mov    -0x40(%rbp),%eax
  add    %eax,-0x34(%rbp)
  mov    -0x34(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,-0x40(%rbp)
  mov    -0x40(%rbp),%eax
  add    %eax,%eax
  cmp    %eax,-0x34(%rbp)
  je     L40
  movsd  -0x48(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  subl   $0x1,-0x34(%rbp)
  mov    -0x34(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,-0x40(%rbp)
L40:
  movsd  D249(%rip),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  D109(%rip),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x48(%rbp),%xmm0
  movsd  D249(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  D249(%rip),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movl   $0x1,-0x3c(%rbp)
  jmp    L244
L233:
  movsd  -0x28(%rbp),%xmm1
  movsd  D249(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x48(%rbp),%xmm1
  movsd  D109(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x20(%rbp),%xmm0
  movsd  D182(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x48(%rbp),%xmm0
  comisd -0x18(%rbp),%xmm0
  jb     L135
  movsd  -0x18(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  %xmm0,%xmm1
  movsd  D182(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x48(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x30(%rbp),%xmm0
  addsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  jmp    L274
L135:
  movsd  -0x28(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
L274:
  addl   $0x1,-0x3c(%rbp)
L244:
  mov    -0x3c(%rbp),%eax
  cmp    -0x38(%rbp),%eax
  jle    L233
  movsd  -0x20(%rbp),%xmm0
  movsd  D182(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x48(%rbp),%xmm1
  movsd  D109(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x48(%rbp),%xmm0
  ucomisd -0x10(%rbp),%xmm0
  jp     L264
  movsd  -0x48(%rbp),%xmm0
  ucomisd -0x10(%rbp),%xmm0
  je     L31
L264:
  movsd  -0x48(%rbp),%xmm0
  comisd -0x28(%rbp),%xmm0
  jbe    L129
  movsd  -0x30(%rbp),%xmm0
  addsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x48(%rbp),%xmm0
  subsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x28(%rbp),%xmm1
  movsd  D182(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x28(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x48(%rbp),%xmm1
  movsd  D109(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x48(%rbp),%xmm0
  subsd  -0x28(%rbp),%xmm0
  movsd  D10(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x20(%rbp),%xmm1
  movsd  D36(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D109(%rip),%xmm2
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  movsd  D249(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  D249(%rip),%xmm0
  ucomisd -0x8(%rbp),%xmm0
  jp     L137
  movsd  D249(%rip),%xmm0
  ucomisd -0x8(%rbp),%xmm0
  je     L209
L137:
  movsd  -0x20(%rbp),%xmm0
  movsd  D109(%rip),%xmm2
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  movsd  D249(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movsd  D249(%rip),%xmm1
  comisd %xmm1,%xmm0
  jbe    L173
  movsd  D249(%rip),%xmm0
  movsd  %xmm0,-0x18(%rbp)
L173:
  movsd  -0x18(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L8
  movsd  -0x30(%rbp),%xmm0
  addsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  jmp    L8
L129:
  movsd  -0x28(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x48(%rbp),%xmm1
  movsd  D109(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x48(%rbp),%xmm0
  subsd  -0x28(%rbp),%xmm0
  movsd  D249(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x20(%rbp),%xmm1
  movsd  D36(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D109(%rip),%xmm2
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  movsd  D249(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  D249(%rip),%xmm0
  ucomisd -0x8(%rbp),%xmm0
  jp     L48
  movsd  D249(%rip),%xmm0
  ucomisd -0x8(%rbp),%xmm0
  je     L0
L48:
  movsd  -0x20(%rbp),%xmm0
  movsd  D109(%rip),%xmm2
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  movsd  D249(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movsd  D249(%rip),%xmm1
  comisd %xmm1,%xmm0
  jbe    L177
  movsd  D249(%rip),%xmm0
  movsd  %xmm0,-0x18(%rbp)
L177:
  movsd  -0x18(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L8
  movsd  -0x30(%rbp),%xmm0
  addsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  jmp    L8
L31:
  nop
  jmp    L8
L209:
  nop
  jmp    L8
L0:
  nop
L8:
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x40(%rbp),%xmm0
  mov    -0x30(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <scalb@plt>
  movq   %xmm0,%rax
L247:
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D300
type: byte[8]
name: disassemble_data
arguments: data_label: D183
type: byte[8]
name: disassemble_data
arguments: data_label: D249
type: f64
name: disassemble_data
arguments: data_label: D109
type: f64
name: disassemble_data
arguments: data_label: D182
type: f32[2]
name: disassemble_data
arguments: data_label: D10
type: f32[2]
name: disassemble_data
arguments: data_label: D36
type: f32[2]

tool: {"D300": [0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f]}

tool: {"D183": [0xff,0xff,0xff,0xff,0xff,0xff,0xef,0x7f]}

tool: D249: 1

tool: D109: 4

tool: {"D182": [0.0,2.0]}

tool: {"D10": [0.0,2.3125]}

tool: {"D36": [0.0,2.125]}

assistant: ```c
double sqrt(x)
double x;
{
  double q, s, b, r;
  double t;
  double const zero = 0.0;
  int m, n, i;
  int k = 51;
  if (x != x || x == zero)
    return (x);
  if (x < zero) {
    return (zero / zero);
  }
  if (!finite(x))
    return (x);
  n = logb(x);
  x = scalb(x, -n);
  if ((m = logb(x)) != 0)
    x = scalb(x, -m);
  m += n;
  n = m / 2;
  if ((n + n) != m) {
    x *= 2;
    m -= 1;
    n = m / 2;
  }
  q = 1.0;
  s = 4.0;
  x -= 1.0;
  r = 1;
  for (i = 1; i <= k; i++) {
    t = s + 1;
    x *= 4;
    r /= 2;
    if (t <= x) {
      s = t + t + 2, x -= t;
      q += r;
    } else
      s *= 2;
  }
  r /= 2;
  x *= 4;
  if (x == zero)
    goto end;
  100 + r;
  if (s < x) {
    q += r;
    x -= s;
    s += 2;
    s *= 2;
    x *= 4;
    t = (x - s) - 5;
    b = 1.0 + 3 * r / 4;
    if (b == 1.0)
      goto end;
    b = 1.0 + r / 4;
    if (b > 1.0)
      t = 1;
    if (t >= 0)
      q += r;
  } else {
    s *= 2;
    x *= 4;
    t = (x - s) - 1;
    b = 1.0 + 3 * r / 4;
    if (b == 1.0)
      goto end;
    b = 1.0 + r / 4;
    if (b > 1.0)
      t = 1;
    if (t >= 0)
      q += r;
  }
end:
  return (scalb(q, n));
}
```