void drmp3_L3_intensity_stereo_band(float *left, int n, float kl, float kr) {
  int i;
  for (i = 0; i < n; i++) {
    left[i + 576] = left[i] * kr;
    left[i] = left[i] * kl;
  }
}


x86 assembly (clang, -O0):
<drmp3_L3_intensity_stereo_band>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movss  %xmm0,-0x10(%rbp)
movss  %xmm1,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    117c <drmp3_L3_intensity_stereo_band+0x7c>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mulss  -0x14(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x240,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mulss  -0x10(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    111c <drmp3_L3_intensity_stereo_band+0x1c>
pop    %rbp
ret

x86 assembly (clang, -O2):
<drmp3_L3_intensity_stereo_band>:
test   %esi,%esi
jle    11d7 <drmp3_L3_intensity_stereo_band+0xd7>
mov    %esi,%eax
cmp    $0x4,%esi
jae    1116 <drmp3_L3_intensity_stereo_band+0x16>
xor    %ecx,%ecx
jmp    11b0 <drmp3_L3_intensity_stereo_band+0xb0>
mov    %eax,%ecx
and    $0xfffffffc,%ecx
movaps %xmm1,%xmm3
shufps $0x0,%xmm1,%xmm3
movaps %xmm0,%xmm2
shufps $0x0,%xmm0,%xmm2
lea    -0x4(%rcx),%rdx
mov    %rdx,%r8
shr    $0x2,%r8
add    $0x1,%r8
test   %rdx,%rdx
je     11d8 <drmp3_L3_intensity_stereo_band+0xd8>
mov    %r8,%rdx
and    $0xfffffffffffffffe,%rdx
xor    %esi,%esi
nopw   0x0(%rax,%rax,1)
movups (%rdi,%rsi,4),%xmm4
movups 0x10(%rdi,%rsi,4),%xmm5
movaps %xmm4,%xmm6
mulps  %xmm3,%xmm6
movups %xmm6,0x900(%rdi,%rsi,4)
mulps  %xmm2,%xmm4
movups %xmm4,(%rdi,%rsi,4)
movaps %xmm5,%xmm4
mulps  %xmm3,%xmm4
movups %xmm4,0x910(%rdi,%rsi,4)
mulps  %xmm2,%xmm5
movups %xmm5,0x10(%rdi,%rsi,4)
add    $0x8,%rsi
add    $0xfffffffffffffffe,%rdx
jne    1150 <drmp3_L3_intensity_stereo_band+0x50>
test   $0x1,%r8b
je     11aa <drmp3_L3_intensity_stereo_band+0xaa>
movups (%rdi,%rsi,4),%xmm4
mulps  %xmm4,%xmm3
movups %xmm3,0x900(%rdi,%rsi,4)
mulps  %xmm4,%xmm2
movups %xmm2,(%rdi,%rsi,4)
cmp    %rax,%rcx
je     11d7 <drmp3_L3_intensity_stereo_band+0xd7>
nop
movss  (%rdi,%rcx,4),%xmm2
movaps %xmm2,%xmm3
mulss  %xmm1,%xmm3
movss  %xmm3,0x900(%rdi,%rcx,4)
mulss  %xmm0,%xmm2
movss  %xmm2,(%rdi,%rcx,4)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    11b0 <drmp3_L3_intensity_stereo_band+0xb0>
ret
xor    %esi,%esi
test   $0x1,%r8b
jne    1194 <drmp3_L3_intensity_stereo_band+0x94>
jmp    11aa <drmp3_L3_intensity_stereo_band+0xaa>

LLVM IR (-O0):
define void @drmp3_L3_intensity_stereo_band(float* %0, i32 %1, float %2, float %3) {
%5 = alloca float*
%6 = alloca i32
%7 = alloca float
%8 = alloca float
%9 = alloca i32
store float* %0, float** %5
store i32 %1, i32* %6
store float %2, float* %7
store float %3, float* %8
store i32 0, i32* %9
br label %10
10: ; preds = %38, %4
%11 = load i32, i32* %9
%12 = load i32, i32* %6
%13 = icmp slt i32 %11, %12
br i1 %13, label %14, label %41
14: ; preds = %10
%15 = load float*, float** %5
%16 = load i32, i32* %9
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds float, float* %15, i64 %17
%19 = load float, float* %18
%20 = load float, float* %8
%21 = fmul float %19, %20
%22 = load float*, float** %5
%23 = load i32, i32* %9
%24 = add nsw i32 %23, 576
%25 = sext i32 %24 to i64
%26 = getelementptr inbounds float, float* %22, i64 %25
store float %21, float* %26
%27 = load float*, float** %5
%28 = load i32, i32* %9
%29 = sext i32 %28 to i64
%30 = getelementptr inbounds float, float* %27, i64 %29
%31 = load float, float* %30
%32 = load float, float* %7
%33 = fmul float %31, %32
%34 = load float*, float** %5
%35 = load i32, i32* %9
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds float, float* %34, i64 %36
store float %33, float* %37
br label %38
38: ; preds = %14
%39 = load i32, i32* %9
%40 = add nsw i32 %39, 1
store i32 %40, i32* %9
br label %10
41: ; preds = %10
ret void
}

LLVM IR (-O2):
define void @drmp3_L3_intensity_stereo_band(float* nocapture %0, i32 %1, float %2, float %3) {
%5 = icmp sgt i32 %1, 0
br i1 %5, label %6, label %74
6: ; preds = %4
%7 = zext i32 %1 to i64
%8 = icmp ult i32 %1, 4
br i1 %8, label %62, label %9
9: ; preds = %6
%10 = and i64 %7, 4294967292
%11 = insertelement <4 x float> poison, float %3, i64 0
%12 = shufflevector <4 x float> %11, <4 x float> poison, <4 x i32> zeroinitializer
%13 = insertelement <4 x float> poison, float %2, i64 0
%14 = shufflevector <4 x float> %13, <4 x float> poison, <4 x i32> zeroinitializer
%15 = add nsw i64 %10, -4
%16 = lshr exact i64 %15, 2
%17 = add nuw nsw i64 %16, 1
%18 = and i64 %17, 1
%19 = icmp eq i64 %15, 0
br i1 %19, label %47, label %20
20: ; preds = %9
%21 = and i64 %17, 9223372036854775806
br label %22
22: ; preds = %22, %20
%23 = phi i64 [ 0, %20 ], [ %44, %22 ]
%24 = phi i64 [ 0, %20 ], [ %45, %22 ]
%25 = getelementptr inbounds float, float* %0, i64 %23
%26 = bitcast float* %25 to <4 x float>*
%27 = load <4 x float>, <4 x float>* %26
%28 = fmul <4 x float> %27, %12
%29 = add nuw nsw i64 %23, 576
%30 = getelementptr inbounds float, float* %0, i64 %29
%31 = bitcast float* %30 to <4 x float>*
store <4 x float> %28, <4 x float>* %31
%32 = fmul <4 x float> %27, %14
%33 = bitcast float* %25 to <4 x float>*
store <4 x float> %32, <4 x float>* %33
%34 = or i64 %23, 4
%35 = getelementptr inbounds float, float* %0, i64 %34
%36 = bitcast float* %35 to <4 x float>*
%37 = load <4 x float>, <4 x float>* %36
%38 = fmul <4 x float> %37, %12
%39 = add nuw nsw i64 %23, 580
%40 = getelementptr inbounds float, float* %0, i64 %39
%41 = bitcast float* %40 to <4 x float>*
store <4 x float> %38, <4 x float>* %41
%42 = fmul <4 x float> %37, %14
%43 = bitcast float* %35 to <4 x float>*
store <4 x float> %42, <4 x float>* %43
%44 = add nuw i64 %23, 8
%45 = add i64 %24, 2
%46 = icmp eq i64 %45, %21
br i1 %46, label %47, label %22
47: ; preds = %22, %9
%48 = phi i64 [ 0, %9 ], [ %44, %22 ]
%49 = icmp eq i64 %18, 0
br i1 %49, label %60, label %50
50: ; preds = %47
%51 = getelementptr inbounds float, float* %0, i64 %48
%52 = bitcast float* %51 to <4 x float>*
%53 = load <4 x float>, <4 x float>* %52
%54 = fmul <4 x float> %53, %12
%55 = add nuw nsw i64 %48, 576
%56 = getelementptr inbounds float, float* %0, i64 %55
%57 = bitcast float* %56 to <4 x float>*
store <4 x float> %54, <4 x float>* %57
%58 = fmul <4 x float> %53, %14
%59 = bitcast float* %51 to <4 x float>*
store <4 x float> %58, <4 x float>* %59
br label %60
60: ; preds = %47, %50
%61 = icmp eq i64 %10, %7
br i1 %61, label %74, label %62
62: ; preds = %6, %60
%63 = phi i64 [ 0, %6 ], [ %10, %60 ]
br label %64
64: ; preds = %62, %64
%65 = phi i64 [ %72, %64 ], [ %63, %62 ]
%66 = getelementptr inbounds float, float* %0, i64 %65
%67 = load float, float* %66
%68 = fmul float %67, %3
%69 = add nuw nsw i64 %65, 576
%70 = getelementptr inbounds float, float* %0, i64 %69
store float %68, float* %70
%71 = fmul float %67, %2
store float %71, float* %66
%72 = add nuw nsw i64 %65, 1
%73 = icmp eq i64 %72, %7
br i1 %73, label %74, label %64
74: ; preds = %64, %60, %4
ret void
}