user: 下面的汇编指令对应的C源代码是什么:

```asm
<idct_matrix_scale>:
  endbr64
  lea    0x1f(%rdi),%rax
  mov    %esi,%ecx
  sub    %rdx,%rax
  cmp    $0x3e,%rax
  jbe    L1
  movdqu 0x10(%rdi),%xmm1
  movdqu (%rdi),%xmm2
  movslq %esi,%rax
  movq   %rax,%xmm0
  psrad  %xmm0,%xmm1
  psrad  %xmm0,%xmm2
  movups %xmm1,0x10(%rdx)
  movups %xmm2,(%rdx)
  movdqu 0x30(%rdi),%xmm1
  movdqu 0x20(%rdi),%xmm2
  psrad  %xmm0,%xmm1
  psrad  %xmm0,%xmm2
  movups %xmm1,0x30(%rdx)
  movups %xmm2,0x20(%rdx)
  movdqu 0x50(%rdi),%xmm1
  movdqu 0x40(%rdi),%xmm2
  psrad  %xmm0,%xmm1
  psrad  %xmm0,%xmm2
  movups %xmm1,0x50(%rdx)
  movups %xmm2,0x40(%rdx)
  movdqu 0x70(%rdi),%xmm1
  movdqu 0x60(%rdi),%xmm2
  psrad  %xmm0,%xmm1
  psrad  %xmm0,%xmm2
  movups %xmm1,0x70(%rdx)
  movups %xmm2,0x60(%rdx)
  movdqu 0x90(%rdi),%xmm1
  movdqu 0x80(%rdi),%xmm2
  psrad  %xmm0,%xmm1
  psrad  %xmm0,%xmm2
  movups %xmm1,0x90(%rdx)
  movups %xmm2,0x80(%rdx)
  movdqu 0xb0(%rdi),%xmm1
  movdqu 0xa0(%rdi),%xmm2
  psrad  %xmm0,%xmm1
  psrad  %xmm0,%xmm2
  movups %xmm1,0xb0(%rdx)
  movups %xmm2,0xa0(%rdx)
  movdqu 0xd0(%rdi),%xmm1
  movdqu 0xc0(%rdi),%xmm2
  psrad  %xmm0,%xmm1
  psrad  %xmm0,%xmm2
  movups %xmm1,0xd0(%rdx)
  movups %xmm2,0xc0(%rdx)
  movdqu 0xf0(%rdi),%xmm1
  movdqu 0xe0(%rdi),%xmm2
  psrad  %xmm0,%xmm1
  psrad  %xmm0,%xmm2
  movups %xmm1,0xf0(%rdx)
  movups %xmm2,0xe0(%rdx)
  ret
L1:
  mov    (%rdi),%eax
  sar    %cl,%eax
  mov    %eax,(%rdx)
  mov    0x4(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x4(%rdx)
  mov    0x8(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x8(%rdx)
  mov    0xc(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xc(%rdx)
  mov    0x10(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x10(%rdx)
  mov    0x14(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x14(%rdx)
  mov    0x18(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x18(%rdx)
  mov    0x1c(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x1c(%rdx)
  mov    0x20(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x20(%rdx)
  mov    0x24(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x24(%rdx)
  mov    0x28(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x28(%rdx)
  mov    0x2c(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x2c(%rdx)
  mov    0x30(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x30(%rdx)
  mov    0x34(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x34(%rdx)
  mov    0x38(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x38(%rdx)
  mov    0x3c(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x3c(%rdx)
  mov    0x40(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x40(%rdx)
  mov    0x44(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x44(%rdx)
  mov    0x48(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x48(%rdx)
  mov    0x4c(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x4c(%rdx)
  mov    0x50(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x50(%rdx)
  mov    0x54(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x54(%rdx)
  mov    0x58(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x58(%rdx)
  mov    0x5c(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x5c(%rdx)
  mov    0x60(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x60(%rdx)
  mov    0x64(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x64(%rdx)
  mov    0x68(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x68(%rdx)
  mov    0x6c(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x6c(%rdx)
  mov    0x70(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x70(%rdx)
  mov    0x74(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x74(%rdx)
  mov    0x78(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x78(%rdx)
  mov    0x7c(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x7c(%rdx)
  mov    0x80(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x80(%rdx)
  mov    0x84(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x84(%rdx)
  mov    0x88(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x88(%rdx)
  mov    0x8c(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x8c(%rdx)
  mov    0x90(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x90(%rdx)
  mov    0x94(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x94(%rdx)
  mov    0x98(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x98(%rdx)
  mov    0x9c(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0x9c(%rdx)
  mov    0xa0(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xa0(%rdx)
  mov    0xa4(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xa4(%rdx)
  mov    0xa8(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xa8(%rdx)
  mov    0xac(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xac(%rdx)
  mov    0xb0(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xb0(%rdx)
  mov    0xb4(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xb4(%rdx)
  mov    0xb8(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xb8(%rdx)
  mov    0xbc(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xbc(%rdx)
  mov    0xc0(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xc0(%rdx)
  mov    0xc4(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xc4(%rdx)
  mov    0xc8(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xc8(%rdx)
  mov    0xcc(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xcc(%rdx)
  mov    0xd0(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xd0(%rdx)
  mov    0xd4(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xd4(%rdx)
  mov    0xd8(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xd8(%rdx)
  mov    0xdc(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xdc(%rdx)
  mov    0xe0(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xe0(%rdx)
  mov    0xe4(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xe4(%rdx)
  mov    0xe8(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xe8(%rdx)
  mov    0xec(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xec(%rdx)
  mov    0xf0(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xf0(%rdx)
  mov    0xf4(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xf4(%rdx)
  mov    0xf8(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xf8(%rdx)
  mov    0xfc(%rdi),%eax
  sar    %cl,%eax
  mov    %eax,0xfc(%rdx)
  ret
```

assistant: ```c
void idct_matrix_scale(int a_matrix[][8], int scale_factor, int output_matrix[][8]) {
  int row, col;
  for (row = 0; row < 8; row++) {
    for (col = 0; col < 8; col++) {
      output_matrix[row][col] = a_matrix[row][col] >> scale_factor;
    }
  }
}
```