extern int __is_local(unsigned long addr) {
  if (addr == 0x60 || addr == 0x64)
    return 1;
  if (addr == 0x170 || addr == 0x171)
    return 1;
  if (addr >= 0x2f8 && addr <= 0x2ff)
    return 1;
  if (addr >= 0x3bc && addr <= 0x3be)
    return 1;
  if (addr >= 0x3f8 && addr <= 0x3ff)
    return 1;
  return 0;
}


x86 assembly (clang, -O0):
<__is_local>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
cmpq   $0x60,-0x10(%rbp)
je     111e <__is_local+0x1e>
cmpq   $0x64,-0x10(%rbp)
jne    112a <__is_local+0x2a>
movl   $0x1,-0x4(%rbp)
jmp    11d1 <__is_local+0xd1>
cmpq   $0x170,-0x10(%rbp)
je     1146 <__is_local+0x46>
cmpq   $0x171,-0x10(%rbp)
jne    1152 <__is_local+0x52>
movl   $0x1,-0x4(%rbp)
jmp    11d1 <__is_local+0xd1>
cmpq   $0x2f8,-0x10(%rbp)
jb     117a <__is_local+0x7a>
cmpq   $0x2ff,-0x10(%rbp)
ja     117a <__is_local+0x7a>
movl   $0x1,-0x4(%rbp)
jmp    11d1 <__is_local+0xd1>
cmpq   $0x3bc,-0x10(%rbp)
jb     11a2 <__is_local+0xa2>
cmpq   $0x3be,-0x10(%rbp)
ja     11a2 <__is_local+0xa2>
movl   $0x1,-0x4(%rbp)
jmp    11d1 <__is_local+0xd1>
cmpq   $0x3f8,-0x10(%rbp)
jb     11ca <__is_local+0xca>
cmpq   $0x3ff,-0x10(%rbp)
ja     11ca <__is_local+0xca>
movl   $0x1,-0x4(%rbp)
jmp    11d1 <__is_local+0xd1>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<__is_local>:
mov    %rdi,%rax
and    $0xfffffffffffffffb,%rax
cmp    $0x60,%rax
sete   %al
mov    %rdi,%rcx
and    $0xfffffffffffffffe,%rcx
cmp    $0x170,%rcx
sete   %cl
or     %al,%cl
mov    %rdi,%rax
and    $0xfffffffffffffff8,%rax
cmp    $0x2f8,%rax
sete   %sil
add    $0xfffffffffffffc44,%rdi
cmp    $0x3,%rdi
setb   %dl
or     %sil,%dl
or     %cl,%dl
cmp    $0x3f8,%rax
sete   %al
or     %dl,%al
movzbl %al,%eax
ret

LLVM IR (-O0):
define i32 @__is_local(i64 %0) {
%2 = alloca i32
%3 = alloca i64
store i64 %0, i64* %3
%4 = load i64, i64* %3
%5 = icmp eq i64 %4, 96
br i1 %5, label %9, label %6
6: ; preds = %1
%7 = load i64, i64* %3
%8 = icmp eq i64 %7, 100
br i1 %8, label %9, label %10
9: ; preds = %6, %1
store i32 1, i32* %2
br label %39
10: ; preds = %6
%11 = load i64, i64* %3
%12 = icmp eq i64 %11, 368
br i1 %12, label %16, label %13
13: ; preds = %10
%14 = load i64, i64* %3
%15 = icmp eq i64 %14, 369
br i1 %15, label %16, label %17
16: ; preds = %13, %10
store i32 1, i32* %2
br label %39
17: ; preds = %13
%18 = load i64, i64* %3
%19 = icmp uge i64 %18, 760
br i1 %19, label %20, label %24
20: ; preds = %17
%21 = load i64, i64* %3
%22 = icmp ule i64 %21, 767
br i1 %22, label %23, label %24
23: ; preds = %20
store i32 1, i32* %2
br label %39
24: ; preds = %20, %17
%25 = load i64, i64* %3
%26 = icmp uge i64 %25, 956
br i1 %26, label %27, label %31
27: ; preds = %24
%28 = load i64, i64* %3
%29 = icmp ule i64 %28, 958
br i1 %29, label %30, label %31
30: ; preds = %27
store i32 1, i32* %2
br label %39
31: ; preds = %27, %24
%32 = load i64, i64* %3
%33 = icmp uge i64 %32, 1016
br i1 %33, label %34, label %38
34: ; preds = %31
%35 = load i64, i64* %3
%36 = icmp ule i64 %35, 1023
br i1 %36, label %37, label %38
37: ; preds = %34
store i32 1, i32* %2
br label %39
38: ; preds = %34, %31
store i32 0, i32* %2
br label %39
39: ; preds = %38, %37, %30, %23, %16, %9
%40 = load i32, i32* %2
ret i32 %40
}

LLVM IR (-O2):
define i32 @__is_local(i64 %0) {
%2 = and i64 %0, -5
%3 = icmp eq i64 %2, 96
%4 = and i64 %0, -2
%5 = icmp eq i64 %4, 368
%6 = or i1 %3, %5
%7 = and i64 %0, -8
%8 = icmp eq i64 %7, 760
%9 = or i1 %8, %6
%10 = add i64 %0, -956
%11 = icmp ult i64 %10, 3
%12 = or i1 %11, %9
%13 = icmp eq i64 %7, 1016
%14 = or i1 %13, %12
%15 = zext i1 %14 to i32
ret i32 %15
}