void GPIOIntTypeSet(unsigned int baseAdd, unsigned int pinNumber,
                    unsigned int eventType) {
  eventType &= 0xFF;
  switch (eventType) {
  case (0x01):
    (*((volatile unsigned int *)(baseAdd + (0x140 + (0 * 4))))) &=
        ~(1 << pinNumber);
    (*((volatile unsigned int *)(baseAdd + (0x140 + (1 * 4))))) &=
        ~(1 << pinNumber);
    break;
  case (0x04):
    (*((volatile unsigned int *)(baseAdd + (0x140 + (0 * 4))))) |=
        (1 << pinNumber);
    break;
  case (0x08):
    (*((volatile unsigned int *)(baseAdd + (0x140 + (1 * 4))))) |=
        (1 << pinNumber);
    break;
  case (0x0C):
    (*((volatile unsigned int *)(baseAdd + (0x140 + (0 * 4))))) |=
        (1 << pinNumber);
    (*((volatile unsigned int *)(baseAdd + (0x140 + (1 * 4))))) |=
        (1 << pinNumber);
    break;
  case (0x80):
    (*((volatile unsigned int *)(baseAdd + (0x148)))) &= ~(1 << pinNumber);
    (*((volatile unsigned int *)(baseAdd + (0x14C)))) &= ~(1 << pinNumber);
    break;
  case (0x10):
    (*((volatile unsigned int *)(baseAdd + (0x148)))) |= (1 << pinNumber);
    break;
  case (0x20):
    (*((volatile unsigned int *)(baseAdd + (0x14C)))) |= (1 << pinNumber);
    break;
  case (0x30):
    (*((volatile unsigned int *)(baseAdd + (0x148)))) |= (1 << pinNumber);
    (*((volatile unsigned int *)(baseAdd + (0x14C)))) |= (1 << pinNumber);
    break;
  default:
    break;
  }
}


x86 assembly (clang, -O0):
<GPIOIntTypeSet>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
movzbl -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x10(%rbp)
sub    $0x1,%eax
je     11a1 <GPIOIntTypeSet+0xa1>
jmp    1128 <GPIOIntTypeSet+0x28>
mov    -0x10(%rbp),%eax
sub    $0x4,%eax
je     11e0 <GPIOIntTypeSet+0xe0>
jmp    1139 <GPIOIntTypeSet+0x39>
mov    -0x10(%rbp),%eax
sub    $0x8,%eax
je     11ff <GPIOIntTypeSet+0xff>
jmp    114a <GPIOIntTypeSet+0x4a>
mov    -0x10(%rbp),%eax
sub    $0xc,%eax
je     121e <GPIOIntTypeSet+0x11e>
jmp    115b <GPIOIntTypeSet+0x5b>
mov    -0x10(%rbp),%eax
sub    $0x10,%eax
je     1296 <GPIOIntTypeSet+0x196>
jmp    116c <GPIOIntTypeSet+0x6c>
mov    -0x10(%rbp),%eax
sub    $0x20,%eax
je     12b5 <GPIOIntTypeSet+0x1b5>
jmp    117d <GPIOIntTypeSet+0x7d>
mov    -0x10(%rbp),%eax
sub    $0x30,%eax
je     12d4 <GPIOIntTypeSet+0x1d4>
jmp    118e <GPIOIntTypeSet+0x8e>
mov    -0x10(%rbp),%eax
sub    $0x80,%eax
je     1257 <GPIOIntTypeSet+0x157>
jmp    130d <GPIOIntTypeSet+0x20d>
mov    -0x8(%rbp),%ecx
mov    $0x1,%edx
shl    %cl,%edx
xor    $0xffffffff,%edx
mov    -0x4(%rbp),%eax
add    $0x140,%eax
mov    %eax,%eax
mov    (%rax),%ecx
and    %edx,%ecx
mov    %ecx,(%rax)
mov    -0x8(%rbp),%ecx
mov    $0x1,%edx
shl    %cl,%edx
xor    $0xffffffff,%edx
mov    -0x4(%rbp),%eax
add    $0x144,%eax
mov    %eax,%eax
mov    (%rax),%ecx
and    %edx,%ecx
mov    %ecx,(%rax)
jmp    1312 <GPIOIntTypeSet+0x212>
mov    -0x8(%rbp),%ecx
mov    $0x1,%edx
shl    %cl,%edx
mov    -0x4(%rbp),%eax
add    $0x140,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     %edx,%ecx
mov    %ecx,(%rax)
jmp    1312 <GPIOIntTypeSet+0x212>
mov    -0x8(%rbp),%ecx
mov    $0x1,%edx
shl    %cl,%edx
mov    -0x4(%rbp),%eax
add    $0x144,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     %edx,%ecx
mov    %ecx,(%rax)
jmp    1312 <GPIOIntTypeSet+0x212>
mov    -0x8(%rbp),%ecx
mov    $0x1,%edx
shl    %cl,%edx
mov    -0x4(%rbp),%eax
add    $0x140,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     %edx,%ecx
mov    %ecx,(%rax)
mov    -0x8(%rbp),%ecx
mov    $0x1,%edx
shl    %cl,%edx
mov    -0x4(%rbp),%eax
add    $0x144,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     %edx,%ecx
mov    %ecx,(%rax)
jmp    1312 <GPIOIntTypeSet+0x212>
mov    -0x8(%rbp),%ecx
mov    $0x1,%edx
shl    %cl,%edx
xor    $0xffffffff,%edx
mov    -0x4(%rbp),%eax
add    $0x148,%eax
mov    %eax,%eax
mov    (%rax),%ecx
and    %edx,%ecx
mov    %ecx,(%rax)
mov    -0x8(%rbp),%ecx
mov    $0x1,%edx
shl    %cl,%edx
xor    $0xffffffff,%edx
mov    -0x4(%rbp),%eax
add    $0x14c,%eax
mov    %eax,%eax
mov    (%rax),%ecx
and    %edx,%ecx
mov    %ecx,(%rax)
jmp    1312 <GPIOIntTypeSet+0x212>
mov    -0x8(%rbp),%ecx
mov    $0x1,%edx
shl    %cl,%edx
mov    -0x4(%rbp),%eax
add    $0x148,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     %edx,%ecx
mov    %ecx,(%rax)
jmp    1312 <GPIOIntTypeSet+0x212>
mov    -0x8(%rbp),%ecx
mov    $0x1,%edx
shl    %cl,%edx
mov    -0x4(%rbp),%eax
add    $0x14c,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     %edx,%ecx
mov    %ecx,(%rax)
jmp    1312 <GPIOIntTypeSet+0x212>
mov    -0x8(%rbp),%ecx
mov    $0x1,%edx
shl    %cl,%edx
mov    -0x4(%rbp),%eax
add    $0x148,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     %edx,%ecx
mov    %ecx,(%rax)
mov    -0x8(%rbp),%ecx
mov    $0x1,%edx
shl    %cl,%edx
mov    -0x4(%rbp),%eax
add    $0x14c,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     %edx,%ecx
mov    %ecx,(%rax)
jmp    1312 <GPIOIntTypeSet+0x212>
jmp    1312 <GPIOIntTypeSet+0x212>
pop    %rbp
ret

x86 assembly (clang, -O2):
<GPIOIntTypeSet>:
lea    -0x1(%rdx),%eax
cmp    $0x2f,%al
ja     1134 <GPIOIntTypeSet+0x34>
movzbl %al,%eax
lea    0xeef(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    $0xfffffffe,%eax
mov    %esi,%ecx
rol    %cl,%eax
lea    0x140(%rdi),%ecx
and    %eax,(%rcx)
add    $0x144,%edi
and    %eax,(%rdi)
ret
cmp    $0x80,%dl
jne    11c7 <GPIOIntTypeSet+0xc7>
mov    $0xfffffffe,%eax
mov    %esi,%ecx
rol    %cl,%eax
lea    0x148(%rdi),%ecx
and    %eax,(%rcx)
add    $0x14c,%edi
and    %eax,(%rdi)
ret
mov    $0x1,%eax
mov    %esi,%ecx
shl    %cl,%eax
add    $0x140,%edi
jmp    11c5 <GPIOIntTypeSet+0xc5>
mov    $0x1,%eax
mov    %esi,%ecx
shl    %cl,%eax
add    $0x144,%edi
jmp    11c5 <GPIOIntTypeSet+0xc5>
mov    $0x1,%eax
mov    %esi,%ecx
shl    %cl,%eax
lea    0x140(%rdi),%ecx
or     %eax,(%rcx)
add    $0x144,%edi
jmp    11c5 <GPIOIntTypeSet+0xc5>
mov    $0x1,%eax
mov    %esi,%ecx
shl    %cl,%eax
add    $0x148,%edi
jmp    11c5 <GPIOIntTypeSet+0xc5>
mov    $0x1,%eax
mov    %esi,%ecx
shl    %cl,%eax
jmp    11bf <GPIOIntTypeSet+0xbf>
mov    $0x1,%eax
mov    %esi,%ecx
shl    %cl,%eax
lea    0x148(%rdi),%ecx
or     %eax,(%rcx)
add    $0x14c,%edi
or     %eax,(%rdi)
ret

LLVM IR (-O0):
define void @GPIOIntTypeSet(i32 %0, i32 %1, i32 %2) {
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
store i32 %0, i32* %4
store i32 %1, i32* %5
store i32 %2, i32* %6
%7 = load i32, i32* %6
%8 = and i32 %7, 255
store i32 %8, i32* %6
%9 = load i32, i32* %6
switch i32 %9, label %118 [
i32 1, label %10
i32 4, label %29
i32 8, label %38
i32 12, label %47
i32 128, label %64
i32 16, label %83
i32 32, label %92
i32 48, label %101
]
10: ; preds = %3
%11 = load i32, i32* %5
%12 = shl i32 1, %11
%13 = xor i32 %12, -1
%14 = load i32, i32* %4
%15 = add i32 %14, 320
%16 = zext i32 %15 to i64
%17 = inttoptr i64 %16 to i32*
%18 = load volatile i32, i32* %17
%19 = and i32 %18, %13
store volatile i32 %19, i32* %17
%20 = load i32, i32* %5
%21 = shl i32 1, %20
%22 = xor i32 %21, -1
%23 = load i32, i32* %4
%24 = add i32 %23, 324
%25 = zext i32 %24 to i64
%26 = inttoptr i64 %25 to i32*
%27 = load volatile i32, i32* %26
%28 = and i32 %27, %22
store volatile i32 %28, i32* %26
br label %119
29: ; preds = %3
%30 = load i32, i32* %5
%31 = shl i32 1, %30
%32 = load i32, i32* %4
%33 = add i32 %32, 320
%34 = zext i32 %33 to i64
%35 = inttoptr i64 %34 to i32*
%36 = load volatile i32, i32* %35
%37 = or i32 %36, %31
store volatile i32 %37, i32* %35
br label %119
38: ; preds = %3
%39 = load i32, i32* %5
%40 = shl i32 1, %39
%41 = load i32, i32* %4
%42 = add i32 %41, 324
%43 = zext i32 %42 to i64
%44 = inttoptr i64 %43 to i32*
%45 = load volatile i32, i32* %44
%46 = or i32 %45, %40
store volatile i32 %46, i32* %44
br label %119
47: ; preds = %3
%48 = load i32, i32* %5
%49 = shl i32 1, %48
%50 = load i32, i32* %4
%51 = add i32 %50, 320
%52 = zext i32 %51 to i64
%53 = inttoptr i64 %52 to i32*
%54 = load volatile i32, i32* %53
%55 = or i32 %54, %49
store volatile i32 %55, i32* %53
%56 = load i32, i32* %5
%57 = shl i32 1, %56
%58 = load i32, i32* %4
%59 = add i32 %58, 324
%60 = zext i32 %59 to i64
%61 = inttoptr i64 %60 to i32*
%62 = load volatile i32, i32* %61
%63 = or i32 %62, %57
store volatile i32 %63, i32* %61
br label %119
64: ; preds = %3
%65 = load i32, i32* %5
%66 = shl i32 1, %65
%67 = xor i32 %66, -1
%68 = load i32, i32* %4
%69 = add i32 %68, 328
%70 = zext i32 %69 to i64
%71 = inttoptr i64 %70 to i32*
%72 = load volatile i32, i32* %71
%73 = and i32 %72, %67
store volatile i32 %73, i32* %71
%74 = load i32, i32* %5
%75 = shl i32 1, %74
%76 = xor i32 %75, -1
%77 = load i32, i32* %4
%78 = add i32 %77, 332
%79 = zext i32 %78 to i64
%80 = inttoptr i64 %79 to i32*
%81 = load volatile i32, i32* %80
%82 = and i32 %81, %76
store volatile i32 %82, i32* %80
br label %119
83: ; preds = %3
%84 = load i32, i32* %5
%85 = shl i32 1, %84
%86 = load i32, i32* %4
%87 = add i32 %86, 328
%88 = zext i32 %87 to i64
%89 = inttoptr i64 %88 to i32*
%90 = load volatile i32, i32* %89
%91 = or i32 %90, %85
store volatile i32 %91, i32* %89
br label %119
92: ; preds = %3
%93 = load i32, i32* %5
%94 = shl i32 1, %93
%95 = load i32, i32* %4
%96 = add i32 %95, 332
%97 = zext i32 %96 to i64
%98 = inttoptr i64 %97 to i32*
%99 = load volatile i32, i32* %98
%100 = or i32 %99, %94
store volatile i32 %100, i32* %98
br label %119
101: ; preds = %3
%102 = load i32, i32* %5
%103 = shl i32 1, %102
%104 = load i32, i32* %4
%105 = add i32 %104, 328
%106 = zext i32 %105 to i64
%107 = inttoptr i64 %106 to i32*
%108 = load volatile i32, i32* %107
%109 = or i32 %108, %103
store volatile i32 %109, i32* %107
%110 = load i32, i32* %5
%111 = shl i32 1, %110
%112 = load i32, i32* %4
%113 = add i32 %112, 332
%114 = zext i32 %113 to i64
%115 = inttoptr i64 %114 to i32*
%116 = load volatile i32, i32* %115
%117 = or i32 %116, %111
store volatile i32 %117, i32* %115
br label %119
118: ; preds = %3
br label %119
119: ; preds = %118, %101, %92, %83, %64, %47, %38, %29, %10
ret void
}

LLVM IR (-O2):
define void @GPIOIntTypeSet(i32 %0, i32 %1, i32 %2) {
%4 = trunc i32 %2 to i8
switch i8 %4, label %83 [
i8 1, label %5
i8 4, label %18
i8 8, label %25
i8 12, label %32
i8 -128, label %44
i8 16, label %57
i8 32, label %64
i8 48, label %71
]
5: ; preds = %3
%6 = shl nuw i32 1, %1
%7 = xor i32 %6, -1
%8 = add i32 %0, 320
%9 = zext i32 %8 to i64
%10 = inttoptr i64 %9 to i32*
%11 = load volatile i32, i32* %10
%12 = and i32 %11, %7
store volatile i32 %12, i32* %10
%13 = add i32 %0, 324
%14 = zext i32 %13 to i64
%15 = inttoptr i64 %14 to i32*
%16 = load volatile i32, i32* %15
%17 = and i32 %16, %7
store volatile i32 %17, i32* %15
br label %83
18: ; preds = %3
%19 = shl nuw i32 1, %1
%20 = add i32 %0, 320
%21 = zext i32 %20 to i64
%22 = inttoptr i64 %21 to i32*
%23 = load volatile i32, i32* %22
%24 = or i32 %23, %19
store volatile i32 %24, i32* %22
br label %83
25: ; preds = %3
%26 = shl nuw i32 1, %1
%27 = add i32 %0, 324
%28 = zext i32 %27 to i64
%29 = inttoptr i64 %28 to i32*
%30 = load volatile i32, i32* %29
%31 = or i32 %30, %26
store volatile i32 %31, i32* %29
br label %83
32: ; preds = %3
%33 = shl nuw i32 1, %1
%34 = add i32 %0, 320
%35 = zext i32 %34 to i64
%36 = inttoptr i64 %35 to i32*
%37 = load volatile i32, i32* %36
%38 = or i32 %37, %33
store volatile i32 %38, i32* %36
%39 = add i32 %0, 324
%40 = zext i32 %39 to i64
%41 = inttoptr i64 %40 to i32*
%42 = load volatile i32, i32* %41
%43 = or i32 %42, %33
store volatile i32 %43, i32* %41
br label %83
44: ; preds = %3
%45 = shl nuw i32 1, %1
%46 = xor i32 %45, -1
%47 = add i32 %0, 328
%48 = zext i32 %47 to i64
%49 = inttoptr i64 %48 to i32*
%50 = load volatile i32, i32* %49
%51 = and i32 %50, %46
store volatile i32 %51, i32* %49
%52 = add i32 %0, 332
%53 = zext i32 %52 to i64
%54 = inttoptr i64 %53 to i32*
%55 = load volatile i32, i32* %54
%56 = and i32 %55, %46
store volatile i32 %56, i32* %54
br label %83
57: ; preds = %3
%58 = shl nuw i32 1, %1
%59 = add i32 %0, 328
%60 = zext i32 %59 to i64
%61 = inttoptr i64 %60 to i32*
%62 = load volatile i32, i32* %61
%63 = or i32 %62, %58
store volatile i32 %63, i32* %61
br label %83
64: ; preds = %3
%65 = shl nuw i32 1, %1
%66 = add i32 %0, 332
%67 = zext i32 %66 to i64
%68 = inttoptr i64 %67 to i32*
%69 = load volatile i32, i32* %68
%70 = or i32 %69, %65
store volatile i32 %70, i32* %68
br label %83
71: ; preds = %3
%72 = shl nuw i32 1, %1
%73 = add i32 %0, 328
%74 = zext i32 %73 to i64
%75 = inttoptr i64 %74 to i32*
%76 = load volatile i32, i32* %75
%77 = or i32 %76, %72
store volatile i32 %77, i32* %75
%78 = add i32 %0, 332
%79 = zext i32 %78 to i64
%80 = inttoptr i64 %79 to i32*
%81 = load volatile i32, i32* %80
%82 = or i32 %81, %72
store volatile i32 %82, i32* %80
br label %83
83: ; preds = %3, %71, %64, %57, %44, %32, %25, %18, %5
ret void
}