user: Demonstrate the C code that generates the assembly output below:

```asm
<get_dc_pred>:
  endbr64
  test   %esi,%esi
  mov    %rdi,%r10
  movslq %edx,%rdi
  push   %r12
  setg   %al
  test   %edi,%edi
  push   %rbp
  setg   %dl
  push   %rbx
  test   %al,%al
  je     L241
  test   %dl,%dl
  je     L241
  test   %r8d,%r8d
  jle    L284
  lea    -0x1(%rsi),%r11d
  lea    -0x1(%r8),%r12d
  imul   %ecx,%r11d
  lea    (%r11,%rdi,1),%ebx
  cmp    $0x2,%r12d
  jbe    L417
  movslq %r11d,%rax
  movslq %edi,%rbp
  pxor   %xmm0,%xmm0
  mov    %r8d,%edx
  add    %rbp,%rax
  shr    $0x2,%edx
  lea    (%r10,%rax,4),%rax
  shl    $0x4,%rdx
  add    %rax,%rdx
  nopl   0x0(%rax)
L403:
  movdqu (%rax),%xmm2
  add    $0x10,%rax
  paddd  %xmm2,%xmm0
  cmp    %rdx,%rax
  jne    L403
  movdqa %xmm0,%xmm1
  mov    %r8d,%edx
  psrldq $0x8,%xmm1
  and    $0xfffffffc,%edx
  paddd  %xmm1,%xmm0
  movdqa %xmm0,%xmm1
  psrldq $0x4,%xmm1
  paddd  %xmm1,%xmm0
  movd   %xmm0,%eax
  cmp    %edx,%r8d
  je     L325
L139:
  lea    (%rbx,%rdx,1),%ebp
  movslq %ebp,%rbp
  add    (%r10,%rbp,4),%eax
  lea    0x1(%rdx),%ebp
  cmp    %ebp,%r8d
  jle    L127
  add    %ebx,%ebp
  add    $0x2,%edx
  movslq %ebp,%rbp
  add    (%r10,%rbp,4),%eax
  cmp    %edx,%r8d
  jle    L127
  add    %ebx,%edx
  movslq %edx,%rdx
  add    (%r10,%rdx,4),%eax
L127:
  cmp    $0x1,%ecx
  jne    L351
  cmp    $0x2,%r12d
  jbe    L452
  movslq %edi,%rbp
L350:
  movslq %esi,%rdx
  mov    %r8d,%ecx
  pxor   %xmm0,%xmm0
  add    %rbp,%rdx
  shr    $0x2,%ecx
  lea    -0x4(%r10,%rdx,4),%rdx
  shl    $0x4,%rcx
  add    %rdx,%rcx
  nopl   0x0(%rax)
L457:
  movdqu (%rdx),%xmm3
  add    $0x10,%rdx
  paddd  %xmm3,%xmm0
  cmp    %rdx,%rcx
  jne    L457
  movdqa %xmm0,%xmm1
  psrldq $0x8,%xmm1
  paddd  %xmm1,%xmm0
  movdqa %xmm0,%xmm1
  psrldq $0x4,%xmm1
  paddd  %xmm1,%xmm0
  movd   %xmm0,%edx
  add    %edx,%eax
  mov    %r8d,%edx
  and    $0xfffffffc,%edx
  test   $0x3,%r8b
  je     L56
L202:
  lea    (%rsi,%rdx,1),%ecx
  add    %edi,%ecx
  movslq %ecx,%rcx
  add    -0x4(%r10,%rcx,4),%eax
  lea    0x1(%rdx),%ecx
  cmp    %ecx,%r8d
  jle    L56
  add    %esi,%ecx
  add    $0x2,%edx
  add    %edi,%ecx
  movslq %ecx,%rcx
  add    -0x4(%r10,%rcx,4),%eax
  cmp    %edx,%r8d
  jle    L56
  add    %esi,%edx
  add    %edi,%edx
  movslq %edx,%rdx
  add    -0x4(%r10,%rdx,4),%eax
L56:
  add    %r8d,%eax
L404:
  lea    (%r8,%r8,1),%ecx
  cltd
  idiv   %ecx
L263:
  test   %r8d,%r8d
  jle    L197
  mov    %r8d,%edx
  movslq %r8d,%rbx
  mov    %r8d,%r10d
  mov    %r9,%rsi
  shr    $0x2,%edx
  movd   %eax,%xmm5
  shl    $0x2,%rbx
  lea    -0x1(%r8),%ebp
  lea    -0x1(%rdx),%r11d
  and    $0xfffffffc,%r10d
  xor    %ecx,%ecx
  xor    %edi,%edi
  add    $0x1,%r11
  pshufd $0x0,%xmm5,%xmm0
  shl    $0x4,%r11
  nopl   0x0(%rax)
L156:
  cmp    $0x2,%ebp
  jbe    L142
  lea    (%r11,%rsi,1),%r12
  mov    %rsi,%rdx
L278:
  movups %xmm0,(%rdx)
  add    $0x10,%rdx
  cmp    %rdx,%r12
  jne    L278
  mov    %r10d,%edx
  cmp    %r10d,%r8d
  je     L396
L98:
  lea    (%rcx,%rdx,1),%r12d
  movslq %r12d,%r12
  mov    %eax,(%r9,%r12,4)
  lea    0x1(%rdx),%r12d
  cmp    %r12d,%r8d
  jle    L396
  add    %ecx,%r12d
  add    $0x2,%edx
  movslq %r12d,%r12
  mov    %eax,(%r9,%r12,4)
  cmp    %edx,%r8d
  jle    L396
  add    %ecx,%edx
  movslq %edx,%rdx
  mov    %eax,(%r9,%rdx,4)
L396:
  add    $0x1,%edi
  add    %r8d,%ecx
  add    %rbx,%rsi
  cmp    %edi,%r8d
  jne    L156
L197:
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L241:
  test   %edi,%edi
  jne    L458
  test   %al,%al
  je     L458
  test   %r8d,%r8d
  jle    L218
  sub    $0x1,%esi
  lea    -0x1(%r8),%eax
  imul   %ecx,%esi
  cmp    $0x2,%eax
  jbe    L1
  mov    %r8d,%edx
  movslq %esi,%rax
  pxor   %xmm0,%xmm0
  shr    $0x2,%edx
  lea    (%r10,%rax,4),%rax
  shl    $0x4,%rdx
  add    %rax,%rdx
  nopw   0x0(%rax,%rax,1)
L522:
  movdqu (%rax),%xmm4
  add    $0x10,%rax
  paddd  %xmm4,%xmm0
  cmp    %rdx,%rax
  jne    L522
  movdqa %xmm0,%xmm1
  mov    %r8d,%edx
  psrldq $0x8,%xmm1
  and    $0xfffffffc,%edx
  paddd  %xmm1,%xmm0
  movdqa %xmm0,%xmm1
  psrldq $0x4,%xmm1
  paddd  %xmm1,%xmm0
  movd   %xmm0,%eax
  test   $0x3,%r8b
  je     L2
L115:
  lea    (%rsi,%rdx,1),%ecx
  movslq %ecx,%rcx
  add    (%r10,%rcx,4),%eax
  lea    0x1(%rdx),%ecx
  cmp    %ecx,%r8d
  jle    L2
  add    %esi,%ecx
  add    $0x2,%edx
  movslq %ecx,%rcx
  add    (%r10,%rcx,4),%eax
  cmp    %edx,%r8d
  jle    L2
  add    %esi,%edx
  movslq %edx,%rdx
  add    (%r10,%rdx,4),%eax
L2:
  mov    %r8d,%edx
  shr    $0x1f,%edx
  add    %r8d,%edx
  sar    %edx
  add    %edx,%eax
  cltd
  idiv   %r8d
  jmp    L263
  nopl   (%rax)
L142:
  xor    %edx,%edx
  jmp    L98
L458:
  test   %esi,%esi
  jne    L332
  test   %dl,%dl
  je     L332
  test   %r8d,%r8d
  jle    L218
  cmp    $0x1,%ecx
  jne    L224
  lea    -0x1(%r8),%eax
  cmp    $0x2,%eax
  jbe    L479
  mov    %r8d,%edx
  movslq %edi,%rax
  pxor   %xmm0,%xmm0
  shr    $0x2,%edx
  lea    -0x4(%r10,%rax,4),%rax
  shl    $0x4,%rdx
  add    %rax,%rdx
L243:
  movdqu (%rax),%xmm6
  add    $0x10,%rax
  paddd  %xmm6,%xmm0
  cmp    %rdx,%rax
  jne    L243
  movdqa %xmm0,%xmm1
  mov    %r8d,%edx
  psrldq $0x8,%xmm1
  and    $0xfffffffc,%edx
  paddd  %xmm1,%xmm0
  movdqa %xmm0,%xmm1
  psrldq $0x4,%xmm1
  paddd  %xmm1,%xmm0
  movd   %xmm0,%eax
  test   $0x3,%r8b
  je     L2
L338:
  lea    (%rdi,%rdx,1),%ecx
  movslq %ecx,%rcx
  add    -0x4(%r10,%rcx,4),%eax
  lea    0x1(%rdx),%ecx
  cmp    %ecx,%r8d
  jle    L2
  add    %edi,%ecx
  add    $0x2,%edx
  movslq %ecx,%rcx
  add    -0x4(%r10,%rcx,4),%eax
  cmp    %edx,%r8d
  jle    L2
  add    %edi,%edx
  movslq %edx,%rdx
  add    -0x4(%r10,%rdx,4),%eax
  jmp    L2
L332:
  mov    $0x80,%eax
  jmp    L263
L284:
  mov    %r8d,%eax
  jmp    L404
L325:
  cmp    $0x1,%ecx
  je     L350
L126:
  lea    (%r11,%rcx,1),%edx
  movslq %ecx,%rsi
  movslq %edx,%rdx
  shl    $0x2,%rsi
  add    %rbp,%rdx
  lea    (%r10,%rdx,4),%rcx
  xor    %edx,%edx
  nopl   0x0(%rax)
L462:
  add    $0x1,%edx
  add    -0x4(%rcx),%eax
  add    %rsi,%rcx
  cmp    %edx,%r8d
  jne    L462
  jmp    L56
L351:
  movslq %edi,%rbp
  jmp    L126
L417:
  xor    %eax,%eax
  xor    %edx,%edx
  jmp    L139
L218:
  xor    %eax,%eax
  jmp    L2
L452:
  xor    %edx,%edx
  jmp    L202
L224:
  movslq %ecx,%rcx
  xor    %eax,%eax
  xor    %edx,%edx
  lea    0x0(,%rcx,4),%rsi
  lea    (%r10,%rdi,4),%rcx
L244:
  add    $0x1,%edx
  add    -0x4(%rcx),%eax
  add    %rsi,%rcx
  cmp    %edx,%r8d
  jne    L244
  jmp    L2
L1:
  xor    %eax,%eax
  xor    %edx,%edx
  jmp    L115
L479:
  xor    %eax,%eax
  xor    %edx,%edx
  jmp    L338
```

assistant: ```c
void get_dc_pred(uint8_t *rec, int ypos, int xpos, int stride, int size, uint8_t *pblock) {
  int i, j, dc = 128, sum;
  if (ypos > 0 && xpos > 0) {
    sum = 0;
    for (j = 0; j < size; j++)
      sum += rec[(ypos - 1) * stride + xpos + j];
    for (i = 0; i < size; i++)
      sum += rec[(ypos + i) * stride + xpos - 1];
    dc = (sum + size) / (2 * size);
  } else if (ypos > 0 && xpos == 0) {
    sum = 0;
    for (j = 0; j < size; j++)
      sum += rec[(ypos - 1) * stride + xpos + j];
    dc = (sum + size / 2) / size;
  } else if (ypos == 0 && xpos > 0) {
    sum = 0;
    for (i = 0; i < size; i++)
      sum += rec[(ypos + i) * stride + xpos - 1];
    dc = (sum + size / 2) / size;
  } else if (ypos == 0 && xpos == 0) {
    dc = 128;
  }
  for (i = 0; i < size; i++) {
    for (j = 0; j < size; j++) {
      pblock[i * size + j] = dc;
    }
  }
}
```