void PLL_init(void) {
  (*((volatile unsigned char *)0xE01FC080)) = 0x01;
  (*((volatile unsigned char *)0xE01FC084)) = 0x24;
  (*((volatile unsigned char *)0xE01FC08C)) = 0xAA;
  (*((volatile unsigned char *)0xE01FC08C)) = 0x55;
  while (!((*((volatile unsigned short *)0xE01FC088)) & 0x00000400))
    ;
  (*((volatile unsigned char *)0xE01FC080)) = 0x03;
  (*((volatile unsigned char *)0xE01FC08C)) = 0xAA;
  (*((volatile unsigned char *)0xE01FC08C)) = 0x55;
  (*((volatile unsigned char *)0xE01FC004)) = 0x03;
  (*((volatile unsigned char *)0xE01FC000)) = 2;
  (*((volatile unsigned char *)0xE01FC100)) = 1;
}


x86 assembly (clang, -O0):
<PLL_init>:
push   %rbp
mov    %rsp,%rbp
mov    $0xe01fc080,%eax
movb   $0x1,(%rax)
mov    $0xe01fc084,%eax
movb   $0x24,(%rax)
mov    $0xe01fc08c,%eax
movb   $0xaa,(%rax)
mov    $0xe01fc08c,%eax
movb   $0x55,(%rax)
mov    $0xe01fc088,%eax
mov    (%rax),%ax
movzwl %ax,%eax
and    $0x400,%eax
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
test   $0x1,%al
jne    1149 <PLL_init+0x49>
jmp    114e <PLL_init+0x4e>
jmp    1124 <PLL_init+0x24>
mov    $0xe01fc080,%eax
movb   $0x3,(%rax)
mov    $0xe01fc08c,%eax
movb   $0xaa,(%rax)
mov    $0xe01fc08c,%eax
movb   $0x55,(%rax)
mov    $0xe01fc004,%eax
movb   $0x3,(%rax)
mov    $0xe01fc000,%eax
movb   $0x2,(%rax)
mov    $0xe01fc100,%eax
movb   $0x1,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<PLL_init>:
mov    $0xe01fc08c,%eax
movb   $0x1,-0xc(%rax)
movb   $0x24,-0x8(%rax)
movb   $0xaa,(%rax)
movb   $0x55,(%rax)
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzwl -0x4(%rax),%ecx
test   $0x400,%ecx
je     1120 <PLL_init+0x20>
movb   $0x3,-0xc(%rax)
movb   $0xaa,(%rax)
movb   $0x55,(%rax)
movb   $0x3,-0x88(%rax)
movb   $0x2,-0x8c(%rax)
movb   $0x1,0x74(%rax)
ret

LLVM IR (-O0):
define void @PLL_init() {
store volatile i8 1, i8* inttoptr (i64 3760177280 to i8*)
store volatile i8 36, i8* inttoptr (i64 3760177284 to i8*)
store volatile i8 -86, i8* inttoptr (i64 3760177292 to i8*)
store volatile i8 85, i8* inttoptr (i64 3760177292 to i8*)
br label %1
1: ; preds = %7, %0
%2 = load volatile i16, i16* inttoptr (i64 3760177288 to i16*)
%3 = zext i16 %2 to i32
%4 = and i32 %3, 1024
%5 = icmp ne i32 %4, 0
%6 = xor i1 %5, true
br i1 %6, label %7, label %8
7: ; preds = %1
br label %1
8: ; preds = %1
store volatile i8 3, i8* inttoptr (i64 3760177280 to i8*)
store volatile i8 -86, i8* inttoptr (i64 3760177292 to i8*)
store volatile i8 85, i8* inttoptr (i64 3760177292 to i8*)
store volatile i8 3, i8* inttoptr (i64 3760177156 to i8*)
store volatile i8 2, i8* inttoptr (i64 3760177152 to i8*)
store volatile i8 1, i8* inttoptr (i64 3760177408 to i8*)
ret void
}

LLVM IR (-O2):
define void @PLL_init() {
store volatile i8 1, i8* inttoptr (i64 3760177280 to i8*)
store volatile i8 36, i8* inttoptr (i64 3760177284 to i8*)
store volatile i8 -86, i8* inttoptr (i64 3760177292 to i8*)
store volatile i8 85, i8* inttoptr (i64 3760177292 to i8*)
br label %1
1: ; preds = %1, %0
%2 = load volatile i16, i16* inttoptr (i64 3760177288 to i16*)
%3 = and i16 %2, 1024
%4 = icmp eq i16 %3, 0
br i1 %4, label %1, label %5
5: ; preds = %1
store volatile i8 3, i8* inttoptr (i64 3760177280 to i8*)
store volatile i8 -86, i8* inttoptr (i64 3760177292 to i8*)
store volatile i8 85, i8* inttoptr (i64 3760177292 to i8*)
store volatile i8 3, i8* inttoptr (i64 3760177156 to i8*)
store volatile i8 2, i8* inttoptr (i64 3760177152 to i8*)
store volatile i8 1, i8* inttoptr (i64 3760177408 to i8*)
ret void
}