const char *funckeymap(int k) {
  static const char *fcmap[] = {"CTRL+2, CTRL+~",
                                "CTRL+A",
                                "CTRL+B",
                                "CTRL+C",
                                "CTRL+D",
                                "CTRL+E",
                                "CTRL+F",
                                "CTRL+G",
                                "CTRL+H, BACKSPACE",
                                "CTRL+I, TAB",
                                "CTRL+J",
                                "CTRL+K",
                                "CTRL+L",
                                "CTRL+M, ENTER",
                                "CTRL+N",
                                "CTRL+O",
                                "CTRL+P",
                                "CTRL+Q",
                                "CTRL+R",
                                "CTRL+S",
                                "CTRL+T",
                                "CTRL+U",
                                "CTRL+V",
                                "CTRL+W",
                                "CTRL+X",
                                "CTRL+Y",
                                "CTRL+Z",
                                "CTRL+3, ESC, CTRL+[",
                                "CTRL+4, CTRL+\\",
                                "CTRL+5, CTRL+]",
                                "CTRL+6",
                                "CTRL+7, CTRL+/, CTRL+_",
                                "SPACE"};
  static const char *fkmap[] = {
      "F1",       "F2",         "F3",         "F4",         "F5",   "F6",
      "F7",       "F8",         "F9",         "F10",        "F11",  "F12",
      "INSERT",   "DELETE",     "HOME",       "END",        "PGUP", "PGDN",
      "ARROW UP", "ARROW DOWN", "ARROW LEFT", "ARROW RIGHT"};
  if (k == 0x7F)
    return "CTRL+8, BACKSPACE 2";
  else if (k >= (0xFFFF - 21) && k <= 0xFFFF)
    return fkmap[0xFFFF - k];
  else if (k <= 0x20)
    return fcmap[k];
  return "UNKNOWN";
}


x86 assembly (clang, -O0):
<funckeymap>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0xc(%rbp)
cmpl   $0x7f,-0xc(%rbp)
jne    1121 <funckeymap+0x21>
lea    0x1087(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1191 <funckeymap+0x91>
cmpl   $0xffea,-0xc(%rbp)
jl     115a <funckeymap+0x5a>
cmpl   $0xffff,-0xc(%rbp)
jg     115a <funckeymap+0x5a>
mov    $0xffff,%eax
sub    -0xc(%rbp),%eax
movslq %eax,%rcx
lea    0x2ff3(%rip),%rax
mov    (%rax,%rcx,8),%rax
mov    %rax,-0x8(%rbp)
jmp    1191 <funckeymap+0x91>
cmpl   $0x20,-0xc(%rbp)
jg     117c <funckeymap+0x7c>
movslq -0xc(%rbp),%rcx
lea    0x2ec1(%rip),%rax
mov    (%rax,%rcx,8),%rax
mov    %rax,-0x8(%rbp)
jmp    1191 <funckeymap+0x91>
jmp    1181 <funckeymap+0x81>
jmp    1186 <funckeymap+0x86>
lea    0x1026(%rip),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<funckeymap>:
cmp    $0x7f,%edi
jne    110d <funckeymap+0xd>
lea    0x1093(%rip),%rax
ret
lea    -0xffea(%rdi),%eax
cmp    $0x15,%eax
ja     1128 <funckeymap+0x28>
mov    $0xffff,%eax
sub    %edi,%eax
lea    0x2c7a(%rip),%rcx
jmp    1137 <funckeymap+0x37>
cmp    $0x20,%edi
jg     113f <funckeymap+0x3f>
movslq %edi,%rax
lea    0x2b59(%rip),%rcx
lea    (%rcx,%rax,8),%rax
mov    (%rax),%rax
ret
lea    0x106d(%rip),%rax
ret

LLVM IR (-O0):
@funckeymap.fcmap = internal global [33 x i8*] [i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.5, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.7, i32 0, i32 0), i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.8, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.9, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.10, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.11, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.12, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.13, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.14, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.15, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.16, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.17, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.18, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.19, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.20, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.21, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.22, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.23, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.24, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.25, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.26, i32 0, i32 0), i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.27, i32 0, i32 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.28, i32 0, i32 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.29, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.30, i32 0, i32 0), i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.31, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.32, i32 0, i32 0)]
@.str = [15 x i8] c"CTRL+2, CTRL+~\00"
@.str.1 = [7 x i8] c"CTRL+A\00"
@.str.2 = [7 x i8] c"CTRL+B\00"
@.str.3 = [7 x i8] c"CTRL+C\00"
@.str.4 = [7 x i8] c"CTRL+D\00"
@.str.5 = [7 x i8] c"CTRL+E\00"
@.str.6 = [7 x i8] c"CTRL+F\00"
@.str.7 = [7 x i8] c"CTRL+G\00"
@.str.8 = [18 x i8] c"CTRL+H, BACKSPACE\00"
@.str.9 = [12 x i8] c"CTRL+I, TAB\00"
@.str.10 = [7 x i8] c"CTRL+J\00"
@.str.11 = [7 x i8] c"CTRL+K\00"
@.str.12 = [7 x i8] c"CTRL+L\00"
@.str.13 = [14 x i8] c"CTRL+M, ENTER\00"
@.str.14 = [7 x i8] c"CTRL+N\00"
@.str.15 = [7 x i8] c"CTRL+O\00"
@.str.16 = [7 x i8] c"CTRL+P\00"
@.str.17 = [7 x i8] c"CTRL+Q\00"
@.str.18 = [7 x i8] c"CTRL+R\00"
@.str.19 = [7 x i8] c"CTRL+S\00"
@.str.20 = [7 x i8] c"CTRL+T\00"
@.str.21 = [7 x i8] c"CTRL+U\00"
@.str.22 = [7 x i8] c"CTRL+V\00"
@.str.23 = [7 x i8] c"CTRL+W\00"
@.str.24 = [7 x i8] c"CTRL+X\00"
@.str.25 = [7 x i8] c"CTRL+Y\00"
@.str.26 = [7 x i8] c"CTRL+Z\00"
@.str.27 = [20 x i8] c"CTRL+3, ESC, CTRL+[\00"
@.str.28 = [15 x i8] c"CTRL+4, CTRL+\\\00"
@.str.29 = [15 x i8] c"CTRL+5, CTRL+]\00"
@.str.30 = [7 x i8] c"CTRL+6\00"
@.str.31 = [23 x i8] c"CTRL+7, CTRL+/, CTRL+_\00"
@.str.32 = [6 x i8] c"SPACE\00"
@funckeymap.fkmap = internal global [22 x i8*] [i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.33, i32 0, i32 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.34, i32 0, i32 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.35, i32 0, i32 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.36, i32 0, i32 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.37, i32 0, i32 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.38, i32 0, i32 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.39, i32 0, i32 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.40, i32 0, i32 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.41, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.42, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.43, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.44, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.45, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.46, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.47, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.48, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.49, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.50, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.51, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.52, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.53, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.54, i32 0, i32 0)]
@.str.33 = [3 x i8] c"F1\00"
@.str.34 = [3 x i8] c"F2\00"
@.str.35 = [3 x i8] c"F3\00"
@.str.36 = [3 x i8] c"F4\00"
@.str.37 = [3 x i8] c"F5\00"
@.str.38 = [3 x i8] c"F6\00"
@.str.39 = [3 x i8] c"F7\00"
@.str.40 = [3 x i8] c"F8\00"
@.str.41 = [3 x i8] c"F9\00"
@.str.42 = [4 x i8] c"F10\00"
@.str.43 = [4 x i8] c"F11\00"
@.str.44 = [4 x i8] c"F12\00"
@.str.45 = [7 x i8] c"INSERT\00"
@.str.46 = [7 x i8] c"DELETE\00"
@.str.47 = [5 x i8] c"HOME\00"
@.str.48 = [4 x i8] c"END\00"
@.str.49 = [5 x i8] c"PGUP\00"
@.str.50 = [5 x i8] c"PGDN\00"
@.str.51 = [9 x i8] c"ARROW UP\00"
@.str.52 = [11 x i8] c"ARROW DOWN\00"
@.str.53 = [11 x i8] c"ARROW LEFT\00"
@.str.54 = [12 x i8] c"ARROW RIGHT\00"
@.str.55 = [20 x i8] c"CTRL+8, BACKSPACE 2\00"
@.str.56 = [8 x i8] c"UNKNOWN\00"
define i8* @funckeymap(i32 %0) {
%2 = alloca i8*
%3 = alloca i32
store i32 %0, i32* %3
%4 = load i32, i32* %3
%5 = icmp eq i32 %4, 127
br i1 %5, label %6, label %7
6: ; preds = %1
store i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.55, i64 0, i64 0), i8** %2
br label %30
7: ; preds = %1
%8 = load i32, i32* %3
%9 = icmp sge i32 %8, 65514
br i1 %9, label %10, label %19
10: ; preds = %7
%11 = load i32, i32* %3
%12 = icmp sle i32 %11, 65535
br i1 %12, label %13, label %19
13: ; preds = %10
%14 = load i32, i32* %3
%15 = sub nsw i32 65535, %14
%16 = sext i32 %15 to i64
%17 = getelementptr inbounds [22 x i8*], [22 x i8*]* @funckeymap.fkmap, i64 0, i64 %16
%18 = load i8*, i8** %17
store i8* %18, i8** %2
br label %30
19: ; preds = %10, %7
%20 = load i32, i32* %3
%21 = icmp sle i32 %20, 32
br i1 %21, label %22, label %27
22: ; preds = %19
%23 = load i32, i32* %3
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds [33 x i8*], [33 x i8*]* @funckeymap.fcmap, i64 0, i64 %24
%26 = load i8*, i8** %25
store i8* %26, i8** %2
br label %30
27: ; preds = %19
br label %28
28: ; preds = %27
br label %29
29: ; preds = %28
store i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.56, i64 0, i64 0), i8** %2
br label %30
30: ; preds = %29, %22, %13, %6
%31 = load i8*, i8** %2
ret i8* %31
}

LLVM IR (-O2):
@funckeymap.fcmap = internal unnamed_addr constant [33 x i8*] [i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.5, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.7, i32 0, i32 0), i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.8, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.9, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.10, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.11, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.12, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.13, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.14, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.15, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.16, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.17, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.18, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.19, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.20, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.21, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.22, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.23, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.24, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.25, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.26, i32 0, i32 0), i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.27, i32 0, i32 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.28, i32 0, i32 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.29, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.30, i32 0, i32 0), i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.31, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.32, i32 0, i32 0)]
@.str = [15 x i8] c"CTRL+2, CTRL+~\00"
@.str.1 = [7 x i8] c"CTRL+A\00"
@.str.2 = [7 x i8] c"CTRL+B\00"
@.str.3 = [7 x i8] c"CTRL+C\00"
@.str.4 = [7 x i8] c"CTRL+D\00"
@.str.5 = [7 x i8] c"CTRL+E\00"
@.str.6 = [7 x i8] c"CTRL+F\00"
@.str.7 = [7 x i8] c"CTRL+G\00"
@.str.8 = [18 x i8] c"CTRL+H, BACKSPACE\00"
@.str.9 = [12 x i8] c"CTRL+I, TAB\00"
@.str.10 = [7 x i8] c"CTRL+J\00"
@.str.11 = [7 x i8] c"CTRL+K\00"
@.str.12 = [7 x i8] c"CTRL+L\00"
@.str.13 = [14 x i8] c"CTRL+M, ENTER\00"
@.str.14 = [7 x i8] c"CTRL+N\00"
@.str.15 = [7 x i8] c"CTRL+O\00"
@.str.16 = [7 x i8] c"CTRL+P\00"
@.str.17 = [7 x i8] c"CTRL+Q\00"
@.str.18 = [7 x i8] c"CTRL+R\00"
@.str.19 = [7 x i8] c"CTRL+S\00"
@.str.20 = [7 x i8] c"CTRL+T\00"
@.str.21 = [7 x i8] c"CTRL+U\00"
@.str.22 = [7 x i8] c"CTRL+V\00"
@.str.23 = [7 x i8] c"CTRL+W\00"
@.str.24 = [7 x i8] c"CTRL+X\00"
@.str.25 = [7 x i8] c"CTRL+Y\00"
@.str.26 = [7 x i8] c"CTRL+Z\00"
@.str.27 = [20 x i8] c"CTRL+3, ESC, CTRL+[\00"
@.str.28 = [15 x i8] c"CTRL+4, CTRL+\\\00"
@.str.29 = [15 x i8] c"CTRL+5, CTRL+]\00"
@.str.30 = [7 x i8] c"CTRL+6\00"
@.str.31 = [23 x i8] c"CTRL+7, CTRL+/, CTRL+_\00"
@.str.32 = [6 x i8] c"SPACE\00"
@funckeymap.fkmap = internal unnamed_addr constant [22 x i8*] [i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.33, i32 0, i32 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.34, i32 0, i32 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.35, i32 0, i32 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.36, i32 0, i32 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.37, i32 0, i32 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.38, i32 0, i32 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.39, i32 0, i32 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.40, i32 0, i32 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.41, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.42, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.43, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.44, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.45, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.46, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.47, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.48, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.49, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.50, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.51, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.52, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.53, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.54, i32 0, i32 0)]
@.str.33 = [3 x i8] c"F1\00"
@.str.34 = [3 x i8] c"F2\00"
@.str.35 = [3 x i8] c"F3\00"
@.str.36 = [3 x i8] c"F4\00"
@.str.37 = [3 x i8] c"F5\00"
@.str.38 = [3 x i8] c"F6\00"
@.str.39 = [3 x i8] c"F7\00"
@.str.40 = [3 x i8] c"F8\00"
@.str.41 = [3 x i8] c"F9\00"
@.str.42 = [4 x i8] c"F10\00"
@.str.43 = [4 x i8] c"F11\00"
@.str.44 = [4 x i8] c"F12\00"
@.str.45 = [7 x i8] c"INSERT\00"
@.str.46 = [7 x i8] c"DELETE\00"
@.str.47 = [5 x i8] c"HOME\00"
@.str.48 = [4 x i8] c"END\00"
@.str.49 = [5 x i8] c"PGUP\00"
@.str.50 = [5 x i8] c"PGDN\00"
@.str.51 = [9 x i8] c"ARROW UP\00"
@.str.52 = [11 x i8] c"ARROW DOWN\00"
@.str.53 = [11 x i8] c"ARROW LEFT\00"
@.str.54 = [12 x i8] c"ARROW RIGHT\00"
@.str.55 = [20 x i8] c"CTRL+8, BACKSPACE 2\00"
@.str.56 = [8 x i8] c"UNKNOWN\00"
define i8* @funckeymap(i32 %0) {
%2 = icmp eq i32 %0, 127
br i1 %2, label %18, label %3
3: ; preds = %1
%4 = add i32 %0, -65514
%5 = icmp ult i32 %4, 22
br i1 %5, label %6, label %10
6: ; preds = %3
%7 = sub nuw nsw i32 65535, %0
%8 = zext i32 %7 to i64
%9 = getelementptr inbounds [22 x i8*], [22 x i8*]* @funckeymap.fkmap, i64 0, i64 %8
br label %15
10: ; preds = %3
%11 = icmp slt i32 %0, 33
br i1 %11, label %12, label %18
12: ; preds = %10
%13 = sext i32 %0 to i64
%14 = getelementptr inbounds [33 x i8*], [33 x i8*]* @funckeymap.fcmap, i64 0, i64 %13
br label %15
15: ; preds = %6, %12
%16 = phi i8** [ %14, %12 ], [ %9, %6 ]
%17 = load i8*, i8** %16
br label %18
18: ; preds = %15, %10, %1
%19 = phi i8* [ getelementptr inbounds ([20 x i8], [20 x i8]* @.str.55, i64 0, i64 0), %1 ], [ getelementptr inbounds ([8 x i8], [8 x i8]* @.str.56, i64 0, i64 0), %10 ], [ %17, %15 ]
ret i8* %19
}