user: Please show me the C implementation that matches the assembly code listed below:

```asm
<predict_8x8c_h>:
  endbr64
  mov    %esi,%r8d
  cmp    $0x1,%esi
  movzbl -0x1(%rdi),%esi
  mov    %ecx,%ecx
  mov    %esi,%eax
  jne    L4
  shl    $0x8,%eax
  or     %esi,%eax
  movd   %eax,%xmm1
  lea    (%rdx,%rcx,1),%rax
  pshuflw $0x0,%xmm1,%xmm0
  movq   %xmm0,(%rdx)
  movzbl (%rdi),%esi
  mov    %esi,%edx
  shl    $0x8,%edx
  or     %esi,%edx
  movd   %edx,%xmm2
  pshuflw $0x0,%xmm2,%xmm0
  movq   %xmm0,(%rax)
  movzbl 0x1(%rdi),%esi
  add    %rcx,%rax
  mov    %esi,%edx
  shl    $0x8,%edx
  or     %esi,%edx
  movd   %edx,%xmm3
  pshuflw $0x0,%xmm3,%xmm0
  movq   %xmm0,(%rax)
  movzbl 0x2(%rdi),%esi
  add    %rcx,%rax
  mov    %esi,%edx
  shl    $0x8,%edx
  or     %esi,%edx
  movd   %edx,%xmm4
  pshuflw $0x0,%xmm4,%xmm0
  movq   %xmm0,(%rax)
  movzbl 0x3(%rdi),%esi
  add    %rcx,%rax
  mov    %esi,%edx
  shl    $0x8,%edx
  or     %esi,%edx
  movd   %edx,%xmm5
  pshuflw $0x0,%xmm5,%xmm0
  movq   %xmm0,(%rax)
  movzbl 0x4(%rdi),%esi
  add    %rcx,%rax
  mov    %esi,%edx
  shl    $0x8,%edx
  or     %esi,%edx
  movd   %edx,%xmm6
  pshuflw $0x0,%xmm6,%xmm0
  movq   %xmm0,(%rax)
  movzbl 0x5(%rdi),%esi
  add    %rcx,%rax
  mov    %esi,%edx
  shl    $0x8,%edx
  or     %esi,%edx
  movd   %edx,%xmm7
  pshuflw $0x0,%xmm7,%xmm0
  movq   %xmm0,(%rax)
  movzbl 0x6(%rdi),%esi
  mov    %esi,%edx
  shl    $0x8,%edx
  or     %esi,%edx
  movd   %edx,%xmm1
  pshuflw $0x0,%xmm1,%xmm0
  movq   %xmm0,(%rax,%rcx,1)
  ret
  cs nopw 0x0(%rax,%rax,1)
L4:
  shl    $0x8,%eax
  or     %esi,%eax
  movd   %eax,%xmm2
  lea    (%rdx,%rcx,1),%rax
  pshuflw $0x0,%xmm2,%xmm0
  movq   %xmm0,(%rdx)
  lea    (%rdi,%r8,1),%rdx
  movzbl -0x1(%rdx),%edi
  add    %r8,%rdx
  mov    %edi,%esi
  shl    $0x8,%esi
  or     %edi,%esi
  movd   %esi,%xmm3
  pshuflw $0x0,%xmm3,%xmm0
  movq   %xmm0,(%rax)
  movzbl -0x1(%rdx),%edi
  add    %rcx,%rax
  add    %r8,%rdx
  mov    %edi,%esi
  shl    $0x8,%esi
  or     %edi,%esi
  movd   %esi,%xmm4
  pshuflw $0x0,%xmm4,%xmm0
  movq   %xmm0,(%rax)
  movzbl -0x1(%rdx),%edi
  add    %rcx,%rax
  add    %r8,%rdx
  mov    %edi,%esi
  shl    $0x8,%esi
  or     %edi,%esi
  movd   %esi,%xmm5
  pshuflw $0x0,%xmm5,%xmm0
  movq   %xmm0,(%rax)
  movzbl -0x1(%rdx),%edi
  add    %rcx,%rax
  add    %r8,%rdx
  mov    %edi,%esi
  shl    $0x8,%esi
  or     %edi,%esi
  movd   %esi,%xmm6
  pshuflw $0x0,%xmm6,%xmm0
  movq   %xmm0,(%rax)
  movzbl -0x1(%rdx),%edi
  add    %rcx,%rax
  add    %r8,%rdx
  mov    %edi,%esi
  shl    $0x8,%esi
  or     %edi,%esi
  movd   %esi,%xmm7
  pshuflw $0x0,%xmm7,%xmm0
  movq   %xmm0,(%rax)
  movzbl -0x1(%rdx),%edi
  add    %rcx,%rax
  mov    %edi,%esi
  shl    $0x8,%esi
  or     %edi,%esi
  movd   %esi,%xmm2
  pshuflw $0x0,%xmm2,%xmm0
  movq   %xmm0,(%rax)
  movzbl -0x1(%rdx,%r8,1),%esi
  mov    %esi,%edx
  shl    $0x8,%edx
  or     %esi,%edx
  movd   %edx,%xmm3
  pshuflw $0x0,%xmm3,%xmm0
  movq   %xmm0,(%rax,%rcx,1)
  ret
```

assistant: ```c
void predict_8x8c_h(unsigned char *src, unsigned int stride_chroma, unsigned char *dst, unsigned int dst_stride_chroma, int neighbour) {
  int i;
  for (i = 0; i < 8; i++) {
    dst[0] = dst[1] = dst[2] = dst[3] = dst[4] = dst[5] = dst[6] = dst[7] = src[-1];
    dst += dst_stride_chroma;
    src += stride_chroma;
  }
}
```