#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_ms(int);
int /*<<< orphan*/ mrf_set_channel();
int /*<<< orphan*/ mrf_set_interrupts();
int /*<<< orphan*/ mrf_write_long(int, int);
int /*<<< orphan*/ mrf_write_short(int, int);
void mrf_init(void) {
  mrf_write_short(0x18, 0x98);
  mrf_write_short(0x2E, 0x95);
  mrf_write_long(0x200, 0x03);
  mrf_write_long(0x201, 0x01);
  mrf_write_long(0x202, 0x80);
  mrf_write_long(0x206, 0x90);
  mrf_write_long(0x207, 0x80);
  mrf_write_long(0x208, 0x10);
  mrf_write_long(0x220, 0x21);
  mrf_write_short(0x3A, 0x80);
  mrf_write_short(0x3F, 0x60);
  mrf_write_short(0x3E, 0x40);
  mrf_set_interrupts();
  mrf_set_channel();
  mrf_write_short(0x36, 0x04);
  mrf_write_short(0x36, 0x00);
  _delay_ms(1);
}


x86 assembly (clang, -O0):
<mrf_init>:
push   %rbp
mov    %rsp,%rbp
mov    $0x18,%edi
mov    $0x98,%esi
call   1070 <mrf_write_short@plt>
mov    $0x2e,%edi
mov    $0x95,%esi
call   1070 <mrf_write_short@plt>
mov    $0x200,%edi
mov    $0x3,%esi
call   1040 <mrf_write_long@plt>
mov    $0x201,%edi
mov    $0x1,%esi
call   1040 <mrf_write_long@plt>
mov    $0x202,%edi
mov    $0x80,%esi
call   1040 <mrf_write_long@plt>
mov    $0x206,%edi
mov    $0x90,%esi
call   1040 <mrf_write_long@plt>
mov    $0x207,%edi
mov    $0x80,%esi
call   1040 <mrf_write_long@plt>
mov    $0x208,%edi
mov    $0x10,%esi
call   1040 <mrf_write_long@plt>
mov    $0x220,%edi
mov    $0x21,%esi
call   1040 <mrf_write_long@plt>
mov    $0x3a,%edi
mov    $0x80,%esi
call   1070 <mrf_write_short@plt>
mov    $0x3f,%edi
mov    $0x60,%esi
call   1070 <mrf_write_short@plt>
mov    $0x3e,%edi
mov    $0x40,%esi
call   1070 <mrf_write_short@plt>
mov    $0x0,%al
call   1030 <mrf_set_interrupts@plt>
mov    $0x0,%al
call   1060 <mrf_set_channel@plt>
mov    $0x36,%edi
mov    $0x4,%esi
call   1070 <mrf_write_short@plt>
mov    $0x36,%edi
xor    %esi,%esi
call   1070 <mrf_write_short@plt>
mov    $0x1,%edi
call   1050 <_delay_ms@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<mrf_init>:
push   %rax
mov    $0x18,%edi
mov    $0x98,%esi
call   1070 <mrf_write_short@plt>
mov    $0x2e,%edi
mov    $0x95,%esi
call   1070 <mrf_write_short@plt>
mov    $0x200,%edi
mov    $0x3,%esi
call   1040 <mrf_write_long@plt>
mov    $0x201,%edi
mov    $0x1,%esi
call   1040 <mrf_write_long@plt>
mov    $0x202,%edi
mov    $0x80,%esi
call   1040 <mrf_write_long@plt>
mov    $0x206,%edi
mov    $0x90,%esi
call   1040 <mrf_write_long@plt>
mov    $0x207,%edi
mov    $0x80,%esi
call   1040 <mrf_write_long@plt>
mov    $0x208,%edi
mov    $0x10,%esi
call   1040 <mrf_write_long@plt>
mov    $0x220,%edi
mov    $0x21,%esi
call   1040 <mrf_write_long@plt>
mov    $0x3a,%edi
mov    $0x80,%esi
call   1070 <mrf_write_short@plt>
mov    $0x3f,%edi
mov    $0x60,%esi
call   1070 <mrf_write_short@plt>
mov    $0x3e,%edi
mov    $0x40,%esi
call   1070 <mrf_write_short@plt>
xor    %eax,%eax
call   1030 <mrf_set_interrupts@plt>
xor    %eax,%eax
call   1060 <mrf_set_channel@plt>
mov    $0x36,%edi
mov    $0x4,%esi
call   1070 <mrf_write_short@plt>
mov    $0x36,%edi
xor    %esi,%esi
call   1070 <mrf_write_short@plt>
mov    $0x1,%edi
pop    %rax
jmp    1050 <_delay_ms@plt>

LLVM IR (-O0):
define void @mrf_init() {
%1 = call i32 @mrf_write_short(i32 24, i32 152)
%2 = call i32 @mrf_write_short(i32 46, i32 149)
%3 = call i32 @mrf_write_long(i32 512, i32 3)
%4 = call i32 @mrf_write_long(i32 513, i32 1)
%5 = call i32 @mrf_write_long(i32 514, i32 128)
%6 = call i32 @mrf_write_long(i32 518, i32 144)
%7 = call i32 @mrf_write_long(i32 519, i32 128)
%8 = call i32 @mrf_write_long(i32 520, i32 16)
%9 = call i32 @mrf_write_long(i32 544, i32 33)
%10 = call i32 @mrf_write_short(i32 58, i32 128)
%11 = call i32 @mrf_write_short(i32 63, i32 96)
%12 = call i32 @mrf_write_short(i32 62, i32 64)
%13 = call i32 (...) @mrf_set_interrupts()
%14 = call i32 (...) @mrf_set_channel()
%15 = call i32 @mrf_write_short(i32 54, i32 4)
%16 = call i32 @mrf_write_short(i32 54, i32 0)
%17 = call i32 @_delay_ms(i32 1)
ret void
}

LLVM IR (-O2):
define void @mrf_init() {
%1 = tail call i32 @mrf_write_short(i32 24, i32 152)
%2 = tail call i32 @mrf_write_short(i32 46, i32 149)
%3 = tail call i32 @mrf_write_long(i32 512, i32 3)
%4 = tail call i32 @mrf_write_long(i32 513, i32 1)
%5 = tail call i32 @mrf_write_long(i32 514, i32 128)
%6 = tail call i32 @mrf_write_long(i32 518, i32 144)
%7 = tail call i32 @mrf_write_long(i32 519, i32 128)
%8 = tail call i32 @mrf_write_long(i32 520, i32 16)
%9 = tail call i32 @mrf_write_long(i32 544, i32 33)
%10 = tail call i32 @mrf_write_short(i32 58, i32 128)
%11 = tail call i32 @mrf_write_short(i32 63, i32 96)
%12 = tail call i32 @mrf_write_short(i32 62, i32 64)
%13 = tail call i32 (...) @mrf_set_interrupts()
%14 = tail call i32 (...) @mrf_set_channel()
%15 = tail call i32 @mrf_write_short(i32 54, i32 4)
%16 = tail call i32 @mrf_write_short(i32 54, i32 0)
%17 = tail call i32 @_delay_ms(i32 1)
ret void
}