#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*/ CS(int /*<<< orphan*/);
int /*<<< orphan*/ DC(int /*<<< orphan*/);
int /*<<< orphan*/ SSD1339_reset();
int /*<<< orphan*/ oled_write_c(int);
int /*<<< orphan*/ oled_write_d(int);
void SSD1339_init(void) {
  DC(0);
  CS(0);
  SSD1339_reset();
  oled_write_c(0xa0);
  oled_write_d(0xb4);
  oled_write_c(0xa1);
  oled_write_d(0x00);
  oled_write_c(0xA6);
  oled_write_c(0xad);
  oled_write_d(0x8e);
  oled_write_c(0xb0);
  oled_write_d(0x05);
  oled_write_c(0xb1);
  oled_write_d(0x11);
  oled_write_c(0xb3);
  oled_write_d(0xf0);
  oled_write_c(0xbb);
  oled_write_d(0x1c);
  oled_write_d(0x1c);
  oled_write_d(0x1c);
  oled_write_c(0xbe);
  oled_write_d(0x1f);
  oled_write_c(0xc1);
  oled_write_d(0xaa);
  oled_write_d(0xb4);
  oled_write_d(0xc8);
  oled_write_c(0xc7);
  oled_write_d(0x0f);
  oled_write_c(0xca);
  oled_write_d(0x7f);
  oled_write_c(0xaf);
}


x86 assembly (clang, -O0):
<SSD1339_init>:
push   %rbp
mov    %rsp,%rbp
xor    %edi,%edi
call   1040 <DC@plt>
xor    %edi,%edi
call   1070 <CS@plt>
mov    $0x0,%al
call   1050 <SSD1339_reset@plt>
mov    $0xa0,%edi
call   1030 <oled_write_c@plt>
mov    $0xb4,%edi
call   1060 <oled_write_d@plt>
mov    $0xa1,%edi
call   1030 <oled_write_c@plt>
xor    %edi,%edi
call   1060 <oled_write_d@plt>
mov    $0xa6,%edi
call   1030 <oled_write_c@plt>
mov    $0xad,%edi
call   1030 <oled_write_c@plt>
mov    $0x8e,%edi
call   1060 <oled_write_d@plt>
mov    $0xb0,%edi
call   1030 <oled_write_c@plt>
mov    $0x5,%edi
call   1060 <oled_write_d@plt>
mov    $0xb1,%edi
call   1030 <oled_write_c@plt>
mov    $0x11,%edi
call   1060 <oled_write_d@plt>
mov    $0xb3,%edi
call   1030 <oled_write_c@plt>
mov    $0xf0,%edi
call   1060 <oled_write_d@plt>
mov    $0xbb,%edi
call   1030 <oled_write_c@plt>
mov    $0x1c,%edi
call   1060 <oled_write_d@plt>
mov    $0x1c,%edi
call   1060 <oled_write_d@plt>
mov    $0x1c,%edi
call   1060 <oled_write_d@plt>
mov    $0xbe,%edi
call   1030 <oled_write_c@plt>
mov    $0x1f,%edi
call   1060 <oled_write_d@plt>
mov    $0xc1,%edi
call   1030 <oled_write_c@plt>
mov    $0xaa,%edi
call   1060 <oled_write_d@plt>
mov    $0xb4,%edi
call   1060 <oled_write_d@plt>
mov    $0xc8,%edi
call   1060 <oled_write_d@plt>
mov    $0xc7,%edi
call   1030 <oled_write_c@plt>
mov    $0xf,%edi
call   1060 <oled_write_d@plt>
mov    $0xca,%edi
call   1030 <oled_write_c@plt>
mov    $0x7f,%edi
call   1060 <oled_write_d@plt>
mov    $0xaf,%edi
call   1030 <oled_write_c@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<SSD1339_init>:
push   %rax
xor    %edi,%edi
call   1040 <DC@plt>
xor    %edi,%edi
call   1070 <CS@plt>
xor    %eax,%eax
call   1050 <SSD1339_reset@plt>
mov    $0xa0,%edi
call   1030 <oled_write_c@plt>
mov    $0xb4,%edi
call   1060 <oled_write_d@plt>
mov    $0xa1,%edi
call   1030 <oled_write_c@plt>
xor    %edi,%edi
call   1060 <oled_write_d@plt>
mov    $0xa6,%edi
call   1030 <oled_write_c@plt>
mov    $0xad,%edi
call   1030 <oled_write_c@plt>
mov    $0x8e,%edi
call   1060 <oled_write_d@plt>
mov    $0xb0,%edi
call   1030 <oled_write_c@plt>
mov    $0x5,%edi
call   1060 <oled_write_d@plt>
mov    $0xb1,%edi
call   1030 <oled_write_c@plt>
mov    $0x11,%edi
call   1060 <oled_write_d@plt>
mov    $0xb3,%edi
call   1030 <oled_write_c@plt>
mov    $0xf0,%edi
call   1060 <oled_write_d@plt>
mov    $0xbb,%edi
call   1030 <oled_write_c@plt>
mov    $0x1c,%edi
call   1060 <oled_write_d@plt>
mov    $0x1c,%edi
call   1060 <oled_write_d@plt>
mov    $0x1c,%edi
call   1060 <oled_write_d@plt>
mov    $0xbe,%edi
call   1030 <oled_write_c@plt>
mov    $0x1f,%edi
call   1060 <oled_write_d@plt>
mov    $0xc1,%edi
call   1030 <oled_write_c@plt>
mov    $0xaa,%edi
call   1060 <oled_write_d@plt>
mov    $0xb4,%edi
call   1060 <oled_write_d@plt>
mov    $0xc8,%edi
call   1060 <oled_write_d@plt>
mov    $0xc7,%edi
call   1030 <oled_write_c@plt>
mov    $0xf,%edi
call   1060 <oled_write_d@plt>
mov    $0xca,%edi
call   1030 <oled_write_c@plt>
mov    $0x7f,%edi
call   1060 <oled_write_d@plt>
mov    $0xaf,%edi
pop    %rax
jmp    1030 <oled_write_c@plt>

LLVM IR (-O0):
define void @SSD1339_init() {
%1 = call i32 @DC(i32 0)
%2 = call i32 @CS(i32 0)
%3 = call i32 (...) @SSD1339_reset()
%4 = call i32 @oled_write_c(i32 160)
%5 = call i32 @oled_write_d(i32 180)
%6 = call i32 @oled_write_c(i32 161)
%7 = call i32 @oled_write_d(i32 0)
%8 = call i32 @oled_write_c(i32 166)
%9 = call i32 @oled_write_c(i32 173)
%10 = call i32 @oled_write_d(i32 142)
%11 = call i32 @oled_write_c(i32 176)
%12 = call i32 @oled_write_d(i32 5)
%13 = call i32 @oled_write_c(i32 177)
%14 = call i32 @oled_write_d(i32 17)
%15 = call i32 @oled_write_c(i32 179)
%16 = call i32 @oled_write_d(i32 240)
%17 = call i32 @oled_write_c(i32 187)
%18 = call i32 @oled_write_d(i32 28)
%19 = call i32 @oled_write_d(i32 28)
%20 = call i32 @oled_write_d(i32 28)
%21 = call i32 @oled_write_c(i32 190)
%22 = call i32 @oled_write_d(i32 31)
%23 = call i32 @oled_write_c(i32 193)
%24 = call i32 @oled_write_d(i32 170)
%25 = call i32 @oled_write_d(i32 180)
%26 = call i32 @oled_write_d(i32 200)
%27 = call i32 @oled_write_c(i32 199)
%28 = call i32 @oled_write_d(i32 15)
%29 = call i32 @oled_write_c(i32 202)
%30 = call i32 @oled_write_d(i32 127)
%31 = call i32 @oled_write_c(i32 175)
ret void
}

LLVM IR (-O2):
define void @SSD1339_init() {
%1 = tail call i32 @DC(i32 0)
%2 = tail call i32 @CS(i32 0)
%3 = tail call i32 (...) @SSD1339_reset()
%4 = tail call i32 @oled_write_c(i32 160)
%5 = tail call i32 @oled_write_d(i32 180)
%6 = tail call i32 @oled_write_c(i32 161)
%7 = tail call i32 @oled_write_d(i32 0)
%8 = tail call i32 @oled_write_c(i32 166)
%9 = tail call i32 @oled_write_c(i32 173)
%10 = tail call i32 @oled_write_d(i32 142)
%11 = tail call i32 @oled_write_c(i32 176)
%12 = tail call i32 @oled_write_d(i32 5)
%13 = tail call i32 @oled_write_c(i32 177)
%14 = tail call i32 @oled_write_d(i32 17)
%15 = tail call i32 @oled_write_c(i32 179)
%16 = tail call i32 @oled_write_d(i32 240)
%17 = tail call i32 @oled_write_c(i32 187)
%18 = tail call i32 @oled_write_d(i32 28)
%19 = tail call i32 @oled_write_d(i32 28)
%20 = tail call i32 @oled_write_d(i32 28)
%21 = tail call i32 @oled_write_c(i32 190)
%22 = tail call i32 @oled_write_d(i32 31)
%23 = tail call i32 @oled_write_c(i32 193)
%24 = tail call i32 @oled_write_d(i32 170)
%25 = tail call i32 @oled_write_d(i32 180)
%26 = tail call i32 @oled_write_d(i32 200)
%27 = tail call i32 @oled_write_c(i32 199)
%28 = tail call i32 @oled_write_d(i32 15)
%29 = tail call i32 @oled_write_c(i32 202)
%30 = tail call i32 @oled_write_d(i32 127)
%31 = tail call i32 @oled_write_c(i32 175)
ret void
}