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

```asm
<VicSetup>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x4(%rbp)
  mov    %ecx,%eax
  mov    %esi,%ecx
  mov    %cl,-0x8(%rbp)
  mov    %dl,-0xc(%rbp)
  mov    %al,-0x10(%rbp)
  cmpb   $0x0,-0x8(%rbp)
  je     L84
  mov    $0xfffff00c,%eax
  mov    (%rax),%rsi
  movsbl -0xc(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  movslq %eax,%rdx
  mov    $0xfffff00c,%eax
  or     %rsi,%rdx
  mov    %rdx,(%rax)
  jmp    L102
L84:
  mov    $0xfffff00c,%eax
  mov    (%rax),%rsi
  movsbl -0xc(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  not    %eax
  movslq %eax,%rdx
  mov    $0xfffff00c,%eax
  and    %rsi,%rdx
  mov    %rdx,(%rax)
L102:
  movsbl -0x10(%rbp),%eax
  cmp    $0xf,%eax
  ja     L11
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D6(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D6(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  movzbl -0xc(%rbp),%eax
  or     $0x20,%eax
  mov    $0xfffff200,%edx
  movsbq %al,%rax
  mov    %rax,(%rdx)
  mov    $0xfffff100,%edx
  mov    -0x4(%rbp),%eax
  mov    %rax,(%rdx)
  jmp    L44
  movzbl -0xc(%rbp),%eax
  or     $0x20,%eax
  mov    $0xfffff204,%edx
  movsbq %al,%rax
  mov    %rax,(%rdx)
  mov    $0xfffff104,%edx
  mov    -0x4(%rbp),%eax
  mov    %rax,(%rdx)
  jmp    L44
  movzbl -0xc(%rbp),%eax
  or     $0x20,%eax
  mov    $0xfffff208,%edx
  movsbq %al,%rax
  mov    %rax,(%rdx)
  mov    $0xfffff108,%edx
  mov    -0x4(%rbp),%eax
  mov    %rax,(%rdx)
  jmp    L44
  movzbl -0xc(%rbp),%eax
  or     $0x20,%eax
  mov    $0xfffff20c,%edx
  movsbq %al,%rax
  mov    %rax,(%rdx)
  mov    $0xfffff10c,%edx
  mov    -0x4(%rbp),%eax
  mov    %rax,(%rdx)
  jmp    L44
  movzbl -0xc(%rbp),%eax
  or     $0x20,%eax
  mov    $0xfffff210,%edx
  movsbq %al,%rax
  mov    %rax,(%rdx)
  mov    $0xfffff110,%edx
  mov    -0x4(%rbp),%eax
  mov    %rax,(%rdx)
  jmp    L44
  movzbl -0xc(%rbp),%eax
  or     $0x20,%eax
  mov    $0xfffff214,%edx
  movsbq %al,%rax
  mov    %rax,(%rdx)
  mov    $0xfffff114,%edx
  mov    -0x4(%rbp),%eax
  mov    %rax,(%rdx)
  jmp    L44
  movzbl -0xc(%rbp),%eax
  or     $0x20,%eax
  mov    $0xfffff218,%edx
  movsbq %al,%rax
  mov    %rax,(%rdx)
  mov    $0xfffff118,%edx
  mov    -0x4(%rbp),%eax
  mov    %rax,(%rdx)
  jmp    L44
  movzbl -0xc(%rbp),%eax
  or     $0x20,%eax
  mov    $0xfffff21c,%edx
  movsbq %al,%rax
  mov    %rax,(%rdx)
  mov    $0xfffff11c,%edx
  mov    -0x4(%rbp),%eax
  mov    %rax,(%rdx)
  jmp    L44
  movzbl -0xc(%rbp),%eax
  or     $0x20,%eax
  mov    $0xfffff220,%edx
  movsbq %al,%rax
  mov    %rax,(%rdx)
  mov    $0xfffff120,%edx
  mov    -0x4(%rbp),%eax
  mov    %rax,(%rdx)
  jmp    L44
  movzbl -0xc(%rbp),%eax
  or     $0x20,%eax
  mov    $0xfffff224,%edx
  movsbq %al,%rax
  mov    %rax,(%rdx)
  mov    $0xfffff124,%edx
  mov    -0x4(%rbp),%eax
  mov    %rax,(%rdx)
  jmp    L44
  movzbl -0xc(%rbp),%eax
  or     $0x20,%eax
  mov    $0xfffff228,%edx
  movsbq %al,%rax
  mov    %rax,(%rdx)
  mov    $0xfffff128,%edx
  mov    -0x4(%rbp),%eax
  mov    %rax,(%rdx)
  jmp    L44
  movzbl -0xc(%rbp),%eax
  or     $0x20,%eax
  mov    $0xfffff22c,%edx
  movsbq %al,%rax
  mov    %rax,(%rdx)
  mov    $0xfffff12c,%edx
  mov    -0x4(%rbp),%eax
  mov    %rax,(%rdx)
  jmp    L44
  movzbl -0xc(%rbp),%eax
  or     $0x20,%eax
  mov    $0xfffff230,%edx
  movsbq %al,%rax
  mov    %rax,(%rdx)
  mov    $0xfffff130,%edx
  mov    -0x4(%rbp),%eax
  mov    %rax,(%rdx)
  jmp    L44
  movzbl -0xc(%rbp),%eax
  or     $0x20,%eax
  mov    $0xfffff234,%edx
  movsbq %al,%rax
  mov    %rax,(%rdx)
  mov    $0xfffff134,%edx
  mov    -0x4(%rbp),%eax
  mov    %rax,(%rdx)
  jmp    L44
  movzbl -0xc(%rbp),%eax
  or     $0x20,%eax
  mov    $0xfffff238,%edx
  movsbq %al,%rax
  mov    %rax,(%rdx)
  mov    $0xfffff138,%edx
  mov    -0x4(%rbp),%eax
  mov    %rax,(%rdx)
  jmp    L44
  movzbl -0xc(%rbp),%eax
  or     $0x20,%eax
  mov    $0xfffff23c,%edx
  movsbq %al,%rax
  mov    %rax,(%rdx)
  mov    $0xfffff13c,%edx
  mov    -0x4(%rbp),%eax
  mov    %rax,(%rdx)
  jmp    L44
L11:
  mov    $0x0,%eax
  jmp    L171
L44:
  mov    $0xfffff010,%eax
  mov    (%rax),%rsi
  movsbl -0xc(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  movslq %eax,%rdx
  mov    $0xfffff010,%eax
  or     %rsi,%rdx
  mov    %rdx,(%rax)
  mov    $0xfffff030,%eax
  movq   $0xff,(%rax)
  mov    $0x1,%eax
L171:
  pop    %rbp
  ret
```

assistant: ```c
char VicSetup(unsigned int intHandler, char intType, char intSource, char intVector) {
  if (intType) {
    (*((volatile unsigned long *)0xFFFFF00C)) |= (1 << intSource);
  } else {
    (*((volatile unsigned long *)0xFFFFF00C)) &= ~(1 << intSource);
  }
  switch (intVector) {
  case 0:
    (*((volatile unsigned long *)0xFFFFF200)) = 0x20 | intSource;
    (*((volatile unsigned long *)0xFFFFF100)) = (unsigned)intHandler;
    break;
  case 1:
    (*((volatile unsigned long *)0xFFFFF204)) = 0x20 | intSource;
    (*((volatile unsigned long *)0xFFFFF104)) = (unsigned)intHandler;
    break;
  case 2:
    (*((volatile unsigned long *)0xFFFFF208)) = 0x20 | intSource;
    (*((volatile unsigned long *)0xFFFFF108)) = (unsigned)intHandler;
    break;
  case 3:
    (*((volatile unsigned long *)0xFFFFF20C)) = 0x20 | intSource;
    (*((volatile unsigned long *)0xFFFFF10C)) = (unsigned)intHandler;
    break;
  case 4:
    (*((volatile unsigned long *)0xFFFFF210)) = 0x20 | intSource;
    (*((volatile unsigned long *)0xFFFFF110)) = (unsigned)intHandler;
    break;
  case 5:
    (*((volatile unsigned long *)0xFFFFF214)) = 0x20 | intSource;
    (*((volatile unsigned long *)0xFFFFF114)) = (unsigned)intHandler;
    break;
  case 6:
    (*((volatile unsigned long *)0xFFFFF218)) = 0x20 | intSource;
    (*((volatile unsigned long *)0xFFFFF118)) = (unsigned)intHandler;
    break;
  case 7:
    (*((volatile unsigned long *)0xFFFFF21C)) = 0x20 | intSource;
    (*((volatile unsigned long *)0xFFFFF11C)) = (unsigned)intHandler;
    break;
  case 8:
    (*((volatile unsigned long *)0xFFFFF220)) = 0x20 | intSource;
    (*((volatile unsigned long *)0xFFFFF120)) = (unsigned)intHandler;
    break;
  case 9:
    (*((volatile unsigned long *)0xFFFFF224)) = 0x20 | intSource;
    (*((volatile unsigned long *)0xFFFFF124)) = (unsigned)intHandler;
    break;
  case 10:
    (*((volatile unsigned long *)0xFFFFF228)) = 0x20 | intSource;
    (*((volatile unsigned long *)0xFFFFF128)) = (unsigned)intHandler;
    break;
  case 11:
    (*((volatile unsigned long *)0xFFFFF22C)) = 0x20 | intSource;
    (*((volatile unsigned long *)0xFFFFF12C)) = (unsigned)intHandler;
    break;
  case 12:
    (*((volatile unsigned long *)0xFFFFF230)) = 0x20 | intSource;
    (*((volatile unsigned long *)0xFFFFF130)) = (unsigned)intHandler;
    break;
  case 13:
    (*((volatile unsigned long *)0xFFFFF234)) = 0x20 | intSource;
    (*((volatile unsigned long *)0xFFFFF134)) = (unsigned)intHandler;
    break;
  case 14:
    (*((volatile unsigned long *)0xFFFFF238)) = 0x20 | intSource;
    (*((volatile unsigned long *)0xFFFFF138)) = (unsigned)intHandler;
    break;
  case 15:
    (*((volatile unsigned long *)0xFFFFF23C)) = 0x20 | intSource;
    (*((volatile unsigned long *)0xFFFFF13C)) = (unsigned)intHandler;
    break;
  default:
    return 0;
    break;
  }
  (*((volatile unsigned long *)0xFFFFF010)) |= 1 << intSource;
  (*((volatile unsigned long *)0xFFFFF030)) = 0xFF;
  return 1;
}
```