user: Translate the below assembly code into C programming language:

```asm
<vp8_dequant_idct_add_uv_block_sse2>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    %rdx,-0x18(%rbp)
  mov    %rcx,-0x20(%rbp)
  mov    %r8d,-0x24(%rbp)
  mov    %r9,-0x30(%rbp)
  mov    -0x30(%rbp),%rax
  movzwl (%rax),%eax
  test   %ax,%ax
  je     L46
  mov    -0x30(%rbp),%rax
  movzwl (%rax),%eax
  cwtl
  and    $0xfefe,%eax
  test   %eax,%eax
  je     L27
  mov    -0x24(%rbp),%ecx
  mov    -0x18(%rbp),%rdx
  mov    -0x10(%rbp),%rsi
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <vp8_idct_dequant_full_2x_sse2@plt>
  jmp    L46
L27:
  mov    -0x24(%rbp),%ecx
  mov    -0x18(%rbp),%rdx
  mov    -0x10(%rbp),%rsi
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <vp8_idct_dequant_0_2x_sse2@plt>
L46:
  addq   $0x40,-0x8(%rbp)
  mov    -0x24(%rbp),%eax
  shl    $0x2,%eax
  cltq
  add    %rax,-0x18(%rbp)
  mov    -0x30(%rbp),%rax
  add    $0x2,%rax
  movzwl (%rax),%eax
  test   %ax,%ax
  je     L66
  mov    -0x30(%rbp),%rax
  add    $0x2,%rax
  movzwl (%rax),%eax
  cwtl
  and    $0xfefe,%eax
  test   %eax,%eax
  je     L88
  mov    -0x24(%rbp),%ecx
  mov    -0x18(%rbp),%rdx
  mov    -0x10(%rbp),%rsi
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <vp8_idct_dequant_full_2x_sse2@plt>
  jmp    L66
L88:
  mov    -0x24(%rbp),%ecx
  mov    -0x18(%rbp),%rdx
  mov    -0x10(%rbp),%rsi
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <vp8_idct_dequant_0_2x_sse2@plt>
L66:
  addq   $0x40,-0x8(%rbp)
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  movzwl (%rax),%eax
  test   %ax,%ax
  je     L1
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  movzwl (%rax),%eax
  cwtl
  and    $0xfefe,%eax
  test   %eax,%eax
  je     L103
  mov    -0x24(%rbp),%ecx
  mov    -0x20(%rbp),%rdx
  mov    -0x10(%rbp),%rsi
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <vp8_idct_dequant_full_2x_sse2@plt>
  jmp    L1
L103:
  mov    -0x24(%rbp),%ecx
  mov    -0x20(%rbp),%rdx
  mov    -0x10(%rbp),%rsi
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <vp8_idct_dequant_0_2x_sse2@plt>
L1:
  addq   $0x40,-0x8(%rbp)
  mov    -0x24(%rbp),%eax
  shl    $0x2,%eax
  cltq
  add    %rax,-0x20(%rbp)
  mov    -0x30(%rbp),%rax
  add    $0x6,%rax
  movzwl (%rax),%eax
  test   %ax,%ax
  je     L89
  mov    -0x30(%rbp),%rax
  add    $0x6,%rax
  movzwl (%rax),%eax
  cwtl
  and    $0xfefe,%eax
  test   %eax,%eax
  je     L26
  mov    -0x24(%rbp),%ecx
  mov    -0x20(%rbp),%rdx
  mov    -0x10(%rbp),%rsi
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <vp8_idct_dequant_full_2x_sse2@plt>
  jmp    L89
L26:
  mov    -0x24(%rbp),%ecx
  mov    -0x20(%rbp),%rdx
  mov    -0x10(%rbp),%rsi
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <vp8_idct_dequant_0_2x_sse2@plt>
L89:
  nop
  leave
  ret
```

assistant: ```c
void vp8_dequant_idct_add_uv_block_sse2(short *q, short *dq, unsigned char *dst_u, unsigned char *dst_v, int stride, char *eobs) {
  if (((short *)(eobs))[0]) {
    if (((short *)(eobs))[0] & 0xfefe) {
      vp8_idct_dequant_full_2x_sse2(q, dq, dst_u, stride);
    } else {
      vp8_idct_dequant_0_2x_sse2(q, dq, dst_u, stride);
    }
  }
  q += 32;
  dst_u += stride * 4;
  if (((short *)(eobs))[1]) {
    if (((short *)(eobs))[1] & 0xfefe) {
      vp8_idct_dequant_full_2x_sse2(q, dq, dst_u, stride);
    } else {
      vp8_idct_dequant_0_2x_sse2(q, dq, dst_u, stride);
    }
  }
  q += 32;
  if (((short *)(eobs))[2]) {
    if (((short *)(eobs))[2] & 0xfefe) {
      vp8_idct_dequant_full_2x_sse2(q, dq, dst_v, stride);
    } else {
      vp8_idct_dequant_0_2x_sse2(q, dq, dst_v, stride);
    }
  }
  q += 32;
  dst_v += stride * 4;
  if (((short *)(eobs))[3]) {
    if (((short *)(eobs))[3] & 0xfefe) {
      vp8_idct_dequant_full_2x_sse2(q, dq, dst_v, stride);
    } else {
      vp8_idct_dequant_0_2x_sse2(q, dq, dst_v, stride);
    }
  }
}
```