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] <= 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    128e <ConfigFilter+0x18e>
mov    -0x10(%rbp),%rax
cmpl   $0x100,0x3fc(%rax)
ja     128e <ConfigFilter+0x18e>
movl   $0x0,-0x14(%rbp)
cmpl   $0x8,-0x14(%rbp)
jge    1254 <ConfigFilter+0x154>
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     1206 <ConfigFilter+0x106>
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     122a <ConfigFilter+0x12a>
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    113b <ConfigFilter+0x3b>
mov    -0x64(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    0x3c8(%rcx),%eax
je     127d <ConfigFilter+0x17d>
mov    -0x64(%rbp),%eax
mov    -0x10(%rbp),%rcx
add    0x3c8(%rcx),%eax
cmp    $0x0,%eax
jne    1289 <ConfigFilter+0x189>
movl   $0x1,-0x4(%rbp)
jmp    1295 <ConfigFilter+0x195>
jmp    128e <ConfigFilter+0x18e>
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 %107
12: ; preds = %1
%13 = load i32*, i32** %3
%14 = getelementptr inbounds i32, i32* %13, i64 255
%15 = load i32, i32* %14
%16 = icmp ule i32 %15, 256
br i1 %16, label %17, label %107
17: ; preds = %12
store i32 0, i32* %4
br label %18
18: ; preds = %89, %17
%19 = load i32, i32* %4
%20 = icmp slt i32 %19, 8
br i1 %20, label %21, label %92
21: ; preds = %18
%22 = load i32*, i32** %3
%23 = load i32, i32* %4
%24 = sdiv i32 %23, 4
%25 = add nsw i32 243, %24
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds i32, i32* %22, i64 %26
%28 = load i32, i32* %27
%29 = load i32, i32* %4
%30 = srem i32 %29, 4
%31 = mul nsw i32 %30, 8
%32 = lshr i32 %28, %31
%33 = and i32 %32, 255
%34 = load i32, i32* %4
%35 = sext i32 %34 to i64
%36 = getelementptr inbounds [8 x i32], [8 x i32]* %5, i64 0, i64 %35
store i32 %33, i32* %36
%37 = load i32*, i32** %3
%38 = load i32, i32* %4
%39 = sdiv i32 %38, 4
%40 = add nsw i32 243, %39
%41 = add nsw i32 %40, 2
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds i32, i32* %37, i64 %42
%44 = load i32, i32* %43
%45 = load i32, i32* %4
%46 = srem i32 %45, 4
%47 = mul nsw i32 %46, 8
%48 = lshr i32 %44, %47
%49 = and i32 %48, 255
%50 = load i32, i32* %4
%51 = sext i32 %50 to i64
%52 = getelementptr inbounds [8 x i32], [8 x i32]* %6, i64 0, i64 %51
store i32 %49, i32* %52
%53 = load i32, i32* %4
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds [8 x i32], [8 x i32]* %5, i64 0, i64 %54
%56 = load i32, i32* %55
%57 = icmp uge i32 %56, 128
br i1 %57, label %58, label %64
58: ; preds = %21
%59 = load i32, i32* %4
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds [8 x i32], [8 x i32]* %5, i64 0, i64 %60
%62 = load i32, i32* %61
%63 = or i32 %62, -256
store i32 %63, i32* %61
br label %64
64: ; preds = %58, %21
%65 = load i32, i32* %4
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds [8 x i32], [8 x i32]* %6, i64 0, i64 %66
%68 = load i32, i32* %67
%69 = icmp uge i32 %68, 128
br i1 %69, label %70, label %76
70: ; preds = %64
%71 = load i32, i32* %4
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds [8 x i32], [8 x i32]* %6, i64 0, i64 %72
%74 = load i32, i32* %73
%75 = or i32 %74, -256
store i32 %75, i32* %73
br label %76
76: ; preds = %70, %64
%77 = load i32, i32* %4
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds [8 x i32], [8 x i32]* %5, i64 0, i64 %78
%80 = load i32, i32* %79
%81 = load i32, i32* %7
%82 = add i32 %81, %80
store i32 %82, i32* %7
%83 = load i32, i32* %4
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds [8 x i32], [8 x i32]* %6, i64 0, i64 %84
%86 = load i32, i32* %85
%87 = load i32, i32* %7
%88 = add i32 %87, %86
store i32 %88, i32* %7
br label %89
89: ; preds = %76
%90 = load i32, i32* %4
%91 = add nsw i32 %90, 1
store i32 %91, i32* %4
br label %18
92: ; preds = %18
%93 = load i32, i32* %7
%94 = load i32*, i32** %3
%95 = getelementptr inbounds i32, i32* %94, i64 242
%96 = load i32, i32* %95
%97 = icmp eq i32 %93, %96
br i1 %97, label %105, label %98
98: ; preds = %92
%99 = load i32, i32* %7
%100 = load i32*, i32** %3
%101 = getelementptr inbounds i32, i32* %100, i64 242
%102 = load i32, i32* %101
%103 = add i32 %99, %102
%104 = icmp eq i32 %103, 0
br i1 %104, label %105, label %106
105: ; preds = %98, %92
store i32 1, i32* %2
br label %108
106: ; preds = %98
br label %107
107: ; preds = %106, %12, %1
store i32 0, i32* %2
br label %108
108: ; preds = %107, %105
%109 = load i32, i32* %2
ret i32 %109
}

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
}