user: Converte this assembly snippet into its equivalent C code:

```asm
<vp8_dequant_idct_add_uv_block_neon>:
  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     L51
  mov    -0x30(%rbp),%rax
  movzwl (%rax),%eax
  cwtl
  and    $0xfefe,%eax
  test   %eax,%eax
  je     L52
  mov    -0x24(%rbp),%ecx
  mov    -0x18(%rbp),%rdx
  mov    -0x10(%rbp),%rsi
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <idct_dequant_full_2x_neon@plt>
  jmp    L51
L52:
  mov    -0x10(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%esi
  mov    -0x24(%rbp),%ecx
  mov    -0x18(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <idct_dequant_0_2x_neon@plt>
L51:
  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     L22
  mov    -0x30(%rbp),%rax
  add    $0x2,%rax
  movzwl (%rax),%eax
  cwtl
  and    $0xfefe,%eax
  test   %eax,%eax
  je     L89
  mov    -0x24(%rbp),%ecx
  mov    -0x18(%rbp),%rdx
  mov    -0x10(%rbp),%rsi
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <idct_dequant_full_2x_neon@plt>
  jmp    L22
L89:
  mov    -0x10(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%esi
  mov    -0x24(%rbp),%ecx
  mov    -0x18(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <idct_dequant_0_2x_neon@plt>
L22:
  addq   $0x40,-0x8(%rbp)
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  movzwl (%rax),%eax
  test   %ax,%ax
  je     L119
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  movzwl (%rax),%eax
  cwtl
  and    $0xfefe,%eax
  test   %eax,%eax
  je     L68
  mov    -0x24(%rbp),%ecx
  mov    -0x20(%rbp),%rdx
  mov    -0x10(%rbp),%rsi
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <idct_dequant_full_2x_neon@plt>
  jmp    L119
L68:
  mov    -0x10(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%esi
  mov    -0x24(%rbp),%ecx
  mov    -0x20(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <idct_dequant_0_2x_neon@plt>
L119:
  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     L118
  mov    -0x30(%rbp),%rax
  add    $0x6,%rax
  movzwl (%rax),%eax
  cwtl
  and    $0xfefe,%eax
  test   %eax,%eax
  je     L30
  mov    -0x24(%rbp),%ecx
  mov    -0x20(%rbp),%rdx
  mov    -0x10(%rbp),%rsi
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <idct_dequant_full_2x_neon@plt>
  jmp    L118
L30:
  mov    -0x10(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%esi
  mov    -0x24(%rbp),%ecx
  mov    -0x20(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <idct_dequant_0_2x_neon@plt>
L118:
  nop
  leave
  ret
```

assistant: ```c
void vp8_dequant_idct_add_uv_block_neon(short *q, short *dq, unsigned char *dstu, unsigned char *dstv, int stride, char *eobs) {
  if (((short *)(eobs))[0]) {
    if (((short *)eobs)[0] & 0xfefe)
      idct_dequant_full_2x_neon(q, dq, dstu, stride);
    else
      idct_dequant_0_2x_neon(q, dq[0], dstu, stride);
  }
  q += 32;
  dstu += 4 * stride;
  if (((short *)(eobs))[1]) {
    if (((short *)eobs)[1] & 0xfefe)
      idct_dequant_full_2x_neon(q, dq, dstu, stride);
    else
      idct_dequant_0_2x_neon(q, dq[0], dstu, stride);
  }
  q += 32;
  if (((short *)(eobs))[2]) {
    if (((short *)eobs)[2] & 0xfefe)
      idct_dequant_full_2x_neon(q, dq, dstv, stride);
    else
      idct_dequant_0_2x_neon(q, dq[0], dstv, stride);
  }
  q += 32;
  dstv += 4 * stride;
  if (((short *)(eobs))[3]) {
    if (((short *)eobs)[3] & 0xfefe)
      idct_dequant_full_2x_neon(q, dq, dstv, stride);
    else
      idct_dequant_0_2x_neon(q, dq[0], dstv, stride);
  }
}
```