int Near(int Res1, int Res2, int Res3, int Res4, int Res5, int Res6, int Res7,
         int Res8, char Cn1, char Cn2, char Cn3, char Cn4, int *DistBest,
         int *DistWorst) {
  int a, b, c1, d1, c, d, Nei1, Nei2;
  if (Cn1 != Cn2 || Cn3 != Cn4)
    return (0);
  if (Res1 >= Res2 && Res2 >= Res5 && Res7 >= Res1 && Res4 <= Res3 &&
      Res4 <= Res6 && Res8 <= Res4) {
    if (Res5 == Res2)
      Nei1 = Res2;
    else
      Nei1 = Res2 - 1;
    if (Res1 == Res7)
      Nei2 = Res1;
    else
      Nei2 = Res1 + 1;
    a = Nei2 - Nei1;
    c1 = Nei2 - Res5;
    if (Res3 == Res6)
      Nei1 = Res3;
    else
      Nei1 = Res3 + 1;
    if (Res4 == Res8)
      Nei2 = Res4;
    else
      Nei2 = Res4 - 1;
    b = Nei1 - Nei2;
    d1 = Res6 - Nei2;
  } else
    return (0);
  c = ((c1) < (a) ? a : c1);
  d = ((d1) < (b) ? b : d1);
  if (a >= 0 && b >= 0 && c >= 0 && d >= 0 &&
      ((a <= 2 && b <= 5) || (a <= 5 && b <= 2))) {
    *DistBest = ((a) < (b) ? a : b);
    *DistWorst = ((c) < (d) ? d : c);
    if (*DistBest <= *DistWorst)
      return (1);
    else
      return (0);
  }
  return (0);
}


x86 assembly (clang, -O0):
<Near>:
push   %rbp
mov    %rsp,%rbp
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%al
mov    0x30(%rbp),%al
mov    0x28(%rbp),%al
mov    0x20(%rbp),%al
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8d,-0x18(%rbp)
mov    %r9d,-0x1c(%rbp)
movsbl 0x20(%rbp),%eax
movsbl 0x28(%rbp),%ecx
cmp    %ecx,%eax
jne    1152 <Near+0x52>
movsbl 0x30(%rbp),%eax
movsbl 0x38(%rbp),%ecx
cmp    %ecx,%eax
je     115e <Near+0x5e>
movl   $0x0,-0x4(%rbp)
jmp    136e <Near+0x26e>
mov    -0x8(%rbp),%eax
cmp    -0xc(%rbp),%eax
jl     124f <Near+0x14f>
mov    -0xc(%rbp),%eax
cmp    -0x18(%rbp),%eax
jl     124f <Near+0x14f>
mov    0x10(%rbp),%eax
cmp    -0x8(%rbp),%eax
jl     124f <Near+0x14f>
mov    -0x14(%rbp),%eax
cmp    -0x10(%rbp),%eax
jg     124f <Near+0x14f>
mov    -0x14(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jg     124f <Near+0x14f>
mov    0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     124f <Near+0x14f>
mov    -0x18(%rbp),%eax
cmp    -0xc(%rbp),%eax
jne    11bd <Near+0xbd>
mov    -0xc(%rbp),%eax
mov    %eax,-0x38(%rbp)
jmp    11c6 <Near+0xc6>
mov    -0xc(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x8(%rbp),%eax
cmp    0x10(%rbp),%eax
jne    11dd <Near+0xdd>
mov    -0x8(%rbp),%eax
mov    %eax,-0x3c(%rbp)
jmp    11e6 <Near+0xe6>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
sub    -0x38(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x3c(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jne    120f <Near+0x10f>
mov    -0x10(%rbp),%eax
mov    %eax,-0x38(%rbp)
jmp    1218 <Near+0x118>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x14(%rbp),%eax
cmp    0x18(%rbp),%eax
jne    122f <Near+0x12f>
mov    -0x14(%rbp),%eax
mov    %eax,-0x3c(%rbp)
jmp    1238 <Near+0x138>
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x38(%rbp),%eax
sub    -0x3c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x1c(%rbp),%eax
sub    -0x3c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    125b <Near+0x15b>
movl   $0x0,-0x4(%rbp)
jmp    136e <Near+0x26e>
mov    -0x28(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    1272 <Near+0x172>
mov    -0x20(%rbp),%eax
mov    %eax,-0x40(%rbp)
jmp    1278 <Near+0x178>
mov    -0x28(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1295 <Near+0x195>
mov    -0x24(%rbp),%eax
mov    %eax,-0x44(%rbp)
jmp    129b <Near+0x19b>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x34(%rbp)
cmpl   $0x0,-0x20(%rbp)
jl     1367 <Near+0x267>
cmpl   $0x0,-0x24(%rbp)
jl     1367 <Near+0x267>
cmpl   $0x0,-0x30(%rbp)
jl     1367 <Near+0x267>
cmpl   $0x0,-0x34(%rbp)
jl     1367 <Near+0x267>
cmpl   $0x2,-0x20(%rbp)
jg     12dd <Near+0x1dd>
cmpl   $0x5,-0x24(%rbp)
jle    12f1 <Near+0x1f1>
cmpl   $0x5,-0x20(%rbp)
jg     1367 <Near+0x267>
cmpl   $0x2,-0x24(%rbp)
jg     1367 <Near+0x267>
mov    -0x20(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1308 <Near+0x208>
mov    -0x20(%rbp),%eax
mov    %eax,-0x48(%rbp)
jmp    130e <Near+0x20e>
mov    -0x24(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%ecx
mov    0x40(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x30(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    132e <Near+0x22e>
mov    -0x34(%rbp),%eax
mov    %eax,-0x4c(%rbp)
jmp    1334 <Near+0x234>
mov    -0x30(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%ecx
mov    0x48(%rbp),%rax
mov    %ecx,(%rax)
mov    0x40(%rbp),%rax
mov    (%rax),%eax
mov    0x48(%rbp),%rcx
cmp    (%rcx),%eax
jg     135b <Near+0x25b>
movl   $0x1,-0x4(%rbp)
jmp    136e <Near+0x26e>
movl   $0x0,-0x4(%rbp)
jmp    136e <Near+0x26e>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<Near>:
push   %rbp
push   %rbx
mov    0x28(%rsp),%bl
xor    %eax,%eax
cmp    0x30(%rsp),%bl
jne    11ee <Near+0xee>
mov    0x40(%rsp),%bl
cmp    %bl,0x38(%rsp)
jne    11ee <Near+0xee>
mov    0x20(%rsp),%ebx
cmp    %ecx,%ebx
jg     11ee <Near+0xee>
cmp    %r9d,%ecx
jg     11ee <Near+0xee>
cmp    %edx,%ecx
jg     11ee <Near+0xee>
cmp    %esi,%edi
jl     11ee <Near+0xee>
cmp    %r8d,%esi
jl     11ee <Near+0xee>
mov    0x18(%rsp),%ebp
cmp    %edi,%ebp
jl     11ee <Near+0xee>
xor    %r11d,%r11d
cmp    %esi,%r8d
setne  %r11b
xor    %r10d,%r10d
cmp    %ebp,%edi
setne  %r10b
add    %edi,%r10d
sub    %esi,%r11d
add    %r10d,%r11d
sub    %r8d,%r10d
xor    %esi,%esi
cmp    %r9d,%edx
setne  %sil
add    %edx,%esi
xor    %edx,%edx
cmp    %ebx,%ecx
setne  %dl
sub    %edx,%ecx
sub    %ecx,%esi
sub    %ecx,%r9d
cmp    %r11d,%r10d
cmovl  %r11d,%r10d
cmp    %esi,%r9d
cmovl  %esi,%r9d
test   %r11d,%r11d
js     11ee <Near+0xee>
test   %esi,%esi
js     11ee <Near+0xee>
test   %r10d,%r10d
js     11ee <Near+0xee>
test   %r9d,%r9d
js     11ee <Near+0xee>
cmp    $0x2,%r11d
ja     11be <Near+0xbe>
cmp    $0x6,%esi
jb     11c9 <Near+0xc9>
cmp    $0x5,%r11d
ja     11ee <Near+0xee>
cmp    $0x2,%esi
ja     11ee <Near+0xee>
mov    0x50(%rsp),%rax
mov    0x48(%rsp),%rcx
cmp    %esi,%r11d
cmovb  %r11d,%esi
mov    %esi,(%rcx)
cmp    %r9d,%r10d
cmovb  %r9d,%r10d
mov    %r10d,(%rax)
xor    %eax,%eax
cmp    %r10d,(%rcx)
setle  %al
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
define i32 @Near(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i8 signext %8, i8 signext %9, i8 signext %10, i8 signext %11, i32* %12, i32* %13) {
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca i32
%24 = alloca i8
%25 = alloca i8
%26 = alloca i8
%27 = alloca i8
%28 = alloca i32*
%29 = alloca i32*
%30 = alloca i32
%31 = alloca i32
%32 = alloca i32
%33 = alloca i32
%34 = alloca i32
%35 = alloca i32
%36 = alloca i32
%37 = alloca i32
store i32 %0, i32* %16
store i32 %1, i32* %17
store i32 %2, i32* %18
store i32 %3, i32* %19
store i32 %4, i32* %20
store i32 %5, i32* %21
store i32 %6, i32* %22
store i32 %7, i32* %23
store i8 %8, i8* %24
store i8 %9, i8* %25
store i8 %10, i8* %26
store i8 %11, i8* %27
store i32* %12, i32** %28
store i32* %13, i32** %29
%38 = load i8, i8* %24
%39 = sext i8 %38 to i32
%40 = load i8, i8* %25
%41 = sext i8 %40 to i32
%42 = icmp ne i32 %39, %41
br i1 %42, label %49, label %43
43: ; preds = %14
%44 = load i8, i8* %26
%45 = sext i8 %44 to i32
%46 = load i8, i8* %27
%47 = sext i8 %46 to i32
%48 = icmp ne i32 %45, %47
br i1 %48, label %49, label %50
49: ; preds = %43, %14
store i32 0, i32* %15
br label %195
50: ; preds = %43
%51 = load i32, i32* %16
%52 = load i32, i32* %17
%53 = icmp sge i32 %51, %52
br i1 %53, label %54, label %123
54: ; preds = %50
%55 = load i32, i32* %17
%56 = load i32, i32* %20
%57 = icmp sge i32 %55, %56
br i1 %57, label %58, label %123
58: ; preds = %54
%59 = load i32, i32* %22
%60 = load i32, i32* %16
%61 = icmp sge i32 %59, %60
br i1 %61, label %62, label %123
62: ; preds = %58
%63 = load i32, i32* %19
%64 = load i32, i32* %18
%65 = icmp sle i32 %63, %64
br i1 %65, label %66, label %123
66: ; preds = %62
%67 = load i32, i32* %19
%68 = load i32, i32* %21
%69 = icmp sle i32 %67, %68
br i1 %69, label %70, label %123
70: ; preds = %66
%71 = load i32, i32* %23
%72 = load i32, i32* %19
%73 = icmp sle i32 %71, %72
br i1 %73, label %74, label %123
74: ; preds = %70
%75 = load i32, i32* %20
%76 = load i32, i32* %17
%77 = icmp eq i32 %75, %76
br i1 %77, label %78, label %80
78: ; preds = %74
%79 = load i32, i32* %17
store i32 %79, i32* %36
br label %83
80: ; preds = %74
%81 = load i32, i32* %17
%82 = sub nsw i32 %81, 1
store i32 %82, i32* %36
br label %83
83: ; preds = %80, %78
%84 = load i32, i32* %16
%85 = load i32, i32* %22
%86 = icmp eq i32 %84, %85
br i1 %86, label %87, label %89
87: ; preds = %83
%88 = load i32, i32* %16
store i32 %88, i32* %37
br label %92
89: ; preds = %83
%90 = load i32, i32* %16
%91 = add nsw i32 %90, 1
store i32 %91, i32* %37
br label %92
92: ; preds = %89, %87
%93 = load i32, i32* %37
%94 = load i32, i32* %36
%95 = sub nsw i32 %93, %94
store i32 %95, i32* %30
%96 = load i32, i32* %37
%97 = load i32, i32* %20
%98 = sub nsw i32 %96, %97
store i32 %98, i32* %32
%99 = load i32, i32* %18
%100 = load i32, i32* %21
%101 = icmp eq i32 %99, %100
br i1 %101, label %102, label %104
102: ; preds = %92
%103 = load i32, i32* %18
store i32 %103, i32* %36
br label %107
104: ; preds = %92
%105 = load i32, i32* %18
%106 = add nsw i32 %105, 1
store i32 %106, i32* %36
br label %107
107: ; preds = %104, %102
%108 = load i32, i32* %19
%109 = load i32, i32* %23
%110 = icmp eq i32 %108, %109
br i1 %110, label %111, label %113
111: ; preds = %107
%112 = load i32, i32* %19
store i32 %112, i32* %37
br label %116
113: ; preds = %107
%114 = load i32, i32* %19
%115 = sub nsw i32 %114, 1
store i32 %115, i32* %37
br label %116
116: ; preds = %113, %111
%117 = load i32, i32* %36
%118 = load i32, i32* %37
%119 = sub nsw i32 %117, %118
store i32 %119, i32* %31
%120 = load i32, i32* %21
%121 = load i32, i32* %37
%122 = sub nsw i32 %120, %121
store i32 %122, i32* %33
br label %124
123: ; preds = %70, %66, %62, %58, %54, %50
store i32 0, i32* %15
br label %195
124: ; preds = %116
%125 = load i32, i32* %32
%126 = load i32, i32* %30
%127 = icmp slt i32 %125, %126
br i1 %127, label %128, label %130
128: ; preds = %124
%129 = load i32, i32* %30
br label %132
130: ; preds = %124
%131 = load i32, i32* %32
br label %132
132: ; preds = %130, %128
%133 = phi i32 [ %129, %128 ], [ %131, %130 ]
store i32 %133, i32* %34
%134 = load i32, i32* %33
%135 = load i32, i32* %31
%136 = icmp slt i32 %134, %135
br i1 %136, label %137, label %139
137: ; preds = %132
%138 = load i32, i32* %31
br label %141
139: ; preds = %132
%140 = load i32, i32* %33
br label %141
141: ; preds = %139, %137
%142 = phi i32 [ %138, %137 ], [ %140, %139 ]
store i32 %142, i32* %35
%143 = load i32, i32* %30
%144 = icmp sge i32 %143, 0
br i1 %144, label %145, label %194
145: ; preds = %141
%146 = load i32, i32* %31
%147 = icmp sge i32 %146, 0
br i1 %147, label %148, label %194
148: ; preds = %145
%149 = load i32, i32* %34
%150 = icmp sge i32 %149, 0
br i1 %150, label %151, label %194
151: ; preds = %148
%152 = load i32, i32* %35
%153 = icmp sge i32 %152, 0
br i1 %153, label %154, label %194
154: ; preds = %151
%155 = load i32, i32* %30
%156 = icmp sle i32 %155, 2
br i1 %156, label %157, label %160
157: ; preds = %154
%158 = load i32, i32* %31
%159 = icmp sle i32 %158, 5
br i1 %159, label %166, label %160
160: ; preds = %157, %154
%161 = load i32, i32* %30
%162 = icmp sle i32 %161, 5
br i1 %162, label %163, label %194
163: ; preds = %160
%164 = load i32, i32* %31
%165 = icmp sle i32 %164, 2
br i1 %165, label %166, label %194
166: ; preds = %163, %157
%167 = load i32, i32* %30
%168 = load i32, i32* %31
%169 = icmp slt i32 %167, %168
br i1 %169, label %170, label %172
170: ; preds = %166
%171 = load i32, i32* %30
br label %174
172: ; preds = %166
%173 = load i32, i32* %31
br label %174
174: ; preds = %172, %170
%175 = phi i32 [ %171, %170 ], [ %173, %172 ]
%176 = load i32*, i32** %28
store i32 %175, i32* %176
%177 = load i32, i32* %34
%178 = load i32, i32* %35
%179 = icmp slt i32 %177, %178
br i1 %179, label %180, label %182
180: ; preds = %174
%181 = load i32, i32* %35
br label %184
182: ; preds = %174
%183 = load i32, i32* %34
br label %184
184: ; preds = %182, %180
%185 = phi i32 [ %181, %180 ], [ %183, %182 ]
%186 = load i32*, i32** %29
store i32 %185, i32* %186
%187 = load i32*, i32** %28
%188 = load i32, i32* %187
%189 = load i32*, i32** %29
%190 = load i32, i32* %189
%191 = icmp sle i32 %188, %190
br i1 %191, label %192, label %193
192: ; preds = %184
store i32 1, i32* %15
br label %195
193: ; preds = %184
store i32 0, i32* %15
br label %195
194: ; preds = %163, %160, %151, %148, %145, %141
store i32 0, i32* %15
br label %195
195: ; preds = %194, %193, %192, %123, %49
%196 = load i32, i32* %15
ret i32 %196
}

LLVM IR (-O2):
define i32 @Near(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i8 signext %8, i8 signext %9, i8 signext %10, i8 signext %11, i32* nocapture %12, i32* nocapture writeonly %13) {
%15 = icmp eq i8 %8, %9
%16 = icmp eq i8 %10, %11
%17 = and i1 %15, %16
br i1 %17, label %18, label %74
18: ; preds = %14
%19 = icmp slt i32 %0, %1
%20 = icmp slt i32 %1, %4
%21 = or i1 %19, %20
%22 = icmp slt i32 %6, %0
%23 = or i1 %21, %22
%24 = icmp sgt i32 %3, %2
%25 = or i1 %24, %23
%26 = icmp sgt i32 %3, %5
%27 = or i1 %26, %25
%28 = icmp sgt i32 %7, %3
%29 = or i1 %28, %27
br i1 %29, label %74, label %30
30: ; preds = %18
%31 = icmp ne i32 %4, %1
%32 = zext i1 %31 to i32
%33 = icmp ne i32 %0, %6
%34 = zext i1 %33 to i32
%35 = add nsw i32 %34, %0
%36 = sub i32 %32, %1
%37 = add i32 %36, %35
%38 = sub nsw i32 %35, %4
%39 = icmp ne i32 %2, %5
%40 = zext i1 %39 to i32
%41 = add nsw i32 %40, %2
%42 = icmp ne i32 %3, %7
%43 = sext i1 %42 to i32
%44 = add nsw i32 %43, %3
%45 = sub i32 %41, %44
%46 = sub nsw i32 %5, %44
%47 = icmp slt i32 %38, %37
%48 = select i1 %47, i32 %37, i32 %38
%49 = icmp slt i32 %46, %45
%50 = select i1 %49, i32 %45, i32 %46
%51 = icmp sgt i32 %37, -1
%52 = icmp sgt i32 %45, -1
%53 = select i1 %51, i1 %52, i1 false
%54 = icmp sgt i32 %48, -1
%55 = select i1 %53, i1 %54, i1 false
%56 = icmp sgt i32 %50, -1
%57 = select i1 %55, i1 %56, i1 false
br i1 %57, label %58, label %74
58: ; preds = %30
%59 = icmp ult i32 %37, 3
%60 = icmp ult i32 %45, 6
%61 = select i1 %59, i1 %60, i1 false
br i1 %61, label %66, label %62
62: ; preds = %58
%63 = icmp ult i32 %37, 6
%64 = icmp ult i32 %45, 3
%65 = select i1 %63, i1 %64, i1 false
br i1 %65, label %66, label %74
66: ; preds = %62, %58
%67 = icmp ult i32 %37, %45
%68 = select i1 %67, i32 %37, i32 %45
store i32 %68, i32* %12
%69 = icmp ult i32 %48, %50
%70 = select i1 %69, i32 %50, i32 %48
store i32 %70, i32* %13
%71 = load i32, i32* %12
%72 = icmp sle i32 %71, %70
%73 = zext i1 %72 to i32
br label %74
74: ; preds = %30, %62, %66, %18, %14
%75 = phi i32 [ 0, %14 ], [ 0, %18 ], [ %73, %66 ], [ 0, %62 ], [ 0, %30 ]
ret i32 %75
}