int ED2K_is_C2S(int type, int subtype) {
  switch (type) {
  case 0xe3:
    switch (subtype) {
    case 0x01:
    case 0x05:
    case 0x14:
    case 0x15:
    case 0x16:
    case 0x18:
    case 0x19:
    case 0x1A:
    case 0x1C:
    case 0x1D:
    case 0x1E:
    case 0x1F:
    case 0x21:
    case 0x32:
    case 0x33:
    case 0x34:
    case 0x35:
    case 0x36:
    case 0x38:
    case 0x39:
    case 0x3A:
    case 0x3B:
    case 0x3C:
    case 0x3D:
    case 0x40:
    case 0x41:
    case 0x42:
    case 0x43:
    case 0x23:
    case 0x44:
      return 1;
    default:
      return 0;
    }
    break;
  case 0xd4:
    switch (subtype) {
    case 0x15:
      return 1;
    default:
      return 0;
    }
  default:
    return 0;
  }
}


x86 assembly (clang, -O0):
<ED2K_is_C2S>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x10(%rbp)
sub    $0xd4,%eax
je     1174 <ED2K_is_C2S+0x74>
jmp    1120 <ED2K_is_C2S+0x20>
mov    -0x10(%rbp),%eax
sub    $0xe3,%eax
jne    119d <ED2K_is_C2S+0x9d>
jmp    1133 <ED2K_is_C2S+0x33>
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x18(%rbp)
sub    $0x43,%eax
ja     1168 <ED2K_is_C2S+0x68>
mov    -0x18(%rbp),%rax
lea    0xead(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movl   $0x1,-0x4(%rbp)
jmp    11a4 <ED2K_is_C2S+0xa4>
movl   $0x0,-0x4(%rbp)
jmp    11a4 <ED2K_is_C2S+0xa4>
mov    -0xc(%rbp),%eax
sub    $0x15,%eax
jne    1191 <ED2K_is_C2S+0x91>
jmp    1185 <ED2K_is_C2S+0x85>
movl   $0x1,-0x4(%rbp)
jmp    11a4 <ED2K_is_C2S+0xa4>
movl   $0x0,-0x4(%rbp)
jmp    11a4 <ED2K_is_C2S+0xa4>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<ED2K_is_C2S>:
xor    %eax,%eax
cmp    $0xd4,%edi
je     1128 <ED2K_is_C2S+0x28>
cmp    $0xe3,%edi
jne    1127 <ED2K_is_C2S+0x27>
add    $0xffffffff,%esi
cmp    $0x44,%esi
jae    1127 <ED2K_is_C2S+0x27>
movslq %esi,%rax
lea    0xedc(%rip),%rcx
mov    (%rcx,%rax,4),%eax
ret
cmp    $0x15,%esi
sete   %al
ret

LLVM IR (-O0):
define i32 @ED2K_is_C2S(i32 %0, i32 %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
store i32 %0, i32* %4
store i32 %1, i32* %5
%6 = load i32, i32* %4
switch i32 %6, label %15 [
i32 227, label %7
i32 212, label %11
]
7: ; preds = %2
%8 = load i32, i32* %5
switch i32 %8, label %10 [
i32 1, label %9
i32 5, label %9
i32 20, label %9
i32 21, label %9
i32 22, label %9
i32 24, label %9
i32 25, label %9
i32 26, label %9
i32 28, label %9
i32 29, label %9
i32 30, label %9
i32 31, label %9
i32 33, label %9
i32 50, label %9
i32 51, label %9
i32 52, label %9
i32 53, label %9
i32 54, label %9
i32 56, label %9
i32 57, label %9
i32 58, label %9
i32 59, label %9
i32 60, label %9
i32 61, label %9
i32 64, label %9
i32 65, label %9
i32 66, label %9
i32 67, label %9
i32 35, label %9
i32 68, label %9
]
9: ; preds = %7, %7, %7, %7, %7, %7, %7, %7, %7, %7, %7, %7, %7, %7, %7, %7, %7, %7, %7, %7, %7, %7, %7, %7, %7, %7, %7, %7, %7, %7
store i32 1, i32* %3
br label %16
10: ; preds = %7
store i32 0, i32* %3
br label %16
11: ; preds = %2
%12 = load i32, i32* %5
switch i32 %12, label %14 [
i32 21, label %13
]
13: ; preds = %11
store i32 1, i32* %3
br label %16
14: ; preds = %11
store i32 0, i32* %3
br label %16
15: ; preds = %2
store i32 0, i32* %3
br label %16
16: ; preds = %15, %14, %13, %10, %9
%17 = load i32, i32* %3
ret i32 %17
}

LLVM IR (-O2):
@switch.table.ED2K_is_C2S = [68 x i32] [i32 1, i32 0, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1]
define i32 @ED2K_is_C2S(i32 %0, i32 %1) {
switch i32 %0, label %13 [
i32 227, label %3
i32 212, label %6
]
3: ; preds = %2
%4 = add i32 %1, -1
%5 = icmp ult i32 %4, 68
br i1 %5, label %9, label %13
6: ; preds = %2
%7 = icmp eq i32 %1, 21
%8 = zext i1 %7 to i32
br label %13
9: ; preds = %3
%10 = sext i32 %4 to i64
%11 = getelementptr inbounds [68 x i32], [68 x i32]* @switch.table.ED2K_is_C2S, i64 0, i64 %10
%12 = load i32, i32* %11
br label %13
13: ; preds = %3, %9, %2, %6
%14 = phi i32 [ %8, %6 ], [ 0, %2 ], [ %12, %9 ], [ 0, %3 ]
ret i32 %14
}