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

```asm
<unpack2>:
  endbr64
  mov    %rdi,%rax
  mov    %rsi,%rdx
  lea    0x200(%rdi),%rsi
L1:
  mov    (%rdx),%ecx
  shr    $0x1e,%ecx
  mov    %ecx,(%rax)
  mov    (%rdx),%ecx
  shr    $0x1c,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x4(%rax)
  mov    (%rdx),%ecx
  shr    $0x1a,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x8(%rax)
  mov    (%rdx),%ecx
  shr    $0x18,%ecx
  and    $0x3,%ecx
  mov    %ecx,0xc(%rax)
  mov    (%rdx),%ecx
  shr    $0x16,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x10(%rax)
  mov    (%rdx),%ecx
  shr    $0x14,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x14(%rax)
  mov    (%rdx),%ecx
  shr    $0x12,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x18(%rax)
  mov    (%rdx),%ecx
  shr    $0x10,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x1c(%rax)
  mov    (%rdx),%ecx
  shr    $0xe,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x20(%rax)
  mov    (%rdx),%ecx
  shr    $0xc,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x24(%rax)
  mov    (%rdx),%ecx
  shr    $0xa,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x28(%rax)
  mov    (%rdx),%ecx
  shr    $0x8,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x2c(%rax)
  mov    (%rdx),%ecx
  shr    $0x6,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x30(%rax)
  mov    (%rdx),%ecx
  shr    $0x4,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x34(%rax)
  mov    (%rdx),%ecx
  shr    $0x2,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x38(%rax)
  mov    (%rdx),%ecx
  and    $0x3,%ecx
  mov    %ecx,0x3c(%rax)
  mov    0x4(%rdx),%ecx
  shr    $0x1e,%ecx
  mov    %ecx,0x40(%rax)
  mov    0x4(%rdx),%ecx
  shr    $0x1c,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x44(%rax)
  mov    0x4(%rdx),%ecx
  shr    $0x1a,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x48(%rax)
  movzbl 0x7(%rdx),%ecx
  and    $0x3,%ecx
  mov    %ecx,0x4c(%rax)
  mov    0x4(%rdx),%ecx
  shr    $0x16,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x50(%rax)
  mov    0x4(%rdx),%ecx
  shr    $0x14,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x54(%rax)
  mov    0x4(%rdx),%ecx
  shr    $0x12,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x58(%rax)
  movzwl 0x6(%rdx),%ecx
  and    $0x3,%ecx
  mov    %ecx,0x5c(%rax)
  mov    0x4(%rdx),%ecx
  shr    $0xe,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x60(%rax)
  mov    0x4(%rdx),%ecx
  shr    $0xc,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x64(%rax)
  mov    0x4(%rdx),%ecx
  shr    $0xa,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x68(%rax)
  mov    0x4(%rdx),%ecx
  shr    $0x8,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x6c(%rax)
  mov    0x4(%rdx),%ecx
  shr    $0x6,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x70(%rax)
  mov    0x4(%rdx),%ecx
  shr    $0x4,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x74(%rax)
  mov    0x4(%rdx),%ecx
  shr    $0x2,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x78(%rax)
  mov    0x4(%rdx),%ecx
  and    $0x3,%ecx
  mov    %ecx,0x7c(%rax)
  sub    $0xffffffffffffff80,%rax
  add    $0x8,%rdx
  cmp    %rax,%rsi
  jne    L1
  ret
```

assistant: ```c
void unpack2(unsigned int *p, unsigned int *w) {
  int i;
  for (i = 0; i < 128; i += 32, p += 32, w += 2) {
    p[0] = (w[0] >> 30);
    p[1] = (w[0] >> 28) & 3;
    p[2] = (w[0] >> 26) & 3;
    p[3] = (w[0] >> 24) & 3;
    p[4] = (w[0] >> 22) & 3;
    p[5] = (w[0] >> 20) & 3;
    p[6] = (w[0] >> 18) & 3;
    p[7] = (w[0] >> 16) & 3;
    p[8] = (w[0] >> 14) & 3;
    p[9] = (w[0] >> 12) & 3;
    p[10] = (w[0] >> 10) & 3;
    p[11] = (w[0] >> 8) & 3;
    p[12] = (w[0] >> 6) & 3;
    p[13] = (w[0] >> 4) & 3;
    p[14] = (w[0] >> 2) & 3;
    p[15] = (w[0]) & 3;
    p[16] = (w[1] >> 30);
    p[17] = (w[1] >> 28) & 3;
    p[18] = (w[1] >> 26) & 3;
    p[19] = (w[1] >> 24) & 3;
    p[20] = (w[1] >> 22) & 3;
    p[21] = (w[1] >> 20) & 3;
    p[22] = (w[1] >> 18) & 3;
    p[23] = (w[1] >> 16) & 3;
    p[24] = (w[1] >> 14) & 3;
    p[25] = (w[1] >> 12) & 3;
    p[26] = (w[1] >> 10) & 3;
    p[27] = (w[1] >> 8) & 3;
    p[28] = (w[1] >> 6) & 3;
    p[29] = (w[1] >> 4) & 3;
    p[30] = (w[1] >> 2) & 3;
    p[31] = (w[1]) & 3;
  }
}
```