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

```asm
<horizontal_line_4_5_scale_c64>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %rdi,%r13
  mov    %esi,%r15d
  mov    %rdx,%rbx
  call   <_mem4@plt>
  mov    %eax,%r12d
  sub    $0x4,%r15d
  je     L12
  mov    $0x0,%r14d
L5:
  mov    %r13,%rdi
  add    $0x4,%r13
  mov    %r12d,%ebp
  call   <_mem4@plt>
  mov    %eax,%r12d
  mov    %ebp,%edi
  call   <_unpklu4@plt>
  mov    %eax,(%rsp)
  mov    $0x8,%esi
  mov    %ebp,%edi
  call   <_rotl@plt>
  mov    %eax,%edi
  call   <_unpkhu4@plt>
  mov    %eax,0x4(%rsp)
  mov    %ebp,%edi
  call   <_unpkhu4@plt>
  mov    %eax,0x8(%rsp)
  mov    %ebp,%esi
  mov    %r12d,%edi
  call   <_shrmb@plt>
  mov    %eax,%edi
  call   <_unpkhu4@plt>
  mov    %eax,0xc(%rsp)
  mov    %bpl,(%rbx)
  mov    $0xcd003300,%esi
  mov    (%rsp),%edi
  call   <_dotprsu2@plt>
  mov    %al,0x1(%rbx)
  mov    $0x9a006600,%esi
  mov    0x4(%rsp),%edi
  call   <_dotprsu2@plt>
  mov    %al,0x2(%rbx)
  mov    $0x66009a00,%esi
  mov    0x8(%rsp),%edi
  call   <_dotprsu2@plt>
  mov    %al,0x3(%rbx)
  mov    $0x3300cd00,%esi
  mov    0xc(%rsp),%edi
  call   <_dotprsu2@plt>
  mov    %al,0x4(%rbx)
  add    $0x5,%rbx
  add    $0x4,%r14d
  cmp    %r15d,%r14d
  jb     L5
L12:
  mov    %r12d,%edi
  call   <_unpklu4@plt>
  mov    %eax,%r14d
  mov    $0x8,%esi
  mov    %r12d,%edi
  call   <_rotl@plt>
  mov    %eax,%edi
  call   <_unpkhu4@plt>
  mov    %eax,%r13d
  mov    %r12d,%edi
  call   <_unpkhu4@plt>
  mov    %eax,%ebp
  mov    %r12b,(%rbx)
  mov    $0xcd003300,%esi
  mov    %r14d,%edi
  call   <_dotprsu2@plt>
  mov    %al,0x1(%rbx)
  mov    $0x9a006600,%esi
  mov    %r13d,%edi
  call   <_dotprsu2@plt>
  mov    %al,0x2(%rbx)
  mov    $0x66009a00,%esi
  mov    %ebp,%edi
  call   <_dotprsu2@plt>
  mov    %al,0x3(%rbx)
  mov    %r12b,0x4(%rbx)
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
void horizontal_line_4_5_scale_c64(const unsigned char *source, unsigned int source_width, unsigned char *dest, unsigned int dest_width) {
  unsigned i;
  unsigned int ba, cb, dc, ed;
  unsigned char *restrict des = dest;
  unsigned int *restrict src = (unsigned int *)source;
  unsigned int const_51_205, const_102_154, const_205_51, const_154_102;
  unsigned int src_current, src_next;
  (void)dest_width;
  const_51_205 = 0x3300CD00;
  const_205_51 = 0xCD003300;
  const_102_154 = 0x66009A00;
  const_154_102 = 0x9A006600;
  src_current = _mem4(src);
  for (i = 0; i < source_width - 4; i += 4) {
    src_next = _mem4(src++);
    ba = _unpklu4(src_current);
    cb = _unpkhu4(_rotl(src_current, 8));
    dc = _unpkhu4(src_current);
    ed = _unpkhu4(_shrmb(src_next, src_current));
    des[0] = src_current & 0xff;
    des[1] = _dotprsu2(ba, const_205_51);
    des[2] = _dotprsu2(cb, const_154_102);
    des[3] = _dotprsu2(dc, const_102_154);
    des[4] = _dotprsu2(ed, const_51_205);
    des += 5;
    src_current = src_next;
  }
  ba = _unpklu4(src_current);
  cb = _unpkhu4(_rotl(src_current, 8));
  dc = _unpkhu4(src_current);
  des[0] = src_current & 0xff;
  des[1] = _dotprsu2(ba, const_205_51);
  des[2] = _dotprsu2(cb, const_154_102);
  des[3] = _dotprsu2(dc, const_102_154);
  des[4] = src_current & 0xff;
}
```