int iswide(unsigned int ucs) {
  return (
      ucs >= 0x1100 &&
      (ucs <= 0x115f ||
       (ucs >= 0x2e80 && ucs <= 0xa4cf && (ucs & ~0x0011) != 0x300a &&
        ucs != 0x303f) ||
       (ucs >= 0xac00 && ucs <= 0xd7a3) || (ucs >= 0xf900 && ucs <= 0xfaff) ||
       (ucs >= 0xfe30 && ucs <= 0xfe6f) || (ucs >= 0xff00 && ucs <= 0xff5f) ||
       (ucs >= 0xffe0 && ucs <= 0xffe6) || (ucs >= 0x20000 && ucs <= 0x2ffff)));
}


x86 assembly (clang, -O0):
<iswide>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
xor    %eax,%eax
cmpl   $0x1100,-0x4(%rbp)
mov    %al,-0x5(%rbp)
jb     122e <iswide+0x12e>
mov    $0x1,%al
cmpl   $0x115f,-0x4(%rbp)
mov    %al,-0x6(%rbp)
jbe    1228 <iswide+0x128>
cmpl   $0x2e80,-0x4(%rbp)
jb     1168 <iswide+0x68>
cmpl   $0xa4cf,-0x4(%rbp)
ja     1168 <iswide+0x68>
mov    -0x4(%rbp),%eax
and    $0xffffffee,%eax
cmp    $0x300a,%eax
je     1168 <iswide+0x68>
mov    $0x1,%al
cmpl   $0x303f,-0x4(%rbp)
mov    %al,-0x6(%rbp)
jne    1228 <iswide+0x128>
cmpl   $0xac00,-0x4(%rbp)
jb     1187 <iswide+0x87>
mov    $0x1,%al
cmpl   $0xd7a3,-0x4(%rbp)
mov    %al,-0x6(%rbp)
jbe    1228 <iswide+0x128>
cmpl   $0xf900,-0x4(%rbp)
jb     11a6 <iswide+0xa6>
mov    $0x1,%al
cmpl   $0xfaff,-0x4(%rbp)
mov    %al,-0x6(%rbp)
jbe    1228 <iswide+0x128>
cmpl   $0xfe30,-0x4(%rbp)
jb     11c5 <iswide+0xc5>
mov    $0x1,%al
cmpl   $0xfe6f,-0x4(%rbp)
mov    %al,-0x6(%rbp)
jbe    1228 <iswide+0x128>
cmpl   $0xff00,-0x4(%rbp)
jb     11e4 <iswide+0xe4>
mov    $0x1,%al
cmpl   $0xff5f,-0x4(%rbp)
mov    %al,-0x6(%rbp)
jbe    1228 <iswide+0x128>
cmpl   $0xffe0,-0x4(%rbp)
jb     1203 <iswide+0x103>
mov    $0x1,%al
cmpl   $0xffe6,-0x4(%rbp)
mov    %al,-0x6(%rbp)
jbe    1228 <iswide+0x128>
xor    %eax,%eax
cmpl   $0x20000,-0x4(%rbp)
mov    %al,-0x7(%rbp)
jb     1222 <iswide+0x122>
cmpl   $0x2ffff,-0x4(%rbp)
setbe  %al
mov    %al,-0x7(%rbp)
mov    -0x7(%rbp),%al
mov    %al,-0x6(%rbp)
mov    -0x6(%rbp),%al
mov    %al,-0x5(%rbp)
mov    -0x5(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<iswide>:
xor    %eax,%eax
cmp    $0x1100,%edi
jb     113a <iswide+0x3a>
mov    $0x1,%eax
cmp    $0x1160,%edi
jb     113a <iswide+0x3a>
lea    -0x2e80(%rdi),%ecx
cmp    $0x764f,%ecx
ja     113b <iswide+0x3b>
cmp    $0x303f,%edi
je     1149 <iswide+0x49>
mov    %edi,%ecx
and    $0xffffffee,%ecx
cmp    $0x300a,%ecx
je     1149 <iswide+0x49>
ret
lea    -0xac00(%rdi),%ecx
cmp    $0x2ba4,%ecx
jb     113a <iswide+0x3a>
movd   %edi,%xmm0
pshufd $0x0,%xmm0,%xmm0
paddd  0xea6(%rip),%xmm0
pxor   0xeae(%rip),%xmm0
movdqa 0xeb6(%rip),%xmm1
pcmpgtd %xmm0,%xmm1
movmskps %xmm1,%ecx
test   %ecx,%ecx
jne    113a <iswide+0x3a>
and    $0xffff0000,%edi
xor    %eax,%eax
cmp    $0x20000,%edi
sete   %al
ret

LLVM IR (-O0):
define i32 @iswide(i32 %0) {
%2 = alloca i32
store i32 %0, i32* %2
%3 = load i32, i32* %2
%4 = icmp uge i32 %3, 4352
br i1 %4, label %5, label %61
5: ; preds = %1
%6 = load i32, i32* %2
%7 = icmp ule i32 %6, 4447
br i1 %7, label %59, label %8
8: ; preds = %5
%9 = load i32, i32* %2
%10 = icmp uge i32 %9, 11904
br i1 %10, label %11, label %21
11: ; preds = %8
%12 = load i32, i32* %2
%13 = icmp ule i32 %12, 42191
br i1 %13, label %14, label %21
14: ; preds = %11
%15 = load i32, i32* %2
%16 = and i32 %15, -18
%17 = icmp ne i32 %16, 12298
br i1 %17, label %18, label %21
18: ; preds = %14
%19 = load i32, i32* %2
%20 = icmp ne i32 %19, 12351
br i1 %20, label %59, label %21
21: ; preds = %18, %14, %11, %8
%22 = load i32, i32* %2
%23 = icmp uge i32 %22, 44032
br i1 %23, label %24, label %27
24: ; preds = %21
%25 = load i32, i32* %2
%26 = icmp ule i32 %25, 55203
br i1 %26, label %59, label %27
27: ; preds = %24, %21
%28 = load i32, i32* %2
%29 = icmp uge i32 %28, 63744
br i1 %29, label %30, label %33
30: ; preds = %27
%31 = load i32, i32* %2
%32 = icmp ule i32 %31, 64255
br i1 %32, label %59, label %33
33: ; preds = %30, %27
%34 = load i32, i32* %2
%35 = icmp uge i32 %34, 65072
br i1 %35, label %36, label %39
36: ; preds = %33
%37 = load i32, i32* %2
%38 = icmp ule i32 %37, 65135
br i1 %38, label %59, label %39
39: ; preds = %36, %33
%40 = load i32, i32* %2
%41 = icmp uge i32 %40, 65280
br i1 %41, label %42, label %45
42: ; preds = %39
%43 = load i32, i32* %2
%44 = icmp ule i32 %43, 65375
br i1 %44, label %59, label %45
45: ; preds = %42, %39
%46 = load i32, i32* %2
%47 = icmp uge i32 %46, 65504
br i1 %47, label %48, label %51
48: ; preds = %45
%49 = load i32, i32* %2
%50 = icmp ule i32 %49, 65510
br i1 %50, label %59, label %51
51: ; preds = %48, %45
%52 = load i32, i32* %2
%53 = icmp uge i32 %52, 131072
br i1 %53, label %54, label %57
54: ; preds = %51
%55 = load i32, i32* %2
%56 = icmp ule i32 %55, 196607
br label %57
57: ; preds = %54, %51
%58 = phi i1 [ false, %51 ], [ %56, %54 ]
br label %59
59: ; preds = %57, %48, %42, %36, %30, %24, %18, %5
%60 = phi i1 [ true, %48 ], [ true, %42 ], [ true, %36 ], [ true, %30 ], [ true, %24 ], [ true, %18 ], [ true, %5 ], [ %58, %57 ]
br label %61
61: ; preds = %59, %1
%62 = phi i1 [ false, %1 ], [ %60, %59 ]
%63 = zext i1 %62 to i32
ret i32 %63
}

LLVM IR (-O2):
define i32 @iswide(i32 %0) {
%2 = icmp ugt i32 %0, 4351
br i1 %2, label %3, label %27
3: ; preds = %1
%4 = icmp ult i32 %0, 4448
br i1 %4, label %27, label %5
5: ; preds = %3
%6 = add i32 %0, -11904
%7 = icmp ult i32 %6, 30288
br i1 %7, label %8, label %13
8: ; preds = %5
%9 = and i32 %0, -18
%10 = icmp ne i32 %9, 12298
%11 = icmp ne i32 %0, 12351
%12 = and i1 %11, %10
br i1 %12, label %27, label %16
13: ; preds = %5
%14 = add i32 %0, -44032
%15 = icmp ult i32 %14, 11172
br i1 %15, label %27, label %16
16: ; preds = %8, %13
%17 = insertelement <4 x i32> poison, i32 %0, i64 0
%18 = shufflevector <4 x i32> %17, <4 x i32> poison, <4 x i32> zeroinitializer
%19 = add <4 x i32> %18, <i32 -65504, i32 -65280, i32 -63744, i32 -65072>
%20 = icmp ult <4 x i32> %19, <i32 7, i32 96, i32 512, i32 64>
%21 = bitcast <4 x i1> %20 to i4
%22 = icmp eq i4 %21, 0
br i1 %22, label %23, label %27
23: ; preds = %16
%24 = and i32 %0, -65536
%25 = icmp eq i32 %24, 131072
%26 = zext i1 %25 to i32
br label %27
27: ; preds = %3, %23, %8, %13, %16, %1
%28 = phi i32 [ 0, %1 ], [ 1, %3 ], [ %26, %23 ], [ 1, %8 ], [ 1, %13 ], [ 1, %16 ]
ret i32 %28
}