user: Translate the below assembly code into C programming language:

```asm
<__ieee754_hypot>:
  endbr64
  movq   %xmm0,%rcx
  movq   %xmm1,%rsi
  push   %rbx
  movq   %xmm1,%rax
  and    $0x7fffffff,%ecx
  and    $0x7fffffff,%esi
  movq   %xmm0,%rdx
  cmp    %esi,%ecx
  jge    L146
  mov    %ecx,%edi
  movq   %xmm1,%rdx
  movq   %xmm0,%rax
  mov    %esi,%ecx
  mov    %edi,%esi
L146:
  mov    %rdx,%r8
  mov    %rax,%rdi
  mov    %ecx,%r9d
  mov    %esi,%r10d
  movabs $0xffffffff00000000,%r11
  mov    %ecx,%ebx
  and    %r11,%r8
  and    %r11,%rdi
  sub    %esi,%ebx
  or     %r9,%r8
  or     %r10,%rdi
  mov    %r8,%rdx
  mov    %rdi,%rax
  cmp    $0x3c00000,%ebx
  jg     L53
  cmp    $0x5f300000,%ecx
  jg     L10
  mov    $0xfffffc02,%r8d
  mov    $0xfffffda8,%edi
  xor    %ebx,%ebx
  cmp    $0x20afffff,%esi
  jle    L133
L43:
  movq   %rdx,%xmm1
  movq   %rax,%xmm2
L117:
  movapd %xmm1,%xmm5
  subsd  %xmm2,%xmm5
  comisd %xmm2,%xmm5
  jbe    L120
  movapd %xmm2,%xmm4
  movq   %r9,%xmm3
  movq   %r9,%xmm0
  mulsd  %xmm3,%xmm0
  xorpd  D6(%rip),%xmm4
  mulsd  %xmm2,%xmm4
  movq   %r9,%xmm2
  addsd  %xmm1,%xmm2
  subsd  %xmm3,%xmm1
  mulsd  %xmm1,%xmm2
  subsd  %xmm2,%xmm4
  subsd  %xmm4,%xmm0
  call   <ieee_sqrt@plt>
L91:
  test   %ebx,%ebx
  je     L64
  movabs $0x3ff0000000000000,%r9
  shl    $0x14,%ebx
  or     %rbx,%r9
  movq   %r9,%xmm3
  mulsd  %xmm3,%xmm0
L64:
  pop    %rbx
  ret
  nopl   (%rax)
L10:
  cmp    $0x7fefffff,%ecx
  jg     L100
  lea    -0x25800000(%rcx),%r9d
  lea    -0x25800000(%rsi),%r10d
  and    %r11,%r8
  and    %r11,%rdi
  or     %r9,%r8
  or     %r10,%rdi
  mov    %r10,%rsi
  mov    %r9,%rcx
  mov    %r8,%rdx
  mov    %rdi,%rax
  mov    $0x258,%ebx
  xor    %edi,%edi
  mov    $0xfffffe5a,%r8d
  cmp    $0x20afffff,%esi
  jg     L43
L133:
  cmp    $0xfffff,%esi
  jg     L33
  mov    %rax,%rdi
  movq   %rdx,%xmm0
  sar    $0x20,%rdi
  or     %esi,%edi
  je     L64
  movsd  D18(%rip),%xmm0
  movq   %rax,%xmm2
  movq   %rdx,%xmm1
  mov    %r8d,%ebx
  mulsd  %xmm0,%xmm2
  mulsd  %xmm0,%xmm1
  jmp    L117
  nopl   0x0(%rax)
L53:
  movq   %r8,%xmm0
  movq   %rdi,%xmm7
  pop    %rbx
  addsd  %xmm7,%xmm0
  ret
L120:
  addsd  %xmm1,%xmm1
  lea    0x100000(%rcx),%eax
  movq   %r10,%xmm4
  movq   %rax,%xmm3
  movapd %xmm5,%xmm6
  movq   %r10,%xmm0
  mulsd  %xmm3,%xmm0
  xorpd  D6(%rip),%xmm6
  subsd  %xmm3,%xmm1
  mulsd  %xmm5,%xmm6
  mulsd  %xmm2,%xmm1
  subsd  %xmm4,%xmm2
  mulsd  %xmm3,%xmm2
  addsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm6
  subsd  %xmm6,%xmm0
  call   <ieee_sqrt@plt>
  jmp    L91
  nopl   0x0(%rax,%rax,1)
L33:
  lea    0x25800000(%rcx),%r9d
  lea    0x25800000(%rsi),%r10d
  mov    %edi,%ebx
  movabs $0xffffffff00000000,%r8
  and    %r8,%rdx
  and    %r8,%rax
  mov    %r9,%rcx
  or     %r9,%rdx
  or     %r10,%rax
  movq   %rdx,%xmm1
  movq   %rax,%xmm2
  jmp    L117
L100:
  movq   %r8,%xmm0
  and    $0xfffff,%ecx
  sar    $0x20,%r8
  or     %r8d,%ecx
  je     L135
  movq   %rdi,%xmm7
  addsd  %xmm7,%xmm0
L135:
  xor    $0x7ff00000,%esi
  sar    $0x20,%rdi
  or     %edi,%esi
  jne    L64
  movq   %rax,%xmm0
  pop    %rbx
  ret
```

tool_calls: name: parse_data
arguments: label: D6
type: byte[16]
name: parse_data
arguments: label: D18
type: byte[8]

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

tool: {"D18": [0x00,0x00,0xd0,0x7f,0x00,0x00,0x00,0x00]}

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