void drmp3_L3_change_sign(float *grbuf) {
  int b, i;
  for (b = 0, grbuf += 18; b < 32; b += 2, grbuf += 36)
    for (i = 1; i < 18; i += 2)
      grbuf[i] = -grbuf[i];
}


x86 assembly (clang, -O0):
<drmp3_L3_change_sign>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0x8(%rbp),%rax
add    $0x48,%rax
mov    %rax,-0x8(%rbp)
cmpl   $0x20,-0xc(%rbp)
jge    118c <drmp3_L3_change_sign+0x8c>
movl   $0x1,-0x10(%rbp)
cmpl   $0x12,-0x10(%rbp)
jge    116b <drmp3_L3_change_sign+0x6b>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x10(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x10(%rbp)
jmp    112c <drmp3_L3_change_sign+0x2c>
jmp    1170 <drmp3_L3_change_sign+0x70>
mov    -0xc(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
add    $0x90,%rax
mov    %rax,-0x8(%rbp)
jmp    111b <drmp3_L3_change_sign+0x1b>
pop    %rbp
ret

x86 assembly (clang, -O2):
<drmp3_L3_change_sign>:
add    $0x8c,%rdi
mov    $0xfffffffe,%eax
movaps 0xeed(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movss  -0x40(%rdi),%xmm1
movss  -0x38(%rdi),%xmm2
movss  -0x30(%rdi),%xmm3
movss  -0x28(%rdi),%xmm4
xorps  %xmm0,%xmm1
movss  %xmm1,-0x40(%rdi)
xorps  %xmm0,%xmm2
movss  %xmm2,-0x38(%rdi)
xorps  %xmm0,%xmm3
movss  %xmm3,-0x30(%rdi)
xorps  %xmm0,%xmm4
movss  %xmm4,-0x28(%rdi)
movss  -0x20(%rdi),%xmm1
xorps  %xmm0,%xmm1
movss  %xmm1,-0x20(%rdi)
movss  -0x18(%rdi),%xmm1
xorps  %xmm0,%xmm1
movss  %xmm1,-0x18(%rdi)
movss  -0x10(%rdi),%xmm1
xorps  %xmm0,%xmm1
movss  %xmm1,-0x10(%rdi)
movss  -0x8(%rdi),%xmm1
xorps  %xmm0,%xmm1
movss  %xmm1,-0x8(%rdi)
movss  (%rdi),%xmm1
xorps  %xmm0,%xmm1
movss  %xmm1,(%rdi)
add    $0x2,%eax
add    $0x90,%rdi
cmp    $0x1e,%eax
jb     1120 <drmp3_L3_change_sign+0x20>
ret

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

LLVM IR (-O2):
define void @drmp3_L3_change_sign(float* nocapture %0) {
%2 = getelementptr inbounds float, float* %0, i64 18
br label %3
3: ; preds = %1, %3
%4 = phi i32 [ 0, %1 ], [ %33, %3 ]
%5 = phi float* [ %2, %1 ], [ %34, %3 ]
%6 = getelementptr inbounds float, float* %5, i64 1
%7 = load float, float* %6
%8 = fneg float %7
store float %8, float* %6
%9 = getelementptr inbounds float, float* %5, i64 3
%10 = load float, float* %9
%11 = fneg float %10
store float %11, float* %9
%12 = getelementptr inbounds float, float* %5, i64 5
%13 = load float, float* %12
%14 = fneg float %13
store float %14, float* %12
%15 = getelementptr inbounds float, float* %5, i64 7
%16 = load float, float* %15
%17 = fneg float %16
store float %17, float* %15
%18 = getelementptr inbounds float, float* %5, i64 9
%19 = load float, float* %18
%20 = fneg float %19
store float %20, float* %18
%21 = getelementptr inbounds float, float* %5, i64 11
%22 = load float, float* %21
%23 = fneg float %22
store float %23, float* %21
%24 = getelementptr inbounds float, float* %5, i64 13
%25 = load float, float* %24
%26 = fneg float %25
store float %26, float* %24
%27 = getelementptr inbounds float, float* %5, i64 15
%28 = load float, float* %27
%29 = fneg float %28
store float %29, float* %27
%30 = getelementptr inbounds float, float* %5, i64 17
%31 = load float, float* %30
%32 = fneg float %31
store float %32, float* %30
%33 = add nuw nsw i32 %4, 2
%34 = getelementptr inbounds float, float* %5, i64 36
%35 = icmp ult i32 %4, 30
br i1 %35, label %3, label %36
36: ; preds = %3
ret void
}