user: 下面的汇编指令对应的C源代码是什么:

```asm
<ft_strncpy>:
  endbr64
  test   %rsi,%rsi
  mov    %rdi,%rax
  mov    %rsi,%rcx
  setne  %dil
  test   %rdx,%rdx
  setne  %sil
  test   %sil,%dil
  je     L206
  test   %rax,%rax
  jne    L211
L206:
  ret
  nopl   0x0(%rax,%rax,1)
L211:
  mov    %rdx,%rdi
  shr    $0x3,%rdi
  je     L220
  lea    -0x1(%rdi),%rsi
  cmp    $0x2,%rsi
  jbe    L20
  lea    0x8(%rcx),%rsi
  cmp    %rsi,%rax
  je     L20
  mov    %rdx,%r8
  mov    %rdx,%r9
  xor    %esi,%esi
  shr    $0x4,%r8
  and    $0xfffffffffffffff0,%r9
  nopl   0x0(%rax)
L151:
  movdqu (%rcx,%rsi,1),%xmm0
  movups %xmm0,(%rax,%rsi,1)
  add    $0x10,%rsi
  cmp    %r9,%rsi
  jne    L151
  lea    (%r8,%r8,1),%rsi
  cmp    %rsi,%rdi
  je     L27
  mov    %r8,%rsi
  shl    $0x4,%rsi
  mov    (%rcx,%rsi,1),%r8
  mov    %r8,(%rax,%rsi,1)
L27:
  shl    $0x3,%rdi
  cmp    %rdi,%rdx
  jbe    L206
L220:
  mov    %rdx,%r8
  lea    0x1(%rdi),%rsi
  push   %rbx
  lea    (%rax,%rdi,1),%r9
  sub    %rdi,%r8
  lea    -0x1(%r8),%r10
  cmp    $0x6,%r10
  seta   %bl
  cmp    %rsi,%rdx
  setae  %r11b
  test   %r11b,%bl
  je     L249
  lea    (%rcx,%rsi,1),%rbx
  mov    %r9,%r11
  sub    %rbx,%r11
  cmp    $0xe,%r11
  jbe    L249
  cmp    %rsi,%rdx
  mov    $0x1,%esi
  cmovb  %rsi,%r8
  cmp    $0xe,%r10
  jbe    L172
  mov    %r8,%r10
  lea    (%rcx,%rdi,1),%r11
  xor    %esi,%esi
  and    $0xfffffffffffffff0,%r10
  nopl   0x0(%rax)
L75:
  movdqu (%r11,%rsi,1),%xmm1
  movups %xmm1,(%r9,%rsi,1)
  add    $0x10,%rsi
  cmp    %r10,%rsi
  jne    L75
  mov    %r8,%r9
  and    $0xfffffffffffffff0,%r9
  lea    (%rdi,%r9,1),%rsi
  cmp    %r9,%r8
  je     L190
L66:
  mov    %r8,%r10
  sub    $0x1,%r8
  sub    %r9,%r8
  sub    %r9,%r10
  cmp    $0x6,%r8
  jbe    L191
  add    %r9,%rdi
  mov    (%rcx,%rdi,1),%r8
  mov    %r8,(%rax,%rdi,1)
  mov    %r10,%rdi
  and    $0xfffffffffffffff8,%rdi
  add    %rdi,%rsi
  cmp    %rdi,%r10
  je     L190
L191:
  movzbl (%rcx,%rsi,1),%edi
  mov    %dil,(%rax,%rsi,1)
  lea    0x1(%rsi),%rdi
  cmp    %rdi,%rdx
  jbe    L190
  movzbl 0x1(%rcx,%rsi,1),%edi
  mov    %dil,0x1(%rax,%rsi,1)
  lea    0x2(%rsi),%rdi
  cmp    %rdi,%rdx
  jbe    L190
  movzbl 0x2(%rcx,%rsi,1),%edi
  mov    %dil,0x2(%rax,%rsi,1)
  lea    0x3(%rsi),%rdi
  cmp    %rdi,%rdx
  jbe    L190
  movzbl 0x3(%rcx,%rsi,1),%edi
  mov    %dil,0x3(%rax,%rsi,1)
  lea    0x4(%rsi),%rdi
  cmp    %rdi,%rdx
  jbe    L190
  movzbl 0x4(%rcx,%rsi,1),%edi
  mov    %dil,0x4(%rax,%rsi,1)
  lea    0x5(%rsi),%rdi
  cmp    %rdi,%rdx
  jbe    L190
  movzbl 0x5(%rcx,%rsi,1),%edi
  mov    %dil,0x5(%rax,%rsi,1)
  lea    0x6(%rsi),%rdi
  cmp    %rdi,%rdx
  jbe    L190
  movzbl 0x6(%rcx,%rsi,1),%edx
  mov    %dl,0x6(%rax,%rsi,1)
L190:
  pop    %rbx
  ret
  nopl   0x0(%rax,%rax,1)
L189:
  add    $0x1,%rsi
L249:
  movzbl (%rcx,%rdi,1),%r8d
  mov    %r8b,(%rax,%rdi,1)
  mov    %rsi,%rdi
  cmp    %rsi,%rdx
  ja     L189
  pop    %rbx
  ret
  nopw   0x0(%rax,%rax,1)
L20:
  xor    %esi,%esi
  nopw   0x0(%rax,%rax,1)
L149:
  mov    (%rcx,%rsi,8),%r8
  mov    %r8,(%rax,%rsi,8)
  add    $0x1,%rsi
  cmp    %rsi,%rdi
  jne    L149
  jmp    L27
L172:
  mov    %rdi,%rsi
  xor    %r9d,%r9d
  jmp    L66
```

assistant: ```c
char *ft_strncpy(char *dest, const char *src, size_t n) {
  size_t i;
  size_t lim;
  long int *dest2;
  long int *src2;
  i = 0;
  if (dest && src && n > 0) {
    lim = n / sizeof(long int);
    dest2 = (long int *)dest;
    src2 = (long int *)src;
    while (i < lim) {
      dest2[i] = src2[i];
      ++i;
    }
    i *= sizeof(long int);
    while (i < n) {
      dest[i] = src[i];
      ++i;
    }
  }
  return (dest);
}
```