void silk_apply_sine_window_FLP(float px_win[], const float px[],
                                const int win_type, const int length) {
  int k;
  float freq, c, S0, S1;
  ;
  ;
  freq = (3.1415926536f) / (length + 1);
  c = 2.0f - freq * freq;
  if (win_type < 2) {
    S0 = 0.0f;
    S1 = freq;
  } else {
    S0 = 1.0f;
    S1 = 0.5f * c;
  }
  for (k = 0; k < length; k += 4) {
    px_win[k + 0] = px[k + 0] * 0.5f * (S0 + S1);
    px_win[k + 1] = px[k + 1] * S1;
    S0 = c * S1 - S0;
    px_win[k + 2] = px[k + 2] * 0.5f * (S1 + S0);
    px_win[k + 3] = px[k + 3] * S0;
    S1 = c * S0 - S1;
  }
}


x86 assembly (clang, -O0):
<silk_apply_sine_window_FLP>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
cvtsi2ss %eax,%xmm1
movss  0xee0(%rip),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x20(%rbp),%xmm0
movss  -0x20(%rbp),%xmm1
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm1,%xmm0
movss  0xeb0(%rip),%xmm1
addss  %xmm1,%xmm0
movss  %xmm0,-0x24(%rbp)
cmpl   $0x2,-0x14(%rbp)
jge    117a <silk_apply_sine_window_FLP+0x7a>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
jmp    1199 <silk_apply_sine_window_FLP+0x99>
movss  0xe8a(%rip),%xmm0
movss  %xmm0,-0x28(%rbp)
movss  0xe79(%rip),%xmm0
mulss  -0x24(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    12d2 <silk_apply_sine_window_FLP+0x1d2>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movss  0xe47(%rip),%xmm0
mulss  (%rax,%rcx,4),%xmm0
movss  -0x28(%rbp),%xmm1
addss  -0x2c(%rbp),%xmm1
mulss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mulss  -0x2c(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x24(%rbp),%xmm0
movss  -0x2c(%rbp),%xmm2
movss  -0x28(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movss  0xdbb(%rip),%xmm0
mulss  (%rax,%rcx,4),%xmm0
movss  -0x2c(%rbp),%xmm1
addss  -0x28(%rbp),%xmm1
mulss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mulss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x24(%rbp),%xmm0
movss  -0x28(%rbp),%xmm2
movss  -0x2c(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x1c(%rbp)
jmp    11a0 <silk_apply_sine_window_FLP+0xa0>
pop    %rbp
ret

x86 assembly (clang, -O2):
<silk_apply_sine_window_FLP>:
test   %ecx,%ecx
jle    11d3 <silk_apply_sine_window_FLP+0xd3>
lea    0x1(%rcx),%eax
cvtsi2ss %eax,%xmm0
movss  0xee9(%rip),%xmm1
divss  %xmm0,%xmm1
movaps %xmm1,%xmm2
mulss  %xmm1,%xmm2
movss  0xeda(%rip),%xmm0
subss  %xmm2,%xmm0
cmp    $0x2,%edx
jl     113f <silk_apply_sine_window_FLP+0x3f>
movss  0xecd(%rip),%xmm1
mulss  %xmm0,%xmm1
xorps  %xmm3,%xmm3
jl     114c <silk_apply_sine_window_FLP+0x4c>
movss  0xec0(%rip),%xmm3
mov    %ecx,%eax
xor    %ecx,%ecx
movss  0xeb0(%rip),%xmm2
nopl   0x0(%rax,%rax,1)
movss  (%rsi,%rcx,4),%xmm4
mulss  %xmm2,%xmm4
movaps %xmm0,%xmm5
mulss  %xmm1,%xmm5
subss  %xmm3,%xmm5
addss  %xmm1,%xmm3
mulss  %xmm4,%xmm3
movss  %xmm3,(%rdi,%rcx,4)
movss  0x4(%rsi,%rcx,4),%xmm3
mulss  %xmm1,%xmm3
movss  %xmm3,0x4(%rdi,%rcx,4)
movss  0x8(%rsi,%rcx,4),%xmm3
mulss  %xmm2,%xmm3
movaps %xmm0,%xmm4
mulss  %xmm5,%xmm4
subss  %xmm1,%xmm4
addss  %xmm5,%xmm1
mulss  %xmm3,%xmm1
movss  %xmm1,0x8(%rdi,%rcx,4)
movss  0xc(%rsi,%rcx,4),%xmm1
mulss  %xmm5,%xmm1
movss  %xmm1,0xc(%rdi,%rcx,4)
add    $0x4,%rcx
movaps %xmm4,%xmm1
movaps %xmm5,%xmm3
cmp    %rax,%rcx
jb     1160 <silk_apply_sine_window_FLP+0x60>
ret

LLVM IR (-O0):
define void @silk_apply_sine_window_FLP(float* %0, float* %1, i32 %2, i32 %3) {
%5 = alloca float*
%6 = alloca float*
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca float
%11 = alloca float
%12 = alloca float
%13 = alloca float
store float* %0, float** %5
store float* %1, float** %6
store i32 %2, i32* %7
store i32 %3, i32* %8
%14 = load i32, i32* %8
%15 = add nsw i32 %14, 1
%16 = sitofp i32 %15 to float
%17 = fdiv float 0x400921FB60000000, %16
store float %17, float* %10
%18 = load float, float* %10
%19 = load float, float* %10
%20 = fneg float %18
%21 = call float @llvm.fmuladd.f32(float %20, float %19, float 2.000000e+00)
store float %21, float* %11
%22 = load i32, i32* %7
%23 = icmp slt i32 %22, 2
br i1 %23, label %24, label %26
24: ; preds = %4
store float 0.000000e+00, float* %12
%25 = load float, float* %10
store float %25, float* %13
br label %29
26: ; preds = %4
store float 1.000000e+00, float* %12
%27 = load float, float* %11
%28 = fmul float 5.000000e-01, %27
store float %28, float* %13
br label %29
29: ; preds = %26, %24
store i32 0, i32* %9
br label %30
30: ; preds = %103, %29
%31 = load i32, i32* %9
%32 = load i32, i32* %8
%33 = icmp slt i32 %31, %32
br i1 %33, label %34, label %106
34: ; preds = %30
%35 = load float*, float** %6
%36 = load i32, i32* %9
%37 = add nsw i32 %36, 0
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds float, float* %35, i64 %38
%40 = load float, float* %39
%41 = fmul float %40, 5.000000e-01
%42 = load float, float* %12
%43 = load float, float* %13
%44 = fadd float %42, %43
%45 = fmul float %41, %44
%46 = load float*, float** %5
%47 = load i32, i32* %9
%48 = add nsw i32 %47, 0
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds float, float* %46, i64 %49
store float %45, float* %50
%51 = load float*, float** %6
%52 = load i32, i32* %9
%53 = add nsw i32 %52, 1
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds float, float* %51, i64 %54
%56 = load float, float* %55
%57 = load float, float* %13
%58 = fmul float %56, %57
%59 = load float*, float** %5
%60 = load i32, i32* %9
%61 = add nsw i32 %60, 1
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds float, float* %59, i64 %62
store float %58, float* %63
%64 = load float, float* %11
%65 = load float, float* %13
%66 = load float, float* %12
%67 = fneg float %66
%68 = call float @llvm.fmuladd.f32(float %64, float %65, float %67)
store float %68, float* %12
%69 = load float*, float** %6
%70 = load i32, i32* %9
%71 = add nsw i32 %70, 2
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds float, float* %69, i64 %72
%74 = load float, float* %73
%75 = fmul float %74, 5.000000e-01
%76 = load float, float* %13
%77 = load float, float* %12
%78 = fadd float %76, %77
%79 = fmul float %75, %78
%80 = load float*, float** %5
%81 = load i32, i32* %9
%82 = add nsw i32 %81, 2
%83 = sext i32 %82 to i64
%84 = getelementptr inbounds float, float* %80, i64 %83
store float %79, float* %84
%85 = load float*, float** %6
%86 = load i32, i32* %9
%87 = add nsw i32 %86, 3
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds float, float* %85, i64 %88
%90 = load float, float* %89
%91 = load float, float* %12
%92 = fmul float %90, %91
%93 = load float*, float** %5
%94 = load i32, i32* %9
%95 = add nsw i32 %94, 3
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds float, float* %93, i64 %96
store float %92, float* %97
%98 = load float, float* %11
%99 = load float, float* %12
%100 = load float, float* %13
%101 = fneg float %100
%102 = call float @llvm.fmuladd.f32(float %98, float %99, float %101)
store float %102, float* %13
br label %103
103: ; preds = %34
%104 = load i32, i32* %9
%105 = add nsw i32 %104, 4
store i32 %105, i32* %9
br label %30
106: ; preds = %30
ret void
}

LLVM IR (-O2):
define void @silk_apply_sine_window_FLP(float* nocapture writeonly %0, float* nocapture %1, i32 %2, i32 %3) {
%5 = add nsw i32 %3, 1
%6 = sitofp i32 %5 to float
%7 = fdiv float 0x400921FB60000000, %6
%8 = fneg float %7
%9 = tail call float @llvm.fmuladd.f32(float %8, float %7, float 2.000000e+00)
%10 = icmp slt i32 %2, 2
%11 = icmp sgt i32 %3, 0
br i1 %11, label %12, label %50
12: ; preds = %4
%13 = fmul float %9, 5.000000e-01
%14 = select i1 %10, float %7, float %13
%15 = select i1 %10, float 0.000000e+00, float 1.000000e+00
%16 = zext i32 %3 to i64
br label %17
17: ; preds = %12, %17
%18 = phi i64 [ 0, %12 ], [ %48, %17 ]
%19 = phi float [ %14, %12 ], [ %47, %17 ]
%20 = phi float [ %15, %12 ], [ %33, %17 ]
%21 = getelementptr inbounds float, float* %1, i64 %18
%22 = load float, float* %21
%23 = fmul float %22, 5.000000e-01
%24 = fadd float %20, %19
%25 = fmul float %24, %23
%26 = getelementptr inbounds float, float* %0, i64 %18
store float %25, float* %26
%27 = or i64 %18, 1
%28 = getelementptr inbounds float, float* %1, i64 %27
%29 = load float, float* %28
%30 = fmul float %19, %29
%31 = getelementptr inbounds float, float* %0, i64 %27
store float %30, float* %31
%32 = fneg float %20
%33 = tail call float @llvm.fmuladd.f32(float %9, float %19, float %32)
%34 = or i64 %18, 2
%35 = getelementptr inbounds float, float* %1, i64 %34
%36 = load float, float* %35
%37 = fmul float %36, 5.000000e-01
%38 = fadd float %19, %33
%39 = fmul float %38, %37
%40 = getelementptr inbounds float, float* %0, i64 %34
store float %39, float* %40
%41 = or i64 %18, 3
%42 = getelementptr inbounds float, float* %1, i64 %41
%43 = load float, float* %42
%44 = fmul float %33, %43
%45 = getelementptr inbounds float, float* %0, i64 %41
store float %44, float* %45
%46 = fneg float %19
%47 = tail call float @llvm.fmuladd.f32(float %9, float %33, float %46)
%48 = add nuw nsw i64 %18, 4
%49 = icmp ult i64 %48, %16
br i1 %49, label %17, label %50
50: ; preds = %17, %4
ret void
}