#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef int uint32_t;

/* Variables and functions */
void setupGPIO() {
  *((volatile uint32_t *)(0x400c8000 + 0x044)) |= (1 << 13);
  *((volatile uint32_t *)(0x40006000 + 0x00)) = 2;
  *((volatile uint32_t *)(0x40006000 + 0x08)) = 0x55555555;
  *((volatile uint32_t *)(0x40006000 + 0x0c)) = 0x00;
  *((volatile uint32_t *)(0x40006048 + 0x04)) = 0x33333333;
  *((volatile uint32_t *)(0x40006048 + 0x0c)) = 0xff;
  *((volatile uint32_t *)(0x40006000 + 0x100)) = 0x22222222;
  *((volatile uint32_t *)(0x40006000 + 0x10c)) = 0xff;
  *((volatile uint32_t *)(0x40006000 + 0x108)) = 0xff;
  *((volatile uint32_t *)(0x40006000 + 0x110)) = 0xff;
}


x86 assembly (clang, -O0):
<setupGPIO>:
push   %rbp
mov    %rsp,%rbp
mov    $0x400c8044,%eax
mov    (%rax),%ecx
or     $0x2000,%ecx
mov    $0x400c8044,%eax
mov    %ecx,(%rax)
mov    $0x40006000,%eax
movl   $0x2,(%rax)
mov    $0x40006008,%eax
movl   $0x55555555,(%rax)
mov    $0x4000600c,%eax
movl   $0x0,(%rax)
mov    $0x4000604c,%eax
movl   $0x33333333,(%rax)
mov    $0x40006054,%eax
movl   $0xff,(%rax)
mov    $0x40006100,%eax
movl   $0x22222222,(%rax)
mov    $0x4000610c,%eax
movl   $0xff,(%rax)
mov    $0x40006108,%eax
movl   $0xff,(%rax)
mov    $0x40006110,%eax
movl   $0xff,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<setupGPIO>:
orl    $0x2000,0x400c8044
movl   $0x2,0x40006000
movl   $0x55555555,0x40006008
55 55 55 55
movl   $0x0,0x4000600c
movl   $0x33333333,0x4000604c
33 33 33 33
movl   $0xff,0x40006054
movl   $0x22222222,0x40006100
22 22 22 22
movl   $0xff,0x4000610c
movl   $0xff,0x40006108
movl   $0xff,0x40006110
ret

LLVM IR (-O0):
define void @setupGPIO() {
%1 = load volatile i32, i32* inttoptr (i64 1074561092 to i32*)
%2 = or i32 %1, 8192
store volatile i32 %2, i32* inttoptr (i64 1074561092 to i32*)
store volatile i32 2, i32* inttoptr (i64 1073766400 to i32*)
store volatile i32 1431655765, i32* inttoptr (i64 1073766408 to i32*)
store volatile i32 0, i32* inttoptr (i64 1073766412 to i32*)
store volatile i32 858993459, i32* inttoptr (i64 1073766476 to i32*)
store volatile i32 255, i32* inttoptr (i64 1073766484 to i32*)
store volatile i32 572662306, i32* inttoptr (i64 1073766656 to i32*)
store volatile i32 255, i32* inttoptr (i64 1073766668 to i32*)
store volatile i32 255, i32* inttoptr (i64 1073766664 to i32*)
store volatile i32 255, i32* inttoptr (i64 1073766672 to i32*)
ret void
}

LLVM IR (-O2):
define void @setupGPIO() {
%1 = load volatile i32, i32* inttoptr (i64 1074561092 to i32*)
%2 = or i32 %1, 8192
store volatile i32 %2, i32* inttoptr (i64 1074561092 to i32*)
store volatile i32 2, i32* inttoptr (i64 1073766400 to i32*)
store volatile i32 1431655765, i32* inttoptr (i64 1073766408 to i32*)
store volatile i32 0, i32* inttoptr (i64 1073766412 to i32*)
store volatile i32 858993459, i32* inttoptr (i64 1073766476 to i32*)
store volatile i32 255, i32* inttoptr (i64 1073766484 to i32*)
store volatile i32 572662306, i32* inttoptr (i64 1073766656 to i32*)
store volatile i32 255, i32* inttoptr (i64 1073766668 to i32*)
store volatile i32 255, i32* inttoptr (i64 1073766664 to i32*)
store volatile i32 255, i32* inttoptr (i64 1073766672 to i32*)
ret void
}