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

```asm
<swptst_>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %rcx,-0x30(%rbp)
  mov    %r8,-0x38(%rbp)
  mov    %r9,-0x40(%rbp)
  subq   $0x8,0x10(%rbp)
  subq   $0x8,-0x40(%rbp)
  subq   $0x8,-0x38(%rbp)
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,D133(%rip)
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,D11(%rip)
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,D158(%rip)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  D133(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,D346(%rip)
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  D133(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,D39(%rip)
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  D133(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,D64(%rip)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  D11(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,D316(%rip)
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  D11(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,D271(%rip)
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  D11(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,D63(%rip)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  D158(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,D49(%rip)
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  D158(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,D178(%rip)
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  D158(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,D155(%rip)
  movsd  D271(%rip),%xmm1
  movsd  D49(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D316(%rip),%xmm2
  movsd  D178(%rip),%xmm1
  mulsd  %xmm1,%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D64(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D39(%rip),%xmm2
  movsd  D49(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  movsd  D346(%rip),%xmm3
  movsd  D178(%rip),%xmm2
  mulsd  %xmm2,%xmm3
  movapd %xmm1,%xmm2
  subsd  %xmm3,%xmm2
  movsd  D63(%rip),%xmm1
  mulsd  %xmm1,%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D39(%rip),%xmm2
  movsd  D316(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  movsd  D346(%rip),%xmm3
  movsd  D271(%rip),%xmm2
  mulsd  %xmm2,%xmm3
  movapd %xmm0,%xmm2
  subsd  %xmm3,%xmm2
  movsd  D155(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  seta   %al
  movzbl %al,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  pop    %rbp
  ret
```

assistant: ```c
int swptst_(int *n1, int *n2, int *n3, int *n4, double *x, double *y, double *z__) {
  int ret_val;
  static double x4, y4, z4, dx1, dx2, dx3, dy1, dy2, dy3, dz1, dz2, dz3;
  --z__;
  --y;
  --x;
  x4 = x[*n4];
  y4 = y[*n4];
  z4 = z__[*n4];
  dx1 = x[*n1] - x4;
  dx2 = x[*n2] - x4;
  dx3 = x[*n3] - x4;
  dy1 = y[*n1] - y4;
  dy2 = y[*n2] - y4;
  dy3 = y[*n3] - y4;
  dz1 = z__[*n1] - z4;
  dz2 = z__[*n2] - z4;
  dz3 = z__[*n3] - z4;
  ret_val = dx3 * (dy2 * dz1 - dy1 * dz2) - dy3 * (dx2 * dz1 - dx1 * dz2) + dz3 * (dx2 * dy1 - dx1 * dy2) > 0.;
  return ret_val;
}
```