#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*/ ADCInit(int);
int /*<<< orphan*/ PWM_Init();
int /*<<< orphan*/ UART1Initialize(int);
int /*<<< orphan*/ UARTInitialize(int);
int /*<<< orphan*/ init_interrupts();
int /*<<< orphan*/ init_ports();
int /*<<< orphan*/ init_spi();
int /*<<< orphan*/ init_spi1();
int /*<<< orphan*/ init_timer0();
int /*<<< orphan*/ pll_feed();
int /*<<< orphan*/ pll_init();
void init(void) {
  (*(volatile unsigned long *)(0xE01FC000 + 0x000)) = 0x02;
  (*(volatile unsigned long *)(0xE01FC000 + 0x004)) = 0x04;
  (*(volatile unsigned long *)(0xE01FC000 + 0x100)) = 0x01;
  pll_init();
  pll_feed();
  init_ports();
  UARTInitialize(57600);
  UART1Initialize(57600);
  init_spi();
  init_spi1();
  init_timer0();
  PWM_Init();
  ADCInit(1000000);
  init_interrupts();
}


x86 assembly (clang, -O0):
<init>:
push   %rbp
mov    %rsp,%rbp
mov    $0xe01fc000,%eax
movq   $0x2,(%rax)
mov    $0xe01fc004,%eax
movq   $0x4,(%rax)
mov    $0xe01fc100,%eax
movq   $0x1,(%rax)
mov    $0x0,%al
call   10c0 <pll_init@plt>
mov    $0x0,%al
call   10d0 <pll_feed@plt>
mov    $0x0,%al
call   10b0 <init_ports@plt>
mov    $0xe100,%edi
call   1080 <UARTInitialize@plt>
mov    $0xe100,%edi
call   1050 <UART1Initialize@plt>
mov    $0x0,%al
call   1030 <init_spi@plt>
mov    $0x0,%al
call   10a0 <init_spi1@plt>
mov    $0x0,%al
call   1060 <init_timer0@plt>
mov    $0x0,%al
call   1090 <PWM_Init@plt>
mov    $0xf4240,%edi
call   1040 <ADCInit@plt>
mov    $0x0,%al
call   1070 <init_interrupts@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<init>:
push   %rax
mov    $0xe01fc000,%eax
movq   $0x2,(%rax)
movq   $0x4,0x4(%rax)
movq   $0x1,0x100(%rax)
xor    %eax,%eax
call   10c0 <pll_init@plt>
xor    %eax,%eax
call   10d0 <pll_feed@plt>
xor    %eax,%eax
call   10b0 <init_ports@plt>
mov    $0xe100,%edi
call   1080 <UARTInitialize@plt>
mov    $0xe100,%edi
call   1050 <UART1Initialize@plt>
xor    %eax,%eax
call   1030 <init_spi@plt>
xor    %eax,%eax
call   10a0 <init_spi1@plt>
xor    %eax,%eax
call   1060 <init_timer0@plt>
xor    %eax,%eax
call   1090 <PWM_Init@plt>
mov    $0xf4240,%edi
call   1040 <ADCInit@plt>
xor    %eax,%eax
pop    %rcx
jmp    1070 <init_interrupts@plt>

LLVM IR (-O0):
define void @init() {
store volatile i64 2, i64* inttoptr (i64 3760177152 to i64*)
store volatile i64 4, i64* inttoptr (i64 3760177156 to i64*)
store volatile i64 1, i64* inttoptr (i64 3760177408 to i64*)
%1 = call i32 (...) @pll_init()
%2 = call i32 (...) @pll_feed()
%3 = call i32 (...) @init_ports()
%4 = call i32 @UARTInitialize(i32 57600)
%5 = call i32 @UART1Initialize(i32 57600)
%6 = call i32 (...) @init_spi()
%7 = call i32 (...) @init_spi1()
%8 = call i32 (...) @init_timer0()
%9 = call i32 (...) @PWM_Init()
%10 = call i32 @ADCInit(i32 1000000)
%11 = call i32 (...) @init_interrupts()
ret void
}

LLVM IR (-O2):
define void @init() {
store volatile i64 2, i64* inttoptr (i64 3760177152 to i64*)
store volatile i64 4, i64* inttoptr (i64 3760177156 to i64*)
store volatile i64 1, i64* inttoptr (i64 3760177408 to i64*)
%1 = tail call i32 (...) @pll_init()
%2 = tail call i32 (...) @pll_feed()
%3 = tail call i32 (...) @init_ports()
%4 = tail call i32 @UARTInitialize(i32 57600)
%5 = tail call i32 @UART1Initialize(i32 57600)
%6 = tail call i32 (...) @init_spi()
%7 = tail call i32 (...) @init_spi1()
%8 = tail call i32 (...) @init_timer0()
%9 = tail call i32 (...) @PWM_Init()
%10 = tail call i32 @ADCInit(i32 1000000)
%11 = tail call i32 (...) @init_interrupts()
ret void
}