void GenBoxFiltrLUT(int LUTsiz, float *p_LUT0, float *p_LUT1) {
  int i;
  for (i = 0; i < LUTsiz; i++)
    p_LUT0[i] = p_LUT1[i] = i;
}


x86 assembly (clang, -O0):
<GenBoxFiltrLUT>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    114f <GenBoxFiltrLUT+0x4f>
cvtsi2ssl -0x1c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1116 <GenBoxFiltrLUT+0x16>
pop    %rbp
ret

x86 assembly (clang, -O2):
<GenBoxFiltrLUT>:
test   %edi,%edi
jle    12a7 <GenBoxFiltrLUT+0x1a7>
mov    %edi,%r9d
cmp    $0x8,%edi
jb     112a <GenBoxFiltrLUT+0x2a>
lea    (%rsi,%r9,4),%rax
cmp    %rdx,%rax
jbe    11d1 <GenBoxFiltrLUT+0xd1>
lea    (%rdx,%r9,4),%rax
cmp    %rsi,%rax
jbe    11d1 <GenBoxFiltrLUT+0xd1>
xor    %ecx,%ecx
mov    %rcx,%rax
not    %rax
add    %r9,%rax
mov    %r9,%rdi
and    $0x3,%rdi
je     115b <GenBoxFiltrLUT+0x5b>
xchg   %ax,%ax
xorps  %xmm0,%xmm0
cvtsi2ss %ecx,%xmm0
movss  %xmm0,(%rdx,%rcx,4)
movss  %xmm0,(%rsi,%rcx,4)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rdi
jne    1140 <GenBoxFiltrLUT+0x40>
cmp    $0x3,%rax
jb     12a7 <GenBoxFiltrLUT+0x1a7>
cs nopw 0x0(%rax,%rax,1)
nop
xorps  %xmm0,%xmm0
cvtsi2ss %ecx,%xmm0
movss  %xmm0,(%rdx,%rcx,4)
movss  %xmm0,(%rsi,%rcx,4)
lea    0x1(%rcx),%eax
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
lea    0x2(%rcx),%eax
xorps  %xmm1,%xmm1
cvtsi2ss %eax,%xmm1
movss  %xmm0,0x4(%rdx,%rcx,4)
movss  %xmm0,0x4(%rsi,%rcx,4)
movss  %xmm1,0x8(%rdx,%rcx,4)
movss  %xmm1,0x8(%rsi,%rcx,4)
lea    0x3(%rcx),%eax
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
movss  %xmm0,0xc(%rdx,%rcx,4)
movss  %xmm0,0xc(%rsi,%rcx,4)
add    $0x4,%rcx
cmp    %r9,%rcx
jne    1170 <GenBoxFiltrLUT+0x70>
jmp    12a7 <GenBoxFiltrLUT+0x1a7>
mov    %r9d,%ecx
and    $0xfffffff8,%ecx
lea    -0x8(%rcx),%rax
mov    %rax,%r8
shr    $0x3,%r8
add    $0x1,%r8
test   %rax,%rax
je     12a8 <GenBoxFiltrLUT+0x1a8>
mov    %r8,%rax
and    $0xfffffffffffffffe,%rax
movdqa 0xe02(%rip),%xmm0
xor    %edi,%edi
movdqa 0xe08(%rip),%xmm1
movdqa 0xe10(%rip),%xmm2
movdqa 0xe18(%rip),%xmm3
movdqa 0xe20(%rip),%xmm4
movdqa %xmm0,%xmm5
paddd  %xmm1,%xmm5
cvtdq2ps %xmm0,%xmm6
cvtdq2ps %xmm5,%xmm5
movups %xmm6,(%rdx,%rdi,4)
movups %xmm5,0x10(%rdx,%rdi,4)
movups %xmm6,(%rsi,%rdi,4)
movups %xmm5,0x10(%rsi,%rdi,4)
movdqa %xmm0,%xmm5
paddd  %xmm2,%xmm5
movdqa %xmm0,%xmm6
paddd  %xmm3,%xmm6
cvtdq2ps %xmm5,%xmm5
cvtdq2ps %xmm6,%xmm6
movups %xmm5,0x20(%rdx,%rdi,4)
movups %xmm6,0x30(%rdx,%rdi,4)
movups %xmm5,0x20(%rsi,%rdi,4)
movups %xmm6,0x30(%rsi,%rdi,4)
add    $0x10,%rdi
paddd  %xmm4,%xmm0
add    $0xfffffffffffffffe,%rax
jne    1220 <GenBoxFiltrLUT+0x120>
test   $0x1,%r8b
je     129e <GenBoxFiltrLUT+0x19e>
cvtdq2ps %xmm0,%xmm1
paddd  0xd87(%rip),%xmm0
cvtdq2ps %xmm0,%xmm0
movups %xmm1,(%rdx,%rdi,4)
movups %xmm0,0x10(%rdx,%rdi,4)
movups %xmm1,(%rsi,%rdi,4)
movups %xmm0,0x10(%rsi,%rdi,4)
cmp    %r9,%rcx
jne    112c <GenBoxFiltrLUT+0x2c>
ret
movdqa 0xd50(%rip),%xmm0
xor    %edi,%edi
test   $0x1,%r8b
jne    127e <GenBoxFiltrLUT+0x17e>
jmp    129e <GenBoxFiltrLUT+0x19e>

LLVM IR (-O0):
define void @GenBoxFiltrLUT(i32 %0, float* %1, float* %2) {
%4 = alloca i32
%5 = alloca float*
%6 = alloca float*
%7 = alloca i32
store i32 %0, i32* %4
store float* %1, float** %5
store float* %2, float** %6
store i32 0, i32* %7
br label %8
8: ; preds = %23, %3
%9 = load i32, i32* %7
%10 = load i32, i32* %4
%11 = icmp slt i32 %9, %10
br i1 %11, label %12, label %26
12: ; preds = %8
%13 = load i32, i32* %7
%14 = sitofp i32 %13 to float
%15 = load float*, float** %6
%16 = load i32, i32* %7
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds float, float* %15, i64 %17
store float %14, float* %18
%19 = load float*, float** %5
%20 = load i32, i32* %7
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds float, float* %19, i64 %21
store float %14, float* %22
br label %23
23: ; preds = %12
%24 = load i32, i32* %7
%25 = add nsw i32 %24, 1
store i32 %25, i32* %7
br label %8
26: ; preds = %8
ret void
}

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