user: 这段汇编代码用C语言表示是什么样的：

```asm
<astrofuncs_y1lim>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  movsd  %xmm0,-0x8(%rbp)
  movsd  %xmm1,-0x10(%rbp)
  movsd  %xmm2,-0x18(%rbp)
  movsd  %xmm3,-0x20(%rbp)
  movsd  -0x10(%rbp),%xmm0
  movsd  D60(%rip),%xmm1
  comisd %xmm1,%xmm0
  jae    L34
  movsd  D67(%rip),%xmm0
  comisd -0x10(%rbp),%xmm0
  jb     L64
L34:
  mov    D33(%rip),%rax
  jmp    L49
L64:
  movsd  -0x10(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  comisd -0x8(%rbp),%xmm0
  jae    L14
  movsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x18(%rbp),%xmm1
  movsd  -0x8(%rbp),%xmm0
  movq   D58(%rip),%xmm2
  xorpd  %xmm2,%xmm0
  comisd %xmm1,%xmm0
  jb     L2
L14:
  mov    D33(%rip),%rax
  jmp    L49
L2:
  movsd  -0x8(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  -0x10(%rbp),%xmm1
  movapd %xmm1,%xmm2
  subsd  -0x18(%rbp),%xmm2
  movsd  -0x10(%rbp),%xmm1
  subsd  -0x18(%rbp),%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movsd  -0x20(%rbp),%xmm1
  subsd  %xmm0,%xmm1
  movsd  %xmm1,-0x28(%rbp)
  movsd  -0x10(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movapd %xmm0,%xmm1
  movsd  D60(%rip),%xmm0
  subsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movsd  -0x28(%rbp),%xmm1
  comisd %xmm0,%xmm1
  jb     L76
  movsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  D60(%rip),%xmm0
  subsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  jmp    L49
L76:
  movsd  -0x8(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  -0x10(%rbp),%xmm1
  movapd %xmm1,%xmm2
  subsd  -0x18(%rbp),%xmm2
  movsd  -0x10(%rbp),%xmm1
  subsd  -0x18(%rbp),%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movsd  -0x20(%rbp),%xmm1
  subsd  %xmm0,%xmm1
  movsd  %xmm1,-0x28(%rbp)
  movsd  -0x10(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movapd %xmm0,%xmm1
  movsd  D60(%rip),%xmm0
  subsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  movq   D58(%rip),%xmm0
  movq   %rax,%xmm4
  xorpd  %xmm0,%xmm4
  movapd %xmm4,%xmm0
  comisd -0x28(%rbp),%xmm0
  jb     L12
  movsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  D60(%rip),%xmm0
  subsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  movq   D58(%rip),%xmm0
  movq   %rax,%xmm5
  xorpd  %xmm0,%xmm5
  movq   %xmm5,%rax
  jmp    L49
L12:
  movsd  -0x8(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  -0x10(%rbp),%xmm1
  movapd %xmm1,%xmm2
  subsd  -0x18(%rbp),%xmm2
  movsd  -0x10(%rbp),%xmm1
  subsd  -0x18(%rbp),%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movsd  -0x20(%rbp),%xmm1
  subsd  %xmm0,%xmm1
  movq   %xmm1,%rax
L49:
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: unpack_data
arguments: label: D60
datatype: f64
name: unpack_data
arguments: label: D67
datatype: f32[2]
name: unpack_data
arguments: label: D33
datatype: f32[2]
name: unpack_data
arguments: label: D58
datatype: f32[2]

tool: D60: 1

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

tool: {"D33": [0.0,0.0]}

tool: {"D58": [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));
}
```