void validate_gamma_table(float gamma_table[256]) {
  int i;
  for (i = 0; i < 256; i++) {
    if (!(gamma_table[i] >= 0.f && gamma_table[i] <= 1.f)) {
      gamma_table[i] = 0.f;
    }
  }
}


x86 assembly (clang, -O0):
<validate_gamma_table>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
cmpl   $0x100,-0xc(%rbp)
jge    1172 <validate_gamma_table+0x72>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jb     114f <validate_gamma_table+0x4f>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movss  0xebb(%rip),%xmm0
ucomiss (%rax,%rcx,4),%xmm0
jae    115f <validate_gamma_table+0x5f>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
xorps  %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
jmp    1164 <validate_gamma_table+0x64>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    110f <validate_gamma_table+0xf>
pop    %rbp
ret

x86 assembly (clang, -O2):
<validate_gamma_table>:
xor    %eax,%eax
movaps 0xef7(%rip),%xmm0
jmp    1120 <validate_gamma_table+0x20>
nopl   0x0(%rax,%rax,1)
add    $0x8,%rax
cmp    $0x100,%rax
je     11db <validate_gamma_table+0xdb>
movups (%rdi,%rax,4),%xmm1
xorps  %xmm2,%xmm2
cmpnleps %xmm1,%xmm2
cmpnleps %xmm0,%xmm1
orps   %xmm2,%xmm1
movd   %xmm1,%ecx
test   $0x1,%cl
je     1142 <validate_gamma_table+0x42>
movl   $0x0,(%rdi,%rax,4)
pextrw $0x2,%xmm1,%ecx
test   $0x1,%cl
je     1154 <validate_gamma_table+0x54>
movl   $0x0,0x4(%rdi,%rax,4)
pextrw $0x4,%xmm1,%ecx
test   $0x1,%cl
je     1166 <validate_gamma_table+0x66>
movl   $0x0,0x8(%rdi,%rax,4)
pextrw $0x6,%xmm1,%ecx
test   $0x1,%cl
je     1178 <validate_gamma_table+0x78>
movl   $0x0,0xc(%rdi,%rax,4)
movups 0x10(%rdi,%rax,4),%xmm1
xorps  %xmm2,%xmm2
cmpnleps %xmm1,%xmm2
cmpnleps %xmm0,%xmm1
orps   %xmm2,%xmm1
movd   %xmm1,%ecx
test   $0x1,%cl
je     119c <validate_gamma_table+0x9c>
movl   $0x0,0x10(%rdi,%rax,4)
pextrw $0x2,%xmm1,%ecx
test   $0x1,%cl
je     11ae <validate_gamma_table+0xae>
movl   $0x0,0x14(%rdi,%rax,4)
pextrw $0x4,%xmm1,%ecx
test   $0x1,%cl
je     11c0 <validate_gamma_table+0xc0>
movl   $0x0,0x18(%rdi,%rax,4)
pextrw $0x6,%xmm1,%ecx
test   $0x1,%cl
je     1110 <validate_gamma_table+0x10>
movl   $0x0,0x1c(%rdi,%rax,4)
jmp    1110 <validate_gamma_table+0x10>
ret

LLVM IR (-O0):
define void @validate_gamma_table(float* %0) {
%2 = alloca float*
%3 = alloca i32
store float* %0, float** %2
store i32 0, i32* %3
br label %4
4: ; preds = %27, %1
%5 = load i32, i32* %3
%6 = icmp slt i32 %5, 256
br i1 %6, label %7, label %30
7: ; preds = %4
%8 = load float*, float** %2
%9 = load i32, i32* %3
%10 = sext i32 %9 to i64
%11 = getelementptr inbounds float, float* %8, i64 %10
%12 = load float, float* %11
%13 = fcmp oge float %12, 0.000000e+00
br i1 %13, label %14, label %21
14: ; preds = %7
%15 = load float*, float** %2
%16 = load i32, i32* %3
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds float, float* %15, i64 %17
%19 = load float, float* %18
%20 = fcmp ole float %19, 1.000000e+00
br i1 %20, label %26, label %21
21: ; preds = %14, %7
%22 = load float*, float** %2
%23 = load i32, i32* %3
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds float, float* %22, i64 %24
store float 0.000000e+00, float* %25
br label %26
26: ; preds = %21, %14
br label %27
27: ; preds = %26
%28 = load i32, i32* %3
%29 = add nsw i32 %28, 1
store i32 %29, i32* %3
br label %4
30: ; preds = %4
ret void
}

LLVM IR (-O2):
define void @validate_gamma_table(float* nocapture %0) {
br label %2
2: ; preds = %54, %1
%3 = phi i64 [ 0, %1 ], [ %55, %54 ]
%4 = or i64 %3, 4
%5 = getelementptr inbounds float, float* %0, i64 %3
%6 = bitcast float* %5 to <4 x float>*
%7 = load <4 x float>, <4 x float>* %6
%8 = getelementptr inbounds float, float* %5, i64 4
%9 = bitcast float* %8 to <4 x float>*
%10 = load <4 x float>, <4 x float>* %9
%11 = fcmp ult <4 x float> %7, zeroinitializer
%12 = fcmp ult <4 x float> %10, zeroinitializer
%13 = fcmp ugt <4 x float> %7, <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
%14 = fcmp ugt <4 x float> %10, <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
%15 = or <4 x i1> %11, %13
%16 = or <4 x i1> %12, %14
%17 = extractelement <4 x i1> %15, i64 0
br i1 %17, label %18, label %20
18: ; preds = %2
%19 = getelementptr inbounds float, float* %0, i64 %3
store float 0.000000e+00, float* %19
br label %20
20: ; preds = %18, %2
%21 = extractelement <4 x i1> %15, i64 1
br i1 %21, label %22, label %25
22: ; preds = %20
%23 = or i64 %3, 1
%24 = getelementptr inbounds float, float* %0, i64 %23
store float 0.000000e+00, float* %24
br label %25
25: ; preds = %22, %20
%26 = extractelement <4 x i1> %15, i64 2
br i1 %26, label %27, label %30
27: ; preds = %25
%28 = or i64 %3, 2
%29 = getelementptr inbounds float, float* %0, i64 %28
store float 0.000000e+00, float* %29
br label %30
30: ; preds = %27, %25
%31 = extractelement <4 x i1> %15, i64 3
br i1 %31, label %32, label %35
32: ; preds = %30
%33 = or i64 %3, 3
%34 = getelementptr inbounds float, float* %0, i64 %33
store float 0.000000e+00, float* %34
br label %35
35: ; preds = %32, %30
%36 = extractelement <4 x i1> %16, i64 0
br i1 %36, label %37, label %39
37: ; preds = %35
%38 = getelementptr inbounds float, float* %0, i64 %4
store float 0.000000e+00, float* %38
br label %39
39: ; preds = %37, %35
%40 = extractelement <4 x i1> %16, i64 1
br i1 %40, label %41, label %44
41: ; preds = %39
%42 = or i64 %3, 5
%43 = getelementptr inbounds float, float* %0, i64 %42
store float 0.000000e+00, float* %43
br label %44
44: ; preds = %41, %39
%45 = extractelement <4 x i1> %16, i64 2
br i1 %45, label %46, label %49
46: ; preds = %44
%47 = or i64 %3, 6
%48 = getelementptr inbounds float, float* %0, i64 %47
store float 0.000000e+00, float* %48
br label %49
49: ; preds = %46, %44
%50 = extractelement <4 x i1> %16, i64 3
br i1 %50, label %51, label %54
51: ; preds = %49
%52 = or i64 %3, 7
%53 = getelementptr inbounds float, float* %0, i64 %52
store float 0.000000e+00, float* %53
br label %54
54: ; preds = %51, %49
%55 = add nuw i64 %3, 8
%56 = icmp eq i64 %55, 256
br i1 %56, label %57, label %2
57: ; preds = %54
ret void
}