#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*/ delay(int);
int /*<<< orphan*/ send_instruction(int);
void init_LCD(void) {
  (*((volatile unsigned long *)0xE0028008)) |= 0x00400000 | 0x40000000;
  (*((volatile unsigned long *)0xE0028018)) |=
      0x00FF0000 | 0x02000000 | 0x01000000;
  (*((volatile unsigned long *)0xE002801C)) = 0x02000000;
  (*((volatile unsigned long *)0xE002800C)) = 0x00400000;
  (*((volatile unsigned long *)0xE0028004)) = 0x40000000;
  send_instruction(0x38);
  delay(1200);
  send_instruction(0x38);
  delay(1200);
  send_instruction(0x0F);
  delay(1200);
  send_instruction(0x01);
  delay(49250);
  send_instruction(0x06);
  delay(1200);
}


x86 assembly (clang, -O0):
<init_LCD>:
push   %rbp
mov    %rsp,%rbp
mov    $0xe0028008,%eax
mov    (%rax),%rcx
or     $0x40400000,%rcx
mov    $0xe0028008,%eax
mov    %rcx,(%rax)
mov    $0xe0028018,%eax
mov    (%rax),%rcx
or     $0x3ff0000,%rcx
mov    $0xe0028018,%eax
mov    %rcx,(%rax)
mov    $0xe002801c,%eax
movq   $0x2000000,(%rax)
mov    $0xe002800c,%eax
movq   $0x400000,(%rax)
mov    $0xe0028004,%eax
movq   $0x40000000,(%rax)
mov    $0x38,%edi
call   1030 <send_instruction@plt>
mov    $0x4b0,%edi
call   1040 <delay@plt>
mov    $0x38,%edi
call   1030 <send_instruction@plt>
mov    $0x4b0,%edi
call   1040 <delay@plt>
mov    $0xf,%edi
call   1030 <send_instruction@plt>
mov    $0x4b0,%edi
call   1040 <delay@plt>
mov    $0x1,%edi
call   1030 <send_instruction@plt>
mov    $0xc062,%edi
call   1040 <delay@plt>
mov    $0x6,%edi
call   1030 <send_instruction@plt>
mov    $0x4b0,%edi
call   1040 <delay@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<init_LCD>:
push   %rax
mov    $0xe0028008,%eax
orq    $0x40400000,(%rax)
orq    $0x3ff0000,0x10(%rax)
03
movq   $0x2000000,0x14(%rax)
02
movq   $0x400000,0x4(%rax)
movq   $0x40000000,-0x4(%rax)
40
mov    $0x38,%edi
call   1030 <send_instruction@plt>
mov    $0x4b0,%edi
call   1040 <delay@plt>
mov    $0x38,%edi
call   1030 <send_instruction@plt>
mov    $0x4b0,%edi
call   1040 <delay@plt>
mov    $0xf,%edi
call   1030 <send_instruction@plt>
mov    $0x4b0,%edi
call   1040 <delay@plt>
mov    $0x1,%edi
call   1030 <send_instruction@plt>
mov    $0xc062,%edi
call   1040 <delay@plt>
mov    $0x6,%edi
call   1030 <send_instruction@plt>
mov    $0x4b0,%edi
pop    %rax
jmp    1040 <delay@plt>

LLVM IR (-O0):
define void @init_LCD() {
%1 = load volatile i64, i64* inttoptr (i64 3758260232 to i64*)
%2 = or i64 %1, 1077936128
store volatile i64 %2, i64* inttoptr (i64 3758260232 to i64*)
%3 = load volatile i64, i64* inttoptr (i64 3758260248 to i64*)
%4 = or i64 %3, 67043328
store volatile i64 %4, i64* inttoptr (i64 3758260248 to i64*)
store volatile i64 33554432, i64* inttoptr (i64 3758260252 to i64*)
store volatile i64 4194304, i64* inttoptr (i64 3758260236 to i64*)
store volatile i64 1073741824, i64* inttoptr (i64 3758260228 to i64*)
%5 = call i32 @send_instruction(i32 56)
%6 = call i32 @delay(i32 1200)
%7 = call i32 @send_instruction(i32 56)
%8 = call i32 @delay(i32 1200)
%9 = call i32 @send_instruction(i32 15)
%10 = call i32 @delay(i32 1200)
%11 = call i32 @send_instruction(i32 1)
%12 = call i32 @delay(i32 49250)
%13 = call i32 @send_instruction(i32 6)
%14 = call i32 @delay(i32 1200)
ret void
}

LLVM IR (-O2):
define void @init_LCD() {
%1 = load volatile i64, i64* inttoptr (i64 3758260232 to i64*)
%2 = or i64 %1, 1077936128
store volatile i64 %2, i64* inttoptr (i64 3758260232 to i64*)
%3 = load volatile i64, i64* inttoptr (i64 3758260248 to i64*)
%4 = or i64 %3, 67043328
store volatile i64 %4, i64* inttoptr (i64 3758260248 to i64*)
store volatile i64 33554432, i64* inttoptr (i64 3758260252 to i64*)
store volatile i64 4194304, i64* inttoptr (i64 3758260236 to i64*)
store volatile i64 1073741824, i64* inttoptr (i64 3758260228 to i64*)
%5 = tail call i32 @send_instruction(i32 56)
%6 = tail call i32 @delay(i32 1200)
%7 = tail call i32 @send_instruction(i32 56)
%8 = tail call i32 @delay(i32 1200)
%9 = tail call i32 @send_instruction(i32 15)
%10 = tail call i32 @delay(i32 1200)
%11 = tail call i32 @send_instruction(i32 1)
%12 = tail call i32 @delay(i32 49250)
%13 = tail call i32 @send_instruction(i32 6)
%14 = tail call i32 @delay(i32 1200)
ret void
}