#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*/ blender_read_reg(int, unsigned int *);
int /*<<< orphan*/ blender_write_reg(int, unsigned int);
int /*<<< orphan*/ sio_write_reg(int, int);
int init_special(void) {
  unsigned int move_control;
  {}
  sio_write_reg(0x3C, 0x0089);
  sio_write_reg(0x3E, 0x0280);
  sio_write_reg(0x36, 0x0020);
  blender_write_reg(0x000A, 0x0004);
  blender_write_reg(0x504, 0x4012);
  blender_write_reg(0x50E, 0x0010);
  blender_write_reg(0x50C, 0x0010);
  blender_write_reg(0x510, 0x0004);
  blender_read_reg(0x200, &move_control);
  blender_write_reg(0x200, move_control | (1 << 0));
  return 0;
}


x86 assembly (clang, -O0):
<init_special>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    $0x3c,%edi
mov    $0x89,%esi
call   1030 <sio_write_reg@plt>
mov    $0x3e,%edi
mov    $0x280,%esi
call   1030 <sio_write_reg@plt>
mov    $0x36,%edi
mov    $0x20,%esi
call   1030 <sio_write_reg@plt>
mov    $0xa,%edi
mov    $0x4,%esi
call   1050 <blender_write_reg@plt>
mov    $0x504,%edi
mov    $0x4012,%esi
call   1050 <blender_write_reg@plt>
mov    $0x50e,%edi
mov    $0x10,%esi
call   1050 <blender_write_reg@plt>
mov    $0x50c,%edi
mov    $0x10,%esi
call   1050 <blender_write_reg@plt>
mov    $0x510,%edi
mov    $0x4,%esi
call   1050 <blender_write_reg@plt>
mov    $0x200,%edi
lea    -0x4(%rbp),%rsi
call   1040 <blender_read_reg@plt>
mov    -0x4(%rbp),%esi
or     $0x1,%esi
mov    $0x200,%edi
call   1050 <blender_write_reg@plt>
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<init_special>:
push   %rax
mov    $0x3c,%edi
mov    $0x89,%esi
call   1030 <sio_write_reg@plt>
mov    $0x3e,%edi
mov    $0x280,%esi
call   1030 <sio_write_reg@plt>
mov    $0x36,%edi
mov    $0x20,%esi
call   1030 <sio_write_reg@plt>
mov    $0xa,%edi
mov    $0x4,%esi
call   1050 <blender_write_reg@plt>
mov    $0x504,%edi
mov    $0x4012,%esi
call   1050 <blender_write_reg@plt>
mov    $0x50e,%edi
mov    $0x10,%esi
call   1050 <blender_write_reg@plt>
mov    $0x50c,%edi
mov    $0x10,%esi
call   1050 <blender_write_reg@plt>
mov    $0x510,%edi
mov    $0x4,%esi
call   1050 <blender_write_reg@plt>
lea    0x4(%rsp),%rsi
mov    $0x200,%edi
call   1040 <blender_read_reg@plt>
mov    0x4(%rsp),%esi
or     $0x1,%esi
mov    $0x200,%edi
call   1050 <blender_write_reg@plt>
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
define i32 @init_special() {
%1 = alloca i32
%2 = call i32 @sio_write_reg(i32 60, i32 137)
%3 = call i32 @sio_write_reg(i32 62, i32 640)
%4 = call i32 @sio_write_reg(i32 54, i32 32)
%5 = call i32 @blender_write_reg(i32 10, i32 4)
%6 = call i32 @blender_write_reg(i32 1284, i32 16402)
%7 = call i32 @blender_write_reg(i32 1294, i32 16)
%8 = call i32 @blender_write_reg(i32 1292, i32 16)
%9 = call i32 @blender_write_reg(i32 1296, i32 4)
%10 = call i32 @blender_read_reg(i32 512, i32* %1)
%11 = load i32, i32* %1
%12 = or i32 %11, 1
%13 = call i32 @blender_write_reg(i32 512, i32 %12)
ret i32 0
}

LLVM IR (-O2):
define i32 @init_special() {
%1 = alloca i32
%2 = bitcast i32* %1 to i8*
%3 = tail call i32 @sio_write_reg(i32 60, i32 137)
%4 = tail call i32 @sio_write_reg(i32 62, i32 640)
%5 = tail call i32 @sio_write_reg(i32 54, i32 32)
%6 = tail call i32 @blender_write_reg(i32 10, i32 4)
%7 = tail call i32 @blender_write_reg(i32 1284, i32 16402)
%8 = tail call i32 @blender_write_reg(i32 1294, i32 16)
%9 = tail call i32 @blender_write_reg(i32 1292, i32 16)
%10 = tail call i32 @blender_write_reg(i32 1296, i32 4)
%11 = call i32 @blender_read_reg(i32 512, i32* %1)
%12 = load i32, i32* %1
%13 = or i32 %12, 1
%14 = call i32 @blender_write_reg(i32 512, i32 %13)
ret i32 0
}