void xIntPendSet(unsigned long ulInterrupt) {
  ;
  if (ulInterrupt == 2) {
    (*((volatile unsigned long *)(0xE000ED04))) |= 0x80000000;
  } else if (ulInterrupt == 14) {
    (*((volatile unsigned long *)(0xE000ED04))) |= 0x10000000;
  } else if (ulInterrupt == 15) {
    (*((volatile unsigned long *)(0xE000ED04))) |= 0x04000000;
  } else if (((ulInterrupt & 0xFF) >= 16) && ((ulInterrupt & 0xFF) < 84)) {
    (*((volatile unsigned long *)(0xE000E200 +
                                  ((ulInterrupt & 0xFF) / 32) * 4))) =
        1 << ((ulInterrupt & 0xFF) % 32);
  } else if ((((ulInterrupt >> 8) & 0xFF) >= 16) &&
             (((ulInterrupt >> 8) & 0xFF) <= 84)) {
    (*((volatile unsigned long *)(0xE000E200 +
                                  (((ulInterrupt >> 8) & 0xFF) / 32) * 4))) =
        1 << (((ulInterrupt >> 8) & 0xFF) % 32);
  } else if (ulInterrupt == 0x08290000) {
    (*((volatile unsigned long *)(0xE000E200))) = 1 << (40 - 16);
    (*((volatile unsigned long *)(0xE000E200))) = 1 << (41 - 16);
    (*((volatile unsigned long *)(0xE000E200))) = 1 << (42 - 16);
    (*((volatile unsigned long *)(0xE000E200))) = 1 << (43 - 16);
  } else if (ulInterrupt == 0x11030000) {
    (*((volatile unsigned long *)(0xE000E200))) = 1 << (22 - 16);
    (*((volatile unsigned long *)(0xE000E200))) = 1 << (23 - 16);
    (*((volatile unsigned long *)(0xE000E200))) = 1 << (24 - 16);
    (*((volatile unsigned long *)(0xE000E200))) = 1 << (25 - 16);
    (*((volatile unsigned long *)(0xE000E200))) = 1 << (26 - 16);
    (*((volatile unsigned long *)(0xE000E200))) = 1 << (39 - 16);
    (*((volatile unsigned long *)(0xE000E204))) = 1 << (56 - 48);
  } else if (ulInterrupt == 0x09110000) {
    (*((volatile unsigned long *)(0xE000E200))) = 1 << (27 - 16);
    (*((volatile unsigned long *)(0xE000E200))) = 1 << (28 - 16);
    (*((volatile unsigned long *)(0xE000E200))) = 1 << (29 - 16);
    (*((volatile unsigned long *)(0xE000E200))) = 1 << (30 - 16);
    (*((volatile unsigned long *)(0xE000E200))) = 1 << (31 - 16);
    (*((volatile unsigned long *)(0xE000E200))) = 1 << (32 - 16);
    (*((volatile unsigned long *)(0xE000E200))) = 1 << (33 - 16);
  } else if (ulInterrupt == 0x10210000) {
    (*((volatile unsigned long *)(0xE000E204))) = 1 << (72 - 48);
    (*((volatile unsigned long *)(0xE000E204))) = 1 << (73 - 48);
    (*((volatile unsigned long *)(0xE000E204))) = 1 << (74 - 48);
    (*((volatile unsigned long *)(0xE000E204))) = 1 << (75 - 48);
    (*((volatile unsigned long *)(0xE000E204))) = 1 << (76 - 48);
  }
}


x86 assembly (clang, -O0):
<xIntPendSet>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
cmpq   $0x2,-0x8(%rbp)
jne    1135 <xIntPendSet+0x35>
mov    $0xe000ed04,%eax
mov    (%rax),%rcx
movabs $0x80000000,%rax
or     %rax,%rcx
mov    $0xe000ed04,%eax
mov    %rcx,(%rax)
jmp    13e8 <xIntPendSet+0x2e8>
cmpq   $0xe,-0x8(%rbp)
jne    115c <xIntPendSet+0x5c>
mov    $0xe000ed04,%eax
mov    (%rax),%rcx
or     $0x10000000,%rcx
mov    $0xe000ed04,%eax
mov    %rcx,(%rax)
jmp    13e3 <xIntPendSet+0x2e3>
cmpq   $0xf,-0x8(%rbp)
jne    1183 <xIntPendSet+0x83>
mov    $0xe000ed04,%eax
mov    (%rax),%rcx
or     $0x4000000,%rcx
mov    $0xe000ed04,%eax
mov    %rcx,(%rax)
jmp    13de <xIntPendSet+0x2de>
mov    -0x8(%rbp),%rax
and    $0xff,%rax
cmp    $0x10,%rax
jb     11ec <xIntPendSet+0xec>
mov    -0x8(%rbp),%rax
and    $0xff,%rax
cmp    $0x54,%rax
jae    11ec <xIntPendSet+0xec>
mov    -0x8(%rbp),%rax
and    $0xff,%rax
and    $0x1f,%rax
mov    %eax,%ecx
mov    $0x1,%eax
shl    %cl,%eax
movslq %eax,%rcx
mov    -0x8(%rbp),%rax
and    $0xff,%rax
shr    $0x5,%rax
shl    $0x2,%rax
movabs $0xe000e200,%rdx
add    %rdx,%rax
mov    %rcx,(%rax)
jmp    13d9 <xIntPendSet+0x2d9>
mov    -0x8(%rbp),%rax
shr    $0x8,%rax
and    $0xff,%rax
cmp    $0x10,%rax
jb     1265 <xIntPendSet+0x165>
mov    -0x8(%rbp),%rax
shr    $0x8,%rax
and    $0xff,%rax
cmp    $0x54,%rax
ja     1265 <xIntPendSet+0x165>
mov    -0x8(%rbp),%rax
shr    $0x8,%rax
and    $0xff,%rax
and    $0x1f,%rax
mov    %eax,%ecx
mov    $0x1,%eax
shl    %cl,%eax
movslq %eax,%rcx
mov    -0x8(%rbp),%rax
shr    $0x8,%rax
and    $0xff,%rax
shr    $0x5,%rax
shl    $0x2,%rax
movabs $0xe000e200,%rdx
add    %rdx,%rax
mov    %rcx,(%rax)
jmp    13d4 <xIntPendSet+0x2d4>
cmpq   $0x8290000,-0x8(%rbp)
08
jne    12a8 <xIntPendSet+0x1a8>
mov    $0xe000e200,%eax
movq   $0x1000000,(%rax)
mov    $0xe000e200,%eax
movq   $0x2000000,(%rax)
mov    $0xe000e200,%eax
movq   $0x4000000,(%rax)
mov    $0xe000e200,%eax
movq   $0x8000000,(%rax)
jmp    13cf <xIntPendSet+0x2cf>
cmpq   $0x11030000,-0x8(%rbp)
11
jne    130f <xIntPendSet+0x20f>
mov    $0xe000e200,%eax
movq   $0x40,(%rax)
mov    $0xe000e200,%eax
movq   $0x80,(%rax)
mov    $0xe000e200,%eax
movq   $0x100,(%rax)
mov    $0xe000e200,%eax
movq   $0x200,(%rax)
mov    $0xe000e200,%eax
movq   $0x400,(%rax)
mov    $0xe000e200,%eax
movq   $0x800000,(%rax)
mov    $0xe000e204,%eax
movq   $0x100,(%rax)
jmp    13ca <xIntPendSet+0x2ca>
cmpq   $0x9110000,-0x8(%rbp)
09
jne    1376 <xIntPendSet+0x276>
mov    $0xe000e200,%eax
movq   $0x800,(%rax)
mov    $0xe000e200,%eax
movq   $0x1000,(%rax)
mov    $0xe000e200,%eax
movq   $0x2000,(%rax)
mov    $0xe000e200,%eax
movq   $0x4000,(%rax)
mov    $0xe000e200,%eax
movq   $0x8000,(%rax)
mov    $0xe000e200,%eax
movq   $0x10000,(%rax)
mov    $0xe000e200,%eax
movq   $0x20000,(%rax)
jmp    13c5 <xIntPendSet+0x2c5>
cmpq   $0x10210000,-0x8(%rbp)
10
jne    13c0 <xIntPendSet+0x2c0>
mov    $0xe000e204,%eax
movq   $0x1000000,(%rax)
mov    $0xe000e204,%eax
movq   $0x2000000,(%rax)
mov    $0xe000e204,%eax
movq   $0x4000000,(%rax)
mov    $0xe000e204,%eax
movq   $0x8000000,(%rax)
mov    $0xe000e204,%eax
movq   $0x10000000,(%rax)
jmp    13c5 <xIntPendSet+0x2c5>
jmp    13ca <xIntPendSet+0x2ca>
jmp    13cf <xIntPendSet+0x2cf>
jmp    13d4 <xIntPendSet+0x2d4>
jmp    13d9 <xIntPendSet+0x2d9>
jmp    13de <xIntPendSet+0x2de>
jmp    13e3 <xIntPendSet+0x2e3>
jmp    13e8 <xIntPendSet+0x2e8>
pop    %rbp
ret

x86 assembly (clang, -O2):
<xIntPendSet>:
cmp    $0xf,%rdi
je     1126 <xIntPendSet+0x26>
cmp    $0xe,%rdi
je     1137 <xIntPendSet+0x37>
cmp    $0x2,%rdi
jne    1148 <xIntPendSet+0x48>
mov    $0xe000e200,%eax
lea    -0x6000e200(%rax),%rcx
or     %rcx,0xb04(%rax)
ret
mov    $0xe000e200,%eax
orq    $0x4000000,0xb04(%rax)
ret
mov    $0xe000e200,%eax
orq    $0x10000000,0xb04(%rax)
ret
movzbl %dil,%eax
add    $0xfffffffffffffff0,%rax
cmp    $0x43,%rax
ja     1167 <xIntPendSet+0x67>
mov    $0x1,%eax
mov    %edi,%ecx
shl    %cl,%eax
cltq
shr    $0x3,%rdi
jmp    1188 <xIntPendSet+0x88>
mov    %rdi,%rcx
shr    $0x8,%rcx
movzbl %cl,%eax
add    $0xfffffffffffffff0,%rax
cmp    $0x44,%rax
ja     1195 <xIntPendSet+0x95>
mov    $0x1,%eax
shl    %cl,%eax
cltq
shr    $0xb,%rdi
and    $0x1c,%edi
mov    $0xe000e200,%ecx
mov    %rax,(%rdi,%rcx,1)
ret
cmp    $0x1020ffff,%rdi
jg     11ef <xIntPendSet+0xef>
cmp    $0x8290000,%rdi
je     123d <xIntPendSet+0x13d>
cmp    $0x9110000,%rdi
jne    128c <xIntPendSet+0x18c>
mov    $0xe000e200,%eax
movq   $0x800,(%rax)
movq   $0x1000,(%rax)
movq   $0x2000,(%rax)
movq   $0x4000,(%rax)
movq   $0x8000,(%rax)
movq   $0x10000,(%rax)
movq   $0x20000,(%rax)
ret
cmp    $0x10210000,%rdi
je     125f <xIntPendSet+0x15f>
cmp    $0x11030000,%rdi
jne    128c <xIntPendSet+0x18c>
mov    $0xe000e200,%eax
movq   $0x40,(%rax)
movq   $0x80,(%rax)
movq   $0x100,(%rax)
movq   $0x200,(%rax)
movq   $0x400,(%rax)
movq   $0x800000,(%rax)
movq   $0x100,0x4(%rax)
ret
mov    $0xe000e200,%eax
movq   $0x1000000,(%rax)
movq   $0x2000000,(%rax)
movq   $0x4000000,(%rax)
movq   $0x8000000,(%rax)
ret
mov    $0xe000e200,%eax
movq   $0x1000000,0x4(%rax)
01
movq   $0x2000000,0x4(%rax)
02
movq   $0x4000000,0x4(%rax)
04
movq   $0x8000000,0x4(%rax)
08
movq   $0x10000000,0x4(%rax)
10
ret

LLVM IR (-O0):
define void @xIntPendSet(i64 %0) {
%2 = alloca i64
store i64 %0, i64* %2
%3 = load i64, i64* %2
%4 = icmp eq i64 %3, 2
br i1 %4, label %5, label %8
5: ; preds = %1
%6 = load volatile i64, i64* inttoptr (i64 3758157060 to i64*)
%7 = or i64 %6, 2147483648
store volatile i64 %7, i64* inttoptr (i64 3758157060 to i64*)
br label %90
8: ; preds = %1
%9 = load i64, i64* %2
%10 = icmp eq i64 %9, 14
br i1 %10, label %11, label %14
11: ; preds = %8
%12 = load volatile i64, i64* inttoptr (i64 3758157060 to i64*)
%13 = or i64 %12, 268435456
store volatile i64 %13, i64* inttoptr (i64 3758157060 to i64*)
br label %89
14: ; preds = %8
%15 = load i64, i64* %2
%16 = icmp eq i64 %15, 15
br i1 %16, label %17, label %20
17: ; preds = %14
%18 = load volatile i64, i64* inttoptr (i64 3758157060 to i64*)
%19 = or i64 %18, 67108864
store volatile i64 %19, i64* inttoptr (i64 3758157060 to i64*)
br label %88
20: ; preds = %14
%21 = load i64, i64* %2
%22 = and i64 %21, 255
%23 = icmp uge i64 %22, 16
br i1 %23, label %24, label %41
24: ; preds = %20
%25 = load i64, i64* %2
%26 = and i64 %25, 255
%27 = icmp ult i64 %26, 84
br i1 %27, label %28, label %41
28: ; preds = %24
%29 = load i64, i64* %2
%30 = and i64 %29, 255
%31 = urem i64 %30, 32
%32 = trunc i64 %31 to i32
%33 = shl i32 1, %32
%34 = sext i32 %33 to i64
%35 = load i64, i64* %2
%36 = and i64 %35, 255
%37 = udiv i64 %36, 32
%38 = mul i64 %37, 4
%39 = add i64 3758154240, %38
%40 = inttoptr i64 %39 to i64*
store volatile i64 %34, i64* %40
br label %87
41: ; preds = %24, %20
%42 = load i64, i64* %2
%43 = lshr i64 %42, 8
%44 = and i64 %43, 255
%45 = icmp uge i64 %44, 16
br i1 %45, label %46, label %66
46: ; preds = %41
%47 = load i64, i64* %2
%48 = lshr i64 %47, 8
%49 = and i64 %48, 255
%50 = icmp ule i64 %49, 84
br i1 %50, label %51, label %66
51: ; preds = %46
%52 = load i64, i64* %2
%53 = lshr i64 %52, 8
%54 = and i64 %53, 255
%55 = urem i64 %54, 32
%56 = trunc i64 %55 to i32
%57 = shl i32 1, %56
%58 = sext i32 %57 to i64
%59 = load i64, i64* %2
%60 = lshr i64 %59, 8
%61 = and i64 %60, 255
%62 = udiv i64 %61, 32
%63 = mul i64 %62, 4
%64 = add i64 3758154240, %63
%65 = inttoptr i64 %64 to i64*
store volatile i64 %58, i64* %65
br label %86
66: ; preds = %46, %41
%67 = load i64, i64* %2
%68 = icmp eq i64 %67, 136904704
br i1 %68, label %69, label %70
69: ; preds = %66
store volatile i64 16777216, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 33554432, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 67108864, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 134217728, i64* inttoptr (i64 3758154240 to i64*)
br label %85
70: ; preds = %66
%71 = load i64, i64* %2
%72 = icmp eq i64 %71, 285409280
br i1 %72, label %73, label %74
73: ; preds = %70
store volatile i64 64, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 128, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 256, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 512, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 1024, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 8388608, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 256, i64* inttoptr (i64 3758154244 to i64*)
br label %84
74: ; preds = %70
%75 = load i64, i64* %2
%76 = icmp eq i64 %75, 152109056
br i1 %76, label %77, label %78
77: ; preds = %74
store volatile i64 2048, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 4096, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 8192, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 16384, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 32768, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 65536, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 131072, i64* inttoptr (i64 3758154240 to i64*)
br label %83
78: ; preds = %74
%79 = load i64, i64* %2
%80 = icmp eq i64 %79, 270598144
br i1 %80, label %81, label %82
81: ; preds = %78
store volatile i64 16777216, i64* inttoptr (i64 3758154244 to i64*)
store volatile i64 33554432, i64* inttoptr (i64 3758154244 to i64*)
store volatile i64 67108864, i64* inttoptr (i64 3758154244 to i64*)
store volatile i64 134217728, i64* inttoptr (i64 3758154244 to i64*)
store volatile i64 268435456, i64* inttoptr (i64 3758154244 to i64*)
br label %82
82: ; preds = %81, %78
br label %83
83: ; preds = %82, %77
br label %84
84: ; preds = %83, %73
br label %85
85: ; preds = %84, %69
br label %86
86: ; preds = %85, %51
br label %87
87: ; preds = %86, %28
br label %88
88: ; preds = %87, %17
br label %89
89: ; preds = %88, %11
br label %90
90: ; preds = %89, %5
ret void
}

LLVM IR (-O2):
define void @xIntPendSet(i64 %0) {
switch i64 %0, label %11 [
i64 2, label %2
i64 14, label %5
i64 15, label %8
]
2: ; preds = %1
%3 = load volatile i64, i64* inttoptr (i64 3758157060 to i64*)
%4 = or i64 %3, 2147483648
store volatile i64 %4, i64* inttoptr (i64 3758157060 to i64*)
br label %43
5: ; preds = %1
%6 = load volatile i64, i64* inttoptr (i64 3758157060 to i64*)
%7 = or i64 %6, 268435456
store volatile i64 %7, i64* inttoptr (i64 3758157060 to i64*)
br label %43
8: ; preds = %1
%9 = load volatile i64, i64* inttoptr (i64 3758157060 to i64*)
%10 = or i64 %9, 67108864
store volatile i64 %10, i64* inttoptr (i64 3758157060 to i64*)
br label %43
11: ; preds = %1
%12 = and i64 %0, 255
%13 = add nsw i64 %12, -16
%14 = icmp ult i64 %13, 68
br i1 %14, label %15, label %24
15: ; preds = %11
%16 = trunc i64 %0 to i32
%17 = and i32 %16, 31
%18 = shl nuw i32 1, %17
%19 = sext i32 %18 to i64
%20 = lshr i64 %0, 3
%21 = and i64 %20, 28
%22 = or i64 %21, 3758154240
%23 = inttoptr i64 %22 to i64*
store volatile i64 %19, i64* %23
br label %43
24: ; preds = %11
%25 = lshr i64 %0, 8
%26 = and i64 %25, 255
%27 = add nsw i64 %26, -16
%28 = icmp ult i64 %27, 69
br i1 %28, label %29, label %38
29: ; preds = %24
%30 = trunc i64 %25 to i32
%31 = and i32 %30, 31
%32 = shl nuw i32 1, %31
%33 = sext i32 %32 to i64
%34 = lshr i64 %0, 11
%35 = and i64 %34, 28
%36 = or i64 %35, 3758154240
%37 = inttoptr i64 %36 to i64*
store volatile i64 %33, i64* %37
br label %43
38: ; preds = %24
switch i64 %0, label %43 [
i64 136904704, label %39
i64 285409280, label %40
i64 152109056, label %41
i64 270598144, label %42
]
39: ; preds = %38
store volatile i64 16777216, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 33554432, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 67108864, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 134217728, i64* inttoptr (i64 3758154240 to i64*)
br label %43
40: ; preds = %38
store volatile i64 64, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 128, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 256, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 512, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 1024, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 8388608, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 256, i64* inttoptr (i64 3758154244 to i64*)
br label %43
41: ; preds = %38
store volatile i64 2048, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 4096, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 8192, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 16384, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 32768, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 65536, i64* inttoptr (i64 3758154240 to i64*)
store volatile i64 131072, i64* inttoptr (i64 3758154240 to i64*)
br label %43
42: ; preds = %38
store volatile i64 16777216, i64* inttoptr (i64 3758154244 to i64*)
store volatile i64 33554432, i64* inttoptr (i64 3758154244 to i64*)
store volatile i64 67108864, i64* inttoptr (i64 3758154244 to i64*)
store volatile i64 134217728, i64* inttoptr (i64 3758154244 to i64*)
store volatile i64 268435456, i64* inttoptr (i64 3758154244 to i64*)
br label %43
43: ; preds = %38, %5, %15, %39, %41, %42, %40, %29, %8, %2
ret void
}