user: Converte this assembly snippet into its equivalent C code:

```asm
<__ieee754_hypot>:
  endbr64
  movapd %xmm0,%xmm2
  movapd %xmm1,%xmm3
  movq   %xmm0,%rax
  and    $0x7fffffff,%eax
  movq   %xmm1,%rdx
  and    $0x7fffffff,%edx
  cmp    %edx,%eax
  jge    L37
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm3
  mov    %eax,%ecx
  mov    %edx,%eax
  mov    %ecx,%edx
L37:
  mov    %eax,%ecx
  movq   %xmm2,%rsi
  movabs $0xffffffff00000000,%rdi
  and    %rdi,%rsi
  or     %rcx,%rsi
  mov    %rsi,%r8
  movq   %rsi,%xmm2
  mov    %edx,%esi
  movq   %xmm3,%rcx
  and    %rdi,%rcx
  or     %rsi,%rcx
  movq   %rcx,%xmm3
  mov    %eax,%esi
  sub    %edx,%esi
  cmp    $0x3c00000,%esi
  jg     L52
  push   %rbx
  cmp    $0x5f300000,%eax
  jle    L112
  cmp    $0x7fefffff,%eax
  jg     L86
  sub    $0x25800000,%eax
  sub    $0x25800000,%edx
  mov    %eax,%r9d
  movabs $0xffffffff00000000,%rdi
  mov    %r8,%rsi
  and    %rdi,%rsi
  or     %r9,%rsi
  movq   %rsi,%xmm2
  mov    %edx,%esi
  and    %rdi,%rcx
  or     %rsi,%rcx
  movq   %rcx,%xmm3
  mov    $0x258,%ebx
  jmp    L117
L52:
  addsd  %xmm3,%xmm2
  movapd %xmm2,%xmm0
  ret
L86:
  movq   %r8,%xmm0
  mov    %rcx,%rdi
  and    $0xfffff,%eax
  mov    %r8,%rsi
  sar    $0x20,%rsi
  or     %esi,%eax
  je     L125
  addsd  %xmm3,%xmm2
  movapd %xmm2,%xmm0
L125:
  xor    $0x7ff00000,%edx
  sar    $0x20,%rcx
  or     %ecx,%edx
  jne    L102
  movq   %rdi,%xmm0
  jmp    L102
L112:
  mov    $0x0,%ebx
L117:
  cmp    $0x20afffff,%edx
  jg     L99
  cmp    $0xfffff,%edx
  jg     L50
  movq   %xmm3,%rcx
  sar    $0x20,%rcx
  or     %edx,%ecx
  movapd %xmm2,%xmm0
  je     L102
  movsd  D22(%rip),%xmm0
  mulsd  %xmm0,%xmm3
  mulsd  %xmm0,%xmm2
  sub    $0x3fe,%ebx
  jmp    L99
L50:
  add    $0x25800000,%eax
  add    $0x25800000,%edx
  sub    $0x258,%ebx
  mov    %eax,%edi
  movq   %xmm2,%rcx
  movabs $0xffffffff00000000,%rsi
  and    %rsi,%rcx
  or     %rdi,%rcx
  movq   %rcx,%xmm2
  mov    %edx,%edi
  movq   %xmm3,%rcx
  and    %rsi,%rcx
  or     %rdi,%rcx
  movq   %rcx,%xmm3
L99:
  movapd %xmm2,%xmm5
  subsd  %xmm3,%xmm5
  comisd %xmm3,%xmm5
  jbe    L136
  movd   %eax,%xmm1
  movapd %xmm1,%xmm0
  mulsd  %xmm1,%xmm0
  movapd %xmm3,%xmm4
  xorpd  D24(%rip),%xmm4
  mulsd  %xmm3,%xmm4
  movapd %xmm2,%xmm3
  addsd  %xmm1,%xmm3
  subsd  %xmm1,%xmm2
  mulsd  %xmm3,%xmm2
  subsd  %xmm2,%xmm4
  subsd  %xmm4,%xmm0
  call   <ieee_sqrt@plt>
L133:
  test   %ebx,%ebx
  je     L102
  shl    $0x14,%ebx
  mov    %ebx,%ebx
  movabs $0x3ff0000000000000,%rax
  or     %rbx,%rax
  movq   %rax,%xmm1
  mulsd  %xmm1,%xmm0
L102:
  pop    %rbx
  ret
L136:
  movd   %edx,%xmm4
  lea    0x100000(%rax),%eax
  movq   %rax,%xmm1
  movapd %xmm4,%xmm0
  mulsd  %xmm1,%xmm0
  movapd %xmm5,%xmm6
  xorpd  D24(%rip),%xmm6
  mulsd  %xmm5,%xmm6
  addsd  %xmm2,%xmm2
  subsd  %xmm1,%xmm2
  mulsd  %xmm3,%xmm2
  subsd  %xmm4,%xmm3
  mulsd  %xmm1,%xmm3
  addsd  %xmm3,%xmm2
  subsd  %xmm2,%xmm6
  subsd  %xmm6,%xmm0
  call   <ieee_sqrt@plt>
  jmp    L133
```

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

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

tool: {"D24": [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 = *(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;
}
```