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

```asm
<vc_image_resize_bytes>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %ecx,(%rsp)
  test   %edx,%edx
  jle    L149
  mov    %rdi,%rbp
  mov    %esi,%r13d
  mov    %edx,%ebx
  mov    %r8,%r12
  mov    %r9d,%r15d
  cmpl   $0x0,0x70(%rsp)
  jle    L149
  test   %esi,%esi
  jle    L149
  test   %r9d,%r9d
  jle    L149
  cmp    %r9d,%esi
  jne    L104
  cmp    0x70(%rsp),%edx
  jne    L104
  cmp    %r8,%rdi
  je     L33
  cmp    (%rsp),%esi
  jne    L101
  cmp    0x78(%rsp),%r9d
  je     L18
L101:
  movslq (%rsp),%r14
  mov    0x78(%rsp),%r15d
L71:
  mov    %r13d,%edx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <vclib_memcpy@plt>
  add    %r14,%rbp
  movslq %r15d,%rax
  add    %rax,%r12
  sub    $0x1,%ebx
  test   %ebx,%ebx
  jg     L71
L149:
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L33:
  cmp    0x78(%rsp),%ecx
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  jmp    L149
L18:
  imul   %esi,%ebx
  mov    %ebx,%edx
  mov    %r8,%rsi
  call   <vclib_memcpy@plt>
  jmp    L149
L104:
  cmp    0x70(%rsp),%ebx
  jge    L265
  cmp    %r15d,%r13d
  jge    L180
  lea    (%rbx,%rbx,1),%eax
  cmp    0x70(%rsp),%eax
  jne    L182
  lea    0x0(%r13,%r13,1),%eax
  cmp    %r15d,%eax
  je     L269
L182:
  mov    $0x0,%edi
  call   <vclib_obtain_tmp_buf@plt>
  mov    %rax,0x8(%rsp)
  mov    $0x0,%eax
  call   <vclib_get_tmp_buf_size@plt>
  lea    0xf(%r15),%edx
  and    $0xfffffff0,%edx
  mov    %edx,%esi
  mov    %edx,0x14(%rsp)
  shl    $0x6,%edx
  mov    $0x40,%r14d
  cmp    %eax,%edx
  jle    L111
  shl    $0x5,%esi
  mov    $0x20,%r14d
  cmp    %eax,%esi
  jg     L44
L111:
  mov    0x70(%rsp),%eax
  shl    $0x10,%eax
  cltd
  idiv   %ebx
  mov    %eax,0x18(%rsp)
  mov    $0x0,%ecx
  mov    $0x0,%edi
  mov    0x70(%rsp),%eax
  sub    $0x1,%eax
  mov    %eax,0x20(%rsp)
  mov    %r13d,0x24(%rsp)
  mov    %ecx,%r13d
  mov    %r12,0x28(%rsp)
  mov    %edi,%r12d
  mov    %r15d,0x1c(%rsp)
  mov    0x80(%rsp),%r15d
L173:
  lea    (%r12,%r14,1),%edx
  mov    %ebx,%eax
  sub    %r12d,%eax
  cmp    %ebx,%edx
  cmovg  %eax,%r14d
  push   %r15
  mov    0x28(%rsp),%eax
  push   %rax
  mov    0x28(%rsp),%eax
  push   %rax
  push   %r13
  mov    0x98(%rsp),%r9d
  mov    0x48(%rsp),%r8
  mov    0x34(%rsp),%ecx
  mov    %r14d,%edx
  mov    0x3c(%rsp),%esi
  mov    0x28(%rsp),%rdi
  call   <vcir8_vzoom2@plt>
  add    $0x20,%rsp
  push   %r15
  mov    0x1c(%rsp),%ecx
  push   %rcx
  mov    0x2c(%rsp),%r9d
  mov    0x18(%rsp),%r8
  mov    0x10(%rsp),%ecx
  mov    %r14d,%edx
  mov    0x34(%rsp),%esi
  mov    %rbp,%rdi
  call   <vcir8_hzoom@plt>
  mov    0x28(%rsp),%eax
  imul   %r14d,%eax
  add    %eax,%r13d
  mov    0x10(%rsp),%eax
  imul   %r14d,%eax
  cltq
  add    %rax,%rbp
  add    %r14d,%r12d
  add    $0x10,%rsp
  cmp    %r12d,%ebx
  jg     L173
  mov    0x8(%rsp),%rdi
  call   <vclib_release_tmp_buf@plt>
  jmp    L149
L265:
  mov    %ebx,%r14d
  sub    0x70(%rsp),%r14d
  mov    (%rsp),%eax
  imul   %eax,%r14d
  movslq %r14d,%r14
  add    %rbp,%r14
  mov    0x80(%rsp),%edi
  push   %rdi
  mov    0x80(%rsp),%ecx
  push   %rcx
  mov    %r15d,%r9d
  mov    %r12,%r8
  mov    %eax,%r15d
  mov    %eax,%ecx
  mov    0x80(%rsp),%edx
  mov    %r13d,%esi
  mov    %r14,%rdi
  call   <vcir8_hzoom@plt>
  add    $0x10,%rsp
  cmp    0x70(%rsp),%ebx
  je     L149
  mov    0x80(%rsp),%eax
  push   %rax
  mov    0x78(%rsp),%eax
  sub    $0x1,%eax
  push   %rax
  mov    0x80(%rsp),%eax
  shl    $0x10,%eax
  cltd
  idiv   %ebx
  push   %rax
  push   $0x0
  mov    %r15d,%r9d
  mov    %r14,%r8
  mov    %r15d,%ecx
  mov    %ebx,%edx
  mov    %r13d,%esi
  mov    %rbp,%rdi
  call   <vcir8_vzoom2@plt>
  add    $0x20,%rsp
  jmp    L149
L180:
  mov    %r13d,%r14d
  sub    %r15d,%r14d
  movslq %r14d,%r14
  add    %rbp,%r14
  mov    0x80(%rsp),%eax
  push   %rax
  mov    0x78(%rsp),%eax
  sub    $0x1,%eax
  push   %rax
  mov    0x80(%rsp),%eax
  shl    $0x10,%eax
  cltd
  idiv   %ebx
  push   %rax
  push   $0x0
  mov    0x98(%rsp),%r9d
  mov    %r12,%r8
  mov    0x20(%rsp),%r12d
  mov    %r12d,%ecx
  mov    %ebx,%edx
  mov    %r15d,%esi
  mov    %r14,%rdi
  call   <vcir8_vzoom2@plt>
  add    $0x20,%rsp
  cmp    %r15d,%r13d
  je     L149
  mov    0x80(%rsp),%eax
  push   %rax
  push   %r12
  mov    %r15d,%r9d
  mov    %r14,%r8
  mov    %r12d,%ecx
  mov    %ebx,%edx
  mov    %r13d,%esi
  mov    %rbp,%rdi
  call   <vcir8_hzoom@plt>
  add    $0x10,%rsp
  jmp    L149
L269:
  mov    %r12d,%eax
  or     0x78(%rsp),%eax
  or     (%rsp),%eax
  or     %ebp,%eax
  or     %r13d,%eax
  or     0x70(%rsp),%eax
  test   $0xf,%al
  jne    L182
  mov    (%rsp),%esi
  lea    0x0(,%rsi,8),%eax
  movslq %eax,%r14
  mov    0x78(%rsp),%eax
  shl    $0x4,%eax
  movslq %eax,%r15
  mov    %r14,(%rsp)
  mov    %r15,0x8(%rsp)
  mov    %esi,%r14d
  mov    0x78(%rsp),%r15d
L137:
  mov    0x80(%rsp),%r9d
  mov    %r15d,%r8d
  mov    %r14d,%ecx
  mov    %r13d,%edx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <vcir8_down2_8@plt>
  add    (%rsp),%rbp
  add    0x8(%rsp),%r12
  sub    $0x8,%ebx
  test   %ebx,%ebx
  jg     L137
  jmp    L149
L44:
  cltd
  idivl  0x14(%rsp)
  mov    $0x10,%r14d
  cmp    %r14d,%eax
  cmovle %eax,%r14d
  test   %eax,%eax
  setg   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  jmp    L111
```

assistant: ```c
void vc_image_resize_bytes(unsigned char *dest, int destw, int desth, int dest_pitch, const unsigned char *src, int srcw, int srch, int src_pitch, int smooth_flag) {
  if (desth <= 0 || srch <= 0 || destw <= 0 || srcw <= 0)
    return;
  if (destw == srcw && desth == srch) {
    if (dest == src) {
      assert(dest_pitch == src_pitch);
      return;
    }
    if (dest_pitch == destw && src_pitch == srcw) {
      vclib_memcpy(dest, src, destw * desth);
    } else {
      do {
        vclib_memcpy(dest, src, destw);
        dest += dest_pitch;
        src += src_pitch;
      } while (--desth > 0);
    }
  } else if (desth >= srch) {
    unsigned char *ptr = dest + dest_pitch * (desth - srch);
    vcir8_hzoom(ptr, destw, srch, dest_pitch, src, srcw, src_pitch, smooth_flag);
    if (desth != srch) {
      vcir8_vzoom2(dest, destw, desth, dest_pitch, ptr, dest_pitch, 0, (srch << 16) / desth, srch - 1, smooth_flag);
    }
  } else if (destw >= srcw) {
    unsigned char *ptr = dest + (destw - srcw);
    vcir8_vzoom2(ptr, srcw, desth, dest_pitch, src, src_pitch, 0, (srch << 16) / desth, srch - 1, smooth_flag);
    if (destw != srcw) {
      vcir8_hzoom(dest, destw, desth, dest_pitch, ptr, srcw, dest_pitch, smooth_flag);
    }
  } else {
    int i, j, step, pos, buf_pitch, buf_size;
    unsigned char *bufptr;
    if (desth * 2 == srch && destw * 2 == srcw && ((destw | srch | dest_pitch | src_pitch | ((int)dest) | ((int)src)) & 15) == 0) {
      while (desth > 0) {
        vcir8_down2_8(dest, src, destw, dest_pitch, src_pitch, smooth_flag);
        dest += dest_pitch << 3;
        src += src_pitch << 4;
        desth -= 8;
      }
      return;
    }
    bufptr = vclib_obtain_tmp_buf(0);
    buf_size = vclib_get_tmp_buf_size();
    buf_pitch = (srcw + 15) & ~15;
    j = 64;
    if (buf_pitch * j > buf_size) {
      j = 32;
      if (buf_pitch * j > buf_size) {
        j = buf_size / buf_pitch;
        if (j > 16)
          j = 16;
        assert(j > 0);
      }
    }
    pos = 0;
    step = (srch << 16) / desth;
    for (i = 0; i < desth; i += j) {
      if (i + j > desth) {
        j = desth - i;
      }
      vcir8_vzoom2(bufptr, srcw, j, buf_pitch, src, src_pitch, pos, step, srch - 1, smooth_flag);
      vcir8_hzoom(dest, destw, j, dest_pitch, bufptr, srcw, buf_pitch, smooth_flag);
      pos += j * step;
      dest += j * dest_pitch;
    }
    vclib_release_tmp_buf(bufptr);
  }
}
```