int raptor_unicode_is_digit(long c) {
  return ((c >= 0x0030 && c <= 0x0039) || (c >= 0x0660 && c <= 0x0669) ||
          (c >= 0x06F0 && c <= 0x06F9) || (c >= 0x0966 && c <= 0x096F) ||
          (c >= 0x09E6 && c <= 0x09EF) || (c >= 0x0A66 && c <= 0x0A6F) ||
          (c >= 0x0AE6 && c <= 0x0AEF) || (c >= 0x0B66 && c <= 0x0B6F) ||
          (c >= 0x0BE7 && c <= 0x0BEF) || (c >= 0x0C66 && c <= 0x0C6F) ||
          (c >= 0x0CE6 && c <= 0x0CEF) || (c >= 0x0D66 && c <= 0x0D6F) ||
          (c >= 0x0E50 && c <= 0x0E59) || (c >= 0x0ED0 && c <= 0x0ED9) ||
          (c >= 0x0F20 && c <= 0x0F29));
}


x86 assembly (clang, -O0):
<raptor_unicode_is_digit>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
cmpq   $0x30,-0x8(%rbp)
jl     1123 <raptor_unicode_is_digit+0x23>
mov    $0x1,%al
cmpq   $0x39,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jle    12f7 <raptor_unicode_is_digit+0x1f7>
cmpq   $0x660,-0x8(%rbp)
jl     1144 <raptor_unicode_is_digit+0x44>
mov    $0x1,%al
cmpq   $0x669,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jle    12f7 <raptor_unicode_is_digit+0x1f7>
cmpq   $0x6f0,-0x8(%rbp)
jl     1165 <raptor_unicode_is_digit+0x65>
mov    $0x1,%al
cmpq   $0x6f9,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jle    12f7 <raptor_unicode_is_digit+0x1f7>
cmpq   $0x966,-0x8(%rbp)
jl     1186 <raptor_unicode_is_digit+0x86>
mov    $0x1,%al
cmpq   $0x96f,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jle    12f7 <raptor_unicode_is_digit+0x1f7>
cmpq   $0x9e6,-0x8(%rbp)
jl     11a7 <raptor_unicode_is_digit+0xa7>
mov    $0x1,%al
cmpq   $0x9ef,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jle    12f7 <raptor_unicode_is_digit+0x1f7>
cmpq   $0xa66,-0x8(%rbp)
jl     11c8 <raptor_unicode_is_digit+0xc8>
mov    $0x1,%al
cmpq   $0xa6f,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jle    12f7 <raptor_unicode_is_digit+0x1f7>
cmpq   $0xae6,-0x8(%rbp)
jl     11e9 <raptor_unicode_is_digit+0xe9>
mov    $0x1,%al
cmpq   $0xaef,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jle    12f7 <raptor_unicode_is_digit+0x1f7>
cmpq   $0xb66,-0x8(%rbp)
jl     120a <raptor_unicode_is_digit+0x10a>
mov    $0x1,%al
cmpq   $0xb6f,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jle    12f7 <raptor_unicode_is_digit+0x1f7>
cmpq   $0xbe7,-0x8(%rbp)
jl     122b <raptor_unicode_is_digit+0x12b>
mov    $0x1,%al
cmpq   $0xbef,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jle    12f7 <raptor_unicode_is_digit+0x1f7>
cmpq   $0xc66,-0x8(%rbp)
jl     124c <raptor_unicode_is_digit+0x14c>
mov    $0x1,%al
cmpq   $0xc6f,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jle    12f7 <raptor_unicode_is_digit+0x1f7>
cmpq   $0xce6,-0x8(%rbp)
jl     126d <raptor_unicode_is_digit+0x16d>
mov    $0x1,%al
cmpq   $0xcef,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jle    12f7 <raptor_unicode_is_digit+0x1f7>
cmpq   $0xd66,-0x8(%rbp)
jl     128e <raptor_unicode_is_digit+0x18e>
mov    $0x1,%al
cmpq   $0xd6f,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jle    12f7 <raptor_unicode_is_digit+0x1f7>
cmpq   $0xe50,-0x8(%rbp)
jl     12af <raptor_unicode_is_digit+0x1af>
mov    $0x1,%al
cmpq   $0xe59,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jle    12f7 <raptor_unicode_is_digit+0x1f7>
cmpq   $0xed0,-0x8(%rbp)
jl     12d0 <raptor_unicode_is_digit+0x1d0>
mov    $0x1,%al
cmpq   $0xed9,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jle    12f7 <raptor_unicode_is_digit+0x1f7>
xor    %eax,%eax
cmpq   $0xf20,-0x8(%rbp)
mov    %al,-0xa(%rbp)
jl     12f1 <raptor_unicode_is_digit+0x1f1>
cmpq   $0xf29,-0x8(%rbp)
setle  %al
mov    %al,-0xa(%rbp)
mov    -0xa(%rbp),%al
mov    %al,-0x9(%rbp)
mov    -0x9(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<raptor_unicode_is_digit>:
lea    -0x30(%rdi),%rax
cmp    $0xa,%rax
setb   %al
lea    -0x660(%rdi),%rcx
cmp    $0xa,%rcx
setb   %cl
or     %al,%cl
lea    -0x6f0(%rdi),%rax
cmp    $0xa,%rax
setb   %dl
or     %cl,%dl
mov    %rdi,%rax
and    $0xffffffffffffff7f,%rax
lea    -0x966(%rax),%rcx
cmp    $0xa,%rcx
setb   %r8b
lea    -0xa66(%rax),%rsi
cmp    $0xa,%rsi
setb   %r9b
or     %r8b,%r9b
or     %dl,%r9b
lea    -0xb66(%rdi),%rdx
cmp    $0xa,%rdx
setb   %r8b
lea    -0xbe7(%rdi),%rsi
cmp    $0x9,%rsi
setb   %dl
or     %r8b,%dl
lea    -0xc66(%rax),%rsi
cmp    $0xa,%rsi
setb   %cl
or     %dl,%cl
lea    -0xd66(%rdi),%rdx
cmp    $0xa,%rdx
setb   %dl
or     %cl,%dl
or     %r9b,%dl
add    $0xfffffffffffff1b0,%rax
cmp    $0xa,%rax
setb   %al
add    $0xfffffffffffff0e0,%rdi
cmp    $0xa,%rdi
setb   %cl
or     %al,%cl
or     %dl,%cl
movzbl %cl,%eax
and    $0x1,%eax
ret

LLVM IR (-O0):
define i32 @raptor_unicode_is_digit(i64 %0) {
%2 = alloca i64
store i64 %0, i64* %2
%3 = load i64, i64* %2
%4 = icmp sge i64 %3, 48
br i1 %4, label %5, label %8
5: ; preds = %1
%6 = load i64, i64* %2
%7 = icmp sle i64 %6, 57
br i1 %7, label %94, label %8
8: ; preds = %5, %1
%9 = load i64, i64* %2
%10 = icmp sge i64 %9, 1632
br i1 %10, label %11, label %14
11: ; preds = %8
%12 = load i64, i64* %2
%13 = icmp sle i64 %12, 1641
br i1 %13, label %94, label %14
14: ; preds = %11, %8
%15 = load i64, i64* %2
%16 = icmp sge i64 %15, 1776
br i1 %16, label %17, label %20
17: ; preds = %14
%18 = load i64, i64* %2
%19 = icmp sle i64 %18, 1785
br i1 %19, label %94, label %20
20: ; preds = %17, %14
%21 = load i64, i64* %2
%22 = icmp sge i64 %21, 2406
br i1 %22, label %23, label %26
23: ; preds = %20
%24 = load i64, i64* %2
%25 = icmp sle i64 %24, 2415
br i1 %25, label %94, label %26
26: ; preds = %23, %20
%27 = load i64, i64* %2
%28 = icmp sge i64 %27, 2534
br i1 %28, label %29, label %32
29: ; preds = %26
%30 = load i64, i64* %2
%31 = icmp sle i64 %30, 2543
br i1 %31, label %94, label %32
32: ; preds = %29, %26
%33 = load i64, i64* %2
%34 = icmp sge i64 %33, 2662
br i1 %34, label %35, label %38
35: ; preds = %32
%36 = load i64, i64* %2
%37 = icmp sle i64 %36, 2671
br i1 %37, label %94, label %38
38: ; preds = %35, %32
%39 = load i64, i64* %2
%40 = icmp sge i64 %39, 2790
br i1 %40, label %41, label %44
41: ; preds = %38
%42 = load i64, i64* %2
%43 = icmp sle i64 %42, 2799
br i1 %43, label %94, label %44
44: ; preds = %41, %38
%45 = load i64, i64* %2
%46 = icmp sge i64 %45, 2918
br i1 %46, label %47, label %50
47: ; preds = %44
%48 = load i64, i64* %2
%49 = icmp sle i64 %48, 2927
br i1 %49, label %94, label %50
50: ; preds = %47, %44
%51 = load i64, i64* %2
%52 = icmp sge i64 %51, 3047
br i1 %52, label %53, label %56
53: ; preds = %50
%54 = load i64, i64* %2
%55 = icmp sle i64 %54, 3055
br i1 %55, label %94, label %56
56: ; preds = %53, %50
%57 = load i64, i64* %2
%58 = icmp sge i64 %57, 3174
br i1 %58, label %59, label %62
59: ; preds = %56
%60 = load i64, i64* %2
%61 = icmp sle i64 %60, 3183
br i1 %61, label %94, label %62
62: ; preds = %59, %56
%63 = load i64, i64* %2
%64 = icmp sge i64 %63, 3302
br i1 %64, label %65, label %68
65: ; preds = %62
%66 = load i64, i64* %2
%67 = icmp sle i64 %66, 3311
br i1 %67, label %94, label %68
68: ; preds = %65, %62
%69 = load i64, i64* %2
%70 = icmp sge i64 %69, 3430
br i1 %70, label %71, label %74
71: ; preds = %68
%72 = load i64, i64* %2
%73 = icmp sle i64 %72, 3439
br i1 %73, label %94, label %74
74: ; preds = %71, %68
%75 = load i64, i64* %2
%76 = icmp sge i64 %75, 3664
br i1 %76, label %77, label %80
77: ; preds = %74
%78 = load i64, i64* %2
%79 = icmp sle i64 %78, 3673
br i1 %79, label %94, label %80
80: ; preds = %77, %74
%81 = load i64, i64* %2
%82 = icmp sge i64 %81, 3792
br i1 %82, label %83, label %86
83: ; preds = %80
%84 = load i64, i64* %2
%85 = icmp sle i64 %84, 3801
br i1 %85, label %94, label %86
86: ; preds = %83, %80
%87 = load i64, i64* %2
%88 = icmp sge i64 %87, 3872
br i1 %88, label %89, label %92
89: ; preds = %86
%90 = load i64, i64* %2
%91 = icmp sle i64 %90, 3881
br label %92
92: ; preds = %89, %86
%93 = phi i1 [ false, %86 ], [ %91, %89 ]
br label %94
94: ; preds = %92, %83, %77, %71, %65, %59, %53, %47, %41, %35, %29, %23, %17, %11, %5
%95 = phi i1 [ true, %83 ], [ true, %77 ], [ true, %71 ], [ true, %65 ], [ true, %59 ], [ true, %53 ], [ true, %47 ], [ true, %41 ], [ true, %35 ], [ true, %29 ], [ true, %23 ], [ true, %17 ], [ true, %11 ], [ true, %5 ], [ %93, %92 ]
%96 = zext i1 %95 to i32
ret i32 %96
}

LLVM IR (-O2):
define i32 @raptor_unicode_is_digit(i64 %0) {
%2 = add i64 %0, -48
%3 = icmp ult i64 %2, 10
%4 = add i64 %0, -1632
%5 = icmp ult i64 %4, 10
%6 = or i1 %3, %5
%7 = add i64 %0, -1776
%8 = icmp ult i64 %7, 10
%9 = or i1 %8, %6
%10 = and i64 %0, -129
%11 = add i64 %10, -2406
%12 = icmp ult i64 %11, 10
%13 = or i1 %12, %9
%14 = add i64 %10, -2662
%15 = icmp ult i64 %14, 10
%16 = or i1 %15, %13
%17 = add i64 %0, -2918
%18 = icmp ult i64 %17, 10
%19 = or i1 %18, %16
%20 = add i64 %0, -3047
%21 = icmp ult i64 %20, 9
%22 = or i1 %21, %19
%23 = add i64 %10, -3174
%24 = icmp ult i64 %23, 10
%25 = or i1 %24, %22
%26 = add i64 %0, -3430
%27 = icmp ult i64 %26, 10
%28 = or i1 %27, %25
%29 = add i64 %10, -3664
%30 = icmp ult i64 %29, 10
%31 = or i1 %30, %28
%32 = add i64 %0, -3872
%33 = icmp ult i64 %32, 10
%34 = or i1 %33, %31
%35 = zext i1 %34 to i32
ret i32 %35
}