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

```asm
<__ieee754_hypot>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  movsd  %xmm0,-0x58(%rbp)
  movsd  %xmm1,-0x60(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  lea    -0x58(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  and    $0x7fffffff,%eax
  mov    %eax,-0x4c(%rbp)
  lea    -0x60(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  and    $0x7fffffff,%eax
  mov    %eax,-0x48(%rbp)
  mov    -0x48(%rbp),%eax
  cmp    -0x4c(%rbp),%eax
  jle    L62
  movsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  mov    -0x4c(%rbp),%eax
  mov    %eax,-0x44(%rbp)
  mov    -0x48(%rbp),%eax
  mov    %eax,-0x4c(%rbp)
  mov    -0x44(%rbp),%eax
  mov    %eax,-0x48(%rbp)
  jmp    L68
L62:
  movsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
L68:
  lea    -0x40(%rbp),%rax
  add    $0x4,%rax
  mov    -0x4c(%rbp),%edx
  mov    %edx,(%rax)
  lea    -0x38(%rbp),%rax
  add    $0x4,%rax
  mov    -0x48(%rbp),%edx
  mov    %edx,(%rax)
  mov    -0x4c(%rbp),%eax
  sub    -0x48(%rbp),%eax
  cmp    $0x3c00000,%eax
  jle    L151
  movsd  -0x40(%rbp),%xmm1
  movsd  -0x38(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  jmp    L2
L151:
  movl   $0x0,-0x50(%rbp)
  cmpl   $0x5f300000,-0x4c(%rbp)
  jle    L108
  cmpl   $0x7fefffff,-0x4c(%rbp)
  jle    L107
  movsd  -0x40(%rbp),%xmm1
  movsd  -0x38(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  mov    -0x4c(%rbp),%eax
  and    $0xfffff,%eax
  mov    %eax,%edx
  lea    -0x40(%rbp),%rax
  mov    (%rax),%eax
  or     %edx,%eax
  test   %eax,%eax
  jne    L116
  movsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
L116:
  mov    -0x48(%rbp),%eax
  xor    $0x7ff00000,%eax
  mov    %eax,%edx
  lea    -0x38(%rbp),%rax
  mov    (%rax),%eax
  or     %edx,%eax
  test   %eax,%eax
  jne    L30
  movsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
L30:
  movsd  -0x20(%rbp),%xmm0
  jmp    L2
L107:
  subl   $0x25800000,-0x4c(%rbp)
  subl   $0x25800000,-0x48(%rbp)
  addl   $0x258,-0x50(%rbp)
  lea    -0x40(%rbp),%rax
  add    $0x4,%rax
  mov    -0x4c(%rbp),%edx
  mov    %edx,(%rax)
  lea    -0x38(%rbp),%rax
  add    $0x4,%rax
  mov    -0x48(%rbp),%edx
  mov    %edx,(%rax)
L108:
  cmpl   $0x20afffff,-0x48(%rbp)
  jg     L150
  cmpl   $0xfffff,-0x48(%rbp)
  jg     L111
  lea    -0x38(%rbp),%rax
  mov    (%rax),%eax
  or     -0x48(%rbp),%eax
  test   %eax,%eax
  jne    L156
  movsd  -0x40(%rbp),%xmm0
  jmp    L2
L156:
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  lea    -0x30(%rbp),%rax
  add    $0x4,%rax
  movl   $0x7fd00000,(%rax)
  movsd  -0x38(%rbp),%xmm1
  movsd  -0x30(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  -0x40(%rbp),%xmm1
  movsd  -0x30(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  subl   $0x3fe,-0x50(%rbp)
  jmp    L150
L111:
  addl   $0x25800000,-0x4c(%rbp)
  addl   $0x25800000,-0x48(%rbp)
  subl   $0x258,-0x50(%rbp)
  lea    -0x40(%rbp),%rax
  add    $0x4,%rax
  mov    -0x4c(%rbp),%edx
  mov    %edx,(%rax)
  lea    -0x38(%rbp),%rax
  add    $0x4,%rax
  mov    -0x48(%rbp),%edx
  mov    %edx,(%rax)
L150:
  movsd  -0x40(%rbp),%xmm0
  movsd  -0x38(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x38(%rbp),%xmm1
  movsd  -0x20(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jbe    L187
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  lea    -0x30(%rbp),%rax
  add    $0x4,%rax
  mov    -0x4c(%rbp),%edx
  mov    %edx,(%rax)
  movsd  -0x40(%rbp),%xmm0
  movsd  -0x30(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x30(%rbp),%xmm1
  movsd  -0x30(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x38(%rbp),%xmm1
  movq   D26(%rip),%xmm2
  xorpd  %xmm1,%xmm2
  movsd  -0x38(%rbp),%xmm1
  mulsd  %xmm2,%xmm1
  movsd  -0x40(%rbp),%xmm3
  movsd  -0x30(%rbp),%xmm2
  addsd  %xmm3,%xmm2
  mulsd  -0x10(%rbp),%xmm2
  subsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x20(%rbp)
  jmp    L23
L187:
  movsd  -0x40(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  lea    -0x28(%rbp),%rax
  add    $0x4,%rax
  mov    -0x48(%rbp),%edx
  mov    %edx,(%rax)
  movsd  -0x38(%rbp),%xmm0
  movsd  -0x28(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  lea    -0x30(%rbp),%rax
  add    $0x4,%rax
  mov    -0x4c(%rbp),%edx
  add    $0x100000,%edx
  mov    %edx,(%rax)
  movsd  -0x40(%rbp),%xmm0
  movsd  -0x30(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x30(%rbp),%xmm1
  movsd  -0x28(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x20(%rbp),%xmm1
  movq   D26(%rip),%xmm2
  xorpd  %xmm2,%xmm1
  mulsd  -0x20(%rbp),%xmm1
  movsd  -0x30(%rbp),%xmm2
  movapd %xmm2,%xmm3
  mulsd  -0x18(%rbp),%xmm3
  movsd  -0x38(%rbp),%xmm2
  mulsd  -0x10(%rbp),%xmm2
  addsd  %xmm3,%xmm2
  subsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x20(%rbp)
L23:
  cmpl   $0x0,-0x50(%rbp)
  je     L9
  movsd  D5(%rip),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  lea    -0x30(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x50(%rbp),%eax
  shl    $0x14,%eax
  mov    %eax,%ecx
  lea    -0x30(%rbp),%rax
  add    $0x4,%rax
  add    %ecx,%edx
  mov    %edx,(%rax)
  movsd  -0x30(%rbp),%xmm0
  mulsd  -0x20(%rbp),%xmm0
  jmp    L2
L9:
  movsd  -0x20(%rbp),%xmm0
L2:
  movq   %xmm0,%rax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L24
  call   <__stack_chk_fail@plt>
L24:
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: label: D26
type_guessed: byte[8]
name: disassemble_data
arguments: label: D5
type_guessed: f64

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

tool: D5: 1

assistant: ```c
double __ieee754_hypot(double x, double y) {
  double a = x, b = y, t1, t2, y1, y2, w;
  int j, k, ha, hb;
  ha = *(1 + (int *)&x) & 0x7fffffff;
  hb = *(1 + (int *)&y) & 0x7fffffff;
  if (hb > ha) {
    a = y;
    b = x;
    j = ha;
    ha = hb;
    hb = j;
  } else {
    a = x;
    b = y;
  }
  *(1 + (int *)&a) = ha;
  *(1 + (int *)&b) = hb;
  if ((ha - hb) > 0x3c00000) {
    return a + b;
  }
  k = 0;
  if (ha > 0x5f300000) {
    if (ha >= 0x7ff00000) {
      w = a + b;
      if (((ha & 0xfffff) | *(int *)&a) == 0)
        w = a;
      if (((hb ^ 0x7ff00000) | *(int *)&b) == 0)
        w = b;
      return w;
    }
    ha -= 0x25800000;
    hb -= 0x25800000;
    k += 600;
    *(1 + (int *)&a) = ha;
    *(1 + (int *)&b) = hb;
  }
  if (hb < 0x20b00000) {
    if (hb <= 0x000fffff) {
      if ((hb | (*(int *)&b)) == 0)
        return a;
      t1 = 0;
      *(1 + (int *)&t1) = 0x7fd00000;
      b *= t1;
      a *= t1;
      k -= 1022;
    } else {
      ha += 0x25800000;
      hb += 0x25800000;
      k -= 600;
      *(1 + (int *)&a) = ha;
      *(1 + (int *)&b) = hb;
    }
  }
  w = a - b;
  if (w > b) {
    t1 = 0;
    *(1 + (int *)&t1) = ha;
    t2 = a - t1;
    w = sqrt(t1 * t1 - (b * (-b) - t2 * (a + t1)));
  } else {
    a = a + a;
    y1 = 0;
    *(1 + (int *)&y1) = hb;
    y2 = b - y1;
    t1 = 0;
    *(1 + (int *)&t1) = ha + 0x00100000;
    t2 = a - t1;
    w = sqrt(t1 * y1 - (w * (-w) - (t1 * y2 + t2 * b)));
  }
  if (k != 0) {
    t1 = 1.0;
    *(1 + (int *)&t1) += (k << 20);
    return t1 * w;
  } else
    return w;
}
```