int ConfigFilter(unsigned int data[]) {
  int i;
  unsigned int ps_c[8];
  unsigned int pr_c[8];
  unsigned int sum = 0;
  if (data[242] > 1 && (data[255] >= 0 && data[255] <= 256)) {
    for (i = 0; i < 8; i++) {
      ps_c[i] = (data[243 + i / 4] >> ((i % 4) * 8)) & 0xff;
      pr_c[i] = (data[243 + i / 4 + 2] >> ((i % 4) * 8)) & 0xff;
      if (ps_c[i] >= 0x80)
        ps_c[i] |= 0xffffff00;
      if (pr_c[i] >= 0x80)
        pr_c[i] |= 0xffffff00;
      sum += ps_c[i];
      sum += pr_c[i];
    }
    if (sum == data[242] || sum + data[242] == 0)
      return 1;
  }
  return 0;
}


x86 assembly (clang, -O0):
<ConfigFilter>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
movl   $0x0,-0x64(%rbp)
mov    -0x10(%rbp),%rax
cmpl   $0x1,0x3c8(%rax)
jbe    129f <ConfigFilter+0x19f>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0x3fc(%rax)
jb     129f <ConfigFilter+0x19f>
mov    -0x10(%rbp),%rax
cmpl   $0x100,0x3fc(%rax)
ja     129f <ConfigFilter+0x19f>
movl   $0x0,-0x14(%rbp)
cmpl   $0x8,-0x14(%rbp)
jge    1265 <ConfigFilter+0x165>
mov    -0x10(%rbp),%rax
mov    %rax,-0x80(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x80(%rbp),%rax
add    $0xf3,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x74(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    -0x74(%rbp),%eax
mov    %edx,%ecx
shl    $0x3,%ecx
shr    %cl,%eax
mov    %eax,%ecx
and    $0xff,%ecx
movslq -0x14(%rbp),%rax
mov    %ecx,-0x40(%rbp,%rax,4)
mov    -0x10(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x70(%rbp),%rax
add    $0xf3,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x68(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    -0x68(%rbp),%eax
mov    %edx,%ecx
shl    $0x3,%ecx
shr    %cl,%eax
mov    %eax,%ecx
and    $0xff,%ecx
movslq -0x14(%rbp),%rax
mov    %ecx,-0x60(%rbp,%rax,4)
movslq -0x14(%rbp),%rax
cmpl   $0x80,-0x40(%rbp,%rax,4)
jb     1217 <ConfigFilter+0x117>
movslq -0x14(%rbp),%rax
mov    -0x40(%rbp,%rax,4),%ecx
or     $0xffffff00,%ecx
mov    %ecx,-0x40(%rbp,%rax,4)
movslq -0x14(%rbp),%rax
cmpl   $0x80,-0x60(%rbp,%rax,4)
jb     123b <ConfigFilter+0x13b>
movslq -0x14(%rbp),%rax
mov    -0x60(%rbp,%rax,4),%ecx
or     $0xffffff00,%ecx
mov    %ecx,-0x60(%rbp,%rax,4)
movslq -0x14(%rbp),%rax
mov    -0x40(%rbp,%rax,4),%eax
add    -0x64(%rbp),%eax
mov    %eax,-0x64(%rbp)
movslq -0x14(%rbp),%rax
mov    -0x60(%rbp,%rax,4),%eax
add    -0x64(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    114c <ConfigFilter+0x4c>
mov    -0x64(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    0x3c8(%rcx),%eax
je     128e <ConfigFilter+0x18e>
mov    -0x64(%rbp),%eax
mov    -0x10(%rbp),%rcx
add    0x3c8(%rcx),%eax
cmp    $0x0,%eax
jne    129a <ConfigFilter+0x19a>
movl   $0x1,-0x4(%rbp)
jmp    12a6 <ConfigFilter+0x1a6>
jmp    129f <ConfigFilter+0x19f>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<ConfigFilter>:
push   %rbx
mov    0x3c8(%rdi),%r8d
cmp    $0x2,%r8d
jb     12b1 <ConfigFilter+0x1b1>
cmpl   $0x100,0x3fc(%rdi)
ja     12b1 <ConfigFilter+0x1b1>
mov    0x3cc(%rdi),%ebx
movzbl %bl,%edx
mov    0x3d4(%rdi),%eax
movzbl %al,%esi
xor    %ecx,%ecx
cmp    $0x80,%edx
setb   %cl
shl    $0x8,%ecx
or     %edx,%ecx
xor    %edx,%edx
cmp    $0x80,%esi
setb   %dl
shl    $0x8,%edx
or     %esi,%edx
add    %ecx,%edx
movzbl %bh,%ecx
xor    %esi,%esi
cmp    $0x80,%ecx
setb   %sil
shl    $0x8,%esi
or     %ecx,%esi
add    %edx,%esi
movzbl %ah,%ecx
xor    %edx,%edx
cmp    $0x80,%ecx
setb   %dl
shl    $0x8,%edx
or     %ecx,%edx
add    %esi,%edx
mov    %ebx,%ecx
shr    $0x10,%ecx
movzbl %cl,%ecx
xor    %esi,%esi
cmp    $0x80,%ecx
setb   %sil
shl    $0x8,%esi
or     %ecx,%esi
add    %edx,%esi
mov    %eax,%ecx
shr    $0x10,%ecx
movzbl %cl,%r9d
xor    %ecx,%ecx
cmp    $0x80,%r9d
setb   %cl
mov    %ebx,%edx
shr    $0x18,%edx
sar    $0x1f,%ebx
and    $0xffffff00,%ebx
or     %edx,%ebx
mov    %eax,%edx
shr    $0x18,%edx
sar    $0x1f,%eax
and    $0xffffff00,%eax
or     %edx,%eax
mov    0x3d0(%rdi),%edx
shl    $0x8,%ecx
or     %r9d,%ecx
add    %esi,%ecx
add    %ecx,%ebx
add    %ebx,%eax
movzbl %dl,%ecx
xor    %esi,%esi
cmp    $0x80,%ecx
setb   %sil
shl    $0x8,%esi
or     %ecx,%esi
add    %eax,%esi
mov    0x3d8(%rdi),%eax
movzbl %al,%ecx
xor    %edi,%edi
cmp    $0x80,%ecx
setb   %dil
shl    $0x8,%edi
or     %ecx,%edi
add    %esi,%edi
movzbl %dh,%ecx
xor    %esi,%esi
cmp    $0x80,%ecx
setb   %sil
shl    $0x8,%esi
or     %ecx,%esi
add    %edi,%esi
movzbl %ah,%ecx
xor    %edi,%edi
cmp    $0x80,%ecx
setb   %dil
shl    $0x8,%edi
or     %ecx,%edi
add    %esi,%edi
mov    %edx,%ecx
shr    $0x10,%ecx
movzbl %cl,%ecx
xor    %esi,%esi
cmp    $0x80,%ecx
setb   %sil
shl    $0x8,%esi
or     %ecx,%esi
add    %edi,%esi
mov    %eax,%ecx
shr    $0x10,%ecx
movzbl %cl,%ecx
xor    %edi,%edi
cmp    $0x80,%ecx
setb   %dil
mov    %edx,%ebx
shr    $0x18,%ebx
sar    $0x1f,%edx
and    $0xffffff00,%edx
or     %ebx,%edx
mov    %eax,%ebx
shr    $0x18,%ebx
sar    $0x1f,%eax
and    $0xffffff00,%eax
or     %ebx,%eax
shl    $0x8,%edi
or     %ecx,%edi
add    %esi,%edi
add    %edi,%edx
add    %eax,%edx
add    $0xfffff400,%edx
mov    $0x1,%eax
cmp    %r8d,%edx
je     12b3 <ConfigFilter+0x1b3>
neg    %r8d
cmp    %r8d,%edx
je     12b3 <ConfigFilter+0x1b3>
xor    %eax,%eax
pop    %rbx
ret

LLVM IR (-O0):
define i32 @ConfigFilter(i32* %0) {
%2 = alloca i32
%3 = alloca i32*
%4 = alloca i32
%5 = alloca [8 x i32]
%6 = alloca [8 x i32]
%7 = alloca i32
store i32* %0, i32** %3
store i32 0, i32* %7
%8 = load i32*, i32** %3
%9 = getelementptr inbounds i32, i32* %8, i64 242
%10 = load i32, i32* %9
%11 = icmp ugt i32 %10, 1
br i1 %11, label %12, label %112
12: ; preds = %1
%13 = load i32*, i32** %3
%14 = getelementptr inbounds i32, i32* %13, i64 255
%15 = load i32, i32* %14
%16 = icmp uge i32 %15, 0
br i1 %16, label %17, label %112
17: ; preds = %12
%18 = load i32*, i32** %3
%19 = getelementptr inbounds i32, i32* %18, i64 255
%20 = load i32, i32* %19
%21 = icmp ule i32 %20, 256
br i1 %21, label %22, label %112
22: ; preds = %17
store i32 0, i32* %4
br label %23
23: ; preds = %94, %22
%24 = load i32, i32* %4
%25 = icmp slt i32 %24, 8
br i1 %25, label %26, label %97
26: ; preds = %23
%27 = load i32*, i32** %3
%28 = load i32, i32* %4
%29 = sdiv i32 %28, 4
%30 = add nsw i32 243, %29
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds i32, i32* %27, i64 %31
%33 = load i32, i32* %32
%34 = load i32, i32* %4
%35 = srem i32 %34, 4
%36 = mul nsw i32 %35, 8
%37 = lshr i32 %33, %36
%38 = and i32 %37, 255
%39 = load i32, i32* %4
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds [8 x i32], [8 x i32]* %5, i64 0, i64 %40
store i32 %38, i32* %41
%42 = load i32*, i32** %3
%43 = load i32, i32* %4
%44 = sdiv i32 %43, 4
%45 = add nsw i32 243, %44
%46 = add nsw i32 %45, 2
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds i32, i32* %42, i64 %47
%49 = load i32, i32* %48
%50 = load i32, i32* %4
%51 = srem i32 %50, 4
%52 = mul nsw i32 %51, 8
%53 = lshr i32 %49, %52
%54 = and i32 %53, 255
%55 = load i32, i32* %4
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds [8 x i32], [8 x i32]* %6, i64 0, i64 %56
store i32 %54, i32* %57
%58 = load i32, i32* %4
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds [8 x i32], [8 x i32]* %5, i64 0, i64 %59
%61 = load i32, i32* %60
%62 = icmp uge i32 %61, 128
br i1 %62, label %63, label %69
63: ; preds = %26
%64 = load i32, i32* %4
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds [8 x i32], [8 x i32]* %5, i64 0, i64 %65
%67 = load i32, i32* %66
%68 = or i32 %67, -256
store i32 %68, i32* %66
br label %69
69: ; preds = %63, %26
%70 = load i32, i32* %4
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds [8 x i32], [8 x i32]* %6, i64 0, i64 %71
%73 = load i32, i32* %72
%74 = icmp uge i32 %73, 128
br i1 %74, label %75, label %81
75: ; preds = %69
%76 = load i32, i32* %4
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds [8 x i32], [8 x i32]* %6, i64 0, i64 %77
%79 = load i32, i32* %78
%80 = or i32 %79, -256
store i32 %80, i32* %78
br label %81
81: ; preds = %75, %69
%82 = load i32, i32* %4
%83 = sext i32 %82 to i64
%84 = getelementptr inbounds [8 x i32], [8 x i32]* %5, i64 0, i64 %83
%85 = load i32, i32* %84
%86 = load i32, i32* %7
%87 = add i32 %86, %85
store i32 %87, i32* %7
%88 = load i32, i32* %4
%89 = sext i32 %88 to i64
%90 = getelementptr inbounds [8 x i32], [8 x i32]* %6, i64 0, i64 %89
%91 = load i32, i32* %90
%92 = load i32, i32* %7
%93 = add i32 %92, %91
store i32 %93, i32* %7
br label %94
94: ; preds = %81
%95 = load i32, i32* %4
%96 = add nsw i32 %95, 1
store i32 %96, i32* %4
br label %23
97: ; preds = %23
%98 = load i32, i32* %7
%99 = load i32*, i32** %3
%100 = getelementptr inbounds i32, i32* %99, i64 242
%101 = load i32, i32* %100
%102 = icmp eq i32 %98, %101
br i1 %102, label %110, label %103
103: ; preds = %97
%104 = load i32, i32* %7
%105 = load i32*, i32** %3
%106 = getelementptr inbounds i32, i32* %105, i64 242
%107 = load i32, i32* %106
%108 = add i32 %104, %107
%109 = icmp eq i32 %108, 0
br i1 %109, label %110, label %111
110: ; preds = %103, %97
store i32 1, i32* %2
br label %113
111: ; preds = %103
br label %112
112: ; preds = %111, %17, %12, %1
store i32 0, i32* %2
br label %113
113: ; preds = %112, %110
%114 = load i32, i32* %2
ret i32 %114
}

LLVM IR (-O2):
define i32 @ConfigFilter(i32* nocapture %0) {
%2 = getelementptr inbounds i32, i32* %0, i64 242
%3 = load i32, i32* %2
%4 = icmp ugt i32 %3, 1
br i1 %4, label %5, label %133
5: ; preds = %1
%6 = getelementptr inbounds i32, i32* %0, i64 255
%7 = load i32, i32* %6
%8 = icmp ult i32 %7, 257
br i1 %8, label %9, label %133
9: ; preds = %5
%10 = getelementptr inbounds i32, i32* %0, i64 243
%11 = load i32, i32* %10
%12 = and i32 %11, 255
%13 = getelementptr inbounds i32, i32* %0, i64 245
%14 = load i32, i32* %13
%15 = and i32 %14, 255
%16 = icmp ugt i32 %12, 127
%17 = select i1 %16, i32 -256, i32 0
%18 = or i32 %12, %17
%19 = icmp ugt i32 %15, 127
%20 = select i1 %19, i32 -256, i32 0
%21 = or i32 %15, %20
%22 = add nsw i32 %18, %21
%23 = getelementptr inbounds i32, i32* %0, i64 243
%24 = load i32, i32* %23
%25 = lshr i32 %24, 8
%26 = and i32 %25, 255
%27 = getelementptr inbounds i32, i32* %0, i64 245
%28 = load i32, i32* %27
%29 = lshr i32 %28, 8
%30 = and i32 %29, 255
%31 = icmp ugt i32 %26, 127
%32 = select i1 %31, i32 -256, i32 0
%33 = or i32 %26, %32
%34 = icmp ugt i32 %30, 127
%35 = select i1 %34, i32 -256, i32 0
%36 = or i32 %30, %35
%37 = add nsw i32 %33, %22
%38 = add nsw i32 %37, %36
%39 = getelementptr inbounds i32, i32* %0, i64 243
%40 = load i32, i32* %39
%41 = lshr i32 %40, 16
%42 = and i32 %41, 255
%43 = getelementptr inbounds i32, i32* %0, i64 245
%44 = load i32, i32* %43
%45 = lshr i32 %44, 16
%46 = and i32 %45, 255
%47 = icmp ugt i32 %42, 127
%48 = select i1 %47, i32 -256, i32 0
%49 = or i32 %42, %48
%50 = icmp ugt i32 %46, 127
%51 = select i1 %50, i32 -256, i32 0
%52 = or i32 %46, %51
%53 = add nsw i32 %49, %38
%54 = add i32 %53, %52
%55 = getelementptr inbounds i32, i32* %0, i64 243
%56 = load i32, i32* %55
%57 = lshr i32 %56, 24
%58 = getelementptr inbounds i32, i32* %0, i64 245
%59 = load i32, i32* %58
%60 = lshr i32 %59, 24
%61 = icmp slt i32 %56, 0
%62 = select i1 %61, i32 -256, i32 0
%63 = or i32 %57, %62
%64 = icmp slt i32 %59, 0
%65 = select i1 %64, i32 -256, i32 0
%66 = or i32 %60, %65
%67 = add i32 %63, %54
%68 = add i32 %67, %66
%69 = getelementptr inbounds i32, i32* %0, i64 244
%70 = load i32, i32* %69
%71 = and i32 %70, 255
%72 = getelementptr inbounds i32, i32* %0, i64 246
%73 = load i32, i32* %72
%74 = and i32 %73, 255
%75 = icmp ugt i32 %71, 127
%76 = select i1 %75, i32 -256, i32 0
%77 = or i32 %71, %76
%78 = icmp ugt i32 %74, 127
%79 = select i1 %78, i32 -256, i32 0
%80 = or i32 %74, %79
%81 = add i32 %77, %68
%82 = add i32 %81, %80
%83 = getelementptr inbounds i32, i32* %0, i64 244
%84 = load i32, i32* %83
%85 = lshr i32 %84, 8
%86 = and i32 %85, 255
%87 = getelementptr inbounds i32, i32* %0, i64 246
%88 = load i32, i32* %87
%89 = lshr i32 %88, 8
%90 = and i32 %89, 255
%91 = icmp ugt i32 %86, 127
%92 = select i1 %91, i32 -256, i32 0
%93 = or i32 %86, %92
%94 = icmp ugt i32 %90, 127
%95 = select i1 %94, i32 -256, i32 0
%96 = or i32 %90, %95
%97 = add i32 %93, %82
%98 = add i32 %97, %96
%99 = getelementptr inbounds i32, i32* %0, i64 244
%100 = load i32, i32* %99
%101 = lshr i32 %100, 16
%102 = and i32 %101, 255
%103 = getelementptr inbounds i32, i32* %0, i64 246
%104 = load i32, i32* %103
%105 = lshr i32 %104, 16
%106 = and i32 %105, 255
%107 = icmp ugt i32 %102, 127
%108 = select i1 %107, i32 -256, i32 0
%109 = or i32 %102, %108
%110 = icmp ugt i32 %106, 127
%111 = select i1 %110, i32 -256, i32 0
%112 = or i32 %106, %111
%113 = add i32 %109, %98
%114 = add i32 %113, %112
%115 = getelementptr inbounds i32, i32* %0, i64 244
%116 = load i32, i32* %115
%117 = lshr i32 %116, 24
%118 = getelementptr inbounds i32, i32* %0, i64 246
%119 = load i32, i32* %118
%120 = lshr i32 %119, 24
%121 = icmp slt i32 %116, 0
%122 = select i1 %121, i32 -256, i32 0
%123 = or i32 %117, %122
%124 = icmp slt i32 %119, 0
%125 = select i1 %124, i32 -256, i32 0
%126 = or i32 %120, %125
%127 = add i32 %123, %114
%128 = add i32 %127, %126
%129 = icmp eq i32 %128, %3
%130 = sub i32 0, %3
%131 = icmp eq i32 %128, %130
%132 = or i1 %129, %131
br i1 %132, label %134, label %133
133: ; preds = %9, %5, %1
br label %134
134: ; preds = %9, %133
%135 = phi i32 [ 0, %133 ], [ 1, %9 ]
ret i32 %135
}