#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 addToDirectory(int, int);
int createFile(char *, int);
int fileGetSector(char *, int, int);
int filePutSector(char *, int, int);
int findInDirectory(int, char *);
int /*<<< orphan*/ getFname(char *, int);
int getFtype(int);
int getRoot();
int /*<<< orphan*/ getWD(char *);
int /*<<< orphan*/ printChar(char);
int /*<<< orphan*/ printString(char *);
char readChar();
int readKey();
int /*<<< orphan*/ readString(char *, int, int);
int /*<<< orphan*/ reboot();
int runProgram(int);
int /*<<< orphan*/ setColor(char);
int /*<<< orphan*/ setPosition(char, char);
int /*<<< orphan*/ setWD(char *);
int /*<<< orphan*/ terminate();
void handleInterrupt21(int ax, int bx, int cx, int dx) {
  int tmp;
  if (ax == 0x4953) {
    printString((char *)bx);
  } else if (ax == 0x4943) {
    printChar((char)bx);
  } else if (ax == 0x494B) {
    setColor((char)bx);
  } else if (ax == 0x4950) {
    setPosition((char)bx, (char)cx);
  } else if (ax == 0x4973) {
    readString((char *)bx, cx, dx);
  } else if (ax == 0x4963) {
    *((char *)bx) = readChar();
  } else if (ax == 0x496B) {
    *((int *)bx) = readKey();
  } else if (ax == 0x4958) {
    *((int *)cx) = runProgram(bx);
  } else if (ax == 0x4978) {
    terminate();
  } else if (ax == 0x4952) {
    reboot();
  } else if (ax == 0x4653) {
    *((int *)dx) = fileGetSector((char *)bx, cx, *((int *)dx));
  } else if (ax == 0x4646) {
    *((int *)dx) = findInDirectory(bx, (char *)cx);
  } else if (ax == 0x4652) {
    *((int *)bx) = getRoot();
  } else if (ax == 0x4657) {
    setWD((char *)bx);
  } else if (ax == 0x4677) {
    getWD((char *)bx);
  } else if (ax == 0x466E) {
    getFname((char *)bx, cx);
  } else if (ax == 0x4674) {
    *((int *)cx) = getFtype(bx);
  } else if (ax == 0x4643) {
    tmp = createFile((char *)cx, *((int *)dx));
    *((int *)dx) = addToDirectory(bx, tmp);
  } else if (ax == 0x4673) {
    *((int *)dx) = filePutSector((char *)bx, cx, *((int *)dx));
  } else {
    return;
  }
}


x86 assembly (clang, -O0):
<handleInterrupt21>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
cmpl   $0x4953,-0x4(%rbp)
jne    126f <handleInterrupt21+0x2f>
movslq -0x8(%rbp),%rdi
call   1060 <printString@plt>
jmp    1530 <handleInterrupt21+0x2f0>
cmpl   $0x4943,-0x4(%rbp)
jne    128c <handleInterrupt21+0x4c>
mov    -0x8(%rbp),%eax
movsbl %al,%edi
call   10f0 <printChar@plt>
jmp    152b <handleInterrupt21+0x2eb>
cmpl   $0x494b,-0x4(%rbp)
jne    12a9 <handleInterrupt21+0x69>
mov    -0x8(%rbp),%eax
movsbl %al,%edi
call   1160 <setColor@plt>
jmp    1526 <handleInterrupt21+0x2e6>
cmpl   $0x4950,-0x4(%rbp)
jne    12ce <handleInterrupt21+0x8e>
mov    -0x8(%rbp),%eax
mov    %al,%cl
mov    -0xc(%rbp),%eax
movsbl %cl,%edi
movsbl %al,%esi
call   1150 <setPosition@plt>
jmp    1521 <handleInterrupt21+0x2e1>
cmpl   $0x4973,-0x4(%rbp)
jne    12ef <handleInterrupt21+0xaf>
movslq -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
call   10b0 <readString@plt>
jmp    151c <handleInterrupt21+0x2dc>
cmpl   $0x4963,-0x4(%rbp)
jne    1310 <handleInterrupt21+0xd0>
mov    $0x0,%al
call   10e0 <readChar@plt>
mov    %al,%cl
movslq -0x8(%rbp),%rax
mov    %cl,(%rax)
jmp    1517 <handleInterrupt21+0x2d7>
cmpl   $0x496b,-0x4(%rbp)
jne    1331 <handleInterrupt21+0xf1>
mov    $0x0,%al
call   1040 <readKey@plt>
mov    %eax,%ecx
movslq -0x8(%rbp),%rax
mov    %ecx,(%rax)
jmp    1512 <handleInterrupt21+0x2d2>
cmpl   $0x4958,-0x4(%rbp)
jne    1353 <handleInterrupt21+0x113>
mov    -0x8(%rbp),%edi
call   1030 <runProgram@plt>
mov    %eax,%ecx
movslq -0xc(%rbp),%rax
mov    %ecx,(%rax)
jmp    150d <handleInterrupt21+0x2cd>
cmpl   $0x4978,-0x4(%rbp)
jne    136c <handleInterrupt21+0x12c>
mov    $0x0,%al
call   10c0 <terminate@plt>
jmp    1508 <handleInterrupt21+0x2c8>
cmpl   $0x4952,-0x4(%rbp)
jne    1385 <handleInterrupt21+0x145>
mov    $0x0,%al
call   1140 <reboot@plt>
jmp    1503 <handleInterrupt21+0x2c3>
cmpl   $0x4653,-0x4(%rbp)
jne    13b1 <handleInterrupt21+0x171>
movslq -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
movslq -0x10(%rbp),%rax
mov    (%rax),%edx
call   10a0 <fileGetSector@plt>
mov    %eax,%ecx
movslq -0x10(%rbp),%rax
mov    %ecx,(%rax)
jmp    14fe <handleInterrupt21+0x2be>
cmpl   $0x4646,-0x4(%rbp)
jne    13d7 <handleInterrupt21+0x197>
mov    -0x8(%rbp),%edi
movslq -0xc(%rbp),%rsi
call   1120 <findInDirectory@plt>
mov    %eax,%ecx
movslq -0x10(%rbp),%rax
mov    %ecx,(%rax)
jmp    14f9 <handleInterrupt21+0x2b9>
cmpl   $0x4652,-0x4(%rbp)
jne    13f8 <handleInterrupt21+0x1b8>
mov    $0x0,%al
call   1100 <getRoot@plt>
mov    %eax,%ecx
movslq -0x8(%rbp),%rax
mov    %ecx,(%rax)
jmp    14f4 <handleInterrupt21+0x2b4>
cmpl   $0x4657,-0x4(%rbp)
jne    1413 <handleInterrupt21+0x1d3>
movslq -0x8(%rbp),%rdi
call   1110 <setWD@plt>
jmp    14ef <handleInterrupt21+0x2af>
cmpl   $0x4677,-0x4(%rbp)
jne    142e <handleInterrupt21+0x1ee>
movslq -0x8(%rbp),%rdi
call   1050 <getWD@plt>
jmp    14ea <handleInterrupt21+0x2aa>
cmpl   $0x466e,-0x4(%rbp)
jne    144c <handleInterrupt21+0x20c>
movslq -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
call   1080 <getFname@plt>
jmp    14e5 <handleInterrupt21+0x2a5>
cmpl   $0x4674,-0x4(%rbp)
jne    146e <handleInterrupt21+0x22e>
mov    -0x8(%rbp),%edi
call   1090 <getFtype@plt>
mov    %eax,%ecx
movslq -0xc(%rbp),%rax
mov    %ecx,(%rax)
jmp    14e0 <handleInterrupt21+0x2a0>
cmpl   $0x4643,-0x4(%rbp)
jne    14a5 <handleInterrupt21+0x265>
movslq -0xc(%rbp),%rdi
movslq -0x10(%rbp),%rax
mov    (%rax),%esi
call   1070 <createFile@plt>
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%edi
mov    -0x14(%rbp),%esi
call   1130 <addToDirectory@plt>
mov    %eax,%ecx
movslq -0x10(%rbp),%rax
mov    %ecx,(%rax)
jmp    14db <handleInterrupt21+0x29b>
cmpl   $0x4673,-0x4(%rbp)
jne    14d1 <handleInterrupt21+0x291>
movslq -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
movslq -0x10(%rbp),%rax
mov    (%rax),%edx
call   10d0 <filePutSector@plt>
mov    %eax,%ecx
movslq -0x10(%rbp),%rax
mov    %ecx,(%rax)
jmp    14d6 <handleInterrupt21+0x296>
jmp    1530 <handleInterrupt21+0x2f0>
jmp    14db <handleInterrupt21+0x29b>
jmp    14e0 <handleInterrupt21+0x2a0>
jmp    14e5 <handleInterrupt21+0x2a5>
jmp    14ea <handleInterrupt21+0x2aa>
jmp    14ef <handleInterrupt21+0x2af>
jmp    14f4 <handleInterrupt21+0x2b4>
jmp    14f9 <handleInterrupt21+0x2b9>
jmp    14fe <handleInterrupt21+0x2be>
jmp    1503 <handleInterrupt21+0x2c3>
jmp    1508 <handleInterrupt21+0x2c8>
jmp    150d <handleInterrupt21+0x2cd>
jmp    1512 <handleInterrupt21+0x2d2>
jmp    1517 <handleInterrupt21+0x2d7>
jmp    151c <handleInterrupt21+0x2dc>
jmp    1521 <handleInterrupt21+0x2e1>
jmp    1526 <handleInterrupt21+0x2e6>
jmp    152b <handleInterrupt21+0x2eb>
jmp    1530 <handleInterrupt21+0x2f0>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<handleInterrupt21>:
push   %rbp
push   %r14
push   %rbx
mov    %ecx,%ebp
mov    %edx,%r14d
mov    %esi,%ebx
lea    -0x4943(%rdi),%eax
cmp    $0x35,%eax
ja     1272 <handleInterrupt21+0x32>
lea    0xe77(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movsbl %bl,%edi
pop    %rbx
pop    %r14
pop    %rbp
jmp    10f0 <printChar@plt>
add    $0xffffb9bd,%edi
cmp    $0x34,%edi
ja     138d <handleInterrupt21+0x14d>
lea    0xd78(%rip),%rax
movslq (%rax,%rdi,4),%rcx
add    %rax,%rcx
jmp    *%rcx
movslq %r14d,%rdi
movslq %ebp,%rbp
mov    0x0(%rbp),%esi
call   1070 <createFile@plt>
mov    %ebx,%edi
mov    %eax,%esi
call   1130 <addToDirectory@plt>
mov    %eax,0x0(%rbp)
jmp    138d <handleInterrupt21+0x14d>
movsbl %bl,%edi
pop    %rbx
pop    %r14
pop    %rbp
jmp    1160 <setColor@plt>
movsbl %bl,%edi
movsbl %r14b,%esi
pop    %rbx
pop    %r14
pop    %rbp
jmp    1150 <setPosition@plt>
xor    %eax,%eax
pop    %rbx
pop    %r14
pop    %rbp
jmp    1140 <reboot@plt>
movslq %ebx,%rdi
pop    %rbx
pop    %r14
pop    %rbp
jmp    1060 <printString@plt>
mov    %ebx,%edi
call   1030 <runProgram@plt>
jmp    1388 <handleInterrupt21+0x148>
xor    %eax,%eax
call   10e0 <readChar@plt>
movslq %ebx,%rcx
mov    %al,(%rcx)
jmp    138d <handleInterrupt21+0x14d>
xor    %eax,%eax
call   1040 <readKey@plt>
jmp    133b <handleInterrupt21+0xfb>
movslq %ebx,%rdi
mov    %r14d,%esi
mov    %ebp,%edx
pop    %rbx
pop    %r14
pop    %rbp
jmp    10b0 <readString@plt>
xor    %eax,%eax
pop    %rbx
pop    %r14
pop    %rbp
jmp    10c0 <terminate@plt>
movslq %r14d,%rsi
mov    %ebx,%edi
call   1120 <findInDirectory@plt>
movslq %ebp,%rcx
jmp    138b <handleInterrupt21+0x14b>
xor    %eax,%eax
call   1100 <getRoot@plt>
movslq %ebx,%rcx
jmp    138b <handleInterrupt21+0x14b>
movslq %ebx,%rdi
movslq %ebp,%rbx
mov    (%rbx),%edx
mov    %r14d,%esi
call   10a0 <fileGetSector@plt>
jmp    137d <handleInterrupt21+0x13d>
movslq %ebx,%rdi
pop    %rbx
pop    %r14
pop    %rbp
jmp    1110 <setWD@plt>
movslq %ebx,%rdi
mov    %r14d,%esi
pop    %rbx
pop    %r14
pop    %rbp
jmp    1080 <getFname@plt>
movslq %ebx,%rdi
movslq %ebp,%rbx
mov    (%rbx),%edx
mov    %r14d,%esi
call   10d0 <filePutSector@plt>
mov    %eax,(%rbx)
jmp    138d <handleInterrupt21+0x14d>
mov    %ebx,%edi
call   1090 <getFtype@plt>
movslq %r14d,%rcx
mov    %eax,(%rcx)
pop    %rbx
pop    %r14
pop    %rbp
ret
movslq %ebx,%rdi
pop    %rbx
pop    %r14
pop    %rbp
jmp    1050 <getWD@plt>

LLVM IR (-O0):
define void @handleInterrupt21(i32 %0, i32 %1, i32 %2, i32 %3) {
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
store i32 %0, i32* %5
store i32 %1, i32* %6
store i32 %2, i32* %7
store i32 %3, i32* %8
%10 = load i32, i32* %5
%11 = icmp eq i32 %10, 18771
br i1 %11, label %12, label %17
12: ; preds = %4
%13 = load i32, i32* %6
%14 = sext i32 %13 to i64
%15 = inttoptr i64 %14 to i8*
%16 = call i32 @printString(i8* %15)
br label %208
17: ; preds = %4
%18 = load i32, i32* %5
%19 = icmp eq i32 %18, 18755
br i1 %19, label %20, label %24
20: ; preds = %17
%21 = load i32, i32* %6
%22 = trunc i32 %21 to i8
%23 = call i32 @printChar(i8 signext %22)
br label %207
24: ; preds = %17
%25 = load i32, i32* %5
%26 = icmp eq i32 %25, 18763
br i1 %26, label %27, label %31
27: ; preds = %24
%28 = load i32, i32* %6
%29 = trunc i32 %28 to i8
%30 = call i32 @setColor(i8 signext %29)
br label %206
31: ; preds = %24
%32 = load i32, i32* %5
%33 = icmp eq i32 %32, 18768
br i1 %33, label %34, label %40
34: ; preds = %31
%35 = load i32, i32* %6
%36 = trunc i32 %35 to i8
%37 = load i32, i32* %7
%38 = trunc i32 %37 to i8
%39 = call i32 @setPosition(i8 signext %36, i8 signext %38)
br label %205
40: ; preds = %31
%41 = load i32, i32* %5
%42 = icmp eq i32 %41, 18803
br i1 %42, label %43, label %50
43: ; preds = %40
%44 = load i32, i32* %6
%45 = sext i32 %44 to i64
%46 = inttoptr i64 %45 to i8*
%47 = load i32, i32* %7
%48 = load i32, i32* %8
%49 = call i32 @readString(i8* %46, i32 %47, i32 %48)
br label %204
50: ; preds = %40
%51 = load i32, i32* %5
%52 = icmp eq i32 %51, 18787
br i1 %52, label %53, label %58
53: ; preds = %50
%54 = call signext i8 (...) @readChar()
%55 = load i32, i32* %6
%56 = sext i32 %55 to i64
%57 = inttoptr i64 %56 to i8*
store i8 %54, i8* %57
br label %203
58: ; preds = %50
%59 = load i32, i32* %5
%60 = icmp eq i32 %59, 18795
br i1 %60, label %61, label %66
61: ; preds = %58
%62 = call i32 (...) @readKey()
%63 = load i32, i32* %6
%64 = sext i32 %63 to i64
%65 = inttoptr i64 %64 to i32*
store i32 %62, i32* %65
br label %202
66: ; preds = %58
%67 = load i32, i32* %5
%68 = icmp eq i32 %67, 18776
br i1 %68, label %69, label %75
69: ; preds = %66
%70 = load i32, i32* %6
%71 = call i32 @runProgram(i32 %70)
%72 = load i32, i32* %7
%73 = sext i32 %72 to i64
%74 = inttoptr i64 %73 to i32*
store i32 %71, i32* %74
br label %201
75: ; preds = %66
%76 = load i32, i32* %5
%77 = icmp eq i32 %76, 18808
br i1 %77, label %78, label %80
78: ; preds = %75
%79 = call i32 (...) @terminate()
br label %200
80: ; preds = %75
%81 = load i32, i32* %5
%82 = icmp eq i32 %81, 18770
br i1 %82, label %83, label %85
83: ; preds = %80
%84 = call i32 (...) @reboot()
br label %199
85: ; preds = %80
%86 = load i32, i32* %5
%87 = icmp eq i32 %86, 18003
br i1 %87, label %88, label %101
88: ; preds = %85
%89 = load i32, i32* %6
%90 = sext i32 %89 to i64
%91 = inttoptr i64 %90 to i8*
%92 = load i32, i32* %7
%93 = load i32, i32* %8
%94 = sext i32 %93 to i64
%95 = inttoptr i64 %94 to i32*
%96 = load i32, i32* %95
%97 = call i32 @fileGetSector(i8* %91, i32 %92, i32 %96)
%98 = load i32, i32* %8
%99 = sext i32 %98 to i64
%100 = inttoptr i64 %99 to i32*
store i32 %97, i32* %100
br label %198
101: ; preds = %85
%102 = load i32, i32* %5
%103 = icmp eq i32 %102, 17990
br i1 %103, label %104, label %113
104: ; preds = %101
%105 = load i32, i32* %6
%106 = load i32, i32* %7
%107 = sext i32 %106 to i64
%108 = inttoptr i64 %107 to i8*
%109 = call i32 @findInDirectory(i32 %105, i8* %108)
%110 = load i32, i32* %8
%111 = sext i32 %110 to i64
%112 = inttoptr i64 %111 to i32*
store i32 %109, i32* %112
br label %197
113: ; preds = %101
%114 = load i32, i32* %5
%115 = icmp eq i32 %114, 18002
br i1 %115, label %116, label %121
116: ; preds = %113
%117 = call i32 (...) @getRoot()
%118 = load i32, i32* %6
%119 = sext i32 %118 to i64
%120 = inttoptr i64 %119 to i32*
store i32 %117, i32* %120
br label %196
121: ; preds = %113
%122 = load i32, i32* %5
%123 = icmp eq i32 %122, 18007
br i1 %123, label %124, label %129
124: ; preds = %121
%125 = load i32, i32* %6
%126 = sext i32 %125 to i64
%127 = inttoptr i64 %126 to i8*
%128 = call i32 @setWD(i8* %127)
br label %195
129: ; preds = %121
%130 = load i32, i32* %5
%131 = icmp eq i32 %130, 18039
br i1 %131, label %132, label %137
132: ; preds = %129
%133 = load i32, i32* %6
%134 = sext i32 %133 to i64
%135 = inttoptr i64 %134 to i8*
%136 = call i32 @getWD(i8* %135)
br label %194
137: ; preds = %129
%138 = load i32, i32* %5
%139 = icmp eq i32 %138, 18030
br i1 %139, label %140, label %146
140: ; preds = %137
%141 = load i32, i32* %6
%142 = sext i32 %141 to i64
%143 = inttoptr i64 %142 to i8*
%144 = load i32, i32* %7
%145 = call i32 @getFname(i8* %143, i32 %144)
br label %193
146: ; preds = %137
%147 = load i32, i32* %5
%148 = icmp eq i32 %147, 18036
br i1 %148, label %149, label %155
149: ; preds = %146
%150 = load i32, i32* %6
%151 = call i32 @getFtype(i32 %150)
%152 = load i32, i32* %7
%153 = sext i32 %152 to i64
%154 = inttoptr i64 %153 to i32*
store i32 %151, i32* %154
br label %192
155: ; preds = %146
%156 = load i32, i32* %5
%157 = icmp eq i32 %156, 17987
br i1 %157, label %158, label %173
158: ; preds = %155
%159 = load i32, i32* %7
%160 = sext i32 %159 to i64
%161 = inttoptr i64 %160 to i8*
%162 = load i32, i32* %8
%163 = sext i32 %162 to i64
%164 = inttoptr i64 %163 to i32*
%165 = load i32, i32* %164
%166 = call i32 @createFile(i8* %161, i32 %165)
store i32 %166, i32* %9
%167 = load i32, i32* %6
%168 = load i32, i32* %9
%169 = call i32 @addToDirectory(i32 %167, i32 %168)
%170 = load i32, i32* %8
%171 = sext i32 %170 to i64
%172 = inttoptr i64 %171 to i32*
store i32 %169, i32* %172
br label %191
173: ; preds = %155
%174 = load i32, i32* %5
%175 = icmp eq i32 %174, 18035
br i1 %175, label %176, label %189
176: ; preds = %173
%177 = load i32, i32* %6
%178 = sext i32 %177 to i64
%179 = inttoptr i64 %178 to i8*
%180 = load i32, i32* %7
%181 = load i32, i32* %8
%182 = sext i32 %181 to i64
%183 = inttoptr i64 %182 to i32*
%184 = load i32, i32* %183
%185 = call i32 @filePutSector(i8* %179, i32 %180, i32 %184)
%186 = load i32, i32* %8
%187 = sext i32 %186 to i64
%188 = inttoptr i64 %187 to i32*
store i32 %185, i32* %188
br label %190
189: ; preds = %173
br label %208
190: ; preds = %176
br label %191
191: ; preds = %190, %158
br label %192
192: ; preds = %191, %149
br label %193
193: ; preds = %192, %140
br label %194
194: ; preds = %193, %132
br label %195
195: ; preds = %194, %124
br label %196
196: ; preds = %195, %116
br label %197
197: ; preds = %196, %104
br label %198
198: ; preds = %197, %88
br label %199
199: ; preds = %198, %83
br label %200
200: ; preds = %199, %78
br label %201
201: ; preds = %200, %69
br label %202
202: ; preds = %201, %61
br label %203
203: ; preds = %202, %53
br label %204
204: ; preds = %203, %43
br label %205
205: ; preds = %204, %34
br label %206
206: ; preds = %205, %27
br label %207
207: ; preds = %206, %20
br label %208
208: ; preds = %189, %207, %12
ret void
}

LLVM IR (-O2):
define void @handleInterrupt21(i32 %0, i32 %1, i32 %2, i32 %3) {
switch i32 %0, label %87 [
i32 18771, label %5
i32 18755, label %9
i32 18763, label %12
i32 18768, label %15
i32 18803, label %19
i32 18787, label %23
i32 18795, label %27
i32 18776, label %31
i32 18808, label %35
i32 18770, label %37
i32 18003, label %39
i32 17990, label %46
i32 18002, label %52
i32 18007, label %56
i32 18039, label %60
i32 18030, label %64
i32 18036, label %68
i32 17987, label %72
i32 18035, label %80
]
5: ; preds = %4
%6 = sext i32 %1 to i64
%7 = inttoptr i64 %6 to i8*
%8 = tail call i32 @printString(i8* %7)
br label %87
9: ; preds = %4
%10 = trunc i32 %1 to i8
%11 = tail call i32 @printChar(i8 signext %10)
br label %87
12: ; preds = %4
%13 = trunc i32 %1 to i8
%14 = tail call i32 @setColor(i8 signext %13)
br label %87
15: ; preds = %4
%16 = trunc i32 %1 to i8
%17 = trunc i32 %2 to i8
%18 = tail call i32 @setPosition(i8 signext %16, i8 signext %17)
br label %87
19: ; preds = %4
%20 = sext i32 %1 to i64
%21 = inttoptr i64 %20 to i8*
%22 = tail call i32 @readString(i8* %21, i32 %2, i32 %3)
br label %87
23: ; preds = %4
%24 = tail call signext i8 (...) @readChar()
%25 = sext i32 %1 to i64
%26 = inttoptr i64 %25 to i8*
store i8 %24, i8* %26
br label %87
27: ; preds = %4
%28 = tail call i32 (...) @readKey()
%29 = sext i32 %1 to i64
%30 = inttoptr i64 %29 to i32*
store i32 %28, i32* %30
br label %87
31: ; preds = %4
%32 = tail call i32 @runProgram(i32 %1)
%33 = sext i32 %2 to i64
%34 = inttoptr i64 %33 to i32*
store i32 %32, i32* %34
br label %87
35: ; preds = %4
%36 = tail call i32 (...) @terminate()
br label %87
37: ; preds = %4
%38 = tail call i32 (...) @reboot()
br label %87
39: ; preds = %4
%40 = sext i32 %1 to i64
%41 = inttoptr i64 %40 to i8*
%42 = sext i32 %3 to i64
%43 = inttoptr i64 %42 to i32*
%44 = load i32, i32* %43
%45 = tail call i32 @fileGetSector(i8* %41, i32 %2, i32 %44)
store i32 %45, i32* %43
br label %87
46: ; preds = %4
%47 = sext i32 %2 to i64
%48 = inttoptr i64 %47 to i8*
%49 = tail call i32 @findInDirectory(i32 %1, i8* %48)
%50 = sext i32 %3 to i64
%51 = inttoptr i64 %50 to i32*
store i32 %49, i32* %51
br label %87
52: ; preds = %4
%53 = tail call i32 (...) @getRoot()
%54 = sext i32 %1 to i64
%55 = inttoptr i64 %54 to i32*
store i32 %53, i32* %55
br label %87
56: ; preds = %4
%57 = sext i32 %1 to i64
%58 = inttoptr i64 %57 to i8*
%59 = tail call i32 @setWD(i8* %58)
br label %87
60: ; preds = %4
%61 = sext i32 %1 to i64
%62 = inttoptr i64 %61 to i8*
%63 = tail call i32 @getWD(i8* %62)
br label %87
64: ; preds = %4
%65 = sext i32 %1 to i64
%66 = inttoptr i64 %65 to i8*
%67 = tail call i32 @getFname(i8* %66, i32 %2)
br label %87
68: ; preds = %4
%69 = tail call i32 @getFtype(i32 %1)
%70 = sext i32 %2 to i64
%71 = inttoptr i64 %70 to i32*
store i32 %69, i32* %71
br label %87
72: ; preds = %4
%73 = sext i32 %2 to i64
%74 = inttoptr i64 %73 to i8*
%75 = sext i32 %3 to i64
%76 = inttoptr i64 %75 to i32*
%77 = load i32, i32* %76
%78 = tail call i32 @createFile(i8* %74, i32 %77)
%79 = tail call i32 @addToDirectory(i32 %1, i32 %78)
store i32 %79, i32* %76
br label %87
80: ; preds = %4
%81 = sext i32 %1 to i64
%82 = inttoptr i64 %81 to i8*
%83 = sext i32 %3 to i64
%84 = inttoptr i64 %83 to i32*
%85 = load i32, i32* %84
%86 = tail call i32 @filePutSector(i8* %82, i32 %2, i32 %85)
store i32 %86, i32* %84
br label %87
87: ; preds = %5, %12, %19, %27, %35, %39, %52, %60, %68, %80, %72, %64, %56, %46, %37, %31, %23, %15, %9, %4
ret void
}