void enableGPIO0(void) {
  (*((volatile unsigned int *)(((0x44E00000) + 0x400) + (0x8)))) |= (0x2u);
  while ((0x2u) !=
         ((*((volatile unsigned int *)(((0x44E00000) + 0x400) + (0x8)))) &
          (0x00000003u)))
    ;
  (*((volatile unsigned int *)(((0x44E00000) + 0x400) + (0x8)))) |=
      (0x00040000u);
  while ((0x00040000u) !=
         ((*((volatile unsigned int *)(((0x44E00000) + 0x400) + (0x8)))) &
          (0x00040000u)))
    ;
  while (((0x0u) << (0x00000010u)) !=
         ((*((volatile unsigned int *)(((0x44E00000) + 0x400) + (0x4)))) &
          (0x00030000u)))
    ;
  while ((0x00000008u) !=
         ((*((volatile unsigned int *)(((0x44E00000) + 0x400) + (0x18)))) &
          (0x00000008u)))
    ;
  while (((0x0u) << (0x00000010u)) !=
         ((*((volatile unsigned int *)(((0x44E00000) + 0x400) + (0xc)))) &
          (0x00030000u)))
    ;
  while ((0x00000004u) !=
         ((*((volatile unsigned int *)(((0x44E00000) + 0x400) + (0x0)))) &
          (0x00000004u)))
    ;
  while ((0x00000004u) !=
         ((*((volatile unsigned int *)(((0x44E00000) + 0x400) + (0xcc)))) &
          (0x00000004u)))
    ;
  while (((0x0u) << (0x00000010u)) !=
         ((*((volatile unsigned int *)(((0x44E00000) + 0x400) + (0x8)))) &
          (0x00030000u)))
    ;
  while ((0x00000100u) !=
         ((*((volatile unsigned int *)(((0x44E00000) + 0x400) + (0x0)))) &
          (0x00000100u)))
    ;
}


x86 assembly (clang, -O0):
<enableGPIO0>:
push   %rbp
mov    %rsp,%rbp
mov    $0x44e00408,%eax
mov    (%rax),%ecx
or     $0x2,%ecx
mov    $0x44e00408,%eax
mov    %ecx,(%rax)
mov    $0x44e00408,%eax
mov    (%rax),%ecx
and    $0x3,%ecx
mov    $0x2,%eax
cmp    %ecx,%eax
je     1131 <enableGPIO0+0x31>
jmp    1115 <enableGPIO0+0x15>
mov    $0x44e00408,%eax
mov    (%rax),%ecx
or     $0x40000,%ecx
mov    $0x44e00408,%eax
mov    %ecx,(%rax)
mov    $0x44e00408,%eax
mov    (%rax),%ecx
and    $0x40000,%ecx
mov    $0x40000,%eax
cmp    %ecx,%eax
je     1164 <enableGPIO0+0x64>
jmp    1145 <enableGPIO0+0x45>
jmp    1169 <enableGPIO0+0x69>
mov    $0x44e00404,%eax
mov    (%rax),%ecx
and    $0x30000,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
je     1185 <enableGPIO0+0x85>
jmp    1169 <enableGPIO0+0x69>
jmp    118a <enableGPIO0+0x8a>
mov    $0x44e00418,%eax
mov    (%rax),%ecx
and    $0x8,%ecx
mov    $0x8,%eax
cmp    %ecx,%eax
je     11a6 <enableGPIO0+0xa6>
jmp    118a <enableGPIO0+0x8a>
jmp    11ab <enableGPIO0+0xab>
mov    $0x44e0040c,%eax
mov    (%rax),%ecx
and    $0x30000,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
je     11c7 <enableGPIO0+0xc7>
jmp    11ab <enableGPIO0+0xab>
jmp    11cc <enableGPIO0+0xcc>
mov    $0x44e00400,%eax
mov    (%rax),%ecx
and    $0x4,%ecx
mov    $0x4,%eax
cmp    %ecx,%eax
je     11e8 <enableGPIO0+0xe8>
jmp    11cc <enableGPIO0+0xcc>
jmp    11ed <enableGPIO0+0xed>
mov    $0x44e004cc,%eax
mov    (%rax),%ecx
and    $0x4,%ecx
mov    $0x4,%eax
cmp    %ecx,%eax
je     1209 <enableGPIO0+0x109>
jmp    11ed <enableGPIO0+0xed>
jmp    120e <enableGPIO0+0x10e>
mov    $0x44e00408,%eax
mov    (%rax),%ecx
and    $0x30000,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
je     122a <enableGPIO0+0x12a>
jmp    120e <enableGPIO0+0x10e>
jmp    122f <enableGPIO0+0x12f>
mov    $0x44e00400,%eax
mov    (%rax),%ecx
and    $0x100,%ecx
mov    $0x100,%eax
cmp    %ecx,%eax
je     124e <enableGPIO0+0x14e>
jmp    122f <enableGPIO0+0x12f>
pop    %rbp
ret

x86 assembly (clang, -O2):
<enableGPIO0>:
orl    $0x2,0x44e00408
02
nopl   0x0(%rax,%rax,1)
mov    0x44e00408,%eax
and    $0x3,%eax
cmp    $0x2,%eax
jne    1110 <enableGPIO0+0x10>
orl    $0x40000,0x44e00408
nopw   0x0(%rax,%rax,1)
testl  $0x40000,0x44e00408
je     1130 <enableGPIO0+0x30>
nopl   (%rax)
testl  $0x30000,0x44e00404
jne    1140 <enableGPIO0+0x40>
nopl   (%rax)
testl  $0x8,0x44e00418
je     1150 <enableGPIO0+0x50>
nopl   (%rax)
testl  $0x30000,0x44e0040c
jne    1160 <enableGPIO0+0x60>
nopl   (%rax)
testl  $0x4,0x44e00400
je     1170 <enableGPIO0+0x70>
nopl   (%rax)
testl  $0x4,0x44e004cc
je     1180 <enableGPIO0+0x80>
nopl   (%rax)
testl  $0x30000,0x44e00408
jne    1190 <enableGPIO0+0x90>
nopl   (%rax)
testl  $0x100,0x44e00400
je     11a0 <enableGPIO0+0xa0>
ret

LLVM IR (-O0):
define void @enableGPIO0() {
%1 = load volatile i32, i32* inttoptr (i64 1155531784 to i32*)
%2 = or i32 %1, 2
store volatile i32 %2, i32* inttoptr (i64 1155531784 to i32*)
br label %3
3: ; preds = %7, %0
%4 = load volatile i32, i32* inttoptr (i64 1155531784 to i32*)
%5 = and i32 %4, 3
%6 = icmp ne i32 2, %5
br i1 %6, label %7, label %8
7: ; preds = %3
br label %3
8: ; preds = %3
%9 = load volatile i32, i32* inttoptr (i64 1155531784 to i32*)
%10 = or i32 %9, 262144
store volatile i32 %10, i32* inttoptr (i64 1155531784 to i32*)
br label %11
11: ; preds = %15, %8
%12 = load volatile i32, i32* inttoptr (i64 1155531784 to i32*)
%13 = and i32 %12, 262144
%14 = icmp ne i32 262144, %13
br i1 %14, label %15, label %16
15: ; preds = %11
br label %11
16: ; preds = %11
br label %17
17: ; preds = %21, %16
%18 = load volatile i32, i32* inttoptr (i64 1155531780 to i32*)
%19 = and i32 %18, 196608
%20 = icmp ne i32 0, %19
br i1 %20, label %21, label %22
21: ; preds = %17
br label %17
22: ; preds = %17
br label %23
23: ; preds = %27, %22
%24 = load volatile i32, i32* inttoptr (i64 1155531800 to i32*)
%25 = and i32 %24, 8
%26 = icmp ne i32 8, %25
br i1 %26, label %27, label %28
27: ; preds = %23
br label %23
28: ; preds = %23
br label %29
29: ; preds = %33, %28
%30 = load volatile i32, i32* inttoptr (i64 1155531788 to i32*)
%31 = and i32 %30, 196608
%32 = icmp ne i32 0, %31
br i1 %32, label %33, label %34
33: ; preds = %29
br label %29
34: ; preds = %29
br label %35
35: ; preds = %39, %34
%36 = load volatile i32, i32* inttoptr (i64 1155531776 to i32*)
%37 = and i32 %36, 4
%38 = icmp ne i32 4, %37
br i1 %38, label %39, label %40
39: ; preds = %35
br label %35
40: ; preds = %35
br label %41
41: ; preds = %45, %40
%42 = load volatile i32, i32* inttoptr (i64 1155531980 to i32*)
%43 = and i32 %42, 4
%44 = icmp ne i32 4, %43
br i1 %44, label %45, label %46
45: ; preds = %41
br label %41
46: ; preds = %41
br label %47
47: ; preds = %51, %46
%48 = load volatile i32, i32* inttoptr (i64 1155531784 to i32*)
%49 = and i32 %48, 196608
%50 = icmp ne i32 0, %49
br i1 %50, label %51, label %52
51: ; preds = %47
br label %47
52: ; preds = %47
br label %53
53: ; preds = %57, %52
%54 = load volatile i32, i32* inttoptr (i64 1155531776 to i32*)
%55 = and i32 %54, 256
%56 = icmp ne i32 256, %55
br i1 %56, label %57, label %58
57: ; preds = %53
br label %53
58: ; preds = %53
ret void
}

LLVM IR (-O2):
define void @enableGPIO0() {
%1 = load volatile i32, i32* inttoptr (i64 1155531784 to i32*)
%2 = or i32 %1, 2
store volatile i32 %2, i32* inttoptr (i64 1155531784 to i32*)
br label %3
3: ; preds = %3, %0
%4 = load volatile i32, i32* inttoptr (i64 1155531784 to i32*)
%5 = and i32 %4, 3
%6 = icmp eq i32 %5, 2
br i1 %6, label %7, label %3
7: ; preds = %3
%8 = load volatile i32, i32* inttoptr (i64 1155531784 to i32*)
%9 = or i32 %8, 262144
store volatile i32 %9, i32* inttoptr (i64 1155531784 to i32*)
br label %10
10: ; preds = %10, %7
%11 = load volatile i32, i32* inttoptr (i64 1155531784 to i32*)
%12 = and i32 %11, 262144
%13 = icmp eq i32 %12, 0
br i1 %13, label %10, label %14
14: ; preds = %10, %14
%15 = load volatile i32, i32* inttoptr (i64 1155531780 to i32*)
%16 = and i32 %15, 196608
%17 = icmp eq i32 %16, 0
br i1 %17, label %18, label %14
18: ; preds = %14, %18
%19 = load volatile i32, i32* inttoptr (i64 1155531800 to i32*)
%20 = and i32 %19, 8
%21 = icmp eq i32 %20, 0
br i1 %21, label %18, label %22
22: ; preds = %18, %22
%23 = load volatile i32, i32* inttoptr (i64 1155531788 to i32*)
%24 = and i32 %23, 196608
%25 = icmp eq i32 %24, 0
br i1 %25, label %26, label %22
26: ; preds = %22, %26
%27 = load volatile i32, i32* inttoptr (i64 1155531776 to i32*)
%28 = and i32 %27, 4
%29 = icmp eq i32 %28, 0
br i1 %29, label %26, label %30
30: ; preds = %26, %30
%31 = load volatile i32, i32* inttoptr (i64 1155531980 to i32*)
%32 = and i32 %31, 4
%33 = icmp eq i32 %32, 0
br i1 %33, label %30, label %34
34: ; preds = %30, %34
%35 = load volatile i32, i32* inttoptr (i64 1155531784 to i32*)
%36 = and i32 %35, 196608
%37 = icmp eq i32 %36, 0
br i1 %37, label %38, label %34
38: ; preds = %34, %38
%39 = load volatile i32, i32* inttoptr (i64 1155531776 to i32*)
%40 = and i32 %39, 256
%41 = icmp eq i32 %40, 0
br i1 %41, label %38, label %42
42: ; preds = %38
ret void
}