user: What would the C source look like for the assembly code provided here?

```asm
<sub_pred>:
  endbr64
  mov    %rsi,%rax
  movslq %edx,%rsi
  mov    %rcx,%rdx
  push   %r12
  lea    (%rsi,%rsi,1),%r8
  mov    $0x7,%r9d
  push   %rbp
  lea    (%r8,%rsi,1),%rcx
  push   %rbx
  lea    0x7f(%rdx),%rbx
  add    %rcx,%rcx
  test   %r8,%r8
  lea    0x7(%rcx),%r12
  cmovs  %r9,%r12
  mov    $0x0,%r9d
  cmovns %r9,%rcx
  lea    (%rax,%r12,1),%r10
  lea    (%rsi,%r12,1),%rbp
  cmp    %r10,%rdx
  lea    (%rax,%rcx,1),%r10
  lea    (%rcx,%rsi,1),%r9
  seta   %r11b
  cmp    %r10,%rbx
  setb   %r10b
  add    %rdi,%rcx
  or     %r10d,%r11d
  cmp    %rcx,%rbx
  lea    (%rdi,%r12,1),%rcx
  setb   %r10b
  cmp    %rcx,%rdx
  seta   %cl
  or     %r10d,%ecx
  and    %ecx,%r11d
  lea    (%rdi,%r9,1),%rcx
  cmp    %rcx,%rbx
  lea    (%rdi,%rbp,1),%rcx
  setb   %r10b
  cmp    %rcx,%rdx
  seta   %cl
  or     %ecx,%r10d
  test   %r10b,%r11b
  je     L14
  add    %rax,%r9
  lea    (%rax,%rbp,1),%rcx
  cmp    %r9,%rbx
  setb   %r9b
  cmp    %rcx,%rdx
  seta   %cl
  or     %cl,%r9b
  je     L14
  movq   (%rax),%xmm1
  pxor   %xmm0,%xmm0
  lea    (%rax,%rsi,1),%r10
  pop    %rbx
  movq   (%rdi),%xmm2
  lea    (%rdi,%rsi,1),%r9
  lea    0x0(,%rsi,4),%rcx
  pop    %rbp
  movhps (%rax,%rsi,2),%xmm1
  add    %rcx,%rax
  add    %rdi,%rcx
  pop    %r12
  movhps (%rdi,%rsi,2),%xmm2
  movdqa %xmm1,%xmm3
  punpckhbw %xmm0,%xmm1
  movdqa %xmm2,%xmm4
  punpcklbw %xmm0,%xmm3
  punpckhbw %xmm0,%xmm2
  punpcklbw %xmm0,%xmm4
  psubw  %xmm2,%xmm1
  lea    (%r9,%r8,2),%rdi
  psubw  %xmm4,%xmm3
  movups %xmm1,0x20(%rdx)
  movups %xmm3,(%rdx)
  movq   (%r10),%xmm1
  movq   (%r9),%xmm2
  movhps (%r10,%r8,1),%xmm1
  movhps (%r9,%r8,1),%xmm2
  lea    (%r10,%r8,2),%r10
  movdqa %xmm1,%xmm3
  movdqa %xmm2,%xmm4
  punpckhbw %xmm0,%xmm1
  punpcklbw %xmm0,%xmm4
  punpckhbw %xmm0,%xmm2
  punpcklbw %xmm0,%xmm3
  psubw  %xmm4,%xmm3
  psubw  %xmm2,%xmm1
  movups %xmm3,0x10(%rdx)
  movups %xmm1,0x30(%rdx)
  movq   (%rax),%xmm1
  movq   (%rcx),%xmm2
  movhps (%rax,%rsi,2),%xmm1
  movhps (%rcx,%rsi,2),%xmm2
  movdqa %xmm1,%xmm3
  movdqa %xmm2,%xmm4
  punpckhbw %xmm0,%xmm1
  punpcklbw %xmm0,%xmm4
  punpckhbw %xmm0,%xmm2
  punpcklbw %xmm0,%xmm3
  psubw  %xmm4,%xmm3
  psubw  %xmm2,%xmm1
  movups %xmm3,0x40(%rdx)
  movups %xmm1,0x60(%rdx)
  movq   (%r10),%xmm1
  movq   (%rdi),%xmm2
  movhps (%r10,%rsi,2),%xmm1
  movhps (%rdi,%rsi,2),%xmm2
  movdqa %xmm1,%xmm3
  movdqa %xmm2,%xmm4
  punpckhbw %xmm0,%xmm1
  punpcklbw %xmm0,%xmm3
  punpcklbw %xmm0,%xmm4
  punpckhbw %xmm0,%xmm2
  psubw  %xmm4,%xmm3
  psubw  %xmm2,%xmm1
  movups %xmm3,0x50(%rdx)
  movups %xmm1,0x70(%rdx)
  ret
L14:
  movzbl (%rdi),%r8d
  movzbl (%rax),%ecx
  sub    %r8d,%ecx
  mov    %cx,(%rdx)
  movzbl 0x1(%rdi),%r8d
  movzbl 0x1(%rax),%ecx
  sub    %r8d,%ecx
  mov    %cx,0x2(%rdx)
  movzbl 0x2(%rdi),%r8d
  movzbl 0x2(%rax),%ecx
  sub    %r8d,%ecx
  mov    %cx,0x4(%rdx)
  movzbl 0x3(%rdi),%r8d
  movzbl 0x3(%rax),%ecx
  sub    %r8d,%ecx
  mov    %cx,0x6(%rdx)
  movzbl 0x4(%rdi),%r8d
  movzbl 0x4(%rax),%ecx
  sub    %r8d,%ecx
  mov    %cx,0x8(%rdx)
  movzbl 0x5(%rdi),%r8d
  movzbl 0x5(%rax),%ecx
  sub    %r8d,%ecx
  mov    %cx,0xa(%rdx)
  movzbl 0x6(%rdi),%r8d
  movzbl 0x6(%rax),%ecx
  sub    %r8d,%ecx
  mov    %cx,0xc(%rdx)
  movzbl 0x7(%rdi),%r8d
  movzbl 0x7(%rax),%ecx
  sub    %r8d,%ecx
  mov    %cx,0xe(%rdx)
  lea    (%rax,%rsi,1),%rcx
  lea    (%rdi,%rsi,1),%rax
  movzbl (%rax),%r8d
  movzbl (%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x10(%rdx)
  movzbl 0x1(%rax),%r8d
  movzbl 0x1(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x12(%rdx)
  movzbl 0x2(%rax),%r8d
  movzbl 0x2(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x14(%rdx)
  movzbl 0x3(%rax),%r8d
  movzbl 0x3(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x16(%rdx)
  movzbl 0x4(%rax),%r8d
  movzbl 0x4(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x18(%rdx)
  movzbl 0x5(%rax),%r8d
  movzbl 0x5(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x1a(%rdx)
  movzbl 0x6(%rax),%r8d
  movzbl 0x6(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x1c(%rdx)
  movzbl 0x7(%rax),%r8d
  add    %rsi,%rax
  movzbl 0x7(%rcx),%edi
  add    %rsi,%rcx
  sub    %r8d,%edi
  mov    %di,0x1e(%rdx)
  movzbl (%rax),%r8d
  movzbl (%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x20(%rdx)
  movzbl 0x1(%rax),%r8d
  movzbl 0x1(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x22(%rdx)
  movzbl 0x2(%rax),%r8d
  movzbl 0x2(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x24(%rdx)
  movzbl 0x3(%rax),%r8d
  movzbl 0x3(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x26(%rdx)
  movzbl 0x4(%rax),%r8d
  movzbl 0x4(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x28(%rdx)
  movzbl 0x5(%rax),%r8d
  movzbl 0x5(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x2a(%rdx)
  movzbl 0x6(%rax),%r8d
  movzbl 0x6(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x2c(%rdx)
  movzbl 0x7(%rax),%r8d
  add    %rsi,%rax
  movzbl 0x7(%rcx),%edi
  add    %rsi,%rcx
  sub    %r8d,%edi
  mov    %di,0x2e(%rdx)
  movzbl (%rax),%r8d
  movzbl (%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x30(%rdx)
  movzbl 0x1(%rax),%r8d
  movzbl 0x1(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x32(%rdx)
  movzbl 0x2(%rax),%r8d
  movzbl 0x2(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x34(%rdx)
  movzbl 0x3(%rax),%r8d
  movzbl 0x3(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x36(%rdx)
  movzbl 0x4(%rax),%r8d
  movzbl 0x4(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x38(%rdx)
  movzbl 0x5(%rax),%r8d
  movzbl 0x5(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x3a(%rdx)
  movzbl 0x6(%rax),%r8d
  movzbl 0x6(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x3c(%rdx)
  movzbl 0x7(%rax),%r8d
  add    %rsi,%rax
  movzbl 0x7(%rcx),%edi
  add    %rsi,%rcx
  sub    %r8d,%edi
  mov    %di,0x3e(%rdx)
  movzbl (%rax),%r8d
  movzbl (%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x40(%rdx)
  movzbl 0x1(%rax),%r8d
  movzbl 0x1(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x42(%rdx)
  movzbl 0x2(%rax),%r8d
  movzbl 0x2(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x44(%rdx)
  movzbl 0x3(%rax),%r8d
  movzbl 0x3(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x46(%rdx)
  movzbl 0x4(%rax),%r8d
  movzbl 0x4(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x48(%rdx)
  movzbl 0x5(%rax),%r8d
  movzbl 0x5(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x4a(%rdx)
  movzbl 0x6(%rax),%r8d
  movzbl 0x6(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x4c(%rdx)
  movzbl 0x7(%rax),%r8d
  add    %rsi,%rax
  movzbl 0x7(%rcx),%edi
  add    %rsi,%rcx
  sub    %r8d,%edi
  mov    %di,0x4e(%rdx)
  movzbl (%rax),%r8d
  movzbl (%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x50(%rdx)
  movzbl 0x1(%rax),%r8d
  movzbl 0x1(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x52(%rdx)
  movzbl 0x2(%rax),%r8d
  movzbl 0x2(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x54(%rdx)
  movzbl 0x3(%rax),%r8d
  movzbl 0x3(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x56(%rdx)
  movzbl 0x4(%rax),%r8d
  movzbl 0x4(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x58(%rdx)
  movzbl 0x5(%rax),%r8d
  movzbl 0x5(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x5a(%rdx)
  movzbl 0x6(%rax),%r8d
  movzbl 0x6(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x5c(%rdx)
  movzbl 0x7(%rax),%r8d
  add    %rsi,%rax
  movzbl 0x7(%rcx),%edi
  add    %rsi,%rcx
  sub    %r8d,%edi
  mov    %di,0x5e(%rdx)
  movzbl (%rax),%r8d
  movzbl (%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x60(%rdx)
  movzbl 0x1(%rax),%r8d
  movzbl 0x1(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x62(%rdx)
  movzbl 0x2(%rax),%r8d
  movzbl 0x2(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x64(%rdx)
  movzbl 0x3(%rax),%r8d
  movzbl 0x3(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x66(%rdx)
  movzbl 0x4(%rax),%r8d
  movzbl 0x4(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x68(%rdx)
  movzbl 0x5(%rax),%r8d
  movzbl 0x5(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x6a(%rdx)
  movzbl 0x6(%rax),%r8d
  movzbl 0x6(%rcx),%edi
  sub    %r8d,%edi
  mov    %di,0x6c(%rdx)
  movzbl 0x7(%rcx),%edi
  add    %rsi,%rcx
  movzbl 0x7(%rax),%r8d
  add    %rsi,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  sub    %r8d,%edi
  mov    %di,0x6e(%rdx)
  movzbl (%rax),%edi
  movzbl (%rcx),%esi
  sub    %edi,%esi
  mov    %si,0x70(%rdx)
  movzbl 0x1(%rax),%edi
  movzbl 0x1(%rcx),%esi
  sub    %edi,%esi
  mov    %si,0x72(%rdx)
  movzbl 0x2(%rax),%edi
  movzbl 0x2(%rcx),%esi
  sub    %edi,%esi
  mov    %si,0x74(%rdx)
  movzbl 0x3(%rax),%edi
  movzbl 0x3(%rcx),%esi
  sub    %edi,%esi
  mov    %si,0x76(%rdx)
  movzbl 0x4(%rax),%edi
  movzbl 0x4(%rcx),%esi
  sub    %edi,%esi
  mov    %si,0x78(%rdx)
  movzbl 0x5(%rax),%edi
  movzbl 0x5(%rcx),%esi
  sub    %edi,%esi
  mov    %si,0x7a(%rdx)
  movzbl 0x6(%rcx),%esi
  movzbl 0x6(%rax),%edi
  sub    %edi,%esi
  mov    %si,0x7c(%rdx)
  movzbl 0x7(%rcx),%ecx
  movzbl 0x7(%rax),%esi
  mov    %ecx,%eax
  sub    %esi,%eax
  mov    %ax,0x7e(%rdx)
  ret
```

assistant: ```c
void sub_pred(unsigned char *pred, unsigned char *cur, signed int lx, signed short int *blk) {
  signed int i;
  signed int j = 0;
  while (j < 4) {
    i = 0;
    while (i < 8) {
      blk[(signed long int)i] = (signed short int)((signed int)cur[(signed long int)i] - (signed int)pred[(signed long int)i]);
      i = i + 1;
    }
    blk = blk + (signed long int)8;
    cur = cur + (signed long int)lx;
    pred = pred + (signed long int)lx;
    i = 0;
    while (i < 8) {
      blk[(signed long int)i] = (signed short int)((signed int)cur[(signed long int)i] - (signed int)pred[(signed long int)i]);
      i = i + 1;
    }
    blk = blk + (signed long int)8;
    cur = cur + (signed long int)lx;
    pred = pred + (signed long int)lx;
    j = j + 1;
  }
}
```