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

```asm
<YUV2YUV>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  mov    %edi,%ebx
  imul   %esi,%ebx
  movslq %ebx,%rsi
  test   %rsi,%rsi
  je     L219
  mov    %rdx,%rdi
  lea    (%rcx,%rsi,2),%rax
  mov    %rcx,%rdx
  cmp    %rax,%rdi
  lea    (%rdi,%rsi,1),%r10
  setae  %al
  cmp    %r10,%rcx
  setae  %cl
  or     %cl,%al
  je     L470
  lea    -0x1(%rsi),%r11
  cmp    $0xe,%r11
  jbe    L470
  mov    %rsi,%rcx
  xor    %eax,%eax
  pxor   %xmm1,%xmm1
  and    $0xfffffffffffffff0,%rcx
  cs nopw 0x0(%rax,%rax,1)
L373:
  movdqu (%rdi,%rax,1),%xmm0
  movdqa %xmm0,%xmm2
  punpckhbw %xmm1,%xmm0
  punpcklbw %xmm1,%xmm2
  movups %xmm0,0x10(%rdx,%rax,2)
  movups %xmm2,(%rdx,%rax,2)
  add    $0x10,%rax
  cmp    %rcx,%rax
  jne    L373
  mov    %rsi,%rbp
  and    $0xfffffffffffffff0,%rbp
  lea    (%rdx,%rbp,2),%rax
  mov    %r11,%rdx
  lea    (%rdi,%rbp,1),%rcx
  sub    %rbp,%rdx
  cmp    %rbp,%rsi
  je     L294
  movzbl (%rcx),%r11d
  mov    %r11w,(%rax)
  test   %rdx,%rdx
  je     L294
  movzbl 0x1(%rcx),%r11d
  mov    %r11w,0x2(%rax)
  cmp    $0x1,%rdx
  je     L294
  movzbl 0x2(%rcx),%r11d
  mov    %r11w,0x4(%rax)
  cmp    $0x2,%rdx
  je     L294
  movzbl 0x3(%rcx),%r11d
  mov    %r11w,0x6(%rax)
  cmp    $0x3,%rdx
  je     L294
  movzbl 0x4(%rcx),%r11d
  mov    %r11w,0x8(%rax)
  cmp    $0x4,%rdx
  je     L294
  movzbl 0x5(%rcx),%r11d
  mov    %r11w,0xa(%rax)
  cmp    $0x5,%rdx
  je     L294
  movzbl 0x6(%rcx),%r11d
  mov    %r11w,0xc(%rax)
  cmp    $0x6,%rdx
  je     L294
  movzbl 0x7(%rcx),%r11d
  mov    %r11w,0xe(%rax)
  cmp    $0x7,%rdx
  je     L294
  movzbl 0x8(%rcx),%r11d
  mov    %r11w,0x10(%rax)
  cmp    $0x8,%rdx
  je     L294
  movzbl 0x9(%rcx),%r11d
  mov    %r11w,0x12(%rax)
  cmp    $0x9,%rdx
  je     L294
  movzbl 0xa(%rcx),%r11d
  mov    %r11w,0x14(%rax)
  cmp    $0xa,%rdx
  je     L294
  movzbl 0xb(%rcx),%r11d
  mov    %r11w,0x16(%rax)
  cmp    $0xb,%rdx
  je     L294
  movzbl 0xc(%rcx),%r11d
  mov    %r11w,0x18(%rax)
  cmp    $0xc,%rdx
  je     L294
  movzbl 0xd(%rcx),%r11d
  mov    %r11w,0x1a(%rax)
  cmp    $0xd,%rdx
  je     L294
  movzbl 0xe(%rcx),%edx
  mov    %dx,0x1c(%rax)
  xchg   %ax,%ax
L294:
  test   %ebx,%ebx
  lea    0x3(%rbx),%edx
  cmovns %ebx,%edx
  sar    $0x2,%edx
  lea    -0x1(%rdx),%r11d
  movslq %r11d,%r11
  je     L219
  movslq %edx,%rdx
  cmp    $0xe,%r11
  lea    (%rdx,%rdx,1),%rbp
  lea    (%rdx,%rsi,1),%r12
  seta   %bl
  lea    (%r8,%rbp,1),%rax
  lea    (%rdi,%r12,1),%rcx
  cmp    %rax,%r10
  setae  %al
  cmp    %rcx,%r8
  setae  %sil
  or     %sil,%al
  je     L601
  test   %bl,%bl
  je     L601
  mov    %rdx,%rsi
  xor    %eax,%eax
  pxor   %xmm1,%xmm1
  and    $0xfffffffffffffff0,%rsi
  nopl   (%rax)
L515:
  movdqu (%r10,%rax,1),%xmm0
  movdqa %xmm0,%xmm2
  punpckhbw %xmm1,%xmm0
  punpcklbw %xmm1,%xmm2
  movups %xmm0,0x10(%r8,%rax,2)
  movups %xmm2,(%r8,%rax,2)
  add    $0x10,%rax
  cmp    %rsi,%rax
  jne    L515
  mov    %rdx,%rsi
  and    $0xfffffffffffffff0,%rsi
  lea    (%r8,%rsi,2),%rax
  mov    %r11,%r8
  add    %rsi,%r10
  sub    %rsi,%r8
  cmp    %rsi,%rdx
  je     L542
  movzbl (%r10),%esi
  mov    %si,(%rax)
  test   %r8,%r8
  je     L542
  movzbl 0x1(%r10),%esi
  mov    %si,0x2(%rax)
  cmp    $0x1,%r8
  je     L542
  movzbl 0x2(%r10),%esi
  mov    %si,0x4(%rax)
  cmp    $0x2,%r8
  je     L542
  movzbl 0x3(%r10),%esi
  mov    %si,0x6(%rax)
  cmp    $0x3,%r8
  je     L542
  movzbl 0x4(%r10),%esi
  mov    %si,0x8(%rax)
  cmp    $0x4,%r8
  je     L542
  movzbl 0x5(%r10),%esi
  mov    %si,0xa(%rax)
  cmp    $0x5,%r8
  je     L542
  movzbl 0x6(%r10),%esi
  mov    %si,0xc(%rax)
  cmp    $0x6,%r8
  je     L542
  movzbl 0x7(%r10),%esi
  mov    %si,0xe(%rax)
  cmp    $0x7,%r8
  je     L542
  movzbl 0x8(%r10),%esi
  mov    %si,0x10(%rax)
  cmp    $0x8,%r8
  je     L542
  movzbl 0x9(%r10),%esi
  mov    %si,0x12(%rax)
  cmp    $0x9,%r8
  je     L542
  movzbl 0xa(%r10),%esi
  mov    %si,0x14(%rax)
  cmp    $0xa,%r8
  je     L542
  movzbl 0xb(%r10),%esi
  mov    %si,0x16(%rax)
  cmp    $0xb,%r8
  je     L542
  movzbl 0xc(%r10),%esi
  mov    %si,0x18(%rax)
  cmp    $0xc,%r8
  je     L542
  movzbl 0xd(%r10),%esi
  mov    %si,0x1a(%rax)
  cmp    $0xd,%r8
  je     L542
  movzbl 0xe(%r10),%esi
  mov    %si,0x1c(%rax)
  nopl   0x0(%rax,%rax,1)
L542:
  lea    (%rdx,%r12,1),%rsi
  lea    (%rdi,%rsi,1),%rax
  cmp    %rax,%r9
  setae  %al
  add    %r9,%rbp
  cmp    %rbp,%rcx
  setae  %sil
  or     %sil,%al
  je     L91
  test   %bl,%bl
  je     L91
  mov    %rdx,%rsi
  xor    %eax,%eax
  pxor   %xmm1,%xmm1
  and    $0xfffffffffffffff0,%rsi
  xchg   %ax,%ax
L275:
  movdqu (%rcx,%rax,1),%xmm0
  movdqa %xmm0,%xmm2
  punpckhbw %xmm1,%xmm0
  punpcklbw %xmm1,%xmm2
  movups %xmm0,0x10(%r9,%rax,2)
  movups %xmm2,(%r9,%rax,2)
  add    $0x10,%rax
  cmp    %rsi,%rax
  jne    L275
  mov    %rdx,%rsi
  and    $0xfffffffffffffff0,%rsi
  add    %rsi,%rcx
  lea    (%r9,%rsi,2),%rax
  sub    %rsi,%r11
  cmp    %rdx,%rsi
  je     L219
  movzbl (%rcx),%edx
  mov    %dx,(%rax)
  test   %r11,%r11
  je     L219
  movzbl 0x1(%rcx),%edx
  mov    %dx,0x2(%rax)
  cmp    $0x1,%r11
  je     L219
  movzbl 0x2(%rcx),%edx
  mov    %dx,0x4(%rax)
  cmp    $0x2,%r11
  je     L219
  movzbl 0x3(%rcx),%edx
  mov    %dx,0x6(%rax)
  cmp    $0x3,%r11
  je     L219
  movzbl 0x4(%rcx),%edx
  mov    %dx,0x8(%rax)
  cmp    $0x4,%r11
  je     L219
  movzbl 0x5(%rcx),%edx
  mov    %dx,0xa(%rax)
  cmp    $0x5,%r11
  je     L219
  movzbl 0x6(%rcx),%edx
  mov    %dx,0xc(%rax)
  cmp    $0x6,%r11
  je     L219
  movzbl 0x7(%rcx),%edx
  mov    %dx,0xe(%rax)
  cmp    $0x7,%r11
  je     L219
  movzbl 0x8(%rcx),%edx
  mov    %dx,0x10(%rax)
  cmp    $0x8,%r11
  je     L219
  movzbl 0x9(%rcx),%edx
  mov    %dx,0x12(%rax)
  cmp    $0x9,%r11
  je     L219
  movzbl 0xa(%rcx),%edx
  mov    %dx,0x14(%rax)
  cmp    $0xa,%r11
  je     L219
  movzbl 0xb(%rcx),%edx
  mov    %dx,0x16(%rax)
  cmp    $0xb,%r11
  je     L219
  movzbl 0xc(%rcx),%edx
  mov    %dx,0x18(%rax)
  cmp    $0xc,%r11
  je     L219
  movzbl 0xd(%rcx),%edx
  mov    %dx,0x1a(%rax)
  cmp    $0xd,%r11
  je     L219
  movzbl 0xe(%rcx),%edx
  mov    %dx,0x1c(%rax)
L219:
  pop    %rbx
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax,%rax,1)
L601:
  xor    %esi,%esi
  nopw   0x0(%rax,%rax,1)
L417:
  movzbl (%r10,%rsi,1),%eax
  mov    %ax,(%r8,%rsi,2)
  add    $0x1,%rsi
  cmp    %rsi,%rdx
  jne    L417
  jmp    L542
  nopl   0x0(%rax,%rax,1)
L91:
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L223:
  movzbl (%rcx,%rax,1),%esi
  mov    %si,(%r9,%rax,2)
  add    $0x1,%rax
  cmp    %rax,%rdx
  jne    L223
  pop    %rbx
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax)
L470:
  xor    %ecx,%ecx
  nopw   0x0(%rax,%rax,1)
L78:
  movzbl (%rdi,%rcx,1),%eax
  mov    %ax,(%rdx,%rcx,2)
  add    $0x1,%rcx
  cmp    %rcx,%rsi
  jne    L78
  jmp    L294
```

assistant: ```c
int YUV2YUV(int x_dim, int y_dim, void *yuv, void *y_out, void *u_out, void *v_out) {
  unsigned char *in;
  short int *out;
  long size;
  in = yuv;
  out = y_out;
  size = x_dim * y_dim;
  while (size--)
    *(out++) = *(in++);
  out = u_out;
  size = x_dim * y_dim / 4;
  while (size--)
    *(out++) = *(in++);
  out = v_out;
  size = x_dim * y_dim / 4;
  while (size--)
    *(out++) = *(in++);
  return 0;
}
```