user: Please show me the C implementation that matches the assembly code listed below:

```asm
<scaleidctqtab>:
  endbr64
  movd   %esi,%xmm4
  movdqu (%rdi),%xmm2
  movdqu (%rdi),%xmm3
  pshufd $0x0,%xmm4,%xmm0
  psrlq  $0x20,%xmm2
  pmuludq %xmm0,%xmm3
  movdqa %xmm0,%xmm1
  psrlq  $0x20,%xmm1
  pmuludq %xmm1,%xmm2
  pshufd $0x8,%xmm3,%xmm3
  pshufd $0x8,%xmm2,%xmm2
  punpckldq %xmm2,%xmm3
  movdqa %xmm3,%xmm2
  movdqu 0x10(%rdi),%xmm3
  psrad  $0xb,%xmm2
  movups %xmm2,(%rdi)
  movdqu 0x10(%rdi),%xmm2
  pmuludq %xmm0,%xmm3
  psrlq  $0x20,%xmm2
  pmuludq %xmm1,%xmm2
  pshufd $0x8,%xmm3,%xmm3
  pshufd $0x8,%xmm2,%xmm2
  punpckldq %xmm2,%xmm3
  movdqa %xmm3,%xmm2
  movdqu 0x20(%rdi),%xmm3
  psrad  $0xb,%xmm2
  movups %xmm2,0x10(%rdi)
  movdqu 0x20(%rdi),%xmm2
  pmuludq %xmm0,%xmm3
  psrlq  $0x20,%xmm2
  pmuludq %xmm1,%xmm2
  pshufd $0x8,%xmm3,%xmm3
  pshufd $0x8,%xmm2,%xmm2
  punpckldq %xmm2,%xmm3
  movdqa %xmm3,%xmm2
  movdqu 0x30(%rdi),%xmm3
  psrad  $0xb,%xmm2
  movups %xmm2,0x20(%rdi)
  movdqu 0x30(%rdi),%xmm2
  pmuludq %xmm0,%xmm3
  psrlq  $0x20,%xmm2
  pmuludq %xmm1,%xmm2
  pshufd $0x8,%xmm3,%xmm3
  pshufd $0x8,%xmm2,%xmm2
  punpckldq %xmm2,%xmm3
  movdqa %xmm3,%xmm2
  movdqu 0x40(%rdi),%xmm3
  psrad  $0xb,%xmm2
  movups %xmm2,0x30(%rdi)
  movdqu 0x40(%rdi),%xmm2
  pmuludq %xmm0,%xmm3
  psrlq  $0x20,%xmm2
  pmuludq %xmm1,%xmm2
  pshufd $0x8,%xmm3,%xmm3
  pshufd $0x8,%xmm2,%xmm2
  punpckldq %xmm2,%xmm3
  movdqa %xmm3,%xmm2
  movdqu 0x50(%rdi),%xmm3
  psrad  $0xb,%xmm2
  movups %xmm2,0x40(%rdi)
  movdqu 0x50(%rdi),%xmm2
  pmuludq %xmm0,%xmm3
  psrlq  $0x20,%xmm2
  pmuludq %xmm1,%xmm2
  pshufd $0x8,%xmm3,%xmm3
  pshufd $0x8,%xmm2,%xmm2
  punpckldq %xmm2,%xmm3
  movdqa %xmm3,%xmm2
  movdqu 0x60(%rdi),%xmm3
  psrad  $0xb,%xmm2
  movups %xmm2,0x50(%rdi)
  movdqu 0x60(%rdi),%xmm2
  pmuludq %xmm0,%xmm3
  psrlq  $0x20,%xmm2
  pmuludq %xmm1,%xmm2
  pshufd $0x8,%xmm3,%xmm3
  pshufd $0x8,%xmm2,%xmm2
  punpckldq %xmm2,%xmm3
  movdqa %xmm3,%xmm2
  movdqu 0x70(%rdi),%xmm3
  psrad  $0xb,%xmm2
  movups %xmm2,0x60(%rdi)
  movdqu 0x70(%rdi),%xmm2
  pmuludq %xmm0,%xmm3
  psrlq  $0x20,%xmm2
  pmuludq %xmm1,%xmm2
  pshufd $0x8,%xmm3,%xmm3
  pshufd $0x8,%xmm2,%xmm2
  punpckldq %xmm2,%xmm3
  movdqu 0x80(%rdi),%xmm2
  psrad  $0xb,%xmm3
  movups %xmm3,0x70(%rdi)
  movdqu 0x80(%rdi),%xmm3
  psrlq  $0x20,%xmm2
  pmuludq %xmm1,%xmm2
  pmuludq %xmm0,%xmm3
  pshufd $0x8,%xmm2,%xmm2
  pshufd $0x8,%xmm3,%xmm3
  punpckldq %xmm2,%xmm3
  movdqu 0x90(%rdi),%xmm2
  psrad  $0xb,%xmm3
  movups %xmm3,0x80(%rdi)
  movdqu 0x90(%rdi),%xmm3
  psrlq  $0x20,%xmm2
  pmuludq %xmm1,%xmm2
  pmuludq %xmm0,%xmm3
  pshufd $0x8,%xmm2,%xmm2
  pshufd $0x8,%xmm3,%xmm3
  punpckldq %xmm2,%xmm3
  movdqu 0xa0(%rdi),%xmm2
  psrad  $0xb,%xmm3
  movups %xmm3,0x90(%rdi)
  movdqu 0xa0(%rdi),%xmm3
  psrlq  $0x20,%xmm2
  pmuludq %xmm1,%xmm2
  pmuludq %xmm0,%xmm3
  pshufd $0x8,%xmm2,%xmm2
  pshufd $0x8,%xmm3,%xmm3
  punpckldq %xmm2,%xmm3
  psrad  $0xb,%xmm3
  movups %xmm3,0xa0(%rdi)
  movdqu 0xb0(%rdi),%xmm2
  movdqu 0xb0(%rdi),%xmm3
  movdqu 0xf0(%rdi),%xmm5
  psrlq  $0x20,%xmm2
  pmuludq %xmm0,%xmm3
  pmuludq %xmm1,%xmm2
  pshufd $0x8,%xmm3,%xmm3
  pshufd $0x8,%xmm2,%xmm2
  punpckldq %xmm2,%xmm3
  movdqu 0xc0(%rdi),%xmm2
  psrad  $0xb,%xmm3
  movups %xmm3,0xb0(%rdi)
  movdqu 0xc0(%rdi),%xmm3
  psrlq  $0x20,%xmm2
  pmuludq %xmm1,%xmm2
  pmuludq %xmm0,%xmm3
  pshufd $0x8,%xmm2,%xmm2
  pshufd $0x8,%xmm3,%xmm3
  punpckldq %xmm2,%xmm3
  movdqu 0xd0(%rdi),%xmm2
  psrad  $0xb,%xmm3
  movups %xmm3,0xc0(%rdi)
  movdqu 0xd0(%rdi),%xmm3
  psrlq  $0x20,%xmm2
  pmuludq %xmm1,%xmm2
  pmuludq %xmm0,%xmm3
  pshufd $0x8,%xmm2,%xmm2
  pshufd $0x8,%xmm3,%xmm3
  punpckldq %xmm2,%xmm3
  movdqu 0xe0(%rdi),%xmm2
  psrad  $0xb,%xmm3
  movups %xmm3,0xd0(%rdi)
  movdqu 0xe0(%rdi),%xmm3
  psrlq  $0x20,%xmm2
  pmuludq %xmm1,%xmm2
  pmuludq %xmm0,%xmm3
  pmuludq %xmm5,%xmm0
  pshufd $0x8,%xmm2,%xmm2
  pshufd $0x8,%xmm3,%xmm3
  pshufd $0x8,%xmm0,%xmm0
  punpckldq %xmm2,%xmm3
  movdqu 0xf0(%rdi),%xmm2
  psrad  $0xb,%xmm3
  psrlq  $0x20,%xmm2
  movups %xmm3,0xe0(%rdi)
  pmuludq %xmm2,%xmm1
  pshufd $0x8,%xmm1,%xmm1
  punpckldq %xmm1,%xmm0
  psrad  $0xb,%xmm0
  movups %xmm0,0xf0(%rdi)
  ret
```

assistant: ```c
void scaleidctqtab(int *q, int sc) {
  int i;
  for (i = 0; i < 64; i++)
    q[i] = (((q[i]) * (sc)) >> 11);
}
```