int myhtoi(char c1, char c2) {
  int out = 0;
  switch (c1) {
  case '0':
    break;
  case '1':
    out += 16;
    break;
  case '2':
    out += 32;
    break;
  case '3':
    out += 48;
    break;
  case '4':
    out += 64;
    break;
  case '5':
    out += 80;
    break;
  case '6':
    out += 96;
    break;
  case '7':
    out += 112;
    break;
  case '8':
    out += 128;
    break;
  case '9':
    out += 144;
    break;
  case 'A':
    out += 160;
    break;
  case 'B':
    out += 176;
    break;
  case 'C':
    out += 192;
    break;
  case 'D':
    out += 208;
    break;
  case 'E':
    out += 224;
    break;
  case 'F':
    out += 240;
    break;
  default:
    break;
  }
  switch (c2) {
  case '0':
    break;
  case '1':
    out += 1;
    break;
  case '2':
    out += 2;
    break;
  case '3':
    out += 3;
    break;
  case '4':
    out += 4;
    break;
  case '5':
    out += 5;
    break;
  case '6':
    out += 6;
    break;
  case '7':
    out += 7;
    break;
  case '8':
    out += 8;
    break;
  case '9':
    out += 9;
    break;
  case 'A':
    out += 10;
    break;
  case 'B':
    out += 11;
    break;
  case 'C':
    out += 12;
    break;
  case 'D':
    out += 13;
    break;
  case 'E':
    out += 14;
    break;
  case 'F':
    out += 15;
    break;
  default:
    break;
  }
  return out;
}


x86 assembly (clang, -O0):
<myhtoi>:
push   %rbp
mov    %rsp,%rbp
mov    %sil,%al
mov    %dil,%cl
mov    %cl,-0x1(%rbp)
mov    %al,-0x2(%rbp)
movl   $0x0,-0x8(%rbp)
movsbl -0x1(%rbp),%eax
add    $0xffffffd0,%eax
mov    %eax,%ecx
mov    %rcx,-0x10(%rbp)
sub    $0x16,%eax
ja     1228 <myhtoi+0x128>
mov    -0x10(%rbp),%rax
lea    0xec8(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
jmp    122d <myhtoi+0x12d>
mov    -0x8(%rbp),%eax
add    $0x10,%eax
mov    %eax,-0x8(%rbp)
jmp    122d <myhtoi+0x12d>
mov    -0x8(%rbp),%eax
add    $0x20,%eax
mov    %eax,-0x8(%rbp)
jmp    122d <myhtoi+0x12d>
mov    -0x8(%rbp),%eax
add    $0x30,%eax
mov    %eax,-0x8(%rbp)
jmp    122d <myhtoi+0x12d>
mov    -0x8(%rbp),%eax
add    $0x40,%eax
mov    %eax,-0x8(%rbp)
jmp    122d <myhtoi+0x12d>
mov    -0x8(%rbp),%eax
add    $0x50,%eax
mov    %eax,-0x8(%rbp)
jmp    122d <myhtoi+0x12d>
mov    -0x8(%rbp),%eax
add    $0x60,%eax
mov    %eax,-0x8(%rbp)
jmp    122d <myhtoi+0x12d>
mov    -0x8(%rbp),%eax
add    $0x70,%eax
mov    %eax,-0x8(%rbp)
jmp    122d <myhtoi+0x12d>
mov    -0x8(%rbp),%eax
add    $0x80,%eax
mov    %eax,-0x8(%rbp)
jmp    122d <myhtoi+0x12d>
mov    -0x8(%rbp),%eax
add    $0x90,%eax
mov    %eax,-0x8(%rbp)
jmp    122d <myhtoi+0x12d>
mov    -0x8(%rbp),%eax
add    $0xa0,%eax
mov    %eax,-0x8(%rbp)
jmp    122d <myhtoi+0x12d>
mov    -0x8(%rbp),%eax
add    $0xb0,%eax
mov    %eax,-0x8(%rbp)
jmp    122d <myhtoi+0x12d>
mov    -0x8(%rbp),%eax
add    $0xc0,%eax
mov    %eax,-0x8(%rbp)
jmp    122d <myhtoi+0x12d>
mov    -0x8(%rbp),%eax
add    $0xd0,%eax
mov    %eax,-0x8(%rbp)
jmp    122d <myhtoi+0x12d>
mov    -0x8(%rbp),%eax
add    $0xe0,%eax
mov    %eax,-0x8(%rbp)
jmp    122d <myhtoi+0x12d>
mov    -0x8(%rbp),%eax
add    $0xf0,%eax
mov    %eax,-0x8(%rbp)
jmp    122d <myhtoi+0x12d>
jmp    122d <myhtoi+0x12d>
movsbl -0x2(%rbp),%eax
add    $0xffffffd0,%eax
mov    %eax,%ecx
mov    %rcx,-0x18(%rbp)
sub    $0x16,%eax
ja     132e <myhtoi+0x22e>
mov    -0x18(%rbp),%rax
lea    0xe0e(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
jmp    1333 <myhtoi+0x233>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1333 <myhtoi+0x233>
mov    -0x8(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x8(%rbp)
jmp    1333 <myhtoi+0x233>
mov    -0x8(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x8(%rbp)
jmp    1333 <myhtoi+0x233>
mov    -0x8(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x8(%rbp)
jmp    1333 <myhtoi+0x233>
mov    -0x8(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0x8(%rbp)
jmp    1333 <myhtoi+0x233>
mov    -0x8(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x8(%rbp)
jmp    1333 <myhtoi+0x233>
mov    -0x8(%rbp),%eax
add    $0x7,%eax
mov    %eax,-0x8(%rbp)
jmp    1333 <myhtoi+0x233>
mov    -0x8(%rbp),%eax
add    $0x8,%eax
mov    %eax,-0x8(%rbp)
jmp    1333 <myhtoi+0x233>
mov    -0x8(%rbp),%eax
add    $0x9,%eax
mov    %eax,-0x8(%rbp)
jmp    1333 <myhtoi+0x233>
mov    -0x8(%rbp),%eax
add    $0xa,%eax
mov    %eax,-0x8(%rbp)
jmp    1333 <myhtoi+0x233>
mov    -0x8(%rbp),%eax
add    $0xb,%eax
mov    %eax,-0x8(%rbp)
jmp    1333 <myhtoi+0x233>
mov    -0x8(%rbp),%eax
add    $0xc,%eax
mov    %eax,-0x8(%rbp)
jmp    1333 <myhtoi+0x233>
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    %eax,-0x8(%rbp)
jmp    1333 <myhtoi+0x233>
mov    -0x8(%rbp),%eax
add    $0xe,%eax
mov    %eax,-0x8(%rbp)
jmp    1333 <myhtoi+0x233>
mov    -0x8(%rbp),%eax
add    $0xf,%eax
mov    %eax,-0x8(%rbp)
jmp    1333 <myhtoi+0x233>
jmp    1333 <myhtoi+0x233>
mov    -0x8(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<myhtoi>:
add    $0xffffffcf,%edi
xor    %eax,%eax
cmp    $0x15,%edi
ja     1117 <myhtoi+0x17>
movslq %edi,%rax
lea    0xf44(%rip),%rcx
mov    (%rcx,%rax,4),%eax
movsbl %sil,%ecx
add    $0xffffffcf,%ecx
cmp    $0x15,%ecx
ja     116a <myhtoi+0x6a>
lea    0xed6(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
or     $0x1,%eax
ret
or     $0x2,%eax
ret
or     $0x3,%eax
ret
or     $0x4,%eax
ret
or     $0x5,%eax
ret
or     $0x6,%eax
ret
or     $0x7,%eax
ret
or     $0x8,%eax
ret
or     $0xa,%eax
ret
or     $0xb,%eax
ret
or     $0xc,%eax
ret
or     $0xd,%eax
ret
or     $0xe,%eax
ret
or     $0xf,%eax
ret
or     $0x9,%eax
ret

LLVM IR (-O0):
define i32 @myhtoi(i8 signext %0, i8 signext %1) {
%3 = alloca i8
%4 = alloca i8
%5 = alloca i32
store i8 %0, i8* %3
store i8 %1, i8* %4
store i32 0, i32* %5
%6 = load i8, i8* %3
%7 = sext i8 %6 to i32
switch i32 %7, label %54 [
i32 48, label %8
i32 49, label %9
i32 50, label %12
i32 51, label %15
i32 52, label %18
i32 53, label %21
i32 54, label %24
i32 55, label %27
i32 56, label %30
i32 57, label %33
i32 65, label %36
i32 66, label %39
i32 67, label %42
i32 68, label %45
i32 69, label %48
i32 70, label %51
]
8: ; preds = %2
br label %55
9: ; preds = %2
%10 = load i32, i32* %5
%11 = add nsw i32 %10, 16
store i32 %11, i32* %5
br label %55
12: ; preds = %2
%13 = load i32, i32* %5
%14 = add nsw i32 %13, 32
store i32 %14, i32* %5
br label %55
15: ; preds = %2
%16 = load i32, i32* %5
%17 = add nsw i32 %16, 48
store i32 %17, i32* %5
br label %55
18: ; preds = %2
%19 = load i32, i32* %5
%20 = add nsw i32 %19, 64
store i32 %20, i32* %5
br label %55
21: ; preds = %2
%22 = load i32, i32* %5
%23 = add nsw i32 %22, 80
store i32 %23, i32* %5
br label %55
24: ; preds = %2
%25 = load i32, i32* %5
%26 = add nsw i32 %25, 96
store i32 %26, i32* %5
br label %55
27: ; preds = %2
%28 = load i32, i32* %5
%29 = add nsw i32 %28, 112
store i32 %29, i32* %5
br label %55
30: ; preds = %2
%31 = load i32, i32* %5
%32 = add nsw i32 %31, 128
store i32 %32, i32* %5
br label %55
33: ; preds = %2
%34 = load i32, i32* %5
%35 = add nsw i32 %34, 144
store i32 %35, i32* %5
br label %55
36: ; preds = %2
%37 = load i32, i32* %5
%38 = add nsw i32 %37, 160
store i32 %38, i32* %5
br label %55
39: ; preds = %2
%40 = load i32, i32* %5
%41 = add nsw i32 %40, 176
store i32 %41, i32* %5
br label %55
42: ; preds = %2
%43 = load i32, i32* %5
%44 = add nsw i32 %43, 192
store i32 %44, i32* %5
br label %55
45: ; preds = %2
%46 = load i32, i32* %5
%47 = add nsw i32 %46, 208
store i32 %47, i32* %5
br label %55
48: ; preds = %2
%49 = load i32, i32* %5
%50 = add nsw i32 %49, 224
store i32 %50, i32* %5
br label %55
51: ; preds = %2
%52 = load i32, i32* %5
%53 = add nsw i32 %52, 240
store i32 %53, i32* %5
br label %55
54: ; preds = %2
br label %55
55: ; preds = %54, %51, %48, %45, %42, %39, %36, %33, %30, %27, %24, %21, %18, %15, %12, %9, %8
%56 = load i8, i8* %4
%57 = sext i8 %56 to i32
switch i32 %57, label %104 [
i32 48, label %58
i32 49, label %59
i32 50, label %62
i32 51, label %65
i32 52, label %68
i32 53, label %71
i32 54, label %74
i32 55, label %77
i32 56, label %80
i32 57, label %83
i32 65, label %86
i32 66, label %89
i32 67, label %92
i32 68, label %95
i32 69, label %98
i32 70, label %101
]
58: ; preds = %55
br label %105
59: ; preds = %55
%60 = load i32, i32* %5
%61 = add nsw i32 %60, 1
store i32 %61, i32* %5
br label %105
62: ; preds = %55
%63 = load i32, i32* %5
%64 = add nsw i32 %63, 2
store i32 %64, i32* %5
br label %105
65: ; preds = %55
%66 = load i32, i32* %5
%67 = add nsw i32 %66, 3
store i32 %67, i32* %5
br label %105
68: ; preds = %55
%69 = load i32, i32* %5
%70 = add nsw i32 %69, 4
store i32 %70, i32* %5
br label %105
71: ; preds = %55
%72 = load i32, i32* %5
%73 = add nsw i32 %72, 5
store i32 %73, i32* %5
br label %105
74: ; preds = %55
%75 = load i32, i32* %5
%76 = add nsw i32 %75, 6
store i32 %76, i32* %5
br label %105
77: ; preds = %55
%78 = load i32, i32* %5
%79 = add nsw i32 %78, 7
store i32 %79, i32* %5
br label %105
80: ; preds = %55
%81 = load i32, i32* %5
%82 = add nsw i32 %81, 8
store i32 %82, i32* %5
br label %105
83: ; preds = %55
%84 = load i32, i32* %5
%85 = add nsw i32 %84, 9
store i32 %85, i32* %5
br label %105
86: ; preds = %55
%87 = load i32, i32* %5
%88 = add nsw i32 %87, 10
store i32 %88, i32* %5
br label %105
89: ; preds = %55
%90 = load i32, i32* %5
%91 = add nsw i32 %90, 11
store i32 %91, i32* %5
br label %105
92: ; preds = %55
%93 = load i32, i32* %5
%94 = add nsw i32 %93, 12
store i32 %94, i32* %5
br label %105
95: ; preds = %55
%96 = load i32, i32* %5
%97 = add nsw i32 %96, 13
store i32 %97, i32* %5
br label %105
98: ; preds = %55
%99 = load i32, i32* %5
%100 = add nsw i32 %99, 14
store i32 %100, i32* %5
br label %105
101: ; preds = %55
%102 = load i32, i32* %5
%103 = add nsw i32 %102, 15
store i32 %103, i32* %5
br label %105
104: ; preds = %55
br label %105
105: ; preds = %104, %101, %98, %95, %92, %89, %86, %83, %80, %77, %74, %71, %68, %65, %62, %59, %58
%106 = load i32, i32* %5
ret i32 %106
}

LLVM IR (-O2):
@switch.table.myhtoi = [22 x i32] [i32 16, i32 32, i32 48, i32 64, i32 80, i32 96, i32 112, i32 128, i32 144, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 160, i32 176, i32 192, i32 208, i32 224, i32 240]
define i32 @myhtoi(i8 signext %0, i8 signext %1) {
%3 = sext i8 %0 to i32
%4 = add nsw i32 %3, -49
%5 = icmp ult i32 %4, 22
br i1 %5, label %6, label %10
6: ; preds = %2
%7 = sext i32 %4 to i64
%8 = getelementptr inbounds [22 x i32], [22 x i32]* @switch.table.myhtoi, i64 0, i64 %7
%9 = load i32, i32* %8
br label %10
10: ; preds = %6, %2
%11 = phi i32 [ 0, %2 ], [ %9, %6 ]
%12 = sext i8 %1 to i32
switch i32 %12, label %43 [
i32 70, label %41
i32 49, label %13
i32 50, label %15
i32 51, label %17
i32 52, label %19
i32 53, label %21
i32 54, label %23
i32 55, label %25
i32 56, label %27
i32 57, label %29
i32 65, label %31
i32 66, label %33
i32 67, label %35
i32 68, label %37
i32 69, label %39
]
13: ; preds = %10
%14 = or i32 %11, 1
br label %43
15: ; preds = %10
%16 = or i32 %11, 2
br label %43
17: ; preds = %10
%18 = or i32 %11, 3
br label %43
19: ; preds = %10
%20 = or i32 %11, 4
br label %43
21: ; preds = %10
%22 = or i32 %11, 5
br label %43
23: ; preds = %10
%24 = or i32 %11, 6
br label %43
25: ; preds = %10
%26 = or i32 %11, 7
br label %43
27: ; preds = %10
%28 = or i32 %11, 8
br label %43
29: ; preds = %10
%30 = or i32 %11, 9
br label %43
31: ; preds = %10
%32 = or i32 %11, 10
br label %43
33: ; preds = %10
%34 = or i32 %11, 11
br label %43
35: ; preds = %10
%36 = or i32 %11, 12
br label %43
37: ; preds = %10
%38 = or i32 %11, 13
br label %43
39: ; preds = %10
%40 = or i32 %11, 14
br label %43
41: ; preds = %10
%42 = or i32 %11, 15
br label %43
43: ; preds = %10, %41, %39, %37, %35, %33, %31, %29, %27, %25, %23, %21, %19, %17, %15, %13
%44 = phi i32 [ %11, %10 ], [ %40, %39 ], [ %38, %37 ], [ %36, %35 ], [ %34, %33 ], [ %32, %31 ], [ %30, %29 ], [ %28, %27 ], [ %26, %25 ], [ %24, %23 ], [ %22, %21 ], [ %20, %19 ], [ %18, %17 ], [ %16, %15 ], [ %14, %13 ], [ %42, %41 ]
ret i32 %44
}