user: 请将以下的汇编代码转换成C语言代码:

```asm
<interpRGB32>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %rdx,-0x48(%rbp)
  mov    %rcx,-0x50(%rbp)
  mov    %r8d,-0x54(%rbp)
  sarl   -0x54(%rbp)
  jmp    L2
L19:
  mov    -0x38(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x38(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x38(%rbp),%rax
  mov    0x8(%rax),%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x28(%rbp),%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x28(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  add    $0x400801,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x24(%rbp),%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x20(%rbp),%eax
  add    %edx,%eax
  add    $0x400801,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x1c(%rbp),%eax
  movzbl %al,%edx
  mov    -0x1c(%rbp),%eax
  shr    $0x3,%eax
  and    $0xff00,%eax
  or     %eax,%edx
  mov    -0x1c(%rbp),%eax
  shr    $0x6,%eax
  and    $0xff0000,%eax
  or     %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x18(%rbp),%eax
  shr    %eax
  movzbl %al,%edx
  mov    -0x18(%rbp),%eax
  shr    $0x4,%eax
  and    $0xff00,%eax
  mov    %edx,%ecx
  or     %eax,%ecx
  mov    -0x18(%rbp),%eax
  shr    $0x7,%eax
  and    $0xff0000,%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%rax
  add    $0x4,%rax
  or     %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x14(%rbp),%eax
  movzbl %al,%edx
  mov    -0x14(%rbp),%eax
  shr    $0x3,%eax
  and    $0xff00,%eax
  mov    %edx,%ecx
  or     %eax,%ecx
  mov    -0x14(%rbp),%eax
  shr    $0x6,%eax
  and    $0xff0000,%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%rax
  add    $0x8,%rax
  or     %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x10(%rbp),%eax
  shr    %eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%eax
  shr    $0x4,%eax
  and    $0xff00,%eax
  mov    %edx,%ecx
  or     %eax,%ecx
  mov    -0x10(%rbp),%eax
  shr    $0x7,%eax
  and    $0xff0000,%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%rax
  add    $0xc,%rax
  or     %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x40(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x40(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x40(%rbp),%rax
  mov    0x8(%rax),%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x28(%rbp),%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  add    $0x400801,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x28(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %eax,%edx
  mov    -0xc(%rbp),%eax
  add    %eax,%edx
  mov    -0x8(%rbp),%eax
  add    %edx,%eax
  add    $0x801002,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x8(%rbp),%eax
  add    %edx,%eax
  add    $0x400801,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x20(%rbp),%eax
  add    %eax,%edx
  mov    -0x8(%rbp),%eax
  add    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  add    $0x801002,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x1c(%rbp),%eax
  shr    %eax
  movzbl %al,%edx
  mov    -0x1c(%rbp),%eax
  shr    $0x4,%eax
  and    $0xff00,%eax
  or     %eax,%edx
  mov    -0x1c(%rbp),%eax
  shr    $0x7,%eax
  and    $0xff0000,%eax
  or     %eax,%edx
  mov    -0x50(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x18(%rbp),%eax
  shr    $0x2,%eax
  movzbl %al,%edx
  mov    -0x18(%rbp),%eax
  shr    $0x5,%eax
  and    $0xff00,%eax
  mov    %edx,%ecx
  or     %eax,%ecx
  mov    -0x18(%rbp),%eax
  shr    $0x8,%eax
  and    $0xff0000,%eax
  mov    %eax,%edx
  mov    -0x50(%rbp),%rax
  add    $0x4,%rax
  or     %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x14(%rbp),%eax
  shr    %eax
  movzbl %al,%edx
  mov    -0x14(%rbp),%eax
  shr    $0x4,%eax
  and    $0xff00,%eax
  mov    %edx,%ecx
  or     %eax,%ecx
  mov    -0x14(%rbp),%eax
  shr    $0x7,%eax
  and    $0xff0000,%eax
  mov    %eax,%edx
  mov    -0x50(%rbp),%rax
  add    $0x8,%rax
  or     %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x10(%rbp),%eax
  shr    $0x2,%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%eax
  shr    $0x5,%eax
  and    $0xff00,%eax
  mov    %edx,%ecx
  or     %eax,%ecx
  mov    -0x10(%rbp),%eax
  shr    $0x8,%eax
  and    $0xff0000,%eax
  mov    %eax,%edx
  mov    -0x50(%rbp),%rax
  add    $0xc,%rax
  or     %ecx,%edx
  mov    %edx,(%rax)
  addq   $0x8,-0x38(%rbp)
  addq   $0x8,-0x40(%rbp)
  addq   $0x10,-0x48(%rbp)
  addq   $0x10,-0x50(%rbp)
L2:
  subl   $0x1,-0x54(%rbp)
  cmpl   $0x0,-0x54(%rbp)
  jne    L19
  mov    -0x38(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x38(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x28(%rbp),%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x28(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  add    $0x400801,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x24(%rbp),%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x20(%rbp),%eax
  add    %edx,%eax
  add    $0x400801,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x1c(%rbp),%eax
  movzbl %al,%edx
  mov    -0x1c(%rbp),%eax
  shr    $0x3,%eax
  and    $0xff00,%eax
  or     %eax,%edx
  mov    -0x1c(%rbp),%eax
  shr    $0x6,%eax
  and    $0xff0000,%eax
  or     %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x18(%rbp),%eax
  shr    %eax
  movzbl %al,%edx
  mov    -0x18(%rbp),%eax
  shr    $0x4,%eax
  and    $0xff00,%eax
  mov    %edx,%ecx
  or     %eax,%ecx
  mov    -0x18(%rbp),%eax
  shr    $0x7,%eax
  and    $0xff0000,%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%rax
  add    $0x4,%rax
  or     %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x14(%rbp),%eax
  movzbl %al,%edx
  mov    -0x14(%rbp),%eax
  shr    $0x3,%eax
  and    $0xff00,%eax
  mov    %edx,%ecx
  or     %eax,%ecx
  mov    -0x14(%rbp),%eax
  shr    $0x6,%eax
  and    $0xff0000,%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%rax
  add    $0x8,%rax
  or     %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x10(%rbp),%eax
  shr    %eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%eax
  shr    $0x4,%eax
  and    $0xff00,%eax
  mov    %edx,%ecx
  or     %eax,%ecx
  mov    -0x10(%rbp),%eax
  shr    $0x7,%eax
  and    $0xff0000,%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%rax
  add    $0xc,%rax
  or     %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x40(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x40(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x8(%rbp),%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x28(%rbp),%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  add    $0x400801,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x28(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %eax,%edx
  mov    -0xc(%rbp),%eax
  add    %eax,%edx
  mov    -0x8(%rbp),%eax
  add    %edx,%eax
  add    $0x801002,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x8(%rbp),%eax
  add    %edx,%eax
  add    $0x400801,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x20(%rbp),%eax
  add    %eax,%edx
  mov    -0x8(%rbp),%eax
  add    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  add    $0x801002,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x1c(%rbp),%eax
  shr    %eax
  movzbl %al,%edx
  mov    -0x1c(%rbp),%eax
  shr    $0x4,%eax
  and    $0xff00,%eax
  or     %eax,%edx
  mov    -0x1c(%rbp),%eax
  shr    $0x7,%eax
  and    $0xff0000,%eax
  or     %eax,%edx
  mov    -0x50(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x18(%rbp),%eax
  shr    $0x2,%eax
  movzbl %al,%edx
  mov    -0x18(%rbp),%eax
  shr    $0x5,%eax
  and    $0xff00,%eax
  mov    %edx,%ecx
  or     %eax,%ecx
  mov    -0x18(%rbp),%eax
  shr    $0x8,%eax
  and    $0xff0000,%eax
  mov    %eax,%edx
  mov    -0x50(%rbp),%rax
  add    $0x4,%rax
  or     %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x14(%rbp),%eax
  shr    %eax
  movzbl %al,%edx
  mov    -0x14(%rbp),%eax
  shr    $0x4,%eax
  and    $0xff00,%eax
  mov    %edx,%ecx
  or     %eax,%ecx
  mov    -0x14(%rbp),%eax
  shr    $0x7,%eax
  and    $0xff0000,%eax
  mov    %eax,%edx
  mov    -0x50(%rbp),%rax
  add    $0x8,%rax
  or     %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x10(%rbp),%eax
  shr    $0x2,%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%eax
  shr    $0x5,%eax
  and    $0xff00,%eax
  mov    %edx,%ecx
  or     %eax,%ecx
  mov    -0x10(%rbp),%eax
  shr    $0x8,%eax
  and    $0xff0000,%eax
  mov    %eax,%edx
  mov    -0x50(%rbp),%rax
  add    $0xc,%rax
  or     %ecx,%edx
  mov    %edx,(%rax)
  nop
  pop    %rbp
  ret
```

assistant: ```c
void interpRGB32(unsigned char *src1, unsigned char *src2, unsigned char *dst1, unsigned char *dst2, int width) {
  unsigned int a, b, c, d, e, f;
  unsigned int w, x, y, z;
  width >>= 1;
  while (--width) {
    a = *(unsigned int *)(src1 + 0);
    b = *(unsigned int *)(src1 + 4);
    e = *(unsigned int *)(src1 + 8);
    w = a;
    x = a + b + 0x00400801;
    y = b;
    z = b + e + 0x00400801;
    *(unsigned int *)(dst1 + 0) = ((w & 0x000000ff) >> 0) | ((w & 0x0007f800) >> 3) | ((w & 0x3fc00000) >> 6);
    *(unsigned int *)(dst1 + 4) = ((x & 0x000001fe) >> 1) | ((x & 0x000ff000) >> 4) | ((x & 0x7f800000) >> 7);
    *(unsigned int *)(dst1 + 8) = ((y & 0x000000ff) >> 0) | ((y & 0x0007f800) >> 3) | ((y & 0x3fc00000) >> 6);
    *(unsigned int *)(dst1 + 12) = ((z & 0x000001fe) >> 1) | ((z & 0x000ff000) >> 4) | ((z & 0x7f800000) >> 7);
    c = *(unsigned int *)(src2 + 0);
    d = *(unsigned int *)(src2 + 4);
    f = *(unsigned int *)(src2 + 8);
    w = a + c + 0x00400801;
    x = a + b + c + d + (0x00400801 << 1);
    y = b + d + 0x00400801;
    z = b + e + d + f + (0x00400801 << 1);
    *(unsigned int *)(dst2 + 0) = ((w & 0x000001fe) >> 1) | ((w & 0x000ff000) >> 4) | ((w & 0x7f800000) >> 7);
    *(unsigned int *)(dst2 + 4) = ((x & 0x000003fc) >> 2) | ((x & 0x001fe000) >> 5) | ((x & 0xff000000) >> 8);
    *(unsigned int *)(dst2 + 8) = ((y & 0x000001fe) >> 1) | ((y & 0x000ff000) >> 4) | ((y & 0x7f800000) >> 7);
    *(unsigned int *)(dst2 + 12) = ((z & 0x000003fc) >> 2) | ((z & 0x001fe000) >> 5) | ((z & 0xff000000) >> 8);
    src1 += 8;
    src2 += 8;
    dst1 += 16;
    dst2 += 16;
  }
  a = *(unsigned int *)(src1 + 0);
  b = *(unsigned int *)(src1 + 4);
  e = b;
  w = a;
  x = a + b + 0x00400801;
  y = b;
  z = b + e + 0x00400801;
  *(unsigned int *)(dst1 + 0) = ((w & 0x000000ff) >> 0) | ((w & 0x0007f800) >> 3) | ((w & 0x3fc00000) >> 6);
  *(unsigned int *)(dst1 + 4) = ((x & 0x000001fe) >> 1) | ((x & 0x000ff000) >> 4) | ((x & 0x7f800000) >> 7);
  *(unsigned int *)(dst1 + 8) = ((y & 0x000000ff) >> 0) | ((y & 0x0007f800) >> 3) | ((y & 0x3fc00000) >> 6);
  *(unsigned int *)(dst1 + 12) = ((z & 0x000001fe) >> 1) | ((z & 0x000ff000) >> 4) | ((z & 0x7f800000) >> 7);
  c = *(unsigned int *)(src2 + 0);
  d = *(unsigned int *)(src2 + 4);
  f = d;
  w = a + c + 0x00400801;
  x = a + b + c + d + (0x00400801 << 1);
  y = b + d + 0x00400801;
  z = b + e + d + f + (0x00400801 << 1);
  *(unsigned int *)(dst2 + 0) = ((w & 0x000001fe) >> 1) | ((w & 0x000ff000) >> 4) | ((w & 0x7f800000) >> 7);
  *(unsigned int *)(dst2 + 4) = ((x & 0x000003fc) >> 2) | ((x & 0x001fe000) >> 5) | ((x & 0xff000000) >> 8);
  *(unsigned int *)(dst2 + 8) = ((y & 0x000001fe) >> 1) | ((y & 0x000ff000) >> 4) | ((y & 0x7f800000) >> 7);
  *(unsigned int *)(dst2 + 12) = ((z & 0x000003fc) >> 2) | ((z & 0x001fe000) >> 5) | ((z & 0xff000000) >> 8);
}
```