#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*/ Hw_ISR_Init();
int /*<<< orphan*/ Hw_Led_Init();
int /*<<< orphan*/ Hw_PLL_Init();
int /*<<< orphan*/ Hw_Timer_Init();
int /*<<< orphan*/ Hw_Uart_Init();
int /*<<< orphan*/ Hw_VCom_Init();
void Hw_Init(void) {
  Hw_PLL_Init();
  Hw_ISR_Init();
  (*(volatile unsigned long *)(0x40010800 + 0x0000)) = 0x33333333;
  (*(volatile unsigned long *)(0x40010800 + 0x0004)) = 0x333334B3;
  (*(volatile unsigned long *)(0x40010C00 + 0x0000)) = 0x33333333;
  (*(volatile unsigned long *)(0x40010C00 + 0x0004)) = 0x33333333;
  (*(volatile unsigned long *)(0x40011000 + 0x0004)) = 0x33444444;
  Hw_Uart_Init();
  Hw_Led_Init();
  Hw_Timer_Init();
  Hw_VCom_Init();
}


x86 assembly (clang, -O0):
<Hw_Init>:
push   %rbp
mov    %rsp,%rbp
mov    $0x0,%al
call   1060 <Hw_PLL_Init@plt>
mov    $0x0,%al
call   1030 <Hw_ISR_Init@plt>
mov    $0x40010800,%eax
movq   $0x33333333,(%rax)
mov    $0x40010804,%eax
movq   $0x333334b3,(%rax)
mov    $0x40010c00,%eax
movq   $0x33333333,(%rax)
mov    $0x40010c04,%eax
movq   $0x33333333,(%rax)
mov    $0x40011004,%eax
movq   $0x33444444,(%rax)
mov    $0x0,%al
call   1050 <Hw_Uart_Init@plt>
mov    $0x0,%al
call   1040 <Hw_Led_Init@plt>
mov    $0x0,%al
call   1070 <Hw_Timer_Init@plt>
mov    $0x0,%al
call   1080 <Hw_VCom_Init@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<Hw_Init>:
push   %rax
xor    %eax,%eax
call   1060 <Hw_PLL_Init@plt>
xor    %eax,%eax
call   1030 <Hw_ISR_Init@plt>
movq   $0x33333333,0x40010800
40 33 33 33 33
movq   $0x333334b3,0x40010804
40 b3 34 33 33
movq   $0x33333333,0x40010c00
40 33 33 33 33
movq   $0x33333333,0x40010c04
40 33 33 33 33
movq   $0x33444444,0x40011004
40 44 44 44 33
xor    %eax,%eax
call   1050 <Hw_Uart_Init@plt>
xor    %eax,%eax
call   1040 <Hw_Led_Init@plt>
xor    %eax,%eax
call   1070 <Hw_Timer_Init@plt>
xor    %eax,%eax
pop    %rcx
jmp    1080 <Hw_VCom_Init@plt>

LLVM IR (-O0):
define void @Hw_Init() {
%1 = call i32 (...) @Hw_PLL_Init()
%2 = call i32 (...) @Hw_ISR_Init()
store volatile i64 858993459, i64* inttoptr (i64 1073809408 to i64*)
store volatile i64 858993843, i64* inttoptr (i64 1073809412 to i64*)
store volatile i64 858993459, i64* inttoptr (i64 1073810432 to i64*)
store volatile i64 858993459, i64* inttoptr (i64 1073810436 to i64*)
store volatile i64 860111940, i64* inttoptr (i64 1073811460 to i64*)
%3 = call i32 (...) @Hw_Uart_Init()
%4 = call i32 (...) @Hw_Led_Init()
%5 = call i32 (...) @Hw_Timer_Init()
%6 = call i32 (...) @Hw_VCom_Init()
ret void
}

LLVM IR (-O2):
define void @Hw_Init() {
%1 = tail call i32 (...) @Hw_PLL_Init()
%2 = tail call i32 (...) @Hw_ISR_Init()
store volatile i64 858993459, i64* inttoptr (i64 1073809408 to i64*)
store volatile i64 858993843, i64* inttoptr (i64 1073809412 to i64*)
store volatile i64 858993459, i64* inttoptr (i64 1073810432 to i64*)
store volatile i64 858993459, i64* inttoptr (i64 1073810436 to i64*)
store volatile i64 860111940, i64* inttoptr (i64 1073811460 to i64*)
%3 = tail call i32 (...) @Hw_Uart_Init()
%4 = tail call i32 (...) @Hw_Led_Init()
%5 = tail call i32 (...) @Hw_Timer_Init()
%6 = tail call i32 (...) @Hw_VCom_Init()
ret void
}