user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<interp_X>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %rdx,-0x58(%rbp)
  mov    %rcx,-0x60(%rbp)
  mov    %r8,-0x68(%rbp)
  mov    %r9,-0x70(%rbp)
  movsd  %xmm0,-0x78(%rbp)
  movq   $0x0,-0x38(%rbp)
  jmp    L27
L1:
  mov    -0x38(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x38(%rbp),%rax
  imul   0x10(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x38(%rbp),%rax
  imul   0x10(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x18(%rbp)
  movq   $0x0,-0x30(%rbp)
  jmp    L12
L53:
  mov    -0x30(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0xffffffff,%eax
  jne    L17
  mov    -0x30(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x78(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  jmp    L30
L17:
  mov    -0x30(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cltq
  imul   0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x10(%rbp),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x8(%rbp)
  mov    0x10(%rbp),%rax
  imul   0x18(%rbp),%rax
  cmp    %rax,-0x8(%rbp)
  jl     L46
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rax,%rdx
  mov    -0x30(%rbp),%rax
  lea    0x0(,%rax,8),%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  jmp    L30
L46:
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm2
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm3
  movsd  -0x28(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  %xmm3,%xmm1
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm3
  subsd  %xmm3,%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm3
  subsd  %xmm3,%xmm1
  divsd  %xmm1,%xmm0
  mov    -0x30(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  addsd  %xmm2,%xmm0
  movsd  %xmm0,(%rax)
L30:
  addq   $0x1,-0x30(%rbp)
L12:
  mov    -0x30(%rbp),%rax
  cmp    0x10(%rbp),%rax
  jl     L53
  addq   $0x1,-0x38(%rbp)
L27:
  mov    -0x38(%rbp),%rax
  cmp    -0x70(%rbp),%rax
  jl     L1
  nop
  nop
  pop    %rbp
  ret
```

assistant: ```c
void interp_X(const double *restrict gt, double *pt, const double *restrict hyb_press, const int *nx, const double *restrict plev, long nplev, long ngp, long nhlev, double missval) {
  long lp, i;
  long nl, nh;
  const int *nxl;
  double *ptl;
  double pres;
  for (lp = 0; lp < nplev; lp++) {
    pres = plev[lp];
    nxl = nx + lp * ngp;
    ptl = pt + lp * ngp;
    for (i = 0; i < ngp; i++) {
      if (nxl[i] == -1)
        ptl[i] = missval;
      else {
        nl = nxl[i] * ngp + i;
        nh = nl + ngp;
        if (nh >= ngp * nhlev)
          ptl[i] = gt[nl];
        else
          ptl[i] = gt[nl] + (pres - hyb_press[nl]) * (gt[nh] - gt[nl]) / (hyb_press[nh] - hyb_press[nl]);
      }
    }
  }
}
```