void INDIR1(int inf, int sup, float *sig_float) {
  int i, j, k;
  float tmp;
  j = (int)((sup - inf + 1) / 2) + inf - 1;
  for (i = inf, k = 0; i <= j; i++, k++) {
    tmp = sig_float[i];
    sig_float[i] = sig_float[sup - k];
    sig_float[sup - k] = tmp;
  }
}


x86 assembly (clang, -O0):
<INDIR1>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    -0x8(%rbp),%eax
sub    -0x4(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
add    -0x4(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x14(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x18(%rbp),%eax
jg     11a0 <INDIR1+0xa0>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x8(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x20(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x8(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1135 <INDIR1+0x35>
pop    %rbp
ret

x86 assembly (clang, -O2):
<INDIR1>:
mov    %esi,%ecx
sub    %edi,%ecx
add    $0x1,%ecx
cmp    $0x2,%ecx
jl     113f <INDIR1+0x3f>
shr    %ecx
add    %edi,%ecx
movslq %edi,%rax
movslq %ecx,%rcx
movslq %esi,%rsi
lea    (%rdx,%rsi,4),%rsi
nopl   (%rax)
movss  (%rdx,%rax,4),%xmm0
movss  (%rsi),%xmm1
movss  %xmm1,(%rdx,%rax,4)
movss  %xmm0,(%rsi)
add    $0x1,%rax
add    $0xfffffffffffffffc,%rsi
cmp    %rcx,%rax
jl     1120 <INDIR1+0x20>
ret

LLVM IR (-O0):
define void @INDIR1(i32 %0, i32 %1, float* %2) {
%4 = alloca i32
%5 = alloca i32
%6 = alloca float*
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca float
store i32 %0, i32* %4
store i32 %1, i32* %5
store float* %2, float** %6
%11 = load i32, i32* %5
%12 = load i32, i32* %4
%13 = sub nsw i32 %11, %12
%14 = add nsw i32 %13, 1
%15 = sdiv i32 %14, 2
%16 = load i32, i32* %4
%17 = add nsw i32 %15, %16
%18 = sub nsw i32 %17, 1
store i32 %18, i32* %8
%19 = load i32, i32* %4
store i32 %19, i32* %7
store i32 0, i32* %9
br label %20
20: ; preds = %48, %3
%21 = load i32, i32* %7
%22 = load i32, i32* %8
%23 = icmp sle i32 %21, %22
br i1 %23, label %24, label %53
24: ; preds = %20
%25 = load float*, float** %6
%26 = load i32, i32* %7
%27 = sext i32 %26 to i64
%28 = getelementptr inbounds float, float* %25, i64 %27
%29 = load float, float* %28
store float %29, float* %10
%30 = load float*, float** %6
%31 = load i32, i32* %5
%32 = load i32, i32* %9
%33 = sub nsw i32 %31, %32
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds float, float* %30, i64 %34
%36 = load float, float* %35
%37 = load float*, float** %6
%38 = load i32, i32* %7
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds float, float* %37, i64 %39
store float %36, float* %40
%41 = load float, float* %10
%42 = load float*, float** %6
%43 = load i32, i32* %5
%44 = load i32, i32* %9
%45 = sub nsw i32 %43, %44
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds float, float* %42, i64 %46
store float %41, float* %47
br label %48
48: ; preds = %24
%49 = load i32, i32* %7
%50 = add nsw i32 %49, 1
store i32 %50, i32* %7
%51 = load i32, i32* %9
%52 = add nsw i32 %51, 1
store i32 %52, i32* %9
br label %20
53: ; preds = %20
ret void
}

LLVM IR (-O2):
define void @INDIR1(i32 %0, i32 %1, float* nocapture %2) {
%4 = sub i32 1, %0
%5 = add i32 %4, %1
%6 = icmp sgt i32 %5, 1
br i1 %6, label %7, label %24
7: ; preds = %3
%8 = lshr i32 %5, 1
%9 = add nsw i32 %8, %0
%10 = sext i32 %0 to i64
%11 = sext i32 %9 to i64
%12 = sext i32 %1 to i64
br label %13
13: ; preds = %7, %13
%14 = phi i64 [ 0, %7 ], [ %22, %13 ]
%15 = phi i64 [ %10, %7 ], [ %21, %13 ]
%16 = getelementptr inbounds float, float* %2, i64 %15
%17 = load float, float* %16
%18 = sub nsw i64 %12, %14
%19 = getelementptr inbounds float, float* %2, i64 %18
%20 = load float, float* %19
store float %20, float* %16
store float %17, float* %19
%21 = add nsw i64 %15, 1
%22 = add nuw nsw i64 %14, 1
%23 = icmp slt i64 %21, %11
br i1 %23, label %13, label %24
24: ; preds = %13, %3
ret void
}