user: What would the C source look like for the assembly code provided here:

```asm
<__ieee754_hypot>:
  endbr64
  movq   %xmm0,%rax
  movq   %xmm1,%rcx
  movq   %xmm1,%rdx
  sar    $0x20,%rax
  sar    $0x20,%rcx
  movq   %xmm0,%r9
  and    $0x7fffffff,%eax
  and    $0x7fffffff,%ecx
  cmp    %ecx,%eax
  jge    L34
  mov    %eax,%esi
  movq   %xmm1,%r9
  movq   %xmm0,%rdx
  mov    %ecx,%eax
  mov    %esi,%ecx
L34:
  mov    %rax,%rsi
  mov    %r9d,%edi
  mov    %rcx,%r11
  mov    %eax,%r8d
  shl    $0x20,%rsi
  shl    $0x20,%r11
  mov    %ecx,%r10d
  or     %rsi,%rdi
  mov    %edx,%esi
  or     %r11,%rsi
  mov    %eax,%r11d
  mov    %rdi,%r9
  sub    %ecx,%r11d
  mov    %rsi,%rdx
  cmp    $0x3c00000,%r11d
  jg     L129
  push   %rbx
  cmp    $0x5f300000,%eax
  jg     L102
  mov    $0xfffffc02,%edi
  mov    $0xfffffda8,%esi
  xor    %ebx,%ebx
  cmp    $0x20afffff,%ecx
  jle    L163
L107:
  movq   %r9,%xmm1
  movq   %rdx,%xmm2
L20:
  movapd %xmm1,%xmm4
  subsd  %xmm2,%xmm4
  comisd %xmm2,%xmm4
  jbe    L2
  movapd %xmm2,%xmm4
  xorpd  D28(%rip),%xmm4
  shl    $0x20,%r8
  movq   %r8,%xmm3
  movq   %r8,%xmm0
  mulsd  %xmm2,%xmm4
  movq   %r8,%xmm2
  addsd  %xmm1,%xmm2
  subsd  %xmm3,%xmm1
  mulsd  %xmm3,%xmm0
  mulsd  %xmm1,%xmm2
  pxor   %xmm1,%xmm1
  subsd  %xmm2,%xmm4
  subsd  %xmm4,%xmm0
  ucomisd %xmm0,%xmm1
  ja     L158
L96:
  sqrtsd %xmm0,%xmm0
L27:
  test   %ebx,%ebx
  je     L106
  shl    $0x14,%ebx
  lea    0x3ff00000(%rbx),%eax
  shl    $0x20,%rax
  movq   %rax,%xmm3
  mulsd  %xmm3,%xmm0
L106:
  pop    %rbx
  ret
L102:
  cmp    $0x7fefffff,%eax
  jg     L68
  lea    -0x25800000(%rax),%r8d
  mov    %edi,%edi
  mov    %esi,%esi
  mov    $0x258,%ebx
  lea    -0x25800000(%rcx),%r10d
  mov    %r8,%r9
  mov    %r8,%rax
  mov    %r10,%rdx
  shl    $0x20,%r9
  mov    %r10,%rcx
  shl    $0x20,%rdx
  or     %rdi,%r9
  mov    $0xfffffe5a,%edi
  or     %rsi,%rdx
  xor    %esi,%esi
  cmp    $0x20afffff,%ecx
  jg     L107
L163:
  cmp    $0xfffff,%ecx
  jg     L69
  mov    %rdx,%rsi
  movq   %r9,%xmm0
  or     %ecx,%esi
  je     L106
  movsd  D4(%rip),%xmm0
  movq   %rdx,%xmm2
  movq   %r9,%xmm1
  mov    %edi,%ebx
  mulsd  %xmm0,%xmm2
  mulsd  %xmm0,%xmm1
  jmp    L20
  nopl   0x0(%rax,%rax,1)
L129:
  movq   %rdi,%xmm0
  movq   %rsi,%xmm7
  addsd  %xmm7,%xmm0
  ret
  nop
L2:
  add    $0x100000,%eax
  addsd  %xmm1,%xmm1
  shl    $0x20,%r10
  movapd %xmm4,%xmm5
  shl    $0x20,%rax
  movq   %r10,%xmm6
  movq   %r10,%xmm0
  movq   %rax,%xmm3
  xorpd  D28(%rip),%xmm5
  subsd  %xmm3,%xmm1
  mulsd  %xmm3,%xmm0
  mulsd  %xmm4,%xmm5
  mulsd  %xmm2,%xmm1
  subsd  %xmm6,%xmm2
  mulsd  %xmm3,%xmm2
  addsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm5
  pxor   %xmm1,%xmm1
  subsd  %xmm5,%xmm0
  ucomisd %xmm0,%xmm1
  jbe    L96
L158:
  call   <sqrt@plt>
  jmp    L27
  nopl   0x0(%rax,%rax,1)
L69:
  lea    0x25800000(%rax),%r8d
  mov    %r9d,%r9d
  mov    %edx,%edx
  mov    %esi,%ebx
  lea    0x25800000(%rcx),%r10d
  mov    %r8,%rdi
  mov    %r8,%rax
  mov    %r10,%rcx
  shl    $0x20,%rdi
  shl    $0x20,%rcx
  or     %rdi,%r9
  or     %rcx,%rdx
  movq   %r9,%xmm1
  movq   %rdx,%xmm2
  jmp    L20
  nopl   0x0(%rax,%rax,1)
L68:
  and    $0xfffff,%eax
  movq   %rdi,%xmm0
  or     %edi,%eax
  je     L11
  movq   %rsi,%xmm7
  addsd  %xmm7,%xmm0
L11:
  xor    $0x7ff00000,%ecx
  or     %esi,%ecx
  jne    L106
  movq   %rdx,%xmm0
  pop    %rbx
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D28
type_infered: byte[16]
name: unpack_data
arguments: data_label: D4
type_infered: byte[8]

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

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

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;
}
```