float median5(float yy, float kaa, float koo, float nee, float vii) {
  float array[5];
  float tmp;
  int i, j;
  array[0] = yy;
  array[1] = kaa;
  array[2] = koo;
  array[3] = nee;
  array[4] = vii;
  for (j = 0; j < 5 - 1; j++)
    for (i = 0; i < 5 - 1 - j; i++) {
      if (array[i] > array[i + 1]) {
        tmp = array[i];
        array[i] = array[i + 1];
        array[i + 1] = tmp;
      }
    }
  return (array[2]);
}


x86 assembly (clang, -O0):
<median5>:
push   %rbp
mov    %rsp,%rbp
movss  %xmm0,-0x4(%rbp)
movss  %xmm1,-0x8(%rbp)
movss  %xmm2,-0xc(%rbp)
movss  %xmm3,-0x10(%rbp)
movss  %xmm4,-0x14(%rbp)
movss  -0x4(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x8(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x20(%rbp)
movl   $0x0,-0x3c(%rbp)
cmpl   $0x4,-0x3c(%rbp)
jge    11f7 <median5+0xf7>
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    $0x4,%ecx
sub    -0x3c(%rbp),%ecx
cmp    %ecx,%eax
jge    11e4 <median5+0xe4>
movslq -0x38(%rbp),%rax
movss  -0x30(%rbp,%rax,4),%xmm0
mov    -0x38(%rbp),%eax
add    $0x1,%eax
cltq
ucomiss -0x30(%rbp,%rax,4),%xmm0
jbe    11d1 <median5+0xd1>
movslq -0x38(%rbp),%rax
movss  -0x30(%rbp,%rax,4),%xmm0
movss  %xmm0,-0x34(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
cltq
movss  -0x30(%rbp,%rax,4),%xmm0
movslq -0x38(%rbp),%rax
movss  %xmm0,-0x30(%rbp,%rax,4)
movss  -0x34(%rbp),%xmm0
mov    -0x38(%rbp),%eax
add    $0x1,%eax
cltq
movss  %xmm0,-0x30(%rbp,%rax,4)
jmp    11d6 <median5+0xd6>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1167 <median5+0x67>
jmp    11e9 <median5+0xe9>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1156 <median5+0x56>
movss  -0x28(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<median5>:
movaps %xmm1,%xmm5
minss  %xmm0,%xmm5
maxss  %xmm1,%xmm0
movaps %xmm2,%xmm1
minss  %xmm0,%xmm1
maxss  %xmm2,%xmm0
movaps %xmm3,%xmm2
minss  %xmm0,%xmm2
maxss  %xmm3,%xmm0
minss  %xmm0,%xmm4
movaps %xmm1,%xmm0
minss  %xmm5,%xmm0
maxss  %xmm1,%xmm5
movaps %xmm2,%xmm1
minss  %xmm5,%xmm1
maxss  %xmm1,%xmm0
maxss  %xmm2,%xmm5
minss  %xmm5,%xmm4
maxss  %xmm4,%xmm0
ret

LLVM IR (-O0):
define float @median5(float %0, float %1, float %2, float %3, float %4) {
%6 = alloca float
%7 = alloca float
%8 = alloca float
%9 = alloca float
%10 = alloca float
%11 = alloca [5 x float]
%12 = alloca float
%13 = alloca i32
%14 = alloca i32
store float %0, float* %6
store float %1, float* %7
store float %2, float* %8
store float %3, float* %9
store float %4, float* %10
%15 = load float, float* %6
%16 = getelementptr inbounds [5 x float], [5 x float]* %11, i64 0, i64 0
store float %15, float* %16
%17 = load float, float* %7
%18 = getelementptr inbounds [5 x float], [5 x float]* %11, i64 0, i64 1
store float %17, float* %18
%19 = load float, float* %8
%20 = getelementptr inbounds [5 x float], [5 x float]* %11, i64 0, i64 2
store float %19, float* %20
%21 = load float, float* %9
%22 = getelementptr inbounds [5 x float], [5 x float]* %11, i64 0, i64 3
store float %21, float* %22
%23 = load float, float* %10
%24 = getelementptr inbounds [5 x float], [5 x float]* %11, i64 0, i64 4
store float %23, float* %24
store i32 0, i32* %14
br label %25
25: ; preds = %68, %5
%26 = load i32, i32* %14
%27 = icmp slt i32 %26, 4
br i1 %27, label %28, label %71
28: ; preds = %25
store i32 0, i32* %13
br label %29
29: ; preds = %64, %28
%30 = load i32, i32* %13
%31 = load i32, i32* %14
%32 = sub nsw i32 4, %31
%33 = icmp slt i32 %30, %32
br i1 %33, label %34, label %67
34: ; preds = %29
%35 = load i32, i32* %13
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds [5 x float], [5 x float]* %11, i64 0, i64 %36
%38 = load float, float* %37
%39 = load i32, i32* %13
%40 = add nsw i32 %39, 1
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds [5 x float], [5 x float]* %11, i64 0, i64 %41
%43 = load float, float* %42
%44 = fcmp ogt float %38, %43
br i1 %44, label %45, label %63
45: ; preds = %34
%46 = load i32, i32* %13
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds [5 x float], [5 x float]* %11, i64 0, i64 %47
%49 = load float, float* %48
store float %49, float* %12
%50 = load i32, i32* %13
%51 = add nsw i32 %50, 1
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds [5 x float], [5 x float]* %11, i64 0, i64 %52
%54 = load float, float* %53
%55 = load i32, i32* %13
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds [5 x float], [5 x float]* %11, i64 0, i64 %56
store float %54, float* %57
%58 = load float, float* %12
%59 = load i32, i32* %13
%60 = add nsw i32 %59, 1
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds [5 x float], [5 x float]* %11, i64 0, i64 %61
store float %58, float* %62
br label %63
63: ; preds = %45, %34
br label %64
64: ; preds = %63
%65 = load i32, i32* %13
%66 = add nsw i32 %65, 1
store i32 %66, i32* %13
br label %29
67: ; preds = %29
br label %68
68: ; preds = %67
%69 = load i32, i32* %14
%70 = add nsw i32 %69, 1
store i32 %70, i32* %14
br label %25
71: ; preds = %25
%72 = getelementptr inbounds [5 x float], [5 x float]* %11, i64 0, i64 2
%73 = load float, float* %72
ret float %73
}

LLVM IR (-O2):
define float @median5(float %0, float %1, float %2, float %3, float %4) {
%6 = fcmp ogt float %0, %1
%7 = select i1 %6, float %1, float %0
%8 = select i1 %6, float %0, float %1
%9 = fcmp ogt float %8, %2
%10 = select i1 %9, float %2, float %8
%11 = select i1 %9, float %8, float %2
%12 = fcmp ogt float %11, %3
%13 = select i1 %12, float %3, float %11
%14 = select i1 %12, float %11, float %3
%15 = fcmp ogt float %14, %4
%16 = select i1 %15, float %4, float %14
%17 = fcmp ogt float %7, %10
%18 = select i1 %17, float %10, float %7
%19 = select i1 %17, float %7, float %10
%20 = fcmp ogt float %19, %13
%21 = select i1 %20, float %13, float %19
%22 = select i1 %20, float %19, float %13
%23 = fcmp ogt float %22, %16
%24 = select i1 %23, float %16, float %22
%25 = fcmp ogt float %18, %21
%26 = select i1 %25, float %18, float %21
%27 = fcmp ogt float %26, %24
%28 = select i1 %27, float %26, float %24
ret float %28
}