user: 请将以下的汇编代码转换成C语言代码：

```asm
<mysort4>:
  endbr64
  cmp    $0x1,%edi
  jle    L69
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %edi,%r14d
  mov    %rsi,%rbx
  mov    %rdx,%rbp
  mov    %rcx,%r12
  mov    %r8,%r13
  movsd  (%rsi),%xmm1
  mov    %edi,%r8d
  mov    $0x1,%ecx
  jmp    L34
L68:
  lea    -0x1(%r8),%eax
  cltq
  movslq %r8d,%r8
  lea    -0x8(%rbx,%r8,8),%rdx
L21:
  mov    %eax,%r8d
  lea    0x0(,%rax,8),%rsi
  mov    %rdx,%r9
  movsd  (%rdx),%xmm0
  sub    $0x1,%rax
  sub    $0x8,%rdx
  comisd %xmm1,%xmm0
  ja     L21
  cmp    %r10d,%r8d
  jle    L58
  movsd  (%rbx,%rcx,8),%xmm2
  movsd  %xmm0,(%rbx,%rcx,8)
  movsd  %xmm2,(%r9)
  movsd  0x0(%rbp,%rcx,8),%xmm0
  lea    0x0(%rbp,%rsi,1),%rax
  movsd  (%rax),%xmm2
  movsd  %xmm2,0x0(%rbp,%rcx,8)
  movsd  %xmm0,(%rax)
  movsd  (%r12,%rcx,8),%xmm0
  lea    (%r12,%rsi,1),%rax
  movsd  (%rax),%xmm2
  movsd  %xmm2,(%r12,%rcx,8)
  movsd  %xmm0,(%rax)
  movsd  0x0(%r13,%rcx,8),%xmm0
  add    %r13,%rsi
  movsd  (%rsi),%xmm2
  movsd  %xmm2,0x0(%r13,%rcx,8)
  movsd  %xmm0,(%rsi)
L19:
  add    $0x1,%rcx
L34:
  lea    -0x1(%rcx),%edi
  mov    %ecx,%r15d
  mov    %ecx,%r10d
  cmp    %ecx,%r14d
  jle    L68
  comisd (%rbx,%rcx,8),%xmm1
  ja     L19
  jmp    L68
L58:
  movslq %r15d,%rax
  shl    $0x3,%rax
  mov    %rax,0x8(%rsp)
  sub    $0x8,%rax
  lea    (%rbx,%rax,1),%rdx
  movsd  (%rdx),%xmm0
  movsd  (%rbx),%xmm1
  movsd  %xmm1,(%rdx)
  movsd  %xmm0,(%rbx)
  lea    0x0(%rbp,%rax,1),%rdx
  movsd  (%rdx),%xmm0
  movsd  0x0(%rbp),%xmm1
  movsd  %xmm1,(%rdx)
  movsd  %xmm0,0x0(%rbp)
  lea    (%r12,%rax,1),%rdx
  movsd  (%rdx),%xmm0
  movsd  (%r12),%xmm1
  movsd  %xmm1,(%rdx)
  movsd  %xmm0,(%r12)
  add    %r13,%rax
  movsd  (%rax),%xmm0
  movsd  0x0(%r13),%xmm1
  movsd  %xmm1,(%rax)
  movsd  %xmm0,0x0(%r13)
  mov    %r13,%r8
  mov    %r12,%rcx
  mov    %rbp,%rdx
  mov    %rbx,%rsi
  call   <mysort4>
  mov    0x8(%rsp),%rax
  lea    (%r12,%rax,1),%rcx
  lea    0x0(%rbp,%rax,1),%rdx
  lea    (%rbx,%rax,1),%rsi
  mov    %r14d,%edi
  sub    %r15d,%edi
  lea    0x0(%r13,%rax,1),%r8
  call   <mysort4>
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L69:
  ret
```

assistant: ```c
void mysort4(int N, double *data1, double *data2, double *data3, double *data4) {
  int i, j;
  double v, t1, t2, t3, t4;
  if (N <= 1)
    return;
  v = data1[0];
  i = 0;
  j = N;
  for (;;) {
    while (++i < N ? data1[i] < v : 0) {
    }
    while (data1[--j] > v) {
    }
    if (i >= j)
      break;
    t1 = data1[i];
    data1[i] = data1[j];
    data1[j] = t1;
    t2 = data2[i];
    data2[i] = data2[j];
    data2[j] = t2;
    t3 = data3[i];
    data3[i] = data3[j];
    data3[j] = t3;
    t4 = data4[i];
    data4[i] = data4[j];
    data4[j] = t4;
  }
  t1 = data1[i - 1];
  data1[i - 1] = data1[0];
  data1[0] = t1;
  t2 = data2[i - 1];
  data2[i - 1] = data2[0];
  data2[0] = t2;
  t3 = data3[i - 1];
  data3[i - 1] = data3[0];
  data3[0] = t3;
  t4 = data4[i - 1];
  data4[i - 1] = data4[0];
  data4[0] = t4;
  mysort4(i - 1, data1, data2, data3, data4);
  mysort4(N - i, data1 + i, data2 + i, data3 + i, data4 + i);
}
```