int xml_extender(int c) {
  if (c <= 0x0640) {
    if (c <= 0x02d0) {
      if (c <= 0x00b7) {
        return (c == 0x00b7);
      } else {
        return (c == 0x02d0);
      }
    } else {
      if (c <= 0x02d1) {
        return (c == 0x02d1);
      } else {
        if (c <= 0x0387) {
          return (c == 0x0387);
        } else {
          return (c == 0x0640);
        }
      }
    }
  } else {
    if (c <= 0x3005) {
      if (c <= 0x0e46) {
        return (c == 0x0e46);
      } else {
        if (c <= 0x0ec6) {
          return (c == 0x0ec6);
        } else {
          return (c == 0x3005);
        }
      }
    } else {
      if (c <= 0x3035) {
        return (c >= 0x3031 && c <= 0x3035);
      } else {
        if (c <= 0x309e) {
          return (c >= 0x309d && c <= 0x309e);
        } else {
          return (c >= 0x30fc && c <= 0x30fe);
        }
      }
    }
  }
}


x86 assembly (clang, -O0):
<xml_extender>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x8(%rbp)
cmpl   $0x640,-0x8(%rbp)
jg     11bb <xml_extender+0xbb>
cmpl   $0x2d0,-0x8(%rbp)
jg     115c <xml_extender+0x5c>
cmpl   $0xb7,-0x8(%rbp)
jg     1145 <xml_extender+0x45>
cmpl   $0xb7,-0x8(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
jmp    12c9 <xml_extender+0x1c9>
cmpl   $0x2d0,-0x8(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
jmp    12c9 <xml_extender+0x1c9>
cmpl   $0x2d1,-0x8(%rbp)
jg     1180 <xml_extender+0x80>
cmpl   $0x2d1,-0x8(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
jmp    12c9 <xml_extender+0x1c9>
cmpl   $0x387,-0x8(%rbp)
jg     11a4 <xml_extender+0xa4>
cmpl   $0x387,-0x8(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
jmp    12c9 <xml_extender+0x1c9>
cmpl   $0x640,-0x8(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
jmp    12c9 <xml_extender+0x1c9>
cmpl   $0x3005,-0x8(%rbp)
jg     1227 <xml_extender+0x127>
cmpl   $0xe46,-0x8(%rbp)
jg     11ec <xml_extender+0xec>
cmpl   $0xe46,-0x8(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
jmp    12c9 <xml_extender+0x1c9>
cmpl   $0xec6,-0x8(%rbp)
jg     1210 <xml_extender+0x110>
cmpl   $0xec6,-0x8(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
jmp    12c9 <xml_extender+0x1c9>
cmpl   $0x3005,-0x8(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
jmp    12c9 <xml_extender+0x1c9>
cmpl   $0x3035,-0x8(%rbp)
jg     1263 <xml_extender+0x163>
xor    %eax,%eax
cmpl   $0x3031,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jl     1253 <xml_extender+0x153>
cmpl   $0x3035,-0x8(%rbp)
setle  %al
mov    %al,-0x9(%rbp)
mov    -0x9(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
jmp    12c9 <xml_extender+0x1c9>
cmpl   $0x309e,-0x8(%rbp)
jg     129f <xml_extender+0x19f>
xor    %eax,%eax
cmpl   $0x309d,-0x8(%rbp)
mov    %al,-0xa(%rbp)
jl     128f <xml_extender+0x18f>
cmpl   $0x309e,-0x8(%rbp)
setle  %al
mov    %al,-0xa(%rbp)
mov    -0xa(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
jmp    12c9 <xml_extender+0x1c9>
xor    %eax,%eax
cmpl   $0x30fc,-0x8(%rbp)
mov    %al,-0xb(%rbp)
jl     12be <xml_extender+0x1be>
cmpl   $0x30fe,-0x8(%rbp)
setle  %al
mov    %al,-0xb(%rbp)
mov    -0xb(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<xml_extender>:
cmp    $0x640,%edi
jg     1120 <xml_extender+0x20>
cmp    $0x2d0,%edi
jg     1140 <xml_extender+0x40>
cmp    $0xb7,%edi
jle    1158 <xml_extender+0x58>
cmp    $0x2d0,%edi
jmp    1158 <xml_extender+0x58>
cmp    $0x3005,%edi
ja     115f <xml_extender+0x5f>
cmp    $0xe46,%edi
jbe    1158 <xml_extender+0x58>
cmp    $0xec6,%edi
jbe    1158 <xml_extender+0x58>
cmp    $0x3005,%edi
jmp    1158 <xml_extender+0x58>
mov    $0x1,%al
cmp    $0x2d1,%edi
je     1190 <xml_extender+0x90>
cmp    $0x387,%edi
jbe    1158 <xml_extender+0x58>
cmp    $0x640,%edi
sete   %al
movzbl %al,%eax
ret
cmp    $0x3035,%edi
ja     116f <xml_extender+0x6f>
cmp    $0x3031,%edi
jmp    117d <xml_extender+0x7d>
cmp    $0x309e,%edi
ja     1184 <xml_extender+0x84>
cmp    $0x309d,%edi
setae  %al
movzbl %al,%eax
ret
add    $0xffffcf04,%edi
cmp    $0x3,%edi
setb   %al
movzbl %al,%eax
ret

LLVM IR (-O0):
define i32 @xml_extender(i32 %0) {
%2 = alloca i32
%3 = alloca i32
store i32 %0, i32* %3
%4 = load i32, i32* %3
%5 = icmp sle i32 %4, 1600
br i1 %5, label %6, label %38
6: ; preds = %1
%7 = load i32, i32* %3
%8 = icmp sle i32 %7, 720
br i1 %8, label %9, label %20
9: ; preds = %6
%10 = load i32, i32* %3
%11 = icmp sle i32 %10, 183
br i1 %11, label %12, label %16
12: ; preds = %9
%13 = load i32, i32* %3
%14 = icmp eq i32 %13, 183
%15 = zext i1 %14 to i32
store i32 %15, i32* %2
br label %92
16: ; preds = %9
%17 = load i32, i32* %3
%18 = icmp eq i32 %17, 720
%19 = zext i1 %18 to i32
store i32 %19, i32* %2
br label %92
20: ; preds = %6
%21 = load i32, i32* %3
%22 = icmp sle i32 %21, 721
br i1 %22, label %23, label %27
23: ; preds = %20
%24 = load i32, i32* %3
%25 = icmp eq i32 %24, 721
%26 = zext i1 %25 to i32
store i32 %26, i32* %2
br label %92
27: ; preds = %20
%28 = load i32, i32* %3
%29 = icmp sle i32 %28, 903
br i1 %29, label %30, label %34
30: ; preds = %27
%31 = load i32, i32* %3
%32 = icmp eq i32 %31, 903
%33 = zext i1 %32 to i32
store i32 %33, i32* %2
br label %92
34: ; preds = %27
%35 = load i32, i32* %3
%36 = icmp eq i32 %35, 1600
%37 = zext i1 %36 to i32
store i32 %37, i32* %2
br label %92
38: ; preds = %1
%39 = load i32, i32* %3
%40 = icmp sle i32 %39, 12293
br i1 %40, label %41, label %59
41: ; preds = %38
%42 = load i32, i32* %3
%43 = icmp sle i32 %42, 3654
br i1 %43, label %44, label %48
44: ; preds = %41
%45 = load i32, i32* %3
%46 = icmp eq i32 %45, 3654
%47 = zext i1 %46 to i32
store i32 %47, i32* %2
br label %92
48: ; preds = %41
%49 = load i32, i32* %3
%50 = icmp sle i32 %49, 3782
br i1 %50, label %51, label %55
51: ; preds = %48
%52 = load i32, i32* %3
%53 = icmp eq i32 %52, 3782
%54 = zext i1 %53 to i32
store i32 %54, i32* %2
br label %92
55: ; preds = %48
%56 = load i32, i32* %3
%57 = icmp eq i32 %56, 12293
%58 = zext i1 %57 to i32
store i32 %58, i32* %2
br label %92
59: ; preds = %38
%60 = load i32, i32* %3
%61 = icmp sle i32 %60, 12341
br i1 %61, label %62, label %71
62: ; preds = %59
%63 = load i32, i32* %3
%64 = icmp sge i32 %63, 12337
br i1 %64, label %65, label %68
65: ; preds = %62
%66 = load i32, i32* %3
%67 = icmp sle i32 %66, 12341
br label %68
68: ; preds = %65, %62
%69 = phi i1 [ false, %62 ], [ %67, %65 ]
%70 = zext i1 %69 to i32
store i32 %70, i32* %2
br label %92
71: ; preds = %59
%72 = load i32, i32* %3
%73 = icmp sle i32 %72, 12446
br i1 %73, label %74, label %83
74: ; preds = %71
%75 = load i32, i32* %3
%76 = icmp sge i32 %75, 12445
br i1 %76, label %77, label %80
77: ; preds = %74
%78 = load i32, i32* %3
%79 = icmp sle i32 %78, 12446
br label %80
80: ; preds = %77, %74
%81 = phi i1 [ false, %74 ], [ %79, %77 ]
%82 = zext i1 %81 to i32
store i32 %82, i32* %2
br label %92
83: ; preds = %71
%84 = load i32, i32* %3
%85 = icmp sge i32 %84, 12540
br i1 %85, label %86, label %89
86: ; preds = %83
%87 = load i32, i32* %3
%88 = icmp sle i32 %87, 12542
br label %89
89: ; preds = %86, %83
%90 = phi i1 [ false, %83 ], [ %88, %86 ]
%91 = zext i1 %90 to i32
store i32 %91, i32* %2
br label %92
92: ; preds = %89, %80, %68, %55, %51, %44, %34, %30, %23, %16, %12
%93 = load i32, i32* %2
ret i32 %93
}

LLVM IR (-O2):
define i32 @xml_extender(i32 %0) {
%2 = icmp slt i32 %0, 1601
br i1 %2, label %3, label %19
3: ; preds = %1
%4 = icmp slt i32 %0, 721
br i1 %4, label %5, label %11
5: ; preds = %3
%6 = icmp slt i32 %0, 184
br i1 %6, label %7, label %9
7: ; preds = %5
%8 = icmp eq i32 %0, 183
br label %42
9: ; preds = %5
%10 = icmp eq i32 %0, 720
br label %42
11: ; preds = %3
%12 = icmp eq i32 %0, 721
br i1 %12, label %42, label %13
13: ; preds = %11
%14 = icmp ult i32 %0, 904
br i1 %14, label %15, label %17
15: ; preds = %13
%16 = icmp eq i32 %0, 903
br label %42
17: ; preds = %13
%18 = icmp eq i32 %0, 1600
br label %42
19: ; preds = %1
%20 = icmp ult i32 %0, 12294
br i1 %20, label %21, label %31
21: ; preds = %19
%22 = icmp ult i32 %0, 3655
br i1 %22, label %23, label %25
23: ; preds = %21
%24 = icmp eq i32 %0, 3654
br label %42
25: ; preds = %21
%26 = icmp ult i32 %0, 3783
br i1 %26, label %27, label %29
27: ; preds = %25
%28 = icmp eq i32 %0, 3782
br label %42
29: ; preds = %25
%30 = icmp eq i32 %0, 12293
br label %42
31: ; preds = %19
%32 = icmp ult i32 %0, 12342
br i1 %32, label %33, label %35
33: ; preds = %31
%34 = icmp ugt i32 %0, 12336
br label %42
35: ; preds = %31
%36 = icmp ult i32 %0, 12447
br i1 %36, label %37, label %39
37: ; preds = %35
%38 = icmp ugt i32 %0, 12444
br label %42
39: ; preds = %35
%40 = add nsw i32 %0, -12540
%41 = icmp ult i32 %40, 3
br label %42
42: ; preds = %11, %39, %37, %33, %29, %27, %23, %17, %15, %9, %7
%43 = phi i1 [ %8, %7 ], [ %10, %9 ], [ %16, %15 ], [ %18, %17 ], [ %24, %23 ], [ %28, %27 ], [ %30, %29 ], [ %34, %33 ], [ %38, %37 ], [ %41, %39 ], [ true, %11 ]
%44 = zext i1 %43 to i32
ret i32 %44
}