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

```asm
<_fff_pth_element>:
  endbr64
  push   %r14
  lea    0x0(,%rdx,8),%r9
  lea    -0x1(%rcx),%r11
  xor    %r14d,%r14d
  push   %r13
  mov    %r9,%r8
  xor    %r13d,%r13d
  push   %r12
  neg    %r8
  mov    %rsi,%r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  nopw   0x0(%rax,%rax,1)
L74:
  mov    %r9,%r10
  mov    %r9,%rax
  imul   %r13,%r10
  imul   %r11,%rax
  add    %rbp,%r10
  add    %rbp,%rax
  movsd  (%r10),%xmm2
  movsd  (%rax),%xmm0
  comisd %xmm0,%xmm2
  jbe    L151
  movsd  %xmm0,(%r10)
  xor    %ebx,%ebx
  movsd  %xmm2,(%rax)
  movsd  (%r10),%xmm2
L167:
  cmp    %r11,%r13
  je     L26
  movsd  (%rax),%xmm3
  lea    0x1(%r13),%rsi
  and    $0x1,%ebx
  lea    (%r10,%r9,1),%rdx
  lea    0x2(%r13),%rdi
  mov    %r11,%rcx
  jmp    L102
  nopl   0x0(%rax,%rax,1)
L94:
  add    %r9,%rdx
  add    $0x1,%rdi
  add    $0x1,%rsi
L102:
  movsd  (%rdx),%xmm1
  movapd %xmm3,%xmm0
  comisd %xmm1,%xmm2
  ja     L94
  comisd %xmm2,%xmm0
  jbe    L69
  nop
L2:
  add    %r8,%rax
  sub    $0x1,%rcx
  movsd  (%rax),%xmm0
  comisd %xmm2,%xmm0
  ja     L2
L69:
  cmp    %rcx,%rsi
  jae    L14
  sub    $0x1,%rcx
  movsd  %xmm0,(%rdx)
  movsd  %xmm1,(%rax)
  add    %r8,%rax
  cmp    %r11,%rcx
  jne    L179
  test   %bl,%bl
  jne    L93
L179:
  movsd  (%rax),%xmm3
  jmp    L94
  nopl   0x0(%rax)
L14:
  cmp    %r11,%rcx
  jne    L10
  test   %bl,%bl
  je     L10
L137:
  add    %r8,%rax
  movsd  (%r10),%xmm0
  sub    $0x1,%rcx
  movsd  (%rax),%xmm1
  movsd  %xmm1,(%r10)
  movsd  %xmm0,(%rax)
L10:
  cmp    %rcx,%r12
  jb     L16
  ja     L84
L26:
  pop    %rbx
  movapd %xmm2,%xmm0
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L151:
  xor    %ebx,%ebx
  ucomisd %xmm0,%xmm2
  setnp  %bl
  cmovne %r14d,%ebx
  jmp    L167
L16:
  mov    %rcx,%r11
  jmp    L74
L84:
  mov    %rsi,%r13
  jmp    L74
L93:
  mov    %rdi,%rsi
  jmp    L137
```

assistant: ```c
double _fff_pth_element(double *x, size_t p, size_t stride, size_t n) {
  double a, tmp;
  double *bufl, *bufr;
  size_t i, j, il, jr, stop1, stop2;
  int same_extremities;
  stop1 = 0;
  il = 0;
  jr = n - 1;
  while (stop1 == 0) {
    same_extremities = 0;
    bufl = x + stride * il;
    bufr = x + stride * jr;
    if (*bufl > *bufr) {
      tmp = (*bufl);
      (*bufl) = (*bufr);
      (*bufr) = tmp;
    } else if (*bufl == *bufr)
      same_extremities = 1;
    a = *bufl;
    if (il == jr)
      return a;
    bufl += stride;
    i = il + 1;
    j = jr;
    stop2 = 0;
    while (stop2 == 0) {
      while (*bufl < a) {
        i++;
        bufl += stride;
      }
      while (*bufr > a) {
        j--;
        bufr -= stride;
      }
      if (j <= i)
        stop2 = 1;
      else {
        {
          tmp = (*bufl);
          (*bufl) = (*bufr);
          (*bufr) = tmp;
        }
        j--;
        bufr -= stride;
        i++;
        bufl += stride;
      }
      if ((same_extremities) && (j == jr)) {
        j--;
        bufr -= stride;
        {
          tmp = (x[il * stride]);
          (x[il * stride]) = (*bufr);
          (*bufr) = tmp;
        }
        stop2 = 1;
      }
    }
    if (j > p)
      jr = j;
    else if (j < p)
      il = i;
    else
      stop1 = 1;
  }
  return a;
}
```