#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 */

/* Variables and functions */
int /*<<< orphan*/ ms_sleep(int);
void ledInit() {
  (*(volatile unsigned long *)(0x3FFFC000 + 0x60)) |= 1 << 26;
  (*(volatile unsigned long *)(0x3FFFC000 + 0x80)) |= 1 << 1;
  (*(volatile unsigned long *)(0x3FFFC000 + 0x80)) |= 1 << 2;
  (*(volatile unsigned long *)(0x3FFFC000 + 0x80)) |= 1 << 3;
  (*(volatile unsigned long *)(0x3FFFC000 + 0x80)) |= 1 << 4;
  (*(volatile unsigned long *)(0x3FFFC000 + 0x80)) |= 1 << 5;
  (*(volatile unsigned long *)(0x3FFFC000 + 0x80)) |= 1 << 6;
  (*(volatile unsigned long *)(0x3FFFC000 + 0x80)) |= 1 << 7;
  (*(volatile unsigned long *)(0x3FFFC000 + 0x74)) &= ~(1 << 26);
  (*(volatile unsigned long *)(0x3FFFC000 + 0x94)) &= ~(1 << 1);
  (*(volatile unsigned long *)(0x3FFFC000 + 0x94)) &= ~(1 << 2);
  (*(volatile unsigned long *)(0x3FFFC000 + 0x94)) &= ~(1 << 3);
  (*(volatile unsigned long *)(0x3FFFC000 + 0x94)) &= ~(1 << 4);
  (*(volatile unsigned long *)(0x3FFFC000 + 0x94)) &= ~(1 << 5);
  (*(volatile unsigned long *)(0x3FFFC000 + 0x94)) &= ~(1 << 6);
  (*(volatile unsigned long *)(0x3FFFC000 + 0x94)) &= ~(1 << 7);
  ms_sleep(1000);
  (*(volatile unsigned long *)(0x3FFFC000 + 0x74)) |= 1 << 26;
  (*(volatile unsigned long *)(0x3FFFC000 + 0x94)) |=
      (1 << 1) + (1 << 2) + (1 << 3) + (1 << 4) + (1 << 5) + (1 << 6) +
      (1 << 7);
}


x86 assembly (clang, -O0):
<ledInit>:
push   %rbp
mov    %rsp,%rbp
mov    $0x3fffc060,%eax
mov    (%rax),%rcx
or     $0x4000000,%rcx
mov    $0x3fffc060,%eax
mov    %rcx,(%rax)
mov    $0x3fffc080,%eax
mov    (%rax),%rcx
or     $0x2,%rcx
mov    $0x3fffc080,%eax
mov    %rcx,(%rax)
mov    $0x3fffc080,%eax
mov    (%rax),%rcx
or     $0x4,%rcx
mov    $0x3fffc080,%eax
mov    %rcx,(%rax)
mov    $0x3fffc080,%eax
mov    (%rax),%rcx
or     $0x8,%rcx
mov    $0x3fffc080,%eax
mov    %rcx,(%rax)
mov    $0x3fffc080,%eax
mov    (%rax),%rcx
or     $0x10,%rcx
mov    $0x3fffc080,%eax
mov    %rcx,(%rax)
mov    $0x3fffc080,%eax
mov    (%rax),%rcx
or     $0x20,%rcx
mov    $0x3fffc080,%eax
mov    %rcx,(%rax)
mov    $0x3fffc080,%eax
mov    (%rax),%rcx
or     $0x40,%rcx
mov    $0x3fffc080,%eax
mov    %rcx,(%rax)
mov    $0x3fffc080,%eax
mov    (%rax),%rcx
or     $0x80,%rcx
mov    $0x3fffc080,%eax
mov    %rcx,(%rax)
mov    $0x3fffc074,%eax
mov    (%rax),%rcx
and    $0xfffffffffbffffff,%rcx
mov    $0x3fffc074,%eax
mov    %rcx,(%rax)
mov    $0x3fffc094,%eax
mov    (%rax),%rcx
and    $0xfffffffffffffffd,%rcx
mov    $0x3fffc094,%eax
mov    %rcx,(%rax)
mov    $0x3fffc094,%eax
mov    (%rax),%rcx
and    $0xfffffffffffffffb,%rcx
mov    $0x3fffc094,%eax
mov    %rcx,(%rax)
mov    $0x3fffc094,%eax
mov    (%rax),%rcx
and    $0xfffffffffffffff7,%rcx
mov    $0x3fffc094,%eax
mov    %rcx,(%rax)
mov    $0x3fffc094,%eax
mov    (%rax),%rcx
and    $0xffffffffffffffef,%rcx
mov    $0x3fffc094,%eax
mov    %rcx,(%rax)
mov    $0x3fffc094,%eax
mov    (%rax),%rcx
and    $0xffffffffffffffdf,%rcx
mov    $0x3fffc094,%eax
mov    %rcx,(%rax)
mov    $0x3fffc094,%eax
mov    (%rax),%rcx
and    $0xffffffffffffffbf,%rcx
mov    $0x3fffc094,%eax
mov    %rcx,(%rax)
mov    $0x3fffc094,%eax
mov    (%rax),%rcx
and    $0xffffffffffffff7f,%rcx
mov    $0x3fffc094,%eax
mov    %rcx,(%rax)
mov    $0x3e8,%edi
call   1030 <ms_sleep@plt>
mov    $0x3fffc074,%eax
mov    (%rax),%rcx
or     $0x4000000,%rcx
mov    $0x3fffc074,%eax
mov    %rcx,(%rax)
mov    $0x3fffc094,%eax
mov    (%rax),%rcx
or     $0xfe,%rcx
mov    $0x3fffc094,%eax
mov    %rcx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<ledInit>:
push   %rax
orq    $0x4000000,0x3fffc060
orq    $0x2,0x3fffc080
3f 02
orq    $0x4,0x3fffc080
3f 04
orq    $0x8,0x3fffc080
3f 08
orq    $0x10,0x3fffc080
3f 10
orq    $0x20,0x3fffc080
3f 20
orq    $0x40,0x3fffc080
3f 40
orq    $0x80,0x3fffc080
andq   $0xfffffffffbffffff,0x3fffc074
3f ff ff ff fb
andq   $0xfffffffffffffffd,0x3fffc094
3f fd
andq   $0xfffffffffffffffb,0x3fffc094
3f fb
andq   $0xfffffffffffffff7,0x3fffc094
3f f7
andq   $0xffffffffffffffef,0x3fffc094
3f ef
andq   $0xffffffffffffffdf,0x3fffc094
3f df
andq   $0xffffffffffffffbf,0x3fffc094
3f bf
andq   $0xffffffffffffff7f,0x3fffc094
3f 7f ff ff ff
mov    $0x3e8,%edi
call   1030 <ms_sleep@plt>
orq    $0x4000000,0x3fffc074
orq    $0xfe,0x3fffc094
pop    %rax
ret

LLVM IR (-O0):
define void @ledInit() {
%1 = load volatile i64, i64* inttoptr (i64 1073725536 to i64*)
%2 = or i64 %1, 67108864
store volatile i64 %2, i64* inttoptr (i64 1073725536 to i64*)
%3 = load volatile i64, i64* inttoptr (i64 1073725568 to i64*)
%4 = or i64 %3, 2
store volatile i64 %4, i64* inttoptr (i64 1073725568 to i64*)
%5 = load volatile i64, i64* inttoptr (i64 1073725568 to i64*)
%6 = or i64 %5, 4
store volatile i64 %6, i64* inttoptr (i64 1073725568 to i64*)
%7 = load volatile i64, i64* inttoptr (i64 1073725568 to i64*)
%8 = or i64 %7, 8
store volatile i64 %8, i64* inttoptr (i64 1073725568 to i64*)
%9 = load volatile i64, i64* inttoptr (i64 1073725568 to i64*)
%10 = or i64 %9, 16
store volatile i64 %10, i64* inttoptr (i64 1073725568 to i64*)
%11 = load volatile i64, i64* inttoptr (i64 1073725568 to i64*)
%12 = or i64 %11, 32
store volatile i64 %12, i64* inttoptr (i64 1073725568 to i64*)
%13 = load volatile i64, i64* inttoptr (i64 1073725568 to i64*)
%14 = or i64 %13, 64
store volatile i64 %14, i64* inttoptr (i64 1073725568 to i64*)
%15 = load volatile i64, i64* inttoptr (i64 1073725568 to i64*)
%16 = or i64 %15, 128
store volatile i64 %16, i64* inttoptr (i64 1073725568 to i64*)
%17 = load volatile i64, i64* inttoptr (i64 1073725556 to i64*)
%18 = and i64 %17, -67108865
store volatile i64 %18, i64* inttoptr (i64 1073725556 to i64*)
%19 = load volatile i64, i64* inttoptr (i64 1073725588 to i64*)
%20 = and i64 %19, -3
store volatile i64 %20, i64* inttoptr (i64 1073725588 to i64*)
%21 = load volatile i64, i64* inttoptr (i64 1073725588 to i64*)
%22 = and i64 %21, -5
store volatile i64 %22, i64* inttoptr (i64 1073725588 to i64*)
%23 = load volatile i64, i64* inttoptr (i64 1073725588 to i64*)
%24 = and i64 %23, -9
store volatile i64 %24, i64* inttoptr (i64 1073725588 to i64*)
%25 = load volatile i64, i64* inttoptr (i64 1073725588 to i64*)
%26 = and i64 %25, -17
store volatile i64 %26, i64* inttoptr (i64 1073725588 to i64*)
%27 = load volatile i64, i64* inttoptr (i64 1073725588 to i64*)
%28 = and i64 %27, -33
store volatile i64 %28, i64* inttoptr (i64 1073725588 to i64*)
%29 = load volatile i64, i64* inttoptr (i64 1073725588 to i64*)
%30 = and i64 %29, -65
store volatile i64 %30, i64* inttoptr (i64 1073725588 to i64*)
%31 = load volatile i64, i64* inttoptr (i64 1073725588 to i64*)
%32 = and i64 %31, -129
store volatile i64 %32, i64* inttoptr (i64 1073725588 to i64*)
%33 = call i32 @ms_sleep(i32 1000)
%34 = load volatile i64, i64* inttoptr (i64 1073725556 to i64*)
%35 = or i64 %34, 67108864
store volatile i64 %35, i64* inttoptr (i64 1073725556 to i64*)
%36 = load volatile i64, i64* inttoptr (i64 1073725588 to i64*)
%37 = or i64 %36, 254
store volatile i64 %37, i64* inttoptr (i64 1073725588 to i64*)
ret void
}

LLVM IR (-O2):
define void @ledInit() {
%1 = load volatile i64, i64* inttoptr (i64 1073725536 to i64*)
%2 = or i64 %1, 67108864
store volatile i64 %2, i64* inttoptr (i64 1073725536 to i64*)
%3 = load volatile i64, i64* inttoptr (i64 1073725568 to i64*)
%4 = or i64 %3, 2
store volatile i64 %4, i64* inttoptr (i64 1073725568 to i64*)
%5 = load volatile i64, i64* inttoptr (i64 1073725568 to i64*)
%6 = or i64 %5, 4
store volatile i64 %6, i64* inttoptr (i64 1073725568 to i64*)
%7 = load volatile i64, i64* inttoptr (i64 1073725568 to i64*)
%8 = or i64 %7, 8
store volatile i64 %8, i64* inttoptr (i64 1073725568 to i64*)
%9 = load volatile i64, i64* inttoptr (i64 1073725568 to i64*)
%10 = or i64 %9, 16
store volatile i64 %10, i64* inttoptr (i64 1073725568 to i64*)
%11 = load volatile i64, i64* inttoptr (i64 1073725568 to i64*)
%12 = or i64 %11, 32
store volatile i64 %12, i64* inttoptr (i64 1073725568 to i64*)
%13 = load volatile i64, i64* inttoptr (i64 1073725568 to i64*)
%14 = or i64 %13, 64
store volatile i64 %14, i64* inttoptr (i64 1073725568 to i64*)
%15 = load volatile i64, i64* inttoptr (i64 1073725568 to i64*)
%16 = or i64 %15, 128
store volatile i64 %16, i64* inttoptr (i64 1073725568 to i64*)
%17 = load volatile i64, i64* inttoptr (i64 1073725556 to i64*)
%18 = and i64 %17, -67108865
store volatile i64 %18, i64* inttoptr (i64 1073725556 to i64*)
%19 = load volatile i64, i64* inttoptr (i64 1073725588 to i64*)
%20 = and i64 %19, -3
store volatile i64 %20, i64* inttoptr (i64 1073725588 to i64*)
%21 = load volatile i64, i64* inttoptr (i64 1073725588 to i64*)
%22 = and i64 %21, -5
store volatile i64 %22, i64* inttoptr (i64 1073725588 to i64*)
%23 = load volatile i64, i64* inttoptr (i64 1073725588 to i64*)
%24 = and i64 %23, -9
store volatile i64 %24, i64* inttoptr (i64 1073725588 to i64*)
%25 = load volatile i64, i64* inttoptr (i64 1073725588 to i64*)
%26 = and i64 %25, -17
store volatile i64 %26, i64* inttoptr (i64 1073725588 to i64*)
%27 = load volatile i64, i64* inttoptr (i64 1073725588 to i64*)
%28 = and i64 %27, -33
store volatile i64 %28, i64* inttoptr (i64 1073725588 to i64*)
%29 = load volatile i64, i64* inttoptr (i64 1073725588 to i64*)
%30 = and i64 %29, -65
store volatile i64 %30, i64* inttoptr (i64 1073725588 to i64*)
%31 = load volatile i64, i64* inttoptr (i64 1073725588 to i64*)
%32 = and i64 %31, -129
store volatile i64 %32, i64* inttoptr (i64 1073725588 to i64*)
%33 = tail call i32 @ms_sleep(i32 1000)
%34 = load volatile i64, i64* inttoptr (i64 1073725556 to i64*)
%35 = or i64 %34, 67108864
store volatile i64 %35, i64* inttoptr (i64 1073725556 to i64*)
%36 = load volatile i64, i64* inttoptr (i64 1073725588 to i64*)
%37 = or i64 %36, 254
store volatile i64 %37, i64* inttoptr (i64 1073725588 to i64*)
ret void
}