user: What is the c source code of the assembly code below:

```asm
<astrofuncs_y1lim>:
  endbr64
  comisd D6(%rip),%xmm1
  jae    L108
  movsd  D52(%rip),%xmm4
  comisd %xmm1,%xmm4
  jae    L108
  movapd %xmm1,%xmm4
  subsd  %xmm2,%xmm4
  comisd %xmm0,%xmm4
  jae    L108
  movq   D54(%rip),%xmm6
  movapd %xmm0,%xmm2
  pxor   %xmm5,%xmm5
  xorpd  %xmm6,%xmm2
  comisd %xmm4,%xmm2
  jae    L107
  mulsd  %xmm0,%xmm0
  sub    $0x28,%rsp
  movapd %xmm5,%xmm7
  mulsd  %xmm4,%xmm4
  movapd %xmm0,%xmm2
  subsd  %xmm4,%xmm2
  ucomisd %xmm2,%xmm5
  ja     L110
  movapd %xmm2,%xmm0
  sqrtsd %xmm0,%xmm0
L165:
  mulsd  %xmm1,%xmm1
  movsd  D6(%rip),%xmm4
  movapd %xmm3,%xmm8
  subsd  %xmm0,%xmm8
  subsd  %xmm1,%xmm4
  ucomisd %xmm4,%xmm7
  ja     L30
  movapd %xmm4,%xmm5
  sqrtsd %xmm5,%xmm5
  comisd %xmm5,%xmm8
  jae    L45
L104:
  ucomisd %xmm2,%xmm7
  ja     L85
  movapd %xmm2,%xmm0
  sqrtsd %xmm0,%xmm0
L53:
  ucomisd %xmm4,%xmm7
  movapd %xmm3,%xmm1
  subsd  %xmm0,%xmm1
  ja     L21
  sqrtsd %xmm4,%xmm4
  movapd %xmm4,%xmm0
  xorpd  %xmm6,%xmm0
  comisd %xmm1,%xmm0
  jae    L75
L49:
  ucomisd %xmm2,%xmm7
  ja     L94
  sqrtsd %xmm2,%xmm2
L29:
  movapd %xmm3,%xmm5
  subsd  %xmm2,%xmm5
L45:
  movapd %xmm5,%xmm0
  add    $0x28,%rsp
  ret
  cs nopw 0x0(%rax,%rax,1)
L108:
  pxor   %xmm5,%xmm5
L107:
  movapd %xmm5,%xmm0
  ret
L21:
  movapd %xmm4,%xmm0
  movsd  %xmm3,0x18(%rsp)
  movsd  %xmm1,0x10(%rsp)
  movsd  %xmm2,0x8(%rsp)
  movsd  %xmm4,(%rsp)
  call   <sqrt@plt>
  movsd  0x10(%rsp),%xmm1
  movsd  (%rsp),%xmm4
  pxor   %xmm7,%xmm7
  movq   D54(%rip),%xmm6
  movsd  0x8(%rsp),%xmm2
  movsd  0x18(%rsp),%xmm3
  xorpd  %xmm6,%xmm0
  comisd %xmm1,%xmm0
  jb     L49
  movapd %xmm4,%xmm0
  call   <sqrt@plt>
  movq   D54(%rip),%xmm6
  movapd %xmm0,%xmm4
  nopl   0x0(%rax,%rax,1)
L75:
  movapd %xmm4,%xmm5
  xorpd  %xmm6,%xmm5
  jmp    L45
L30:
  movapd %xmm4,%xmm0
  movsd  %xmm3,0x18(%rsp)
  movsd  %xmm8,0x10(%rsp)
  movsd  %xmm2,0x8(%rsp)
  movsd  %xmm4,(%rsp)
  call   <sqrt@plt>
  movsd  0x10(%rsp),%xmm8
  movsd  (%rsp),%xmm4
  pxor   %xmm7,%xmm7
  movsd  0x8(%rsp),%xmm2
  movsd  0x18(%rsp),%xmm3
  comisd %xmm0,%xmm8
  movq   D54(%rip),%xmm6
  jb     L104
  movapd %xmm4,%xmm0
  add    $0x28,%rsp
  jmp    1050 <sqrt@plt>
L110:
  movapd %xmm2,%xmm0
  movsd  %xmm3,0x10(%rsp)
  movsd  %xmm1,0x8(%rsp)
  movsd  %xmm2,(%rsp)
  call   <sqrt@plt>
  movsd  0x10(%rsp),%xmm3
  movsd  0x8(%rsp),%xmm1
  pxor   %xmm7,%xmm7
  movq   D54(%rip),%xmm6
  movsd  (%rsp),%xmm2
  jmp    L165
L94:
  movapd %xmm2,%xmm0
  movsd  %xmm3,(%rsp)
  call   <sqrt@plt>
  movsd  (%rsp),%xmm3
  movapd %xmm0,%xmm2
  jmp    L29
L85:
  movapd %xmm2,%xmm0
  movsd  %xmm3,0x10(%rsp)
  movsd  %xmm4,0x8(%rsp)
  movsd  %xmm2,(%rsp)
  call   <sqrt@plt>
  movsd  0x10(%rsp),%xmm3
  movsd  0x8(%rsp),%xmm4
  pxor   %xmm7,%xmm7
  movq   D54(%rip),%xmm6
  movsd  (%rsp),%xmm2
  jmp    L53
```

tool_calls: name: unpack_data
arguments: tag: D6
type_infered: f64[2]
name: unpack_data
arguments: tag: D52
type_infered: f32[2]
name: unpack_data
arguments: tag: D54
type_infered: f32[2]

tool: {"D6": [1.0,-1.0]}

tool: {"D52": [0.0,-1.875]}

tool: {"D54": [0.0,-0.0]}

assistant: ```c
double astrofuncs_y1lim(double rprs, double delv, double vp, double yp) {
  if (delv >= 1.0 || delv <= -1.0)
    return 0.0;
  if (delv - vp >= rprs || delv - vp <= -rprs)
    return 0.0;
  if (yp - sqrt(rprs * rprs - (delv - vp) * (delv - vp)) >= sqrt(1.0 - delv * delv))
    return sqrt(1.0 - delv * delv);
  if (yp - sqrt(rprs * rprs - (delv - vp) * (delv - vp)) <= -sqrt(1.0 - delv * delv))
    return -sqrt(1.0 - delv * delv);
  return yp - sqrt(rprs * rprs - (delv - vp) * (delv - vp));
}
```