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

```asm
<set_fts_by_FTS>:
  endbr64
  test   %edi,%edi
  jle    L25
  mov    %rdx,%r9
  movslq %edi,%rdx
  mov    %rcx,%r10
  mov    %rsi,%rax
  lea    (%rdx,%rdx,4),%rcx
  lea    -0x1(%rdi),%esi
  mov    %edi,%r11d
  push   %rbp
  lea    (%rdx,%rcx,2),%rdi
  lea    (%r8,%rcx,8),%rcx
  push   %rbx
  lea    (%rdx,%rdx,2),%rdx
  lea    (%rax,%rdi,8),%rbx
  shl    $0x3,%rdx
  cmp    %rcx,%rax
  setae  %cl
  cmp    %rbx,%r8
  setae  %dil
  or     %edi,%ecx
  lea    (%r9,%rdx,1),%rdi
  cmp    %rdi,%rax
  setae  %dil
  cmp    %rbx,%r9
  setae  %bpl
  or     %ebp,%edi
  and    %edi,%ecx
  cmp    $0x1,%esi
  seta   %dil
  test   %dil,%cl
  je     L20
  add    %r10,%rdx
  cmp    %rdx,%rax
  setae  %dl
  cmp    %rbx,%r10
  setae  %cl
  or     %cl,%dl
  je     L20
  mov    %r11d,%ebx
  mov    %r9,%rsi
  mov    %rax,%rdx
  mov    %r10,%rdi
  shr    %ebx
  mov    %r8,%rcx
  sub    $0x1,%ebx
  lea    (%rbx,%rbx,2),%rbx
  shl    $0x4,%rbx
  lea    0x30(%r9,%rbx,1),%rbx
  nopl   (%rax)
L19:
  movupd 0x20(%rsi),%xmm3
  movupd 0x20(%rdi),%xmm2
  add    $0x30,%rsi
  add    $0xb0,%rdx
  movupd 0x10(%rdi),%xmm0
  movupd -0x20(%rsi),%xmm1
  add    $0x30,%rdi
  add    $0x50,%rcx
  movupd -0x30(%rdi),%xmm4
  movupd -0x30(%rsi),%xmm5
  movhpd %xmm3,-0x48(%rdx)
  movlpd %xmm1,-0xa0(%rdx)
  shufpd $0x1,%xmm3,%xmm1
  movlpd %xmm0,-0x88(%rdx)
  shufpd $0x1,%xmm2,%xmm0
  movups %xmm5,-0xb0(%rdx)
  movups %xmm1,-0x58(%rdx)
  movups %xmm4,-0x98(%rdx)
  movups %xmm0,-0x40(%rdx)
  movhpd %xmm2,-0x30(%rdx)
  movupd -0x20(%rcx),%xmm0
  movupd -0x30(%rcx),%xmm1
  movupd -0x10(%rcx),%xmm2
  movupd -0x40(%rcx),%xmm3
  movupd -0x50(%rcx),%xmm6
  movlpd %xmm1,-0x60(%rdx)
  shufpd $0x1,%xmm0,%xmm1
  movups %xmm3,-0x70(%rdx)
  shufpd $0x1,%xmm2,%xmm0
  movups %xmm6,-0x80(%rdx)
  movups %xmm1,-0x28(%rdx)
  movups %xmm0,-0x18(%rdx)
  movhpd %xmm2,-0x8(%rdx)
  cmp    %rbx,%rsi
  jne    L19
  mov    %r11d,%edx
  and    $0xfffffffe,%edx
  and    $0x1,%r11d
  je     L32
  lea    (%rdx,%rdx,2),%esi
  lea    (%rdx,%rdx,4),%ecx
  movslq %esi,%r11
  lea    (%rdx,%rcx,2),%edi
  add    $0x1,%esi
  movsd  (%r9,%r11,8),%xmm0
  movslq %edi,%rdx
  add    $0x3,%edi
  movslq %esi,%rsi
  movslq %edi,%rdi
  movsd  %xmm0,(%rax,%rdx,8)
  movsd  (%r10,%r11,8),%xmm0
  lea    0x0(,%rdi,8),%rdx
  movsd  %xmm0,(%rax,%rdi,8)
  movsd  (%r9,%rsi,8),%xmm0
  lea    0x0(,%rsi,8),%rdi
  movsd  %xmm0,-0x10(%rax,%rdx,1)
  movsd  (%r10,%rsi,8),%xmm0
  movslq %ecx,%rsi
  add    $0x1,%ecx
  movslq %ecx,%rcx
  movsd  %xmm0,0x8(%rax,%rdx,1)
  movsd  0x8(%r9,%rdi,1),%xmm0
  movsd  %xmm0,-0x8(%rax,%rdx,1)
  movsd  0x8(%r10,%rdi,1),%xmm0
  movsd  %xmm0,0x10(%rax,%rdx,1)
  movsd  (%r8,%rsi,8),%xmm0
  lea    0x0(,%rcx,8),%rsi
  movsd  %xmm0,0x18(%rax,%rdx,1)
  movsd  (%r8,%rcx,8),%xmm0
  movsd  %xmm0,0x20(%rax,%rdx,1)
  movsd  0x8(%r8,%rsi,1),%xmm0
  movsd  %xmm0,0x28(%rax,%rdx,1)
  movsd  0x10(%r8,%rsi,1),%xmm0
  movsd  %xmm0,0x30(%rax,%rdx,1)
  movsd  0x18(%r8,%rsi,1),%xmm0
  movsd  %xmm0,0x38(%rax,%rdx,1)
L32:
  pop    %rbx
  pop    %rbp
  ret
L20:
  lea    (%rsi,%rsi,2),%rdx
  lea    0x18(%r9,%rdx,8),%rdx
  nopl   0x0(%rax,%rax,1)
L46:
  add    $0x18,%r9
  add    $0x58,%rax
  add    $0x18,%r10
  add    $0x28,%r8
  movsd  -0x18(%r9),%xmm0
  movsd  %xmm0,-0x58(%rax)
  movsd  -0x18(%r10),%xmm0
  movsd  %xmm0,-0x40(%rax)
  movsd  -0x10(%r9),%xmm0
  movsd  %xmm0,-0x50(%rax)
  movsd  -0x10(%r10),%xmm0
  movsd  %xmm0,-0x38(%rax)
  movsd  -0x8(%r9),%xmm0
  movsd  %xmm0,-0x48(%rax)
  movsd  -0x8(%r10),%xmm0
  movsd  %xmm0,-0x30(%rax)
  movsd  -0x28(%r8),%xmm0
  movsd  %xmm0,-0x28(%rax)
  movsd  -0x20(%r8),%xmm0
  movsd  %xmm0,-0x20(%rax)
  movsd  -0x18(%r8),%xmm0
  movsd  %xmm0,-0x18(%rax)
  movsd  -0x10(%r8),%xmm0
  movsd  %xmm0,-0x10(%rax)
  movsd  -0x8(%r8),%xmm0
  movsd  %xmm0,-0x8(%rax)
  cmp    %rdx,%r9
  jne    L46
  pop    %rbx
  pop    %rbp
  ret
L25:
  ret
```

assistant: ```c
void set_fts_by_FTS(int n, double *fts, const double *f, const double *t, const double *s) {
  int i;
  int j;
  int i3, i5, i11;
  for (i = 0; i < n; i++) {
    i3 = i * 3;
    i5 = i * 5;
    i11 = i * 11;
    for (j = 0; j < 3; j++) {
      fts[i11 + j] = f[i3 + j];
      fts[i11 + 3 + j] = t[i3 + j];
    }
    for (j = 0; j < 5; j++) {
      fts[i11 + 6 + j] = s[i5 + j];
    }
  }
}
```