void lcd_init(void) {
  (*(volatile unsigned long *)0xE0200120) = 0x22222222;
  (*(volatile unsigned long *)0xE0200140) = 0x22222222;
  (*(volatile unsigned long *)0xE0200160) = 0x22222222;
  (*(volatile unsigned long *)0xE0200180) = 0x22222222;
  (*(volatile unsigned long *)0xE02000A0) &= ~(0xf << 4);
  (*(volatile unsigned long *)0xE02000A0) |= (1 << 4);
  (*(volatile unsigned long *)0xE02000A4) |= (1 << 1);
  (*(volatile unsigned long *)0xe0107008) = 2 << 0;
  (*(volatile unsigned long *)0xF8000000) &=
      ~((3 << 26) | (1 << 18) | (1 << 2));
  (*(volatile unsigned long *)0xF8000000) |= ((1 << 0) | (1 << 1));
  (*(volatile unsigned long *)0xF8000000) |= 14 << 6 | 1 << 4;
  (*(volatile unsigned long *)0xF8000004) |= 1 << 5 | 1 << 6;
  (*(volatile unsigned long *)0xF8000010) =
      (8 - 1) << 16 | (8 - 1) << 8 | (0) << 0;
  (*(volatile unsigned long *)0xF8000014) =
      (40 - 1) << 16 | (5 - 1) << 8 | (0) << 0;
  (*(volatile unsigned long *)0xF8000018) =
      (((272) - 1) << 11) | (((480) - 1) << 0);
  (*(volatile unsigned long *)0xF8000020) |= 1 << 0;
  (*(volatile unsigned long *)0xF8000020) &= ~(0xf << 2);
  (*(volatile unsigned long *)0xF8000020) |= (0xB << 2) | (1 << 15);
  (*(volatile unsigned long *)0xF8000040) = (0 << 11) | (0 << 0);
  (*(volatile unsigned long *)0xF8000044) = (479 << 11) | (271 << 0);
  (*(volatile unsigned long *)0xF8000048) =
      (((272) - 1) + 1) * (((480) - 1) + 1);
  (*(volatile unsigned long *)0xF80000A0) = (0x23000000);
  (*(volatile unsigned long *)0xF80000D0) =
      (((((480) - 1) + 1) * 4 + 0) * (((272) - 1) + 1)) & (0xffffff);
  (*(volatile unsigned long *)0xF8000034) = 0x1;
}


x86 assembly (clang, -O0):
<lcd_init>:
push   %rbp
mov    %rsp,%rbp
mov    $0xe0200120,%eax
movq   $0x22222222,(%rax)
mov    $0xe0200140,%eax
movq   $0x22222222,(%rax)
mov    $0xe0200160,%eax
movq   $0x22222222,(%rax)
mov    $0xe0200180,%eax
movq   $0x22222222,(%rax)
mov    $0xe02000a0,%eax
mov    (%rax),%rcx
and    $0xffffffffffffff0f,%rcx
mov    $0xe02000a0,%eax
mov    %rcx,(%rax)
mov    $0xe02000a0,%eax
mov    (%rax),%rcx
or     $0x10,%rcx
mov    $0xe02000a0,%eax
mov    %rcx,(%rax)
mov    $0xe02000a4,%eax
mov    (%rax),%rcx
or     $0x2,%rcx
mov    $0xe02000a4,%eax
mov    %rcx,(%rax)
mov    $0xe0107008,%eax
movq   $0x2,(%rax)
mov    $0xf8000000,%eax
mov    (%rax),%rcx
and    $0xfffffffff3fbfffb,%rcx
mov    $0xf8000000,%eax
mov    %rcx,(%rax)
mov    $0xf8000000,%eax
mov    (%rax),%rcx
or     $0x3,%rcx
mov    $0xf8000000,%eax
mov    %rcx,(%rax)
mov    $0xf8000000,%eax
mov    (%rax),%rcx
or     $0x390,%rcx
mov    $0xf8000000,%eax
mov    %rcx,(%rax)
mov    $0xf8000004,%eax
mov    (%rax),%rcx
or     $0x60,%rcx
mov    $0xf8000004,%eax
mov    %rcx,(%rax)
mov    $0xf8000010,%eax
movq   $0x70700,(%rax)
mov    $0xf8000014,%eax
movq   $0x270400,(%rax)
mov    $0xf8000018,%eax
movq   $0x879df,(%rax)
mov    $0xf8000020,%eax
mov    (%rax),%rcx
or     $0x1,%rcx
mov    $0xf8000020,%eax
mov    %rcx,(%rax)
mov    $0xf8000020,%eax
mov    (%rax),%rcx
and    $0xffffffffffffffc3,%rcx
mov    $0xf8000020,%eax
mov    %rcx,(%rax)
mov    $0xf8000020,%eax
mov    (%rax),%rcx
or     $0x802c,%rcx
mov    $0xf8000020,%eax
mov    %rcx,(%rax)
mov    $0xf8000040,%eax
movq   $0x0,(%rax)
mov    $0xf8000044,%eax
movq   $0xef90f,(%rax)
mov    $0xf8000048,%eax
movq   $0x1fe00,(%rax)
mov    $0xf80000a0,%eax
movq   $0x23000000,(%rax)
mov    $0xf80000d0,%eax
movq   $0x7f800,(%rax)
mov    $0xf8000034,%eax
movq   $0x1,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<lcd_init>:
mov    $0xf8000000,%eax
movq   $0x22222222,-0x17dffee0(%rax)
22 22 22 22
movq   $0x22222222,-0x17dffec0(%rax)
22 22 22 22
movq   $0x22222222,-0x17dffea0(%rax)
22 22 22 22
movq   $0x22222222,-0x17dffe80(%rax)
22 22 22 22
andq   $0xffffffffffffff0f,-0x17dfff60(%rax)
0f ff ff ff
orq    $0x10,-0x17dfff60(%rax)
10
orq    $0x2,-0x17dfff5c(%rax)
02
movq   $0x2,-0x17ef8ff8(%rax)
andq   $0xfffffffff3fbfffb,(%rax)
orq    $0x3,(%rax)
orq    $0x390,(%rax)
orq    $0x60,0x4(%rax)
movq   $0x70700,0x10(%rax)
movq   $0x270400,0x14(%rax)
movq   $0x879df,0x18(%rax)
orq    $0x1,0x20(%rax)
andq   $0xffffffffffffffc3,0x20(%rax)
orq    $0x802c,0x20(%rax)
movq   $0x0,0x40(%rax)
movq   $0xef90f,0x44(%rax)
movq   $0x1fe00,0x48(%rax)
movq   $0x23000000,0xa0(%rax)
movq   $0x7f800,0xd0(%rax)
movq   $0x1,0x34(%rax)
ret

LLVM IR (-O0):
define void @lcd_init() {
store volatile i64 572662306, i64* inttoptr (i64 3760193824 to i64*)
store volatile i64 572662306, i64* inttoptr (i64 3760193856 to i64*)
store volatile i64 572662306, i64* inttoptr (i64 3760193888 to i64*)
store volatile i64 572662306, i64* inttoptr (i64 3760193920 to i64*)
%1 = load volatile i64, i64* inttoptr (i64 3760193696 to i64*)
%2 = and i64 %1, -241
store volatile i64 %2, i64* inttoptr (i64 3760193696 to i64*)
%3 = load volatile i64, i64* inttoptr (i64 3760193696 to i64*)
%4 = or i64 %3, 16
store volatile i64 %4, i64* inttoptr (i64 3760193696 to i64*)
%5 = load volatile i64, i64* inttoptr (i64 3760193700 to i64*)
%6 = or i64 %5, 2
store volatile i64 %6, i64* inttoptr (i64 3760193700 to i64*)
store volatile i64 2, i64* inttoptr (i64 3759173640 to i64*)
%7 = load volatile i64, i64* inttoptr (i64 4160749568 to i64*)
%8 = and i64 %7, -201588741
store volatile i64 %8, i64* inttoptr (i64 4160749568 to i64*)
%9 = load volatile i64, i64* inttoptr (i64 4160749568 to i64*)
%10 = or i64 %9, 3
store volatile i64 %10, i64* inttoptr (i64 4160749568 to i64*)
%11 = load volatile i64, i64* inttoptr (i64 4160749568 to i64*)
%12 = or i64 %11, 912
store volatile i64 %12, i64* inttoptr (i64 4160749568 to i64*)
%13 = load volatile i64, i64* inttoptr (i64 4160749572 to i64*)
%14 = or i64 %13, 96
store volatile i64 %14, i64* inttoptr (i64 4160749572 to i64*)
store volatile i64 460544, i64* inttoptr (i64 4160749584 to i64*)
store volatile i64 2556928, i64* inttoptr (i64 4160749588 to i64*)
store volatile i64 555487, i64* inttoptr (i64 4160749592 to i64*)
%15 = load volatile i64, i64* inttoptr (i64 4160749600 to i64*)
%16 = or i64 %15, 1
store volatile i64 %16, i64* inttoptr (i64 4160749600 to i64*)
%17 = load volatile i64, i64* inttoptr (i64 4160749600 to i64*)
%18 = and i64 %17, -61
store volatile i64 %18, i64* inttoptr (i64 4160749600 to i64*)
%19 = load volatile i64, i64* inttoptr (i64 4160749600 to i64*)
%20 = or i64 %19, 32812
store volatile i64 %20, i64* inttoptr (i64 4160749600 to i64*)
store volatile i64 0, i64* inttoptr (i64 4160749632 to i64*)
store volatile i64 981263, i64* inttoptr (i64 4160749636 to i64*)
store volatile i64 130560, i64* inttoptr (i64 4160749640 to i64*)
store volatile i64 587202560, i64* inttoptr (i64 4160749728 to i64*)
store volatile i64 522240, i64* inttoptr (i64 4160749776 to i64*)
store volatile i64 1, i64* inttoptr (i64 4160749620 to i64*)
ret void
}

LLVM IR (-O2):
define void @lcd_init() {
store volatile i64 572662306, i64* inttoptr (i64 3760193824 to i64*)
store volatile i64 572662306, i64* inttoptr (i64 3760193856 to i64*)
store volatile i64 572662306, i64* inttoptr (i64 3760193888 to i64*)
store volatile i64 572662306, i64* inttoptr (i64 3760193920 to i64*)
%1 = load volatile i64, i64* inttoptr (i64 3760193696 to i64*)
%2 = and i64 %1, -241
store volatile i64 %2, i64* inttoptr (i64 3760193696 to i64*)
%3 = load volatile i64, i64* inttoptr (i64 3760193696 to i64*)
%4 = or i64 %3, 16
store volatile i64 %4, i64* inttoptr (i64 3760193696 to i64*)
%5 = load volatile i64, i64* inttoptr (i64 3760193700 to i64*)
%6 = or i64 %5, 2
store volatile i64 %6, i64* inttoptr (i64 3760193700 to i64*)
store volatile i64 2, i64* inttoptr (i64 3759173640 to i64*)
%7 = load volatile i64, i64* inttoptr (i64 4160749568 to i64*)
%8 = and i64 %7, -201588741
store volatile i64 %8, i64* inttoptr (i64 4160749568 to i64*)
%9 = load volatile i64, i64* inttoptr (i64 4160749568 to i64*)
%10 = or i64 %9, 3
store volatile i64 %10, i64* inttoptr (i64 4160749568 to i64*)
%11 = load volatile i64, i64* inttoptr (i64 4160749568 to i64*)
%12 = or i64 %11, 912
store volatile i64 %12, i64* inttoptr (i64 4160749568 to i64*)
%13 = load volatile i64, i64* inttoptr (i64 4160749572 to i64*)
%14 = or i64 %13, 96
store volatile i64 %14, i64* inttoptr (i64 4160749572 to i64*)
store volatile i64 460544, i64* inttoptr (i64 4160749584 to i64*)
store volatile i64 2556928, i64* inttoptr (i64 4160749588 to i64*)
store volatile i64 555487, i64* inttoptr (i64 4160749592 to i64*)
%15 = load volatile i64, i64* inttoptr (i64 4160749600 to i64*)
%16 = or i64 %15, 1
store volatile i64 %16, i64* inttoptr (i64 4160749600 to i64*)
%17 = load volatile i64, i64* inttoptr (i64 4160749600 to i64*)
%18 = and i64 %17, -61
store volatile i64 %18, i64* inttoptr (i64 4160749600 to i64*)
%19 = load volatile i64, i64* inttoptr (i64 4160749600 to i64*)
%20 = or i64 %19, 32812
store volatile i64 %20, i64* inttoptr (i64 4160749600 to i64*)
store volatile i64 0, i64* inttoptr (i64 4160749632 to i64*)
store volatile i64 981263, i64* inttoptr (i64 4160749636 to i64*)
store volatile i64 130560, i64* inttoptr (i64 4160749640 to i64*)
store volatile i64 587202560, i64* inttoptr (i64 4160749728 to i64*)
store volatile i64 522240, i64* inttoptr (i64 4160749776 to i64*)
store volatile i64 1, i64* inttoptr (i64 4160749620 to i64*)
ret void
}