void checkrng(sign, cp, p) unsigned char sign, *cp, *p[4];
{
  static unsigned char maxint = 0xff, minint = 0;
  if (sign == 0) {
    if ((*(cp + 4) & 0200) != 0) {
      p[0] = p[1] = p[2] = p[3] = &maxint;
    } else if (*cp != 0) {
      p[0] = p[1] = p[2] = p[3] = &maxint;
    } else if (*(cp + 1) != 0) {
      p[0] = p[1] = p[2] = p[3] = &maxint;
    } else if (*(cp + 2) != 0) {
      p[0] = p[1] = p[2] = p[3] = &maxint;
    } else if (*(cp + 3) != 0) {
      p[0] = p[1] = p[2] = p[3] = &maxint;
    }
  } else {
    if ((*(cp + 4) & 0200) < 0200 || *cp != 0377 || *(cp + 1) != 0377 ||
        *(cp + 2) != 0377 || *(cp + 3) != 0377)
      p[0] = p[1] = p[2] = p[3] = &minint;
  }
}


x86 assembly (clang, -O0):
<checkrng>:
push   %rbp
mov    %rsp,%rbp
mov    %dil,%al
mov    %al,-0x1(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movzbl -0x1(%rbp),%eax
cmp    $0x0,%eax
jne    12cc <checkrng+0x1cc>
mov    -0x10(%rbp),%rax
movzbl 0x4(%rax),%eax
and    $0x80,%eax
cmp    $0x0,%eax
je     1175 <checkrng+0x75>
mov    -0x18(%rbp),%rax
lea    0x2ee0(%rip),%rcx
mov    %rcx,0x18(%rax)
mov    -0x18(%rbp),%rax
lea    0x2ed1(%rip),%rcx
mov    %rcx,0x10(%rax)
mov    -0x18(%rbp),%rax
lea    0x2ec2(%rip),%rcx
mov    %rcx,0x8(%rax)
mov    -0x18(%rbp),%rax
lea    0x2eb3(%rip),%rcx
mov    %rcx,(%rax)
jmp    12c7 <checkrng+0x1c7>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x0,%eax
je     11c5 <checkrng+0xc5>
mov    -0x18(%rbp),%rax
lea    0x2e90(%rip),%rcx
mov    %rcx,0x18(%rax)
mov    -0x18(%rbp),%rax
lea    0x2e81(%rip),%rcx
mov    %rcx,0x10(%rax)
mov    -0x18(%rbp),%rax
lea    0x2e72(%rip),%rcx
mov    %rcx,0x8(%rax)
mov    -0x18(%rbp),%rax
lea    0x2e63(%rip),%rcx
mov    %rcx,(%rax)
jmp    12c2 <checkrng+0x1c2>
mov    -0x10(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     1216 <checkrng+0x116>
mov    -0x18(%rbp),%rax
lea    0x2e3f(%rip),%rcx
mov    %rcx,0x18(%rax)
mov    -0x18(%rbp),%rax
lea    0x2e30(%rip),%rcx
mov    %rcx,0x10(%rax)
mov    -0x18(%rbp),%rax
lea    0x2e21(%rip),%rcx
mov    %rcx,0x8(%rax)
mov    -0x18(%rbp),%rax
lea    0x2e12(%rip),%rcx
mov    %rcx,(%rax)
jmp    12bd <checkrng+0x1bd>
mov    -0x10(%rbp),%rax
movzbl 0x2(%rax),%eax
cmp    $0x0,%eax
je     1267 <checkrng+0x167>
mov    -0x18(%rbp),%rax
lea    0x2dee(%rip),%rcx
mov    %rcx,0x18(%rax)
mov    -0x18(%rbp),%rax
lea    0x2ddf(%rip),%rcx
mov    %rcx,0x10(%rax)
mov    -0x18(%rbp),%rax
lea    0x2dd0(%rip),%rcx
mov    %rcx,0x8(%rax)
mov    -0x18(%rbp),%rax
lea    0x2dc1(%rip),%rcx
mov    %rcx,(%rax)
jmp    12b8 <checkrng+0x1b8>
mov    -0x10(%rbp),%rax
movzbl 0x3(%rax),%eax
cmp    $0x0,%eax
je     12b3 <checkrng+0x1b3>
mov    -0x18(%rbp),%rax
lea    0x2d9d(%rip),%rcx
mov    %rcx,0x18(%rax)
mov    -0x18(%rbp),%rax
lea    0x2d8e(%rip),%rcx
mov    %rcx,0x10(%rax)
mov    -0x18(%rbp),%rax
lea    0x2d7f(%rip),%rcx
mov    %rcx,0x8(%rax)
mov    -0x18(%rbp),%rax
lea    0x2d70(%rip),%rcx
mov    %rcx,(%rax)
jmp    12b8 <checkrng+0x1b8>
jmp    12bd <checkrng+0x1bd>
jmp    12c2 <checkrng+0x1c2>
jmp    12c7 <checkrng+0x1c7>
jmp    136f <checkrng+0x26f>
mov    -0x10(%rbp),%rax
movzbl 0x4(%rax),%eax
and    $0x80,%eax
cmp    $0x80,%eax
jl     132f <checkrng+0x22f>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0xff,%eax
jne    132f <checkrng+0x22f>
mov    -0x10(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0xff,%eax
jne    132f <checkrng+0x22f>
mov    -0x10(%rbp),%rax
movzbl 0x2(%rax),%eax
cmp    $0xff,%eax
jne    132f <checkrng+0x22f>
mov    -0x10(%rbp),%rax
movzbl 0x3(%rax),%eax
cmp    $0xff,%eax
je     136a <checkrng+0x26a>
mov    -0x18(%rbp),%rax
lea    0x2ce8(%rip),%rcx
mov    %rcx,0x18(%rax)
mov    -0x18(%rbp),%rax
lea    0x2cd9(%rip),%rcx
mov    %rcx,0x10(%rax)
mov    -0x18(%rbp),%rax
lea    0x2cca(%rip),%rcx
mov    %rcx,0x8(%rax)
mov    -0x18(%rbp),%rax
lea    0x2cbb(%rip),%rcx
mov    %rcx,(%rax)
jmp    136f <checkrng+0x26f>
pop    %rbp
ret

x86 assembly (clang, -O2):
<checkrng>:
mov    0x4(%rsi),%cl
test   %dil,%dil
je     112c <checkrng+0x2c>
lea    0x2f13(%rip),%rax
test   %cl,%cl
jns    114e <checkrng+0x4e>
cmpb   $0xff,(%rsi)
jne    114e <checkrng+0x4e>
cmpb   $0xff,0x1(%rsi)
jne    114e <checkrng+0x4e>
cmpb   $0xff,0x2(%rsi)
jne    114e <checkrng+0x4e>
cmpb   $0xff,0x3(%rsi)
jne    114e <checkrng+0x4e>
jmp    115d <checkrng+0x5d>
lea    0x2eed(%rip),%rax
test   %cl,%cl
js     114e <checkrng+0x4e>
cmpb   $0x0,(%rsi)
jne    114e <checkrng+0x4e>
cmpb   $0x0,0x1(%rsi)
jne    114e <checkrng+0x4e>
cmpb   $0x0,0x2(%rsi)
jne    114e <checkrng+0x4e>
cmpb   $0x0,0x3(%rsi)
je     115d <checkrng+0x5d>
mov    %rax,0x18(%rdx)
mov    %rax,0x10(%rdx)
mov    %rax,0x8(%rdx)
mov    %rax,(%rdx)
ret

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

LLVM IR (-O2):
@checkrng.maxint = internal global i8 -1
@checkrng.minint = internal global i8 0
define void @checkrng(i32 %0, i8* nocapture %1, i8** writeonly %2) {
%4 = and i32 %0, 255
%5 = icmp eq i32 %4, 0
%6 = getelementptr inbounds i8, i8* %1, i64 4
%7 = load i8, i8* %6
br i1 %5, label %8, label %25
8: ; preds = %3
%9 = icmp sgt i8 %7, -1
br i1 %9, label %10, label %42
10: ; preds = %8
%11 = load i8, i8* %1
%12 = icmp eq i8 %11, 0
br i1 %12, label %13, label %42
13: ; preds = %10
%14 = getelementptr inbounds i8, i8* %1, i64 1
%15 = load i8, i8* %14
%16 = icmp eq i8 %15, 0
br i1 %16, label %17, label %42
17: ; preds = %13
%18 = getelementptr inbounds i8, i8* %1, i64 2
%19 = load i8, i8* %18
%20 = icmp eq i8 %19, 0
br i1 %20, label %21, label %42
21: ; preds = %17
%22 = getelementptr inbounds i8, i8* %1, i64 3
%23 = load i8, i8* %22
%24 = icmp eq i8 %23, 0
br i1 %24, label %47, label %42
25: ; preds = %3
%26 = icmp slt i8 %7, 0
br i1 %26, label %27, label %42
27: ; preds = %25
%28 = load i8, i8* %1
%29 = icmp eq i8 %28, -1
br i1 %29, label %30, label %42
30: ; preds = %27
%31 = getelementptr inbounds i8, i8* %1, i64 1
%32 = load i8, i8* %31
%33 = icmp eq i8 %32, -1
br i1 %33, label %34, label %42
34: ; preds = %30
%35 = getelementptr inbounds i8, i8* %1, i64 2
%36 = load i8, i8* %35
%37 = icmp eq i8 %36, -1
br i1 %37, label %38, label %42
38: ; preds = %34
%39 = getelementptr inbounds i8, i8* %1, i64 3
%40 = load i8, i8* %39
%41 = icmp eq i8 %40, -1
br i1 %41, label %47, label %42
42: ; preds = %25, %27, %30, %34, %38, %21, %17, %13, %10, %8
%43 = phi i8* [ @checkrng.maxint, %8 ], [ @checkrng.maxint, %10 ], [ @checkrng.maxint, %13 ], [ @checkrng.maxint, %17 ], [ @checkrng.maxint, %21 ], [ @checkrng.minint, %38 ], [ @checkrng.minint, %34 ], [ @checkrng.minint, %30 ], [ @checkrng.minint, %27 ], [ @checkrng.minint, %25 ]
%44 = getelementptr inbounds i8*, i8** %2, i64 3
store i8* %43, i8** %44
%45 = getelementptr inbounds i8*, i8** %2, i64 2
store i8* %43, i8** %45
%46 = getelementptr inbounds i8*, i8** %2, i64 1
store i8* %43, i8** %46
store i8* %43, i8** %2
br label %47
47: ; preds = %42, %38, %21
ret void
}