#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 FS460_get_input_mode(int, int *);
int sio_read_reg(int, unsigned long *);
int sio_write_reg(int, unsigned long);
int FS460_set_input_mode(int input, int mode) {
  int err;
  unsigned long mux1, mux2;
  if ((1 != input) && (2 != input))
    return 0x1000;
  err = sio_read_reg(0x3C, &mux1);
  if (err)
    return err;
  err = sio_read_reg(0x3E, &mux2);
  if (err)
    return err;
  switch (mode) {
  case 0: {
    switch (input) {
    case 1: {
      mux1 &= ~(1 << 10);
      mux2 &= ~(1 << 10);
      mux2 &= ~(1 << 12);
    } break;
    case 2: {
      mux1 &= ~(1 << 11);
      mux2 &= ~(1 << 11);
      mux2 &= ~(1 << 13);
    }
    }
  } break;
  case 1: {
    switch (input) {
    case 1: {
      mux1 &= ~(1 << 10);
      mux2 &= ~(1 << 3);
      mux2 |= (1 << 4);
      mux2 &= ~(1 << 10);
      mux2 |= (1 << 12);
    } break;
    case 2: {
      mux1 &= ~(1 << 11);
      mux2 &= ~(1 << 2);
      mux2 |= (1 << 5);
      mux2 &= ~(1 << 11);
      mux2 |= (1 << 13);
    }
    }
  } break;
  case 2: {
    int i;
    switch (input) {
    case 1: {
      err = FS460_get_input_mode(2, &i);
      if (err)
        return err;
      if (2 == i)
        return 0x1125;
      mux1 |= (1 << 10);
      mux2 &= ~(1 << 0);
      mux2 &= ~(1 << 4);
      mux2 |= (1 << 10);
      mux2 |= (1 << 12);
    } break;
    case 2: {
      err = FS460_get_input_mode(1, &i);
      if (err)
        return err;
      if (2 == i)
        return 0x1125;
      mux1 |= (1 << 11);
      mux2 &= ~(1 << 0);
      mux2 &= ~(1 << 5);
      mux2 |= (1 << 11);
      mux2 |= (1 << 13);
    } break;
    }
  } break;
  case 3: {
    switch (input) {
    case 1: {
      mux1 &= ~(1 << 10);
      mux2 |= (1 << 0);
      mux2 |= (1 << 3);
      mux2 |= (1 << 4);
      mux2 |= (1 << 10);
      mux2 |= (1 << 12);
    } break;
    case 2: {
      mux1 &= ~(1 << 11);
      mux2 |= (1 << 0);
      mux2 |= (1 << 2);
      mux2 |= (1 << 5);
      mux2 |= (1 << 11);
      mux2 |= (1 << 13);
    } break;
    }
  } break;
  }
  err = sio_write_reg(0x3C, mux1);
  if (err)
    return err;
  err = sio_write_reg(0x3E, mux2);
  if (err)
    return err;
  return 0;
}


x86 assembly (clang, -O0):
<FS460_set_input_mode>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    $0x1,%eax
cmp    -0x8(%rbp),%eax
je     1166 <FS460_set_input_mode+0x36>
mov    $0x2,%eax
cmp    -0x8(%rbp),%eax
je     1166 <FS460_set_input_mode+0x36>
movl   $0x1000,-0x4(%rbp)
jmp    155e <FS460_set_input_mode+0x42e>
mov    $0x3c,%edi
lea    -0x18(%rbp),%rsi
call   1040 <sio_read_reg@plt>
mov    %eax,-0x10(%rbp)
cmpl   $0x0,-0x10(%rbp)
je     118c <FS460_set_input_mode+0x5c>
mov    -0x10(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    155e <FS460_set_input_mode+0x42e>
mov    $0x3e,%edi
lea    -0x20(%rbp),%rsi
call   1040 <sio_read_reg@plt>
mov    %eax,-0x10(%rbp)
cmpl   $0x0,-0x10(%rbp)
je     11b2 <FS460_set_input_mode+0x82>
mov    -0x10(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    155e <FS460_set_input_mode+0x42e>
mov    -0xc(%rbp),%eax
mov    %rax,-0x30(%rbp)
sub    $0x3,%rax
ja     150b <FS460_set_input_mode+0x3db>
mov    -0x30(%rbp),%rax
lea    0xe32(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x8(%rbp),%eax
mov    %eax,-0x34(%rbp)
sub    $0x1,%eax
je     11fc <FS460_set_input_mode+0xcc>
jmp    11eb <FS460_set_input_mode+0xbb>
mov    -0x34(%rbp),%eax
sub    $0x2,%eax
je     122b <FS460_set_input_mode+0xfb>
jmp    1255 <FS460_set_input_mode+0x125>
mov    -0x18(%rbp),%rax
and    $0xfffffffffffffbff,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
and    $0xfffffffffffffbff,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
and    $0xffffffffffffefff,%rax
mov    %rax,-0x20(%rbp)
jmp    1255 <FS460_set_input_mode+0x125>
mov    -0x18(%rbp),%rax
and    $0xfffffffffffff7ff,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
and    $0xfffffffffffff7ff,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
and    $0xffffffffffffdfff,%rax
mov    %rax,-0x20(%rbp)
jmp    150b <FS460_set_input_mode+0x3db>
mov    -0x8(%rbp),%eax
mov    %eax,-0x38(%rbp)
sub    $0x1,%eax
je     127f <FS460_set_input_mode+0x14f>
jmp    126e <FS460_set_input_mode+0x13e>
mov    -0x38(%rbp),%eax
sub    $0x2,%eax
je     12c6 <FS460_set_input_mode+0x196>
jmp    1308 <FS460_set_input_mode+0x1d8>
mov    -0x18(%rbp),%rax
and    $0xfffffffffffffbff,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
and    $0xfffffffffffffff7,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
or     $0x10,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
and    $0xfffffffffffffbff,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
or     $0x1000,%rax
mov    %rax,-0x20(%rbp)
jmp    1308 <FS460_set_input_mode+0x1d8>
mov    -0x18(%rbp),%rax
and    $0xfffffffffffff7ff,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
and    $0xfffffffffffffffb,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
or     $0x20,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
and    $0xfffffffffffff7ff,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
or     $0x2000,%rax
mov    %rax,-0x20(%rbp)
jmp    150b <FS460_set_input_mode+0x3db>
mov    -0x8(%rbp),%eax
mov    %eax,-0x3c(%rbp)
sub    $0x1,%eax
je     1332 <FS460_set_input_mode+0x202>
jmp    1321 <FS460_set_input_mode+0x1f1>
mov    -0x3c(%rbp),%eax
sub    $0x2,%eax
je     13b9 <FS460_set_input_mode+0x289>
jmp    143b <FS460_set_input_mode+0x30b>
mov    $0x2,%edi
lea    -0x24(%rbp),%rsi
call   1050 <FS460_get_input_mode@plt>
mov    %eax,-0x10(%rbp)
cmpl   $0x0,-0x10(%rbp)
je     1358 <FS460_set_input_mode+0x228>
mov    -0x10(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    155e <FS460_set_input_mode+0x42e>
mov    $0x2,%eax
cmp    -0x24(%rbp),%eax
jne    1372 <FS460_set_input_mode+0x242>
movl   $0x1125,-0x4(%rbp)
jmp    155e <FS460_set_input_mode+0x42e>
mov    -0x18(%rbp),%rax
or     $0x400,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
and    $0xfffffffffffffffe,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
and    $0xffffffffffffffef,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
or     $0x400,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
or     $0x1000,%rax
mov    %rax,-0x20(%rbp)
jmp    143b <FS460_set_input_mode+0x30b>
mov    $0x1,%edi
lea    -0x24(%rbp),%rsi
call   1050 <FS460_get_input_mode@plt>
mov    %eax,-0x10(%rbp)
cmpl   $0x0,-0x10(%rbp)
je     13df <FS460_set_input_mode+0x2af>
mov    -0x10(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    155e <FS460_set_input_mode+0x42e>
mov    $0x2,%eax
cmp    -0x24(%rbp),%eax
jne    13f9 <FS460_set_input_mode+0x2c9>
movl   $0x1125,-0x4(%rbp)
jmp    155e <FS460_set_input_mode+0x42e>
mov    -0x18(%rbp),%rax
or     $0x800,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
and    $0xfffffffffffffffe,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
and    $0xffffffffffffffdf,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
or     $0x800,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
or     $0x2000,%rax
mov    %rax,-0x20(%rbp)
jmp    150b <FS460_set_input_mode+0x3db>
mov    -0x8(%rbp),%eax
mov    %eax,-0x40(%rbp)
sub    $0x1,%eax
je     1465 <FS460_set_input_mode+0x335>
jmp    1454 <FS460_set_input_mode+0x324>
mov    -0x40(%rbp),%eax
sub    $0x2,%eax
je     14b8 <FS460_set_input_mode+0x388>
jmp    1506 <FS460_set_input_mode+0x3d6>
mov    -0x18(%rbp),%rax
and    $0xfffffffffffffbff,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
or     $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
or     $0x8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
or     $0x10,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
or     $0x400,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
or     $0x1000,%rax
mov    %rax,-0x20(%rbp)
jmp    1506 <FS460_set_input_mode+0x3d6>
mov    -0x18(%rbp),%rax
and    $0xfffffffffffff7ff,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
or     $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
or     $0x4,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
or     $0x20,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
or     $0x800,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
or     $0x2000,%rax
mov    %rax,-0x20(%rbp)
jmp    150b <FS460_set_input_mode+0x3db>
mov    -0x18(%rbp),%rsi
mov    $0x3c,%edi
call   1030 <sio_write_reg@plt>
mov    %eax,-0x10(%rbp)
cmpl   $0x0,-0x10(%rbp)
je     1531 <FS460_set_input_mode+0x401>
mov    -0x10(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    155e <FS460_set_input_mode+0x42e>
mov    -0x20(%rbp),%rsi
mov    $0x3e,%edi
call   1030 <sio_write_reg@plt>
mov    %eax,-0x10(%rbp)
cmpl   $0x0,-0x10(%rbp)
je     1557 <FS460_set_input_mode+0x427>
mov    -0x10(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    155e <FS460_set_input_mode+0x42e>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<FS460_set_input_mode>:
push   %rbp
push   %rbx
sub    $0x18,%rsp
mov    %edi,%ebx
lea    -0x3(%rbx),%ecx
mov    $0x1000,%eax
cmp    $0xfffffffe,%ecx
jb     12e2 <FS460_set_input_mode+0x1b2>
mov    %esi,%ebp
lea    0x8(%rsp),%rsi
mov    $0x3c,%edi
call   1040 <sio_read_reg@plt>
test   %eax,%eax
jne    12e2 <FS460_set_input_mode+0x1b2>
mov    %rsp,%rsi
mov    $0x3e,%edi
call   1040 <sio_read_reg@plt>
test   %eax,%eax
jne    12e2 <FS460_set_input_mode+0x1b2>
cmp    $0x3,%ebp
ja     12c1 <FS460_set_input_mode+0x191>
mov    %ebp,%eax
lea    0xe77(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
cmp    $0x2,%ebx
je     1253 <FS460_set_input_mode+0x123>
cmp    $0x1,%ebx
jne    12c1 <FS460_set_input_mode+0x191>
andb   $0xfb,0x9(%rsp)
andb   $0xeb,0x1(%rsp)
jmp    12c1 <FS460_set_input_mode+0x191>
cmp    $0x2,%ebx
je     125f <FS460_set_input_mode+0x12f>
cmp    $0x1,%ebx
jne    12c1 <FS460_set_input_mode+0x191>
andb   $0xfb,0x9(%rsp)
mov    $0xffffffffffffebe7,%rax
and    (%rsp),%rax
or     $0x1010,%rax
mov    %rax,(%rsp)
jmp    12c1 <FS460_set_input_mode+0x191>
cmp    $0x2,%ebx
je     127b <FS460_set_input_mode+0x14b>
cmp    $0x1,%ebx
jne    12c1 <FS460_set_input_mode+0x191>
lea    0x14(%rsp),%rsi
mov    $0x2,%edi
call   1050 <FS460_get_input_mode@plt>
test   %eax,%eax
jne    12e2 <FS460_set_input_mode+0x1b2>
mov    $0x1125,%eax
cmpl   $0x2,0x14(%rsp)
je     12e2 <FS460_set_input_mode+0x1b2>
orb    $0x4,0x9(%rsp)
mov    $0xffffffffffffebee,%rax
and    (%rsp),%rax
or     $0x1400,%rax
mov    %rax,(%rsp)
jmp    12c1 <FS460_set_input_mode+0x191>
cmp    $0x2,%ebx
je     12b6 <FS460_set_input_mode+0x186>
cmp    $0x1,%ebx
jne    12c1 <FS460_set_input_mode+0x191>
andb   $0xfb,0x9(%rsp)
orw    $0x1419,(%rsp)
jmp    12c1 <FS460_set_input_mode+0x191>
andb   $0xf7,0x9(%rsp)
andb   $0xd7,0x1(%rsp)
jmp    12c1 <FS460_set_input_mode+0x191>
andb   $0xf7,0x9(%rsp)
mov    $0xffffffffffffd7db,%rax
and    (%rsp),%rax
or     $0x2020,%rax
mov    %rax,(%rsp)
jmp    12c1 <FS460_set_input_mode+0x191>
lea    0x14(%rsp),%rsi
mov    $0x1,%edi
call   1050 <FS460_get_input_mode@plt>
test   %eax,%eax
jne    12e2 <FS460_set_input_mode+0x1b2>
mov    $0x1125,%eax
cmpl   $0x2,0x14(%rsp)
je     12e2 <FS460_set_input_mode+0x1b2>
orb    $0x8,0x9(%rsp)
mov    $0xffffffffffffd7de,%rax
and    (%rsp),%rax
or     $0x2800,%rax
mov    %rax,(%rsp)
jmp    12c1 <FS460_set_input_mode+0x191>
andb   $0xf7,0x9(%rsp)
orw    $0x2825,(%rsp)
mov    0x8(%rsp),%rsi
mov    $0x3c,%edi
call   1030 <sio_write_reg@plt>
test   %eax,%eax
jne    12e2 <FS460_set_input_mode+0x1b2>
mov    (%rsp),%rsi
mov    $0x3e,%edi
call   1030 <sio_write_reg@plt>
add    $0x18,%rsp
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
define i32 @FS460_set_input_mode(i32 %0, i32 %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i64
%8 = alloca i64
%9 = alloca i32
store i32 %0, i32* %4
store i32 %1, i32* %5
%10 = load i32, i32* %4
%11 = icmp ne i32 1, %10
br i1 %11, label %12, label %16
12: ; preds = %2
%13 = load i32, i32* %4
%14 = icmp ne i32 2, %13
br i1 %14, label %15, label %16
15: ; preds = %12
store i32 4096, i32* %3
br label %161
16: ; preds = %12, %2
%17 = call i32 @sio_read_reg(i32 60, i64* %7)
store i32 %17, i32* %6
%18 = load i32, i32* %6
%19 = icmp ne i32 %18, 0
br i1 %19, label %20, label %22
20: ; preds = %16
%21 = load i32, i32* %6
store i32 %21, i32* %3
br label %161
22: ; preds = %16
%23 = call i32 @sio_read_reg(i32 62, i64* %8)
store i32 %23, i32* %6
%24 = load i32, i32* %6
%25 = icmp ne i32 %24, 0
br i1 %25, label %26, label %28
26: ; preds = %22
%27 = load i32, i32* %6
store i32 %27, i32* %3
br label %161
28: ; preds = %22
%29 = load i32, i32* %5
switch i32 %29, label %146 [
i32 0, label %30
i32 1, label %47
i32 2, label %72
i32 3, label %117
]
30: ; preds = %28
%31 = load i32, i32* %4
switch i32 %31, label %46 [
i32 1, label %32
i32 2, label %39
]
32: ; preds = %30
%33 = load i64, i64* %7
%34 = and i64 %33, -1025
store i64 %34, i64* %7
%35 = load i64, i64* %8
%36 = and i64 %35, -1025
store i64 %36, i64* %8
%37 = load i64, i64* %8
%38 = and i64 %37, -4097
store i64 %38, i64* %8
br label %46
39: ; preds = %30
%40 = load i64, i64* %7
%41 = and i64 %40, -2049
store i64 %41, i64* %7
%42 = load i64, i64* %8
%43 = and i64 %42, -2049
store i64 %43, i64* %8
%44 = load i64, i64* %8
%45 = and i64 %44, -8193
store i64 %45, i64* %8
br label %46
46: ; preds = %39, %30, %32
br label %146
47: ; preds = %28
%48 = load i32, i32* %4
switch i32 %48, label %71 [
i32 1, label %49
i32 2, label %60
]
49: ; preds = %47
%50 = load i64, i64* %7
%51 = and i64 %50, -1025
store i64 %51, i64* %7
%52 = load i64, i64* %8
%53 = and i64 %52, -9
store i64 %53, i64* %8
%54 = load i64, i64* %8
%55 = or i64 %54, 16
store i64 %55, i64* %8
%56 = load i64, i64* %8
%57 = and i64 %56, -1025
store i64 %57, i64* %8
%58 = load i64, i64* %8
%59 = or i64 %58, 4096
store i64 %59, i64* %8
br label %71
60: ; preds = %47
%61 = load i64, i64* %7
%62 = and i64 %61, -2049
store i64 %62, i64* %7
%63 = load i64, i64* %8
%64 = and i64 %63, -5
store i64 %64, i64* %8
%65 = load i64, i64* %8
%66 = or i64 %65, 32
store i64 %66, i64* %8
%67 = load i64, i64* %8
%68 = and i64 %67, -2049
store i64 %68, i64* %8
%69 = load i64, i64* %8
%70 = or i64 %69, 8192
store i64 %70, i64* %8
br label %71
71: ; preds = %60, %47, %49
br label %146
72: ; preds = %28
%73 = load i32, i32* %4
switch i32 %73, label %116 [
i32 1, label %74
i32 2, label %95
]
74: ; preds = %72
%75 = call i32 @FS460_get_input_mode(i32 2, i32* %9)
store i32 %75, i32* %6
%76 = load i32, i32* %6
%77 = icmp ne i32 %76, 0
br i1 %77, label %78, label %80
78: ; preds = %74
%79 = load i32, i32* %6
store i32 %79, i32* %3
br label %161
80: ; preds = %74
%81 = load i32, i32* %9
%82 = icmp eq i32 2, %81
br i1 %82, label %83, label %84
83: ; preds = %80
store i32 4389, i32* %3
br label %161
84: ; preds = %80
%85 = load i64, i64* %7
%86 = or i64 %85, 1024
store i64 %86, i64* %7
%87 = load i64, i64* %8
%88 = and i64 %87, -2
store i64 %88, i64* %8
%89 = load i64, i64* %8
%90 = and i64 %89, -17
store i64 %90, i64* %8
%91 = load i64, i64* %8
%92 = or i64 %91, 1024
store i64 %92, i64* %8
%93 = load i64, i64* %8
%94 = or i64 %93, 4096
store i64 %94, i64* %8
br label %116
95: ; preds = %72
%96 = call i32 @FS460_get_input_mode(i32 1, i32* %9)
store i32 %96, i32* %6
%97 = load i32, i32* %6
%98 = icmp ne i32 %97, 0
br i1 %98, label %99, label %101
99: ; preds = %95
%100 = load i32, i32* %6
store i32 %100, i32* %3
br label %161
101: ; preds = %95
%102 = load i32, i32* %9
%103 = icmp eq i32 2, %102
br i1 %103, label %104, label %105
104: ; preds = %101
store i32 4389, i32* %3
br label %161
105: ; preds = %101
%106 = load i64, i64* %7
%107 = or i64 %106, 2048
store i64 %107, i64* %7
%108 = load i64, i64* %8
%109 = and i64 %108, -2
store i64 %109, i64* %8
%110 = load i64, i64* %8
%111 = and i64 %110, -33
store i64 %111, i64* %8
%112 = load i64, i64* %8
%113 = or i64 %112, 2048
store i64 %113, i64* %8
%114 = load i64, i64* %8
%115 = or i64 %114, 8192
store i64 %115, i64* %8
br label %116
116: ; preds = %72, %105, %84
br label %146
117: ; preds = %28
%118 = load i32, i32* %4
switch i32 %118, label %145 [
i32 1, label %119
i32 2, label %132
]
119: ; preds = %117
%120 = load i64, i64* %7
%121 = and i64 %120, -1025
store i64 %121, i64* %7
%122 = load i64, i64* %8
%123 = or i64 %122, 1
store i64 %123, i64* %8
%124 = load i64, i64* %8
%125 = or i64 %124, 8
store i64 %125, i64* %8
%126 = load i64, i64* %8
%127 = or i64 %126, 16
store i64 %127, i64* %8
%128 = load i64, i64* %8
%129 = or i64 %128, 1024
store i64 %129, i64* %8
%130 = load i64, i64* %8
%131 = or i64 %130, 4096
store i64 %131, i64* %8
br label %145
132: ; preds = %117
%133 = load i64, i64* %7
%134 = and i64 %133, -2049
store i64 %134, i64* %7
%135 = load i64, i64* %8
%136 = or i64 %135, 1
store i64 %136, i64* %8
%137 = load i64, i64* %8
%138 = or i64 %137, 4
store i64 %138, i64* %8
%139 = load i64, i64* %8
%140 = or i64 %139, 32
store i64 %140, i64* %8
%141 = load i64, i64* %8
%142 = or i64 %141, 2048
store i64 %142, i64* %8
%143 = load i64, i64* %8
%144 = or i64 %143, 8192
store i64 %144, i64* %8
br label %145
145: ; preds = %117, %132, %119
br label %146
146: ; preds = %28, %145, %116, %71, %46
%147 = load i64, i64* %7
%148 = call i32 @sio_write_reg(i32 60, i64 %147)
store i32 %148, i32* %6
%149 = load i32, i32* %6
%150 = icmp ne i32 %149, 0
br i1 %150, label %151, label %153
151: ; preds = %146
%152 = load i32, i32* %6
store i32 %152, i32* %3
br label %161
153: ; preds = %146
%154 = load i64, i64* %8
%155 = call i32 @sio_write_reg(i32 62, i64 %154)
store i32 %155, i32* %6
%156 = load i32, i32* %6
%157 = icmp ne i32 %156, 0
br i1 %157, label %158, label %160
158: ; preds = %153
%159 = load i32, i32* %6
store i32 %159, i32* %3
br label %161
160: ; preds = %153
store i32 0, i32* %3
br label %161
161: ; preds = %160, %158, %151, %104, %99, %83, %78, %26, %20, %15
%162 = load i32, i32* %3
ret i32 %162
}

LLVM IR (-O2):
define i32 @FS460_set_input_mode(i32 %0, i32 %1) {
%3 = alloca i64
%4 = alloca i64
%5 = alloca i32
%6 = bitcast i64* %3 to i8*
%7 = bitcast i64* %4 to i8*
%8 = add i32 %0, -3
%9 = icmp ult i32 %8, -2
br i1 %9, label %88, label %10
10: ; preds = %2
%11 = call i32 @sio_read_reg(i32 60, i64* %3)
%12 = icmp eq i32 %11, 0
br i1 %12, label %13, label %88
13: ; preds = %10
%14 = call i32 @sio_read_reg(i32 62, i64* %4)
%15 = icmp eq i32 %14, 0
br i1 %15, label %16, label %88
16: ; preds = %13
switch i32 %1, label %81 [
i32 0, label %17
i32 1, label %28
i32 2, label %41
i32 3, label %70
]
17: ; preds = %16
switch i32 %0, label %81 [
i32 1, label %18
i32 2, label %23
]
18: ; preds = %17
%19 = load i64, i64* %3
%20 = and i64 %19, -1025
store i64 %20, i64* %3
%21 = load i64, i64* %4
%22 = and i64 %21, -5121
store i64 %22, i64* %4
br label %81
23: ; preds = %17
%24 = load i64, i64* %3
%25 = and i64 %24, -2049
store i64 %25, i64* %3
%26 = load i64, i64* %4
%27 = and i64 %26, -10241
store i64 %27, i64* %4
br label %81
28: ; preds = %16
switch i32 %0, label %81 [
i32 1, label %29
i32 2, label %35
]
29: ; preds = %28
%30 = load i64, i64* %3
%31 = and i64 %30, -1025
store i64 %31, i64* %3
%32 = load i64, i64* %4
%33 = and i64 %32, -5145
%34 = or i64 %33, 4112
store i64 %34, i64* %4
br label %81
35: ; preds = %28
%36 = load i64, i64* %3
%37 = and i64 %36, -2049
store i64 %37, i64* %3
%38 = load i64, i64* %4
%39 = and i64 %38, -10277
%40 = or i64 %39, 8224
store i64 %40, i64* %4
br label %81
41: ; preds = %16
%42 = bitcast i32* %5 to i8*
switch i32 %0, label %69 [
i32 1, label %43
i32 2, label %55
]
43: ; preds = %41
%44 = call i32 @FS460_get_input_mode(i32 2, i32* %5)
%45 = icmp eq i32 %44, 0
br i1 %45, label %46, label %67
46: ; preds = %43
%47 = load i32, i32* %5
%48 = icmp eq i32 %47, 2
br i1 %48, label %67, label %49
49: ; preds = %46
%50 = load i64, i64* %3
%51 = or i64 %50, 1024
store i64 %51, i64* %3
%52 = load i64, i64* %4
%53 = and i64 %52, -5138
%54 = or i64 %53, 5120
store i64 %54, i64* %4
br label %69
55: ; preds = %41
%56 = call i32 @FS460_get_input_mode(i32 1, i32* %5)
%57 = icmp eq i32 %56, 0
br i1 %57, label %58, label %67
58: ; preds = %55
%59 = load i32, i32* %5
%60 = icmp eq i32 %59, 2
br i1 %60, label %67, label %61
61: ; preds = %58
%62 = load i64, i64* %3
%63 = or i64 %62, 2048
store i64 %63, i64* %3
%64 = load i64, i64* %4
%65 = and i64 %64, -10274
%66 = or i64 %65, 10240
store i64 %66, i64* %4
br label %69
67: ; preds = %43, %46, %55, %58
%68 = phi i32 [ 4389, %58 ], [ %56, %55 ], [ 4389, %46 ], [ %44, %43 ]
br label %88
69: ; preds = %49, %61, %41
br label %81
70: ; preds = %16
switch i32 %0, label %81 [
i32 1, label %71
i32 2, label %76
]
71: ; preds = %70
%72 = load i64, i64* %3
%73 = and i64 %72, -1025
store i64 %73, i64* %3
%74 = load i64, i64* %4
%75 = or i64 %74, 5145
store i64 %75, i64* %4
br label %81
76: ; preds = %70
%77 = load i64, i64* %3
%78 = and i64 %77, -2049
store i64 %78, i64* %3
%79 = load i64, i64* %4
%80 = or i64 %79, 10277
store i64 %80, i64* %4
br label %81
81: ; preds = %69, %71, %76, %70, %29, %28, %35, %18, %17, %23, %16
%82 = load i64, i64* %3
%83 = call i32 @sio_write_reg(i32 60, i64 %82)
%84 = icmp eq i32 %83, 0
br i1 %84, label %85, label %88
85: ; preds = %81
%86 = load i64, i64* %4
%87 = call i32 @sio_write_reg(i32 62, i64 %86)
br label %88
88: ; preds = %67, %85, %81, %13, %10, %2
%89 = phi i32 [ 4096, %2 ], [ %11, %10 ], [ %14, %13 ], [ %83, %81 ], [ %87, %85 ], [ %68, %67 ]
ret i32 %89
}