user: Please show me the C implementation that matches the assembly code listed below:

```asm
<__ieee754_hypot>:
  endbr64
  movapd %xmm0,%xmm2
  movapd %xmm1,%xmm3
  movq   %xmm0,%rax
  sar    $0x20,%rax
  and    $0x7fffffff,%eax
  movq   %xmm1,%rdx
  sar    $0x20,%rdx
  and    $0x7fffffff,%edx
  cmp    %edx,%eax
  jge    L34
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm3
  mov    %eax,%ecx
  mov    %edx,%eax
  mov    %ecx,%edx
L34:
  mov    %rax,%rcx
  shl    $0x20,%rcx
  movq   %xmm2,%rsi
  mov    %esi,%esi
  or     %rcx,%rsi
  movq   %rsi,%xmm2
  mov    %rdx,%rdi
  shl    $0x20,%rdi
  movq   %xmm3,%rcx
  mov    %ecx,%ecx
  or     %rdi,%rcx
  movq   %rcx,%xmm3
  mov    %eax,%edi
  sub    %edx,%edi
  cmp    $0x3c00000,%edi
  jg     L176
  push   %rbx
  cmp    $0x5f300000,%eax
  jle    L103
  cmp    $0x7fefffff,%eax
  jg     L83
  sub    $0x25800000,%eax
  sub    $0x25800000,%edx
  mov    %rax,%rdi
  shl    $0x20,%rdi
  mov    %esi,%esi
  or     %rdi,%rsi
  movq   %rsi,%xmm2
  mov    %rdx,%rsi
  shl    $0x20,%rsi
  mov    %ecx,%ecx
  or     %rsi,%rcx
  movq   %rcx,%xmm3
  mov    $0x258,%ebx
  jmp    L158
L176:
  addsd  %xmm3,%xmm2
  movapd %xmm2,%xmm0
  ret
L83:
  movq   %rsi,%xmm0
  mov    %rcx,%rdi
  and    $0xfffff,%eax
  or     %esi,%eax
  je     L20
  addsd  %xmm3,%xmm2
  movapd %xmm2,%xmm0
L20:
  xor    $0x7ff00000,%edx
  or     %ecx,%edx
  jne    L79
  movq   %rdi,%xmm0
  jmp    L79
L103:
  mov    $0x0,%ebx
L158:
  cmp    $0x20afffff,%edx
  jg     L11
  cmp    $0xfffff,%edx
  jg     L173
  movq   %xmm3,%rcx
  or     %edx,%ecx
  movapd %xmm2,%xmm0
  je     L79
  movsd  D0(%rip),%xmm0
  mulsd  %xmm0,%xmm3
  mulsd  %xmm0,%xmm2
  sub    $0x3fe,%ebx
  jmp    L11
L173:
  add    $0x25800000,%eax
  add    $0x25800000,%edx
  sub    $0x258,%ebx
  mov    %rax,%rcx
  shl    $0x20,%rcx
  movq   %xmm2,%rsi
  mov    %esi,%esi
  or     %rcx,%rsi
  movq   %rsi,%xmm2
  mov    %rdx,%rsi
  shl    $0x20,%rsi
  movq   %xmm3,%rcx
  mov    %ecx,%ecx
  or     %rsi,%rcx
  movq   %rcx,%xmm3
L11:
  movapd %xmm2,%xmm4
  subsd  %xmm3,%xmm4
  comisd %xmm3,%xmm4
  jbe    L77
  shl    $0x20,%rax
  movq   %rax,%xmm1
  movq   %rax,%xmm0
  mulsd  %xmm1,%xmm0
  movapd %xmm3,%xmm4
  xorpd  D22(%rip),%xmm4
  mulsd  %xmm3,%xmm4
  movapd %xmm2,%xmm3
  addsd  %xmm1,%xmm3
  subsd  %xmm1,%xmm2
  mulsd  %xmm3,%xmm2
  subsd  %xmm2,%xmm4
  subsd  %xmm4,%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L0
  sqrtsd %xmm0,%xmm0
L41:
  test   %ebx,%ebx
  je     L79
  shl    $0x14,%ebx
  lea    0x3ff00000(%rbx),%eax
  shl    $0x20,%rax
  movq   %rax,%xmm1
  mulsd  %xmm1,%xmm0
L79:
  pop    %rbx
  ret
L0:
  call   <sqrt@plt>
  jmp    L41
L77:
  mov    %rdx,%rsi
  shl    $0x20,%rsi
  movq   %rsi,%xmm6
  lea    0x100000(%rax),%eax
  shl    $0x20,%rax
  movq   %rax,%xmm1
  movq   %rsi,%xmm0
  mulsd  %xmm1,%xmm0
  movapd %xmm4,%xmm5
  xorpd  D22(%rip),%xmm5
  mulsd  %xmm4,%xmm5
  addsd  %xmm2,%xmm2
  subsd  %xmm1,%xmm2
  mulsd  %xmm3,%xmm2
  subsd  %xmm6,%xmm3
  mulsd  %xmm3,%xmm1
  addsd  %xmm1,%xmm2
  subsd  %xmm2,%xmm5
  subsd  %xmm5,%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L74
  sqrtsd %xmm0,%xmm0
  jmp    L41
L74:
  call   <sqrt@plt>
  jmp    L41
```

tool_calls: name: retrieve_data
arguments: data_tag: D0
type_guessed: byte[8]
name: retrieve_data
arguments: data_tag: D22
type_guessed: byte[16]

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

tool: {"D22": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,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 = *(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;
}
```