#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 Profile_Init(void) {
  (*((volatile uint32_t *)0x400FE608)) |= 0x00000004;
  while (((*((volatile uint32_t *)0x400FEA08)) & 0x04) == 0) {
  };
  (*((volatile uint32_t *)0x40006528)) &= ~0xA0;
  (*((volatile uint32_t *)0x4000652C)) =
      ((*((volatile uint32_t *)0x4000652C)) & 0x0F0FFFFF) + 0x00000000;
  (*((volatile uint32_t *)0x40006400)) |= 0xA0;
  (*((volatile uint32_t *)0x40006420)) &= ~0xA0;
  (*((volatile uint32_t *)0x40006510)) &= ~0xA0;
  (*((volatile uint32_t *)0x40006514)) &= ~0xA0;
  (*((volatile uint32_t *)0x4000651C)) |= 0xA0;
  (*((volatile uint32_t *)0x400063FC)) &= ~0xA0;
  (*((volatile uint32_t *)0x400FE608)) |= 0x00000010;
  while (((*((volatile uint32_t *)0x400FEA08)) & 0x10) == 0) {
  };
  (*((volatile uint32_t *)0x40024528)) &= ~0x0F;
  (*((volatile uint32_t *)0x4002452C)) =
      ((*((volatile uint32_t *)0x4002452C)) & 0xFFFF0000) + 0x00000000;
  (*((volatile uint32_t *)0x40024400)) |= 0x0F;
  (*((volatile uint32_t *)0x40024420)) &= ~0x0F;
  (*((volatile uint32_t *)0x40024510)) &= ~0x0F;
  (*((volatile uint32_t *)0x40024514)) &= ~0x0F;
  (*((volatile uint32_t *)0x4002451C)) |= 0x0F;
  (*((volatile uint32_t *)0x400243FC)) &= ~0x0F;
  (*((volatile uint32_t *)0x400FE608)) |= 0x00000020;
  while (((*((volatile uint32_t *)0x400FEA08)) & 0x20) == 0) {
  };
  (*((volatile uint32_t *)0x40025528)) &= ~0x02;
  (*((volatile uint32_t *)0x4002552C)) =
      ((*((volatile uint32_t *)0x4002552C)) & 0xFFFFFF0F) + 0x00000000;
  (*((volatile uint32_t *)0x40025400)) |= 0x02;
  (*((volatile uint32_t *)0x40025420)) &= ~0x02;
  (*((volatile uint32_t *)0x40025510)) &= ~0x02;
  (*((volatile uint32_t *)0x40025514)) &= ~0x02;
  (*((volatile uint32_t *)0x4002551C)) |= 0x02;
  (*((volatile uint32_t *)0x400253FC)) &= ~0x02;
}


x86 assembly (clang, -O0):
<Profile_Init>:
push   %rbp
mov    %rsp,%rbp
mov    $0x400fe608,%eax
mov    (%rax),%ecx
or     $0x4,%ecx
mov    $0x400fe608,%eax
mov    %ecx,(%rax)
mov    $0x400fea08,%eax
mov    (%rax),%eax
and    $0x4,%eax
cmp    $0x0,%eax
jne    112d <Profile_Init+0x2d>
jmp    1115 <Profile_Init+0x15>
mov    $0x40006528,%eax
mov    (%rax),%ecx
and    $0xffffff5f,%ecx
mov    $0x40006528,%eax
mov    %ecx,(%rax)
mov    $0x4000652c,%eax
mov    (%rax),%ecx
and    $0xf0fffff,%ecx
add    $0x0,%ecx
mov    $0x4000652c,%eax
mov    %ecx,(%rax)
mov    $0x40006400,%eax
mov    (%rax),%ecx
or     $0xa0,%ecx
mov    $0x40006400,%eax
mov    %ecx,(%rax)
mov    $0x40006420,%eax
mov    (%rax),%ecx
and    $0xffffff5f,%ecx
mov    $0x40006420,%eax
mov    %ecx,(%rax)
mov    $0x40006510,%eax
mov    (%rax),%ecx
and    $0xffffff5f,%ecx
mov    $0x40006510,%eax
mov    %ecx,(%rax)
mov    $0x40006514,%eax
mov    (%rax),%ecx
and    $0xffffff5f,%ecx
mov    $0x40006514,%eax
mov    %ecx,(%rax)
mov    $0x4000651c,%eax
mov    (%rax),%ecx
or     $0xa0,%ecx
mov    $0x4000651c,%eax
mov    %ecx,(%rax)
mov    $0x400063fc,%eax
mov    (%rax),%ecx
and    $0xffffff5f,%ecx
mov    $0x400063fc,%eax
mov    %ecx,(%rax)
mov    $0x400fe608,%eax
mov    (%rax),%ecx
or     $0x10,%ecx
mov    $0x400fe608,%eax
mov    %ecx,(%rax)
mov    $0x400fea08,%eax
mov    (%rax),%eax
and    $0x10,%eax
cmp    $0x0,%eax
jne    11f9 <Profile_Init+0xf9>
jmp    11e1 <Profile_Init+0xe1>
mov    $0x40024528,%eax
mov    (%rax),%ecx
and    $0xfffffff0,%ecx
mov    $0x40024528,%eax
mov    %ecx,(%rax)
mov    $0x4002452c,%eax
mov    (%rax),%ecx
and    $0xffff0000,%ecx
add    $0x0,%ecx
mov    $0x4002452c,%eax
mov    %ecx,(%rax)
mov    $0x40024400,%eax
mov    (%rax),%ecx
or     $0xf,%ecx
mov    $0x40024400,%eax
mov    %ecx,(%rax)
mov    $0x40024420,%eax
mov    (%rax),%ecx
and    $0xfffffff0,%ecx
mov    $0x40024420,%eax
mov    %ecx,(%rax)
mov    $0x40024510,%eax
mov    (%rax),%ecx
and    $0xfffffff0,%ecx
mov    $0x40024510,%eax
mov    %ecx,(%rax)
mov    $0x40024514,%eax
mov    (%rax),%ecx
and    $0xfffffff0,%ecx
mov    $0x40024514,%eax
mov    %ecx,(%rax)
mov    $0x4002451c,%eax
mov    (%rax),%ecx
or     $0xf,%ecx
mov    $0x4002451c,%eax
mov    %ecx,(%rax)
mov    $0x400243fc,%eax
mov    (%rax),%ecx
and    $0xfffffff0,%ecx
mov    $0x400243fc,%eax
mov    %ecx,(%rax)
mov    $0x400fe608,%eax
mov    (%rax),%ecx
or     $0x20,%ecx
mov    $0x400fe608,%eax
mov    %ecx,(%rax)
mov    $0x400fea08,%eax
mov    (%rax),%eax
and    $0x20,%eax
cmp    $0x0,%eax
jne    12b0 <Profile_Init+0x1b0>
jmp    1298 <Profile_Init+0x198>
mov    $0x40025528,%eax
mov    (%rax),%ecx
and    $0xfffffffd,%ecx
mov    $0x40025528,%eax
mov    %ecx,(%rax)
mov    $0x4002552c,%eax
mov    (%rax),%ecx
and    $0xffffff0f,%ecx
add    $0x0,%ecx
mov    $0x4002552c,%eax
mov    %ecx,(%rax)
mov    $0x40025400,%eax
mov    (%rax),%ecx
or     $0x2,%ecx
mov    $0x40025400,%eax
mov    %ecx,(%rax)
mov    $0x40025420,%eax
mov    (%rax),%ecx
and    $0xfffffffd,%ecx
mov    $0x40025420,%eax
mov    %ecx,(%rax)
mov    $0x40025510,%eax
mov    (%rax),%ecx
and    $0xfffffffd,%ecx
mov    $0x40025510,%eax
mov    %ecx,(%rax)
mov    $0x40025514,%eax
mov    (%rax),%ecx
and    $0xfffffffd,%ecx
mov    $0x40025514,%eax
mov    %ecx,(%rax)
mov    $0x4002551c,%eax
mov    (%rax),%ecx
or     $0x2,%ecx
mov    $0x4002551c,%eax
mov    %ecx,(%rax)
mov    $0x400253fc,%eax
mov    (%rax),%ecx
and    $0xfffffffd,%ecx
mov    $0x400253fc,%eax
mov    %ecx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<Profile_Init>:
orl    $0x4,0x400fe608
04
nopl   0x0(%rax,%rax,1)
testl  $0x4,0x400fea08
je     1110 <Profile_Init+0x10>
andl   $0xffffff5f,0x40006528
5f ff ff ff
andl   $0xf0fffff,0x4000652c
ff ff 0f 0f
orl    $0xa0,0x40006400
andl   $0xffffff5f,0x40006420
5f ff ff ff
andl   $0xffffff5f,0x40006510
5f ff ff ff
andl   $0xffffff5f,0x40006514
5f ff ff ff
orl    $0xa0,0x4000651c
andl   $0xffffff5f,0x400063fc
5f ff ff ff
orl    $0x10,0x400fe608
10
nopl   (%rax)
testl  $0x10,0x400fea08
je     1180 <Profile_Init+0x80>
andl   $0xfffffff0,0x40024528
f0
andl   $0xffff0000,0x4002452c
orl    $0xf,0x40024400
0f
andl   $0xfffffff0,0x40024420
f0
andl   $0xfffffff0,0x40024510
f0
andl   $0xfffffff0,0x40024514
f0
orl    $0xf,0x4002451c
0f
andl   $0xfffffff0,0x400243fc
f0
orl    $0x20,0x400fe608
20
nopl   0x0(%rax,%rax,1)
testl  $0x20,0x400fea08
je     11e0 <Profile_Init+0xe0>
andl   $0xfffffffd,0x40025528
fd
andl   $0xffffff0f,0x4002552c
0f ff ff ff
orl    $0x2,0x40025400
02
andl   $0xfffffffd,0x40025420
fd
andl   $0xfffffffd,0x40025510
fd
andl   $0xfffffffd,0x40025514
fd
orl    $0x2,0x4002551c
02
andl   $0xfffffffd,0x400253fc
fd
ret

LLVM IR (-O0):
define void @Profile_Init() {
%1 = load volatile i32, i32* inttoptr (i64 1074783752 to i32*)
%2 = or i32 %1, 4
store volatile i32 %2, i32* inttoptr (i64 1074783752 to i32*)
br label %3
3: ; preds = %7, %0
%4 = load volatile i32, i32* inttoptr (i64 1074784776 to i32*)
%5 = and i32 %4, 4
%6 = icmp eq i32 %5, 0
br i1 %6, label %7, label %8
7: ; preds = %3
br label %3
8: ; preds = %3
%9 = load volatile i32, i32* inttoptr (i64 1073767720 to i32*)
%10 = and i32 %9, -161
store volatile i32 %10, i32* inttoptr (i64 1073767720 to i32*)
%11 = load volatile i32, i32* inttoptr (i64 1073767724 to i32*)
%12 = and i32 %11, 252706815
%13 = add nsw i32 %12, 0
store volatile i32 %13, i32* inttoptr (i64 1073767724 to i32*)
%14 = load volatile i32, i32* inttoptr (i64 1073767424 to i32*)
%15 = or i32 %14, 160
store volatile i32 %15, i32* inttoptr (i64 1073767424 to i32*)
%16 = load volatile i32, i32* inttoptr (i64 1073767456 to i32*)
%17 = and i32 %16, -161
store volatile i32 %17, i32* inttoptr (i64 1073767456 to i32*)
%18 = load volatile i32, i32* inttoptr (i64 1073767696 to i32*)
%19 = and i32 %18, -161
store volatile i32 %19, i32* inttoptr (i64 1073767696 to i32*)
%20 = load volatile i32, i32* inttoptr (i64 1073767700 to i32*)
%21 = and i32 %20, -161
store volatile i32 %21, i32* inttoptr (i64 1073767700 to i32*)
%22 = load volatile i32, i32* inttoptr (i64 1073767708 to i32*)
%23 = or i32 %22, 160
store volatile i32 %23, i32* inttoptr (i64 1073767708 to i32*)
%24 = load volatile i32, i32* inttoptr (i64 1073767420 to i32*)
%25 = and i32 %24, -161
store volatile i32 %25, i32* inttoptr (i64 1073767420 to i32*)
%26 = load volatile i32, i32* inttoptr (i64 1074783752 to i32*)
%27 = or i32 %26, 16
store volatile i32 %27, i32* inttoptr (i64 1074783752 to i32*)
br label %28
28: ; preds = %32, %8
%29 = load volatile i32, i32* inttoptr (i64 1074784776 to i32*)
%30 = and i32 %29, 16
%31 = icmp eq i32 %30, 0
br i1 %31, label %32, label %33
32: ; preds = %28
br label %28
33: ; preds = %28
%34 = load volatile i32, i32* inttoptr (i64 1073890600 to i32*)
%35 = and i32 %34, -16
store volatile i32 %35, i32* inttoptr (i64 1073890600 to i32*)
%36 = load volatile i32, i32* inttoptr (i64 1073890604 to i32*)
%37 = and i32 %36, -65536
%38 = add i32 %37, 0
store volatile i32 %38, i32* inttoptr (i64 1073890604 to i32*)
%39 = load volatile i32, i32* inttoptr (i64 1073890304 to i32*)
%40 = or i32 %39, 15
store volatile i32 %40, i32* inttoptr (i64 1073890304 to i32*)
%41 = load volatile i32, i32* inttoptr (i64 1073890336 to i32*)
%42 = and i32 %41, -16
store volatile i32 %42, i32* inttoptr (i64 1073890336 to i32*)
%43 = load volatile i32, i32* inttoptr (i64 1073890576 to i32*)
%44 = and i32 %43, -16
store volatile i32 %44, i32* inttoptr (i64 1073890576 to i32*)
%45 = load volatile i32, i32* inttoptr (i64 1073890580 to i32*)
%46 = and i32 %45, -16
store volatile i32 %46, i32* inttoptr (i64 1073890580 to i32*)
%47 = load volatile i32, i32* inttoptr (i64 1073890588 to i32*)
%48 = or i32 %47, 15
store volatile i32 %48, i32* inttoptr (i64 1073890588 to i32*)
%49 = load volatile i32, i32* inttoptr (i64 1073890300 to i32*)
%50 = and i32 %49, -16
store volatile i32 %50, i32* inttoptr (i64 1073890300 to i32*)
%51 = load volatile i32, i32* inttoptr (i64 1074783752 to i32*)
%52 = or i32 %51, 32
store volatile i32 %52, i32* inttoptr (i64 1074783752 to i32*)
br label %53
53: ; preds = %57, %33
%54 = load volatile i32, i32* inttoptr (i64 1074784776 to i32*)
%55 = and i32 %54, 32
%56 = icmp eq i32 %55, 0
br i1 %56, label %57, label %58
57: ; preds = %53
br label %53
58: ; preds = %53
%59 = load volatile i32, i32* inttoptr (i64 1073894696 to i32*)
%60 = and i32 %59, -3
store volatile i32 %60, i32* inttoptr (i64 1073894696 to i32*)
%61 = load volatile i32, i32* inttoptr (i64 1073894700 to i32*)
%62 = and i32 %61, -241
%63 = add i32 %62, 0
store volatile i32 %63, i32* inttoptr (i64 1073894700 to i32*)
%64 = load volatile i32, i32* inttoptr (i64 1073894400 to i32*)
%65 = or i32 %64, 2
store volatile i32 %65, i32* inttoptr (i64 1073894400 to i32*)
%66 = load volatile i32, i32* inttoptr (i64 1073894432 to i32*)
%67 = and i32 %66, -3
store volatile i32 %67, i32* inttoptr (i64 1073894432 to i32*)
%68 = load volatile i32, i32* inttoptr (i64 1073894672 to i32*)
%69 = and i32 %68, -3
store volatile i32 %69, i32* inttoptr (i64 1073894672 to i32*)
%70 = load volatile i32, i32* inttoptr (i64 1073894676 to i32*)
%71 = and i32 %70, -3
store volatile i32 %71, i32* inttoptr (i64 1073894676 to i32*)
%72 = load volatile i32, i32* inttoptr (i64 1073894684 to i32*)
%73 = or i32 %72, 2
store volatile i32 %73, i32* inttoptr (i64 1073894684 to i32*)
%74 = load volatile i32, i32* inttoptr (i64 1073894396 to i32*)
%75 = and i32 %74, -3
store volatile i32 %75, i32* inttoptr (i64 1073894396 to i32*)
ret void
}

LLVM IR (-O2):
define void @Profile_Init() {
%1 = load volatile i32, i32* inttoptr (i64 1074783752 to i32*)
%2 = or i32 %1, 4
store volatile i32 %2, i32* inttoptr (i64 1074783752 to i32*)
br label %3
3: ; preds = %3, %0
%4 = load volatile i32, i32* inttoptr (i64 1074784776 to i32*)
%5 = and i32 %4, 4
%6 = icmp eq i32 %5, 0
br i1 %6, label %3, label %7
7: ; preds = %3
%8 = load volatile i32, i32* inttoptr (i64 1073767720 to i32*)
%9 = and i32 %8, -161
store volatile i32 %9, i32* inttoptr (i64 1073767720 to i32*)
%10 = load volatile i32, i32* inttoptr (i64 1073767724 to i32*)
%11 = and i32 %10, 252706815
store volatile i32 %11, i32* inttoptr (i64 1073767724 to i32*)
%12 = load volatile i32, i32* inttoptr (i64 1073767424 to i32*)
%13 = or i32 %12, 160
store volatile i32 %13, i32* inttoptr (i64 1073767424 to i32*)
%14 = load volatile i32, i32* inttoptr (i64 1073767456 to i32*)
%15 = and i32 %14, -161
store volatile i32 %15, i32* inttoptr (i64 1073767456 to i32*)
%16 = load volatile i32, i32* inttoptr (i64 1073767696 to i32*)
%17 = and i32 %16, -161
store volatile i32 %17, i32* inttoptr (i64 1073767696 to i32*)
%18 = load volatile i32, i32* inttoptr (i64 1073767700 to i32*)
%19 = and i32 %18, -161
store volatile i32 %19, i32* inttoptr (i64 1073767700 to i32*)
%20 = load volatile i32, i32* inttoptr (i64 1073767708 to i32*)
%21 = or i32 %20, 160
store volatile i32 %21, i32* inttoptr (i64 1073767708 to i32*)
%22 = load volatile i32, i32* inttoptr (i64 1073767420 to i32*)
%23 = and i32 %22, -161
store volatile i32 %23, i32* inttoptr (i64 1073767420 to i32*)
%24 = load volatile i32, i32* inttoptr (i64 1074783752 to i32*)
%25 = or i32 %24, 16
store volatile i32 %25, i32* inttoptr (i64 1074783752 to i32*)
br label %26
26: ; preds = %26, %7
%27 = load volatile i32, i32* inttoptr (i64 1074784776 to i32*)
%28 = and i32 %27, 16
%29 = icmp eq i32 %28, 0
br i1 %29, label %26, label %30
30: ; preds = %26
%31 = load volatile i32, i32* inttoptr (i64 1073890600 to i32*)
%32 = and i32 %31, -16
store volatile i32 %32, i32* inttoptr (i64 1073890600 to i32*)
%33 = load volatile i32, i32* inttoptr (i64 1073890604 to i32*)
%34 = and i32 %33, -65536
store volatile i32 %34, i32* inttoptr (i64 1073890604 to i32*)
%35 = load volatile i32, i32* inttoptr (i64 1073890304 to i32*)
%36 = or i32 %35, 15
store volatile i32 %36, i32* inttoptr (i64 1073890304 to i32*)
%37 = load volatile i32, i32* inttoptr (i64 1073890336 to i32*)
%38 = and i32 %37, -16
store volatile i32 %38, i32* inttoptr (i64 1073890336 to i32*)
%39 = load volatile i32, i32* inttoptr (i64 1073890576 to i32*)
%40 = and i32 %39, -16
store volatile i32 %40, i32* inttoptr (i64 1073890576 to i32*)
%41 = load volatile i32, i32* inttoptr (i64 1073890580 to i32*)
%42 = and i32 %41, -16
store volatile i32 %42, i32* inttoptr (i64 1073890580 to i32*)
%43 = load volatile i32, i32* inttoptr (i64 1073890588 to i32*)
%44 = or i32 %43, 15
store volatile i32 %44, i32* inttoptr (i64 1073890588 to i32*)
%45 = load volatile i32, i32* inttoptr (i64 1073890300 to i32*)
%46 = and i32 %45, -16
store volatile i32 %46, i32* inttoptr (i64 1073890300 to i32*)
%47 = load volatile i32, i32* inttoptr (i64 1074783752 to i32*)
%48 = or i32 %47, 32
store volatile i32 %48, i32* inttoptr (i64 1074783752 to i32*)
br label %49
49: ; preds = %49, %30
%50 = load volatile i32, i32* inttoptr (i64 1074784776 to i32*)
%51 = and i32 %50, 32
%52 = icmp eq i32 %51, 0
br i1 %52, label %49, label %53
53: ; preds = %49
%54 = load volatile i32, i32* inttoptr (i64 1073894696 to i32*)
%55 = and i32 %54, -3
store volatile i32 %55, i32* inttoptr (i64 1073894696 to i32*)
%56 = load volatile i32, i32* inttoptr (i64 1073894700 to i32*)
%57 = and i32 %56, -241
store volatile i32 %57, i32* inttoptr (i64 1073894700 to i32*)
%58 = load volatile i32, i32* inttoptr (i64 1073894400 to i32*)
%59 = or i32 %58, 2
store volatile i32 %59, i32* inttoptr (i64 1073894400 to i32*)
%60 = load volatile i32, i32* inttoptr (i64 1073894432 to i32*)
%61 = and i32 %60, -3
store volatile i32 %61, i32* inttoptr (i64 1073894432 to i32*)
%62 = load volatile i32, i32* inttoptr (i64 1073894672 to i32*)
%63 = and i32 %62, -3
store volatile i32 %63, i32* inttoptr (i64 1073894672 to i32*)
%64 = load volatile i32, i32* inttoptr (i64 1073894676 to i32*)
%65 = and i32 %64, -3
store volatile i32 %65, i32* inttoptr (i64 1073894676 to i32*)
%66 = load volatile i32, i32* inttoptr (i64 1073894684 to i32*)
%67 = or i32 %66, 2
store volatile i32 %67, i32* inttoptr (i64 1073894684 to i32*)
%68 = load volatile i32, i32* inttoptr (i64 1073894396 to i32*)
%69 = and i32 %68, -3
store volatile i32 %69, i32* inttoptr (i64 1073894396 to i32*)
ret void
}