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

```asm
<_jc_qre_is_masked>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x4(%rbp)
  mov    %esi,-0x8(%rbp)
  mov    %edx,-0xc(%rbp)
  cmpl   $0x7,-0xc(%rbp)
  ja     L11
  mov    -0xc(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D16(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D16(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    -0x4(%rbp),%edx
  mov    -0x8(%rbp),%eax
  add    %edx,%eax
  and    $0x1,%eax
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  jmp    L28
  mov    -0x8(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  jmp    L28
  mov    -0x4(%rbp),%edx
  movslq %edx,%rax
  imul   $0x55555556,%rax,%rax
  shr    $0x20,%rax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  mov    %eax,%ecx
  add    %ecx,%ecx
  add    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  jmp    L28
  mov    -0x4(%rbp),%edx
  mov    -0x8(%rbp),%eax
  add    %eax,%edx
  movslq %edx,%rax
  imul   $0x55555556,%rax,%rax
  shr    $0x20,%rax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  mov    %eax,%ecx
  add    %ecx,%ecx
  add    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  jmp    L28
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  sub    %eax,%edx
  mov    -0x8(%rbp),%eax
  mov    %eax,%ecx
  shr    $0x1f,%ecx
  add    %ecx,%eax
  sar    %eax
  add    %edx,%eax
  and    $0x1,%eax
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  jmp    L28
  mov    -0x4(%rbp),%eax
  imul   -0x8(%rbp),%eax
  mov    %eax,%esi
  mov    -0x4(%rbp),%eax
  imul   -0x8(%rbp),%eax
  mov    %eax,%edx
  movslq %edx,%rax
  imul   $0x55555556,%rax,%rax
  shr    $0x20,%rax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  mov    %eax,%ecx
  add    %ecx,%ecx
  add    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  add    $0x1,%eax
  and    %esi,%eax
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  jmp    L28
  mov    -0x4(%rbp),%eax
  imul   -0x8(%rbp),%eax
  mov    %eax,%esi
  mov    -0x4(%rbp),%eax
  imul   -0x8(%rbp),%eax
  mov    %eax,%edx
  movslq %edx,%rax
  imul   $0x55555556,%rax,%rax
  shr    $0x20,%rax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  mov    %eax,%ecx
  add    %ecx,%ecx
  add    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  add    $0x1,%eax
  and    %esi,%eax
  and    $0x1,%eax
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  jmp    L28
  mov    -0x4(%rbp),%edx
  mov    -0x8(%rbp),%eax
  lea    (%rdx,%rax,1),%esi
  mov    -0x4(%rbp),%eax
  imul   -0x8(%rbp),%eax
  mov    %eax,%edx
  movslq %edx,%rax
  imul   $0x55555556,%rax,%rax
  shr    $0x20,%rax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  mov    %eax,%ecx
  add    %ecx,%ecx
  add    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  add    $0x1,%eax
  and    %esi,%eax
  and    $0x1,%eax
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  jmp    L28
L11:
  mov    $0x0,%eax
L28:
  pop    %rbp
  ret
```

assistant: ```c
uint32_t _jc_qre_is_masked(uint32_t x, uint32_t y, uint32_t pattern_mask) {
  switch (pattern_mask) {
  case 0:
    return ((x + y) & 1) == 0;
  case 1:
    return (y & 1) == 0;
  case 2:
    return (x % 3) == 0;
  case 3:
    return ((x + y) % 3) == 0;
  case 4:
    return ((x / 3 + y / 2) & 1) == 0;
  case 5:
    return ((x * y) & 1 + (x * y) % 3) == 0;
  case 6:
    return (((x * y) & 1 + (x * y) % 3) & 1) == 0;
  case 7:
    return (((x + y) & 1 + (x * y) % 3) & 1) == 0;
  default:
    return 0;
  }
}
```