#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 */
char inportb(int);
char getkbcode() {
  char scancode = inportb(0x60);
  if (scancode == 0x10)
    return 'Q';
  if (scancode == 0x14)
    return 'T';
  if (scancode == 0x18)
    return 'O';
  if (scancode == 0x1C)
    return '\n';
  if (scancode == 0x20)
    return 'D';
  if (scancode == 0x24)
    return 'J';
  if (scancode == 0x2C)
    return 'Z';
  if (scancode == 0x30)
    return 'B';
  if (scancode == 0x34)
    return '.';
  if (scancode == 0x0C)
    return '-';
  if (scancode == 0x08)
    return '7';
  if (scancode == 0x04)
    return '3';
  if (scancode == 0x05)
    return '4';
  if (scancode == 0x09)
    return '8';
  if (scancode == 0x0D)
    return '=';
  if (scancode == 0x11)
    return 'W';
  if (scancode == 0x15)
    return 'Y';
  if (scancode == 0x19)
    return 'P';
  if (scancode == 0x21)
    return 'F';
  if (scancode == 0x25)
    return 'K';
  if (scancode == 0x2D)
    return 'X';
  if (scancode == 0x31)
    return 'N';
  if (scancode == 0x39)
    return ' ';
  if (scancode == 0x02)
    return '1';
  if (scancode == 0x06)
    return '5';
  if (scancode == 0x0A)
    return '9';
  if (scancode == 0x0E)
    return '\b';
  if (scancode == 0x12)
    return 'E';
  if (scancode == 0x16)
    return 'U';
  if (scancode == 0x1A)
    return '[';
  if (scancode == 0x1E)
    return 'A';
  if (scancode == 0x22)
    return 'G';
  if (scancode == 0x26)
    return 'L';
  if (scancode == 0x2E)
    return 'C';
  if (scancode == 0x32)
    return 'M';
  if (scancode == 0x03)
    return '2';
  if (scancode == 0x07)
    return '6';
  if (scancode == 0x0B)
    return '0';
  if (scancode == 0x13)
    return 'R';
  if (scancode == 0x17)
    return 'I';
  if (scancode == 0x1B)
    return ']';
  if (scancode == 0x1F)
    return 'S';
  if (scancode == 0x23)
    return 'H';
  if (scancode == 0x2F)
    return 'V';
  if (scancode == 0x27)
    return ';';
}


x86 assembly (clang, -O0):
<getkbcode>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    $0x60,%edi
call   1030 <inportb@plt>
mov    %al,-0x2(%rbp)
movsbl -0x2(%rbp),%eax
cmp    $0x10,%eax
jne    113b <getkbcode+0x2b>
movb   $0x51,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x14,%eax
jne    1151 <getkbcode+0x41>
movb   $0x54,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x18,%eax
jne    1167 <getkbcode+0x57>
movb   $0x4f,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x1c,%eax
jne    117d <getkbcode+0x6d>
movb   $0xa,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x20,%eax
jne    1193 <getkbcode+0x83>
movb   $0x44,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x24,%eax
jne    11a9 <getkbcode+0x99>
movb   $0x4a,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x2c,%eax
jne    11bf <getkbcode+0xaf>
movb   $0x5a,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x30,%eax
jne    11d5 <getkbcode+0xc5>
movb   $0x42,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x34,%eax
jne    11eb <getkbcode+0xdb>
movb   $0x2e,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0xc,%eax
jne    1201 <getkbcode+0xf1>
movb   $0x2d,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x8,%eax
jne    1217 <getkbcode+0x107>
movb   $0x37,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x4,%eax
jne    122d <getkbcode+0x11d>
movb   $0x33,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x5,%eax
jne    1243 <getkbcode+0x133>
movb   $0x34,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x9,%eax
jne    1259 <getkbcode+0x149>
movb   $0x38,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0xd,%eax
jne    126f <getkbcode+0x15f>
movb   $0x3d,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x11,%eax
jne    1285 <getkbcode+0x175>
movb   $0x57,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x15,%eax
jne    129b <getkbcode+0x18b>
movb   $0x59,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x19,%eax
jne    12b1 <getkbcode+0x1a1>
movb   $0x50,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x21,%eax
jne    12c7 <getkbcode+0x1b7>
movb   $0x46,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x25,%eax
jne    12dd <getkbcode+0x1cd>
movb   $0x4b,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x2d,%eax
jne    12f3 <getkbcode+0x1e3>
movb   $0x58,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x31,%eax
jne    1309 <getkbcode+0x1f9>
movb   $0x4e,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x39,%eax
jne    131f <getkbcode+0x20f>
movb   $0x20,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x2,%eax
jne    1335 <getkbcode+0x225>
movb   $0x31,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x6,%eax
jne    134b <getkbcode+0x23b>
movb   $0x35,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0xa,%eax
jne    1361 <getkbcode+0x251>
movb   $0x39,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0xe,%eax
jne    1377 <getkbcode+0x267>
movb   $0x8,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x12,%eax
jne    138d <getkbcode+0x27d>
movb   $0x45,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x16,%eax
jne    13a3 <getkbcode+0x293>
movb   $0x55,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x1a,%eax
jne    13b9 <getkbcode+0x2a9>
movb   $0x5b,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x1e,%eax
jne    13cf <getkbcode+0x2bf>
movb   $0x41,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x22,%eax
jne    13e5 <getkbcode+0x2d5>
movb   $0x47,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x26,%eax
jne    13fb <getkbcode+0x2eb>
movb   $0x4c,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x2e,%eax
jne    1411 <getkbcode+0x301>
movb   $0x43,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x32,%eax
jne    1427 <getkbcode+0x317>
movb   $0x4d,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x3,%eax
jne    143d <getkbcode+0x32d>
movb   $0x32,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x7,%eax
jne    1453 <getkbcode+0x343>
movb   $0x36,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0xb,%eax
jne    1469 <getkbcode+0x359>
movb   $0x30,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x13,%eax
jne    147f <getkbcode+0x36f>
movb   $0x52,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x17,%eax
jne    1495 <getkbcode+0x385>
movb   $0x49,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x1b,%eax
jne    14ab <getkbcode+0x39b>
movb   $0x5d,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x1f,%eax
jne    14c1 <getkbcode+0x3b1>
movb   $0x53,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x23,%eax
jne    14d7 <getkbcode+0x3c7>
movb   $0x48,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x2f,%eax
jne    14ed <getkbcode+0x3dd>
movb   $0x56,-0x1(%rbp)
jmp    14fe <getkbcode+0x3ee>
movsbl -0x2(%rbp),%eax
cmp    $0x27,%eax
jne    14fe <getkbcode+0x3ee>
movb   $0x3b,-0x1(%rbp)
movsbl -0x1(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<getkbcode>:
push   %rax
mov    $0x60,%edi
call   1030 <inportb@plt>
add    $0xfe,%al
mov    $0x51,%cl
cmp    $0x37,%al
ja     1131 <getkbcode+0x21>
movsbq %al,%rax
lea    0xed2(%rip),%rcx
mov    (%rax,%rcx,1),%cl
mov    %ecx,%eax
pop    %rcx
ret

LLVM IR (-O0):
define signext i8 @getkbcode() {
%1 = alloca i8
%2 = alloca i8
%3 = call signext i8 @inportb(i32 96)
store i8 %3, i8* %2
%4 = load i8, i8* %2
%5 = sext i8 %4 to i32
%6 = icmp eq i32 %5, 16
br i1 %6, label %7, label %8
7: ; preds = %0
store i8 81, i8* %1
br label %228
8: ; preds = %0
%9 = load i8, i8* %2
%10 = sext i8 %9 to i32
%11 = icmp eq i32 %10, 20
br i1 %11, label %12, label %13
12: ; preds = %8
store i8 84, i8* %1
br label %228
13: ; preds = %8
%14 = load i8, i8* %2
%15 = sext i8 %14 to i32
%16 = icmp eq i32 %15, 24
br i1 %16, label %17, label %18
17: ; preds = %13
store i8 79, i8* %1
br label %228
18: ; preds = %13
%19 = load i8, i8* %2
%20 = sext i8 %19 to i32
%21 = icmp eq i32 %20, 28
br i1 %21, label %22, label %23
22: ; preds = %18
store i8 10, i8* %1
br label %228
23: ; preds = %18
%24 = load i8, i8* %2
%25 = sext i8 %24 to i32
%26 = icmp eq i32 %25, 32
br i1 %26, label %27, label %28
27: ; preds = %23
store i8 68, i8* %1
br label %228
28: ; preds = %23
%29 = load i8, i8* %2
%30 = sext i8 %29 to i32
%31 = icmp eq i32 %30, 36
br i1 %31, label %32, label %33
32: ; preds = %28
store i8 74, i8* %1
br label %228
33: ; preds = %28
%34 = load i8, i8* %2
%35 = sext i8 %34 to i32
%36 = icmp eq i32 %35, 44
br i1 %36, label %37, label %38
37: ; preds = %33
store i8 90, i8* %1
br label %228
38: ; preds = %33
%39 = load i8, i8* %2
%40 = sext i8 %39 to i32
%41 = icmp eq i32 %40, 48
br i1 %41, label %42, label %43
42: ; preds = %38
store i8 66, i8* %1
br label %228
43: ; preds = %38
%44 = load i8, i8* %2
%45 = sext i8 %44 to i32
%46 = icmp eq i32 %45, 52
br i1 %46, label %47, label %48
47: ; preds = %43
store i8 46, i8* %1
br label %228
48: ; preds = %43
%49 = load i8, i8* %2
%50 = sext i8 %49 to i32
%51 = icmp eq i32 %50, 12
br i1 %51, label %52, label %53
52: ; preds = %48
store i8 45, i8* %1
br label %228
53: ; preds = %48
%54 = load i8, i8* %2
%55 = sext i8 %54 to i32
%56 = icmp eq i32 %55, 8
br i1 %56, label %57, label %58
57: ; preds = %53
store i8 55, i8* %1
br label %228
58: ; preds = %53
%59 = load i8, i8* %2
%60 = sext i8 %59 to i32
%61 = icmp eq i32 %60, 4
br i1 %61, label %62, label %63
62: ; preds = %58
store i8 51, i8* %1
br label %228
63: ; preds = %58
%64 = load i8, i8* %2
%65 = sext i8 %64 to i32
%66 = icmp eq i32 %65, 5
br i1 %66, label %67, label %68
67: ; preds = %63
store i8 52, i8* %1
br label %228
68: ; preds = %63
%69 = load i8, i8* %2
%70 = sext i8 %69 to i32
%71 = icmp eq i32 %70, 9
br i1 %71, label %72, label %73
72: ; preds = %68
store i8 56, i8* %1
br label %228
73: ; preds = %68
%74 = load i8, i8* %2
%75 = sext i8 %74 to i32
%76 = icmp eq i32 %75, 13
br i1 %76, label %77, label %78
77: ; preds = %73
store i8 61, i8* %1
br label %228
78: ; preds = %73
%79 = load i8, i8* %2
%80 = sext i8 %79 to i32
%81 = icmp eq i32 %80, 17
br i1 %81, label %82, label %83
82: ; preds = %78
store i8 87, i8* %1
br label %228
83: ; preds = %78
%84 = load i8, i8* %2
%85 = sext i8 %84 to i32
%86 = icmp eq i32 %85, 21
br i1 %86, label %87, label %88
87: ; preds = %83
store i8 89, i8* %1
br label %228
88: ; preds = %83
%89 = load i8, i8* %2
%90 = sext i8 %89 to i32
%91 = icmp eq i32 %90, 25
br i1 %91, label %92, label %93
92: ; preds = %88
store i8 80, i8* %1
br label %228
93: ; preds = %88
%94 = load i8, i8* %2
%95 = sext i8 %94 to i32
%96 = icmp eq i32 %95, 33
br i1 %96, label %97, label %98
97: ; preds = %93
store i8 70, i8* %1
br label %228
98: ; preds = %93
%99 = load i8, i8* %2
%100 = sext i8 %99 to i32
%101 = icmp eq i32 %100, 37
br i1 %101, label %102, label %103
102: ; preds = %98
store i8 75, i8* %1
br label %228
103: ; preds = %98
%104 = load i8, i8* %2
%105 = sext i8 %104 to i32
%106 = icmp eq i32 %105, 45
br i1 %106, label %107, label %108
107: ; preds = %103
store i8 88, i8* %1
br label %228
108: ; preds = %103
%109 = load i8, i8* %2
%110 = sext i8 %109 to i32
%111 = icmp eq i32 %110, 49
br i1 %111, label %112, label %113
112: ; preds = %108
store i8 78, i8* %1
br label %228
113: ; preds = %108
%114 = load i8, i8* %2
%115 = sext i8 %114 to i32
%116 = icmp eq i32 %115, 57
br i1 %116, label %117, label %118
117: ; preds = %113
store i8 32, i8* %1
br label %228
118: ; preds = %113
%119 = load i8, i8* %2
%120 = sext i8 %119 to i32
%121 = icmp eq i32 %120, 2
br i1 %121, label %122, label %123
122: ; preds = %118
store i8 49, i8* %1
br label %228
123: ; preds = %118
%124 = load i8, i8* %2
%125 = sext i8 %124 to i32
%126 = icmp eq i32 %125, 6
br i1 %126, label %127, label %128
127: ; preds = %123
store i8 53, i8* %1
br label %228
128: ; preds = %123
%129 = load i8, i8* %2
%130 = sext i8 %129 to i32
%131 = icmp eq i32 %130, 10
br i1 %131, label %132, label %133
132: ; preds = %128
store i8 57, i8* %1
br label %228
133: ; preds = %128
%134 = load i8, i8* %2
%135 = sext i8 %134 to i32
%136 = icmp eq i32 %135, 14
br i1 %136, label %137, label %138
137: ; preds = %133
store i8 8, i8* %1
br label %228
138: ; preds = %133
%139 = load i8, i8* %2
%140 = sext i8 %139 to i32
%141 = icmp eq i32 %140, 18
br i1 %141, label %142, label %143
142: ; preds = %138
store i8 69, i8* %1
br label %228
143: ; preds = %138
%144 = load i8, i8* %2
%145 = sext i8 %144 to i32
%146 = icmp eq i32 %145, 22
br i1 %146, label %147, label %148
147: ; preds = %143
store i8 85, i8* %1
br label %228
148: ; preds = %143
%149 = load i8, i8* %2
%150 = sext i8 %149 to i32
%151 = icmp eq i32 %150, 26
br i1 %151, label %152, label %153
152: ; preds = %148
store i8 91, i8* %1
br label %228
153: ; preds = %148
%154 = load i8, i8* %2
%155 = sext i8 %154 to i32
%156 = icmp eq i32 %155, 30
br i1 %156, label %157, label %158
157: ; preds = %153
store i8 65, i8* %1
br label %228
158: ; preds = %153
%159 = load i8, i8* %2
%160 = sext i8 %159 to i32
%161 = icmp eq i32 %160, 34
br i1 %161, label %162, label %163
162: ; preds = %158
store i8 71, i8* %1
br label %228
163: ; preds = %158
%164 = load i8, i8* %2
%165 = sext i8 %164 to i32
%166 = icmp eq i32 %165, 38
br i1 %166, label %167, label %168
167: ; preds = %163
store i8 76, i8* %1
br label %228
168: ; preds = %163
%169 = load i8, i8* %2
%170 = sext i8 %169 to i32
%171 = icmp eq i32 %170, 46
br i1 %171, label %172, label %173
172: ; preds = %168
store i8 67, i8* %1
br label %228
173: ; preds = %168
%174 = load i8, i8* %2
%175 = sext i8 %174 to i32
%176 = icmp eq i32 %175, 50
br i1 %176, label %177, label %178
177: ; preds = %173
store i8 77, i8* %1
br label %228
178: ; preds = %173
%179 = load i8, i8* %2
%180 = sext i8 %179 to i32
%181 = icmp eq i32 %180, 3
br i1 %181, label %182, label %183
182: ; preds = %178
store i8 50, i8* %1
br label %228
183: ; preds = %178
%184 = load i8, i8* %2
%185 = sext i8 %184 to i32
%186 = icmp eq i32 %185, 7
br i1 %186, label %187, label %188
187: ; preds = %183
store i8 54, i8* %1
br label %228
188: ; preds = %183
%189 = load i8, i8* %2
%190 = sext i8 %189 to i32
%191 = icmp eq i32 %190, 11
br i1 %191, label %192, label %193
192: ; preds = %188
store i8 48, i8* %1
br label %228
193: ; preds = %188
%194 = load i8, i8* %2
%195 = sext i8 %194 to i32
%196 = icmp eq i32 %195, 19
br i1 %196, label %197, label %198
197: ; preds = %193
store i8 82, i8* %1
br label %228
198: ; preds = %193
%199 = load i8, i8* %2
%200 = sext i8 %199 to i32
%201 = icmp eq i32 %200, 23
br i1 %201, label %202, label %203
202: ; preds = %198
store i8 73, i8* %1
br label %228
203: ; preds = %198
%204 = load i8, i8* %2
%205 = sext i8 %204 to i32
%206 = icmp eq i32 %205, 27
br i1 %206, label %207, label %208
207: ; preds = %203
store i8 93, i8* %1
br label %228
208: ; preds = %203
%209 = load i8, i8* %2
%210 = sext i8 %209 to i32
%211 = icmp eq i32 %210, 31
br i1 %211, label %212, label %213
212: ; preds = %208
store i8 83, i8* %1
br label %228
213: ; preds = %208
%214 = load i8, i8* %2
%215 = sext i8 %214 to i32
%216 = icmp eq i32 %215, 35
br i1 %216, label %217, label %218
217: ; preds = %213
store i8 72, i8* %1
br label %228
218: ; preds = %213
%219 = load i8, i8* %2
%220 = sext i8 %219 to i32
%221 = icmp eq i32 %220, 47
br i1 %221, label %222, label %223
222: ; preds = %218
store i8 86, i8* %1
br label %228
223: ; preds = %218
%224 = load i8, i8* %2
%225 = sext i8 %224 to i32
%226 = icmp eq i32 %225, 39
br i1 %226, label %227, label %228
227: ; preds = %223
store i8 59, i8* %1
br label %228
228: ; preds = %7, %12, %17, %22, %27, %32, %37, %42, %47, %52, %57, %62, %67, %72, %77, %82, %87, %92, %97, %102, %107, %112, %117, %122, %127, %132, %137, %142, %147, %152, %157, %162, %167, %172, %177, %182, %187, %192, %197, %202, %207, %212, %217, %222, %227, %223
%229 = load i8, i8* %1
ret i8 %229
}

LLVM IR (-O2):
@switch.table.getkbcode = [56 x i8] c"1234567890-=\08QQWERTYUIOP[]\0AQASDFGHJKL;QQQQZXCVBNMQ.QQQQ "
define signext i8 @getkbcode() {
%1 = tail call signext i8 @inportb(i32 96)
%2 = add i8 %1, -2
%3 = icmp ult i8 %2, 56
br i1 %3, label %4, label %8
4: ; preds = %0
%5 = sext i8 %2 to i64
%6 = getelementptr inbounds [56 x i8], [56 x i8]* @switch.table.getkbcode, i64 0, i64 %5
%7 = load i8, i8* %6
br label %8
8: ; preds = %4, %0
%9 = phi i8 [ 81, %0 ], [ %7, %4 ]
ret i8 %9
}