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;
}


x86 assembly (clang, -O0):
<VicSetup>:
push   %rbp
mov    %rsp,%rbp
mov    %cl,%al
mov    %dl,%cl
mov    %sil,%dl
mov    %edi,-0x8(%rbp)
mov    %dl,-0x9(%rbp)
mov    %cl,-0xa(%rbp)
mov    %al,-0xb(%rbp)
cmpb   $0x0,-0x9(%rbp)
je     1146 <VicSetup+0x46>
movsbl -0xa(%rbp),%ecx
mov    $0x1,%eax
shl    %cl,%eax
cltq
mov    $0xfffff00c,%ecx
mov    (%rcx),%rcx
or     %rax,%rcx
mov    $0xfffff00c,%eax
mov    %rcx,(%rax)
jmp    1169 <VicSetup+0x69>
movsbl -0xa(%rbp),%ecx
mov    $0x1,%eax
shl    %cl,%eax
xor    $0xffffffff,%eax
cltq
mov    $0xfffff00c,%ecx
mov    (%rcx),%rcx
and    %rax,%rcx
mov    $0xfffff00c,%eax
mov    %rcx,(%rax)
movsbl -0xb(%rbp),%eax
mov    %eax,%ecx
mov    %rcx,-0x18(%rbp)
sub    $0xf,%eax
ja     13d0 <VicSetup+0x2d0>
mov    -0x18(%rbp),%rax
lea    0xe79(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movsbl -0xa(%rbp),%eax
or     $0x20,%eax
movslq %eax,%rcx
mov    $0xfffff200,%eax
mov    %rcx,(%rax)
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
mov    $0xfffff100,%eax
mov    %rcx,(%rax)
jmp    13d9 <VicSetup+0x2d9>
movsbl -0xa(%rbp),%eax
or     $0x20,%eax
movslq %eax,%rcx
mov    $0xfffff204,%eax
mov    %rcx,(%rax)
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
mov    $0xfffff104,%eax
mov    %rcx,(%rax)
jmp    13d9 <VicSetup+0x2d9>
movsbl -0xa(%rbp),%eax
or     $0x20,%eax
movslq %eax,%rcx
mov    $0xfffff208,%eax
mov    %rcx,(%rax)
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
mov    $0xfffff108,%eax
mov    %rcx,(%rax)
jmp    13d9 <VicSetup+0x2d9>
movsbl -0xa(%rbp),%eax
or     $0x20,%eax
movslq %eax,%rcx
mov    $0xfffff20c,%eax
mov    %rcx,(%rax)
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
mov    $0xfffff10c,%eax
mov    %rcx,(%rax)
jmp    13d9 <VicSetup+0x2d9>
movsbl -0xa(%rbp),%eax
or     $0x20,%eax
movslq %eax,%rcx
mov    $0xfffff210,%eax
mov    %rcx,(%rax)
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
mov    $0xfffff110,%eax
mov    %rcx,(%rax)
jmp    13d9 <VicSetup+0x2d9>
movsbl -0xa(%rbp),%eax
or     $0x20,%eax
movslq %eax,%rcx
mov    $0xfffff214,%eax
mov    %rcx,(%rax)
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
mov    $0xfffff114,%eax
mov    %rcx,(%rax)
jmp    13d9 <VicSetup+0x2d9>
movsbl -0xa(%rbp),%eax
or     $0x20,%eax
movslq %eax,%rcx
mov    $0xfffff218,%eax
mov    %rcx,(%rax)
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
mov    $0xfffff118,%eax
mov    %rcx,(%rax)
jmp    13d9 <VicSetup+0x2d9>
movsbl -0xa(%rbp),%eax
or     $0x20,%eax
movslq %eax,%rcx
mov    $0xfffff21c,%eax
mov    %rcx,(%rax)
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
mov    $0xfffff11c,%eax
mov    %rcx,(%rax)
jmp    13d9 <VicSetup+0x2d9>
movsbl -0xa(%rbp),%eax
or     $0x20,%eax
movslq %eax,%rcx
mov    $0xfffff220,%eax
mov    %rcx,(%rax)
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
mov    $0xfffff120,%eax
mov    %rcx,(%rax)
jmp    13d9 <VicSetup+0x2d9>
movsbl -0xa(%rbp),%eax
or     $0x20,%eax
movslq %eax,%rcx
mov    $0xfffff224,%eax
mov    %rcx,(%rax)
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
mov    $0xfffff124,%eax
mov    %rcx,(%rax)
jmp    13d9 <VicSetup+0x2d9>
movsbl -0xa(%rbp),%eax
or     $0x20,%eax
movslq %eax,%rcx
mov    $0xfffff228,%eax
mov    %rcx,(%rax)
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
mov    $0xfffff128,%eax
mov    %rcx,(%rax)
jmp    13d9 <VicSetup+0x2d9>
movsbl -0xa(%rbp),%eax
or     $0x20,%eax
movslq %eax,%rcx
mov    $0xfffff22c,%eax
mov    %rcx,(%rax)
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
mov    $0xfffff12c,%eax
mov    %rcx,(%rax)
jmp    13d9 <VicSetup+0x2d9>
movsbl -0xa(%rbp),%eax
or     $0x20,%eax
movslq %eax,%rcx
mov    $0xfffff230,%eax
mov    %rcx,(%rax)
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
mov    $0xfffff130,%eax
mov    %rcx,(%rax)
jmp    13d9 <VicSetup+0x2d9>
movsbl -0xa(%rbp),%eax
or     $0x20,%eax
movslq %eax,%rcx
mov    $0xfffff234,%eax
mov    %rcx,(%rax)
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
mov    $0xfffff134,%eax
mov    %rcx,(%rax)
jmp    13d9 <VicSetup+0x2d9>
movsbl -0xa(%rbp),%eax
or     $0x20,%eax
movslq %eax,%rcx
mov    $0xfffff238,%eax
mov    %rcx,(%rax)
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
mov    $0xfffff138,%eax
mov    %rcx,(%rax)
jmp    13d9 <VicSetup+0x2d9>
movsbl -0xa(%rbp),%eax
or     $0x20,%eax
movslq %eax,%rcx
mov    $0xfffff23c,%eax
mov    %rcx,(%rax)
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
mov    $0xfffff13c,%eax
mov    %rcx,(%rax)
jmp    13d9 <VicSetup+0x2d9>
movb   $0x0,-0x1(%rbp)
jmp    1409 <VicSetup+0x309>
movsbl -0xa(%rbp),%ecx
mov    $0x1,%eax
shl    %cl,%eax
cltq
mov    $0xfffff010,%ecx
mov    (%rcx),%rcx
or     %rax,%rcx
mov    $0xfffff010,%eax
mov    %rcx,(%rax)
mov    $0xfffff030,%eax
movq   $0xff,(%rax)
movb   $0x1,-0x1(%rbp)
movsbl -0x1(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<VicSetup>:
mov    %ecx,%eax
mov    %edx,%ecx
mov    $0xfffff00c,%r8d
mov    $0x1,%edx
shl    %cl,%edx
test   %sil,%sil
je     111e <VicSetup+0x1e>
movslq %edx,%rdx
or     (%r8),%rdx
jmp    1126 <VicSetup+0x26>
not    %edx
movslq %edx,%rdx
and    (%r8),%rdx
mov    %rdx,(%r8)
movsbl %al,%eax
cmp    $0xf,%eax
ja     115e <VicSetup+0x5e>
lea    0xec8(%rip),%rdx
movslq (%rdx,%rax,4),%rax
add    %rdx,%rax
jmp    *%rax
mov    %ecx,%eax
or     $0x20,%al
movsbq %al,%rax
mov    %rax,0x1f4(%r8)
mov    %edi,%eax
mov    %rax,0xf4(%r8)
jmp    1303 <VicSetup+0x203>
xor    %eax,%eax
ret
mov    %ecx,%eax
or     $0x20,%al
movsbq %al,%rax
mov    %rax,0x1f8(%r8)
mov    %edi,%eax
mov    %rax,0xf8(%r8)
jmp    1303 <VicSetup+0x203>
mov    %ecx,%eax
or     $0x20,%al
movsbq %al,%rax
mov    %rax,0x1fc(%r8)
mov    %edi,%eax
mov    %rax,0xfc(%r8)
jmp    1303 <VicSetup+0x203>
mov    %ecx,%eax
or     $0x20,%al
movsbq %al,%rax
mov    %rax,0x200(%r8)
mov    %edi,%eax
mov    %rax,0x100(%r8)
jmp    1303 <VicSetup+0x203>
mov    %ecx,%eax
or     $0x20,%al
movsbq %al,%rax
mov    %rax,0x204(%r8)
mov    %edi,%eax
mov    %rax,0x104(%r8)
jmp    1303 <VicSetup+0x203>
mov    %ecx,%eax
or     $0x20,%al
movsbq %al,%rax
mov    %rax,0x208(%r8)
mov    %edi,%eax
mov    %rax,0x108(%r8)
jmp    1303 <VicSetup+0x203>
mov    %ecx,%eax
or     $0x20,%al
movsbq %al,%rax
mov    %rax,0x20c(%r8)
mov    %edi,%eax
mov    %rax,0x10c(%r8)
jmp    1303 <VicSetup+0x203>
mov    %ecx,%eax
or     $0x20,%al
movsbq %al,%rax
mov    %rax,0x210(%r8)
mov    %edi,%eax
mov    %rax,0x110(%r8)
jmp    1303 <VicSetup+0x203>
mov    %ecx,%eax
or     $0x20,%al
movsbq %al,%rax
mov    %rax,0x214(%r8)
mov    %edi,%eax
mov    %rax,0x114(%r8)
jmp    1303 <VicSetup+0x203>
mov    %ecx,%eax
or     $0x20,%al
movsbq %al,%rax
mov    %rax,0x218(%r8)
mov    %edi,%eax
mov    %rax,0x118(%r8)
jmp    1303 <VicSetup+0x203>
mov    %ecx,%eax
or     $0x20,%al
movsbq %al,%rax
mov    %rax,0x21c(%r8)
mov    %edi,%eax
mov    %rax,0x11c(%r8)
jmp    1303 <VicSetup+0x203>
mov    %ecx,%eax
or     $0x20,%al
movsbq %al,%rax
mov    %rax,0x220(%r8)
mov    %edi,%eax
mov    %rax,0x120(%r8)
jmp    1303 <VicSetup+0x203>
mov    %ecx,%eax
or     $0x20,%al
movsbq %al,%rax
mov    %rax,0x224(%r8)
mov    %edi,%eax
mov    %rax,0x124(%r8)
jmp    1303 <VicSetup+0x203>
mov    %ecx,%eax
or     $0x20,%al
movsbq %al,%rax
mov    %rax,0x228(%r8)
mov    %edi,%eax
mov    %rax,0x128(%r8)
jmp    1303 <VicSetup+0x203>
mov    %ecx,%eax
or     $0x20,%al
movsbq %al,%rax
mov    %rax,0x22c(%r8)
mov    %edi,%eax
mov    %rax,0x12c(%r8)
jmp    1303 <VicSetup+0x203>
mov    %ecx,%eax
or     $0x20,%al
movsbq %al,%rax
mov    %rax,0x230(%r8)
mov    %edi,%eax
mov    %rax,0x130(%r8)
mov    $0x1,%eax
shl    %cl,%eax
cltq
or     %rax,0x4(%r8)
movq   $0xff,0x24(%r8)
mov    $0x1,%al
ret

LLVM IR (-O0):
define signext i8 @VicSetup(i32 %0, i8 signext %1, i8 signext %2, i8 signext %3) {
%5 = alloca i8
%6 = alloca i32
%7 = alloca i8
%8 = alloca i8
%9 = alloca i8
store i32 %0, i32* %6
store i8 %1, i8* %7
store i8 %2, i8* %8
store i8 %3, i8* %9
%10 = load i8, i8* %7
%11 = icmp ne i8 %10, 0
br i1 %11, label %12, label %19
12: ; preds = %4
%13 = load i8, i8* %8
%14 = sext i8 %13 to i32
%15 = shl i32 1, %14
%16 = sext i32 %15 to i64
%17 = load volatile i64, i64* inttoptr (i64 4294963212 to i64*)
%18 = or i64 %17, %16
store volatile i64 %18, i64* inttoptr (i64 4294963212 to i64*)
br label %27
19: ; preds = %4
%20 = load i8, i8* %8
%21 = sext i8 %20 to i32
%22 = shl i32 1, %21
%23 = xor i32 %22, -1
%24 = sext i32 %23 to i64
%25 = load volatile i64, i64* inttoptr (i64 4294963212 to i64*)
%26 = and i64 %25, %24
store volatile i64 %26, i64* inttoptr (i64 4294963212 to i64*)
br label %27
27: ; preds = %19, %12
%28 = load i8, i8* %9
%29 = sext i8 %28 to i32
switch i32 %29, label %142 [
i32 0, label %30
i32 1, label %37
i32 2, label %44
i32 3, label %51
i32 4, label %58
i32 5, label %65
i32 6, label %72
i32 7, label %79
i32 8, label %86
i32 9, label %93
i32 10, label %100
i32 11, label %107
i32 12, label %114
i32 13, label %121
i32 14, label %128
i32 15, label %135
]
30: ; preds = %27
%31 = load i8, i8* %8
%32 = sext i8 %31 to i32
%33 = or i32 32, %32
%34 = sext i32 %33 to i64
store volatile i64 %34, i64* inttoptr (i64 4294963712 to i64*)
%35 = load i32, i32* %6
%36 = zext i32 %35 to i64
store volatile i64 %36, i64* inttoptr (i64 4294963456 to i64*)
br label %143
37: ; preds = %27
%38 = load i8, i8* %8
%39 = sext i8 %38 to i32
%40 = or i32 32, %39
%41 = sext i32 %40 to i64
store volatile i64 %41, i64* inttoptr (i64 4294963716 to i64*)
%42 = load i32, i32* %6
%43 = zext i32 %42 to i64
store volatile i64 %43, i64* inttoptr (i64 4294963460 to i64*)
br label %143
44: ; preds = %27
%45 = load i8, i8* %8
%46 = sext i8 %45 to i32
%47 = or i32 32, %46
%48 = sext i32 %47 to i64
store volatile i64 %48, i64* inttoptr (i64 4294963720 to i64*)
%49 = load i32, i32* %6
%50 = zext i32 %49 to i64
store volatile i64 %50, i64* inttoptr (i64 4294963464 to i64*)
br label %143
51: ; preds = %27
%52 = load i8, i8* %8
%53 = sext i8 %52 to i32
%54 = or i32 32, %53
%55 = sext i32 %54 to i64
store volatile i64 %55, i64* inttoptr (i64 4294963724 to i64*)
%56 = load i32, i32* %6
%57 = zext i32 %56 to i64
store volatile i64 %57, i64* inttoptr (i64 4294963468 to i64*)
br label %143
58: ; preds = %27
%59 = load i8, i8* %8
%60 = sext i8 %59 to i32
%61 = or i32 32, %60
%62 = sext i32 %61 to i64
store volatile i64 %62, i64* inttoptr (i64 4294963728 to i64*)
%63 = load i32, i32* %6
%64 = zext i32 %63 to i64
store volatile i64 %64, i64* inttoptr (i64 4294963472 to i64*)
br label %143
65: ; preds = %27
%66 = load i8, i8* %8
%67 = sext i8 %66 to i32
%68 = or i32 32, %67
%69 = sext i32 %68 to i64
store volatile i64 %69, i64* inttoptr (i64 4294963732 to i64*)
%70 = load i32, i32* %6
%71 = zext i32 %70 to i64
store volatile i64 %71, i64* inttoptr (i64 4294963476 to i64*)
br label %143
72: ; preds = %27
%73 = load i8, i8* %8
%74 = sext i8 %73 to i32
%75 = or i32 32, %74
%76 = sext i32 %75 to i64
store volatile i64 %76, i64* inttoptr (i64 4294963736 to i64*)
%77 = load i32, i32* %6
%78 = zext i32 %77 to i64
store volatile i64 %78, i64* inttoptr (i64 4294963480 to i64*)
br label %143
79: ; preds = %27
%80 = load i8, i8* %8
%81 = sext i8 %80 to i32
%82 = or i32 32, %81
%83 = sext i32 %82 to i64
store volatile i64 %83, i64* inttoptr (i64 4294963740 to i64*)
%84 = load i32, i32* %6
%85 = zext i32 %84 to i64
store volatile i64 %85, i64* inttoptr (i64 4294963484 to i64*)
br label %143
86: ; preds = %27
%87 = load i8, i8* %8
%88 = sext i8 %87 to i32
%89 = or i32 32, %88
%90 = sext i32 %89 to i64
store volatile i64 %90, i64* inttoptr (i64 4294963744 to i64*)
%91 = load i32, i32* %6
%92 = zext i32 %91 to i64
store volatile i64 %92, i64* inttoptr (i64 4294963488 to i64*)
br label %143
93: ; preds = %27
%94 = load i8, i8* %8
%95 = sext i8 %94 to i32
%96 = or i32 32, %95
%97 = sext i32 %96 to i64
store volatile i64 %97, i64* inttoptr (i64 4294963748 to i64*)
%98 = load i32, i32* %6
%99 = zext i32 %98 to i64
store volatile i64 %99, i64* inttoptr (i64 4294963492 to i64*)
br label %143
100: ; preds = %27
%101 = load i8, i8* %8
%102 = sext i8 %101 to i32
%103 = or i32 32, %102
%104 = sext i32 %103 to i64
store volatile i64 %104, i64* inttoptr (i64 4294963752 to i64*)
%105 = load i32, i32* %6
%106 = zext i32 %105 to i64
store volatile i64 %106, i64* inttoptr (i64 4294963496 to i64*)
br label %143
107: ; preds = %27
%108 = load i8, i8* %8
%109 = sext i8 %108 to i32
%110 = or i32 32, %109
%111 = sext i32 %110 to i64
store volatile i64 %111, i64* inttoptr (i64 4294963756 to i64*)
%112 = load i32, i32* %6
%113 = zext i32 %112 to i64
store volatile i64 %113, i64* inttoptr (i64 4294963500 to i64*)
br label %143
114: ; preds = %27
%115 = load i8, i8* %8
%116 = sext i8 %115 to i32
%117 = or i32 32, %116
%118 = sext i32 %117 to i64
store volatile i64 %118, i64* inttoptr (i64 4294963760 to i64*)
%119 = load i32, i32* %6
%120 = zext i32 %119 to i64
store volatile i64 %120, i64* inttoptr (i64 4294963504 to i64*)
br label %143
121: ; preds = %27
%122 = load i8, i8* %8
%123 = sext i8 %122 to i32
%124 = or i32 32, %123
%125 = sext i32 %124 to i64
store volatile i64 %125, i64* inttoptr (i64 4294963764 to i64*)
%126 = load i32, i32* %6
%127 = zext i32 %126 to i64
store volatile i64 %127, i64* inttoptr (i64 4294963508 to i64*)
br label %143
128: ; preds = %27
%129 = load i8, i8* %8
%130 = sext i8 %129 to i32
%131 = or i32 32, %130
%132 = sext i32 %131 to i64
store volatile i64 %132, i64* inttoptr (i64 4294963768 to i64*)
%133 = load i32, i32* %6
%134 = zext i32 %133 to i64
store volatile i64 %134, i64* inttoptr (i64 4294963512 to i64*)
br label %143
135: ; preds = %27
%136 = load i8, i8* %8
%137 = sext i8 %136 to i32
%138 = or i32 32, %137
%139 = sext i32 %138 to i64
store volatile i64 %139, i64* inttoptr (i64 4294963772 to i64*)
%140 = load i32, i32* %6
%141 = zext i32 %140 to i64
store volatile i64 %141, i64* inttoptr (i64 4294963516 to i64*)
br label %143
142: ; preds = %27
store i8 0, i8* %5
br label %150
143: ; preds = %135, %128, %121, %114, %107, %100, %93, %86, %79, %72, %65, %58, %51, %44, %37, %30
%144 = load i8, i8* %8
%145 = sext i8 %144 to i32
%146 = shl i32 1, %145
%147 = sext i32 %146 to i64
%148 = load volatile i64, i64* inttoptr (i64 4294963216 to i64*)
%149 = or i64 %148, %147
store volatile i64 %149, i64* inttoptr (i64 4294963216 to i64*)
store volatile i64 255, i64* inttoptr (i64 4294963248 to i64*)
store i8 1, i8* %5
br label %150
150: ; preds = %143, %142
%151 = load i8, i8* %5
ret i8 %151
}

LLVM IR (-O2):
define signext i8 @VicSetup(i32 %0, i8 signext %1, i8 signext %2, i8 signext %3) {
%5 = icmp eq i8 %1, 0
%6 = zext i8 %2 to i32
%7 = shl nuw i32 1, %6
br i1 %5, label %12, label %8
8: ; preds = %4
%9 = sext i32 %7 to i64
%10 = load volatile i64, i64* inttoptr (i64 4294963212 to i64*)
%11 = or i64 %10, %9
br label %17
12: ; preds = %4
%13 = xor i32 %7, -1
%14 = sext i32 %13 to i64
%15 = load volatile i64, i64* inttoptr (i64 4294963212 to i64*)
%16 = and i64 %15, %14
br label %17
17: ; preds = %12, %8
%18 = phi i64 [ %16, %12 ], [ %11, %8 ]
store volatile i64 %18, i64* inttoptr (i64 4294963212 to i64*)
%19 = sext i8 %3 to i32
switch i32 %19, label %90 [
i32 0, label %20
i32 1, label %24
i32 2, label %28
i32 3, label %32
i32 4, label %36
i32 5, label %40
i32 6, label %44
i32 7, label %48
i32 8, label %52
i32 9, label %56
i32 10, label %60
i32 11, label %64
i32 12, label %68
i32 13, label %72
i32 14, label %76
i32 15, label %80
]
20: ; preds = %17
%21 = or i8 %2, 32
%22 = sext i8 %21 to i64
store volatile i64 %22, i64* inttoptr (i64 4294963712 to i64*)
%23 = zext i32 %0 to i64
store volatile i64 %23, i64* inttoptr (i64 4294963456 to i64*)
br label %84
24: ; preds = %17
%25 = or i8 %2, 32
%26 = sext i8 %25 to i64
store volatile i64 %26, i64* inttoptr (i64 4294963716 to i64*)
%27 = zext i32 %0 to i64
store volatile i64 %27, i64* inttoptr (i64 4294963460 to i64*)
br label %84
28: ; preds = %17
%29 = or i8 %2, 32
%30 = sext i8 %29 to i64
store volatile i64 %30, i64* inttoptr (i64 4294963720 to i64*)
%31 = zext i32 %0 to i64
store volatile i64 %31, i64* inttoptr (i64 4294963464 to i64*)
br label %84
32: ; preds = %17
%33 = or i8 %2, 32
%34 = sext i8 %33 to i64
store volatile i64 %34, i64* inttoptr (i64 4294963724 to i64*)
%35 = zext i32 %0 to i64
store volatile i64 %35, i64* inttoptr (i64 4294963468 to i64*)
br label %84
36: ; preds = %17
%37 = or i8 %2, 32
%38 = sext i8 %37 to i64
store volatile i64 %38, i64* inttoptr (i64 4294963728 to i64*)
%39 = zext i32 %0 to i64
store volatile i64 %39, i64* inttoptr (i64 4294963472 to i64*)
br label %84
40: ; preds = %17
%41 = or i8 %2, 32
%42 = sext i8 %41 to i64
store volatile i64 %42, i64* inttoptr (i64 4294963732 to i64*)
%43 = zext i32 %0 to i64
store volatile i64 %43, i64* inttoptr (i64 4294963476 to i64*)
br label %84
44: ; preds = %17
%45 = or i8 %2, 32
%46 = sext i8 %45 to i64
store volatile i64 %46, i64* inttoptr (i64 4294963736 to i64*)
%47 = zext i32 %0 to i64
store volatile i64 %47, i64* inttoptr (i64 4294963480 to i64*)
br label %84
48: ; preds = %17
%49 = or i8 %2, 32
%50 = sext i8 %49 to i64
store volatile i64 %50, i64* inttoptr (i64 4294963740 to i64*)
%51 = zext i32 %0 to i64
store volatile i64 %51, i64* inttoptr (i64 4294963484 to i64*)
br label %84
52: ; preds = %17
%53 = or i8 %2, 32
%54 = sext i8 %53 to i64
store volatile i64 %54, i64* inttoptr (i64 4294963744 to i64*)
%55 = zext i32 %0 to i64
store volatile i64 %55, i64* inttoptr (i64 4294963488 to i64*)
br label %84
56: ; preds = %17
%57 = or i8 %2, 32
%58 = sext i8 %57 to i64
store volatile i64 %58, i64* inttoptr (i64 4294963748 to i64*)
%59 = zext i32 %0 to i64
store volatile i64 %59, i64* inttoptr (i64 4294963492 to i64*)
br label %84
60: ; preds = %17
%61 = or i8 %2, 32
%62 = sext i8 %61 to i64
store volatile i64 %62, i64* inttoptr (i64 4294963752 to i64*)
%63 = zext i32 %0 to i64
store volatile i64 %63, i64* inttoptr (i64 4294963496 to i64*)
br label %84
64: ; preds = %17
%65 = or i8 %2, 32
%66 = sext i8 %65 to i64
store volatile i64 %66, i64* inttoptr (i64 4294963756 to i64*)
%67 = zext i32 %0 to i64
store volatile i64 %67, i64* inttoptr (i64 4294963500 to i64*)
br label %84
68: ; preds = %17
%69 = or i8 %2, 32
%70 = sext i8 %69 to i64
store volatile i64 %70, i64* inttoptr (i64 4294963760 to i64*)
%71 = zext i32 %0 to i64
store volatile i64 %71, i64* inttoptr (i64 4294963504 to i64*)
br label %84
72: ; preds = %17
%73 = or i8 %2, 32
%74 = sext i8 %73 to i64
store volatile i64 %74, i64* inttoptr (i64 4294963764 to i64*)
%75 = zext i32 %0 to i64
store volatile i64 %75, i64* inttoptr (i64 4294963508 to i64*)
br label %84
76: ; preds = %17
%77 = or i8 %2, 32
%78 = sext i8 %77 to i64
store volatile i64 %78, i64* inttoptr (i64 4294963768 to i64*)
%79 = zext i32 %0 to i64
store volatile i64 %79, i64* inttoptr (i64 4294963512 to i64*)
br label %84
80: ; preds = %17
%81 = or i8 %2, 32
%82 = sext i8 %81 to i64
store volatile i64 %82, i64* inttoptr (i64 4294963772 to i64*)
%83 = zext i32 %0 to i64
store volatile i64 %83, i64* inttoptr (i64 4294963516 to i64*)
br label %84
84: ; preds = %80, %76, %72, %68, %64, %60, %56, %52, %48, %44, %40, %36, %32, %28, %24, %20
%85 = zext i8 %2 to i32
%86 = shl nuw i32 1, %85
%87 = sext i32 %86 to i64
%88 = load volatile i64, i64* inttoptr (i64 4294963216 to i64*)
%89 = or i64 %88, %87
store volatile i64 %89, i64* inttoptr (i64 4294963216 to i64*)
store volatile i64 255, i64* inttoptr (i64 4294963248 to i64*)
br label %90
90: ; preds = %17, %84
%91 = phi i8 [ 1, %84 ], [ 0, %17 ]
ret i8 %91
}