char NTtoI(NT)
char NT;
{
  if (NT == 'T' || NT == 't')
    return (4);
  if (NT == 'G' || NT == 'g')
    return (3);
  if (NT == 'C' || NT == 'c')
    return (2);
  if (NT == 'A' || NT == 'a')
    return (1);
  if (NT == 'S' || NT == 's')
    return (5);
  if (NT == 'W' || NT == 'w')
    return (6);
  if (NT == 'R' || NT == 'r')
    return (7);
  if (NT == 'M' || NT == 'm')
    return (8);
  if (NT == 'K' || NT == 'k')
    return (9);
  if (NT == 'Y' || NT == 'y')
    return (10);
  if (NT == 'B' || NT == 'b')
    return (11);
  if (NT == 'D' || NT == 'd')
    return (12);
  if (NT == 'H' || NT == 'h')
    return (13);
  if (NT == 'V' || NT == 'v')
    return (14);
  if (NT == 'N' || NT == 'n')
    return (15);
  return (0);
}


x86 assembly (clang, -O0):
<NTtoI>:
push   %rbp
mov    %rsp,%rbp
mov    %dil,%al
mov    %al,-0x2(%rbp)
movsbl -0x2(%rbp),%eax
cmp    $0x54,%eax
je     1124 <NTtoI+0x24>
movsbl -0x2(%rbp),%eax
cmp    $0x74,%eax
jne    112d <NTtoI+0x2d>
movb   $0x4,-0x1(%rbp)
jmp    131b <NTtoI+0x21b>
movsbl -0x2(%rbp),%eax
cmp    $0x47,%eax
je     1147 <NTtoI+0x47>
movsbl -0x2(%rbp),%eax
cmp    $0x67,%eax
jne    1150 <NTtoI+0x50>
movb   $0x3,-0x1(%rbp)
jmp    131b <NTtoI+0x21b>
movsbl -0x2(%rbp),%eax
cmp    $0x43,%eax
je     116a <NTtoI+0x6a>
movsbl -0x2(%rbp),%eax
cmp    $0x63,%eax
jne    1173 <NTtoI+0x73>
movb   $0x2,-0x1(%rbp)
jmp    131b <NTtoI+0x21b>
movsbl -0x2(%rbp),%eax
cmp    $0x41,%eax
je     118d <NTtoI+0x8d>
movsbl -0x2(%rbp),%eax
cmp    $0x61,%eax
jne    1196 <NTtoI+0x96>
movb   $0x1,-0x1(%rbp)
jmp    131b <NTtoI+0x21b>
movsbl -0x2(%rbp),%eax
cmp    $0x53,%eax
je     11b0 <NTtoI+0xb0>
movsbl -0x2(%rbp),%eax
cmp    $0x73,%eax
jne    11b9 <NTtoI+0xb9>
movb   $0x5,-0x1(%rbp)
jmp    131b <NTtoI+0x21b>
movsbl -0x2(%rbp),%eax
cmp    $0x57,%eax
je     11d3 <NTtoI+0xd3>
movsbl -0x2(%rbp),%eax
cmp    $0x77,%eax
jne    11dc <NTtoI+0xdc>
movb   $0x6,-0x1(%rbp)
jmp    131b <NTtoI+0x21b>
movsbl -0x2(%rbp),%eax
cmp    $0x52,%eax
je     11f6 <NTtoI+0xf6>
movsbl -0x2(%rbp),%eax
cmp    $0x72,%eax
jne    11ff <NTtoI+0xff>
movb   $0x7,-0x1(%rbp)
jmp    131b <NTtoI+0x21b>
movsbl -0x2(%rbp),%eax
cmp    $0x4d,%eax
je     1219 <NTtoI+0x119>
movsbl -0x2(%rbp),%eax
cmp    $0x6d,%eax
jne    1222 <NTtoI+0x122>
movb   $0x8,-0x1(%rbp)
jmp    131b <NTtoI+0x21b>
movsbl -0x2(%rbp),%eax
cmp    $0x4b,%eax
je     123c <NTtoI+0x13c>
movsbl -0x2(%rbp),%eax
cmp    $0x6b,%eax
jne    1245 <NTtoI+0x145>
movb   $0x9,-0x1(%rbp)
jmp    131b <NTtoI+0x21b>
movsbl -0x2(%rbp),%eax
cmp    $0x59,%eax
je     125f <NTtoI+0x15f>
movsbl -0x2(%rbp),%eax
cmp    $0x79,%eax
jne    1268 <NTtoI+0x168>
movb   $0xa,-0x1(%rbp)
jmp    131b <NTtoI+0x21b>
movsbl -0x2(%rbp),%eax
cmp    $0x42,%eax
je     1282 <NTtoI+0x182>
movsbl -0x2(%rbp),%eax
cmp    $0x62,%eax
jne    128b <NTtoI+0x18b>
movb   $0xb,-0x1(%rbp)
jmp    131b <NTtoI+0x21b>
movsbl -0x2(%rbp),%eax
cmp    $0x44,%eax
je     12a5 <NTtoI+0x1a5>
movsbl -0x2(%rbp),%eax
cmp    $0x64,%eax
jne    12ae <NTtoI+0x1ae>
movb   $0xc,-0x1(%rbp)
jmp    131b <NTtoI+0x21b>
movsbl -0x2(%rbp),%eax
cmp    $0x48,%eax
je     12c8 <NTtoI+0x1c8>
movsbl -0x2(%rbp),%eax
cmp    $0x68,%eax
jne    12d1 <NTtoI+0x1d1>
movb   $0xd,-0x1(%rbp)
jmp    131b <NTtoI+0x21b>
movsbl -0x2(%rbp),%eax
cmp    $0x56,%eax
je     12eb <NTtoI+0x1eb>
movsbl -0x2(%rbp),%eax
cmp    $0x76,%eax
jne    12f4 <NTtoI+0x1f4>
movb   $0xe,-0x1(%rbp)
jmp    131b <NTtoI+0x21b>
movsbl -0x2(%rbp),%eax
cmp    $0x4e,%eax
je     130e <NTtoI+0x20e>
movsbl -0x2(%rbp),%eax
cmp    $0x6e,%eax
jne    1317 <NTtoI+0x217>
movb   $0xf,-0x1(%rbp)
jmp    131b <NTtoI+0x21b>
movb   $0x0,-0x1(%rbp)
movsbl -0x1(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<NTtoI>:
and    $0xdf,%edi
lea    -0x41(%rdi),%eax
cmp    $0x19,%al
jae    111a <NTtoI+0x1a>
movzbl %al,%ecx
mov    $0x16e14cf,%edx
bt     %ecx,%edx
jb     1128 <NTtoI+0x28>
xor    %ecx,%ecx
cmp    $0x4e,%edi
mov    $0xf,%eax
cmovne %ecx,%eax
ret
movsbq %al,%rax
lea    0xecd(%rip),%rcx
mov    (%rax,%rcx,1),%al
ret

LLVM IR (-O0):
define signext i8 @NTtoI(i32 %0) {
%2 = alloca i8
%3 = alloca i8
%4 = trunc i32 %0 to i8
store i8 %4, i8* %3
%5 = load i8, i8* %3
%6 = sext i8 %5 to i32
%7 = icmp eq i32 %6, 84
br i1 %7, label %12, label %8
8: ; preds = %1
%9 = load i8, i8* %3
%10 = sext i8 %9 to i32
%11 = icmp eq i32 %10, 116
br i1 %11, label %12, label %13
12: ; preds = %8, %1
store i8 4, i8* %2
br label %140
13: ; preds = %8
%14 = load i8, i8* %3
%15 = sext i8 %14 to i32
%16 = icmp eq i32 %15, 71
br i1 %16, label %21, label %17
17: ; preds = %13
%18 = load i8, i8* %3
%19 = sext i8 %18 to i32
%20 = icmp eq i32 %19, 103
br i1 %20, label %21, label %22
21: ; preds = %17, %13
store i8 3, i8* %2
br label %140
22: ; preds = %17
%23 = load i8, i8* %3
%24 = sext i8 %23 to i32
%25 = icmp eq i32 %24, 67
br i1 %25, label %30, label %26
26: ; preds = %22
%27 = load i8, i8* %3
%28 = sext i8 %27 to i32
%29 = icmp eq i32 %28, 99
br i1 %29, label %30, label %31
30: ; preds = %26, %22
store i8 2, i8* %2
br label %140
31: ; preds = %26
%32 = load i8, i8* %3
%33 = sext i8 %32 to i32
%34 = icmp eq i32 %33, 65
br i1 %34, label %39, label %35
35: ; preds = %31
%36 = load i8, i8* %3
%37 = sext i8 %36 to i32
%38 = icmp eq i32 %37, 97
br i1 %38, label %39, label %40
39: ; preds = %35, %31
store i8 1, i8* %2
br label %140
40: ; preds = %35
%41 = load i8, i8* %3
%42 = sext i8 %41 to i32
%43 = icmp eq i32 %42, 83
br i1 %43, label %48, label %44
44: ; preds = %40
%45 = load i8, i8* %3
%46 = sext i8 %45 to i32
%47 = icmp eq i32 %46, 115
br i1 %47, label %48, label %49
48: ; preds = %44, %40
store i8 5, i8* %2
br label %140
49: ; preds = %44
%50 = load i8, i8* %3
%51 = sext i8 %50 to i32
%52 = icmp eq i32 %51, 87
br i1 %52, label %57, label %53
53: ; preds = %49
%54 = load i8, i8* %3
%55 = sext i8 %54 to i32
%56 = icmp eq i32 %55, 119
br i1 %56, label %57, label %58
57: ; preds = %53, %49
store i8 6, i8* %2
br label %140
58: ; preds = %53
%59 = load i8, i8* %3
%60 = sext i8 %59 to i32
%61 = icmp eq i32 %60, 82
br i1 %61, label %66, label %62
62: ; preds = %58
%63 = load i8, i8* %3
%64 = sext i8 %63 to i32
%65 = icmp eq i32 %64, 114
br i1 %65, label %66, label %67
66: ; preds = %62, %58
store i8 7, i8* %2
br label %140
67: ; preds = %62
%68 = load i8, i8* %3
%69 = sext i8 %68 to i32
%70 = icmp eq i32 %69, 77
br i1 %70, label %75, label %71
71: ; preds = %67
%72 = load i8, i8* %3
%73 = sext i8 %72 to i32
%74 = icmp eq i32 %73, 109
br i1 %74, label %75, label %76
75: ; preds = %71, %67
store i8 8, i8* %2
br label %140
76: ; preds = %71
%77 = load i8, i8* %3
%78 = sext i8 %77 to i32
%79 = icmp eq i32 %78, 75
br i1 %79, label %84, label %80
80: ; preds = %76
%81 = load i8, i8* %3
%82 = sext i8 %81 to i32
%83 = icmp eq i32 %82, 107
br i1 %83, label %84, label %85
84: ; preds = %80, %76
store i8 9, i8* %2
br label %140
85: ; preds = %80
%86 = load i8, i8* %3
%87 = sext i8 %86 to i32
%88 = icmp eq i32 %87, 89
br i1 %88, label %93, label %89
89: ; preds = %85
%90 = load i8, i8* %3
%91 = sext i8 %90 to i32
%92 = icmp eq i32 %91, 121
br i1 %92, label %93, label %94
93: ; preds = %89, %85
store i8 10, i8* %2
br label %140
94: ; preds = %89
%95 = load i8, i8* %3
%96 = sext i8 %95 to i32
%97 = icmp eq i32 %96, 66
br i1 %97, label %102, label %98
98: ; preds = %94
%99 = load i8, i8* %3
%100 = sext i8 %99 to i32
%101 = icmp eq i32 %100, 98
br i1 %101, label %102, label %103
102: ; preds = %98, %94
store i8 11, i8* %2
br label %140
103: ; preds = %98
%104 = load i8, i8* %3
%105 = sext i8 %104 to i32
%106 = icmp eq i32 %105, 68
br i1 %106, label %111, label %107
107: ; preds = %103
%108 = load i8, i8* %3
%109 = sext i8 %108 to i32
%110 = icmp eq i32 %109, 100
br i1 %110, label %111, label %112
111: ; preds = %107, %103
store i8 12, i8* %2
br label %140
112: ; preds = %107
%113 = load i8, i8* %3
%114 = sext i8 %113 to i32
%115 = icmp eq i32 %114, 72
br i1 %115, label %120, label %116
116: ; preds = %112
%117 = load i8, i8* %3
%118 = sext i8 %117 to i32
%119 = icmp eq i32 %118, 104
br i1 %119, label %120, label %121
120: ; preds = %116, %112
store i8 13, i8* %2
br label %140
121: ; preds = %116
%122 = load i8, i8* %3
%123 = sext i8 %122 to i32
%124 = icmp eq i32 %123, 86
br i1 %124, label %129, label %125
125: ; preds = %121
%126 = load i8, i8* %3
%127 = sext i8 %126 to i32
%128 = icmp eq i32 %127, 118
br i1 %128, label %129, label %130
129: ; preds = %125, %121
store i8 14, i8* %2
br label %140
130: ; preds = %125
%131 = load i8, i8* %3
%132 = sext i8 %131 to i32
%133 = icmp eq i32 %132, 78
br i1 %133, label %138, label %134
134: ; preds = %130
%135 = load i8, i8* %3
%136 = sext i8 %135 to i32
%137 = icmp eq i32 %136, 110
br i1 %137, label %138, label %139
138: ; preds = %134, %130
store i8 15, i8* %2
br label %140
139: ; preds = %134
store i8 0, i8* %2
br label %140
140: ; preds = %139, %138, %129, %120, %111, %102, %93, %84, %75, %66, %57, %48, %39, %30, %21, %12
%141 = load i8, i8* %2
ret i8 %141
}

LLVM IR (-O2):
@switch.table.NTtoI = [25 x i8] c"\01\0B\02\0C\04\04\03\0D\04\04\09\04\08\04\04\04\04\07\05\04\04\0E\06\04\0A"
define signext i8 @NTtoI(i32 %0) {
%2 = and i32 %0, 223
%3 = trunc i32 %2 to i8
%4 = add i8 %3, -65
%5 = icmp ult i8 %4, 25
br i1 %5, label %9, label %6
6: ; preds = %9, %1
%7 = icmp eq i32 %2, 78
%8 = select i1 %7, i8 15, i8 0
br label %18
9: ; preds = %1
%10 = zext i8 %4 to i32
%11 = lshr i32 23991503, %10
%12 = and i32 %11, 1
%13 = icmp eq i32 %12, 0
br i1 %13, label %6, label %14
14: ; preds = %9
%15 = sext i8 %4 to i64
%16 = getelementptr inbounds [25 x i8], [25 x i8]* @switch.table.NTtoI, i64 0, i64 %15
%17 = load i8, i8* %16
br label %18
18: ; preds = %14, %6
%19 = phi i8 [ %8, %6 ], [ %17, %14 ]
ret i8 %19
}