void ordnen(tripel) unsigned char tripel[3];
{
  unsigned char puffer;
  if (tripel[0] < tripel[1]) {
    if (tripel[2] < tripel[0]) {
      puffer = tripel[0];
      tripel[0] = tripel[2];
      tripel[2] = tripel[1];
      tripel[1] = puffer;
    } else {
      if (tripel[2] < tripel[1]) {
        puffer = tripel[2];
        tripel[2] = tripel[1];
        tripel[1] = puffer;
      }
    }
  } else {
    if (tripel[2] <= tripel[1]) {
      puffer = tripel[0];
      tripel[0] = tripel[2];
      tripel[2] = puffer;
    } else {
      if (tripel[0] <= tripel[2]) {
        puffer = tripel[0];
        tripel[0] = tripel[1];
        tripel[1] = puffer;
      } else {
        puffer = tripel[0];
        tripel[0] = tripel[1];
        tripel[1] = tripel[2];
        tripel[2] = puffer;
      }
    }
  }
}


x86 assembly (clang, -O0):
<ordnen>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rax
movzbl (%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x1(%rcx),%ecx
cmp    %ecx,%eax
jge    11ad <ordnen+0xad>
mov    -0x8(%rbp),%rax
movzbl 0x2(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl (%rcx),%ecx
cmp    %ecx,%eax
jge    1169 <ordnen+0x69>
mov    -0x8(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x9(%rbp)
mov    -0x8(%rbp),%rax
mov    0x2(%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,(%rax)
mov    -0x8(%rbp),%rax
mov    0x1(%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x2(%rax)
mov    -0x9(%rbp),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x1(%rax)
jmp    11a8 <ordnen+0xa8>
mov    -0x8(%rbp),%rax
movzbl 0x2(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x1(%rcx),%ecx
cmp    %ecx,%eax
jge    11a3 <ordnen+0xa3>
mov    -0x8(%rbp),%rax
mov    0x2(%rax),%al
mov    %al,-0x9(%rbp)
mov    -0x8(%rbp),%rax
mov    0x1(%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x2(%rax)
mov    -0x9(%rbp),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x1(%rax)
jmp    11a8 <ordnen+0xa8>
jmp    125e <ordnen+0x15e>
mov    -0x8(%rbp),%rax
movzbl 0x2(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x1(%rcx),%ecx
cmp    %ecx,%eax
jg     11ea <ordnen+0xea>
mov    -0x8(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x9(%rbp)
mov    -0x8(%rbp),%rax
mov    0x2(%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,(%rax)
mov    -0x9(%rbp),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x2(%rax)
jmp    1259 <ordnen+0x159>
mov    -0x8(%rbp),%rax
movzbl (%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x2(%rcx),%ecx
cmp    %ecx,%eax
jg     1226 <ordnen+0x126>
mov    -0x8(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x9(%rbp)
mov    -0x8(%rbp),%rax
mov    0x1(%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,(%rax)
mov    -0x9(%rbp),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x1(%rax)
jmp    1254 <ordnen+0x154>
mov    -0x8(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x9(%rbp)
mov    -0x8(%rbp),%rax
mov    0x1(%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,(%rax)
mov    -0x8(%rbp),%rax
mov    0x2(%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x1(%rax)
mov    -0x9(%rbp),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x2(%rax)
jmp    1259 <ordnen+0x159>
jmp    125e <ordnen+0x15e>
pop    %rbp
ret

x86 assembly (clang, -O2):
<ordnen>:
mov    (%rdi),%al
mov    0x1(%rdi),%dl
mov    0x2(%rdi),%cl
cmp    %dl,%al
jae    1119 <ordnen+0x19>
cmp    %al,%cl
jae    1128 <ordnen+0x28>
mov    %cl,(%rdi)
mov    %dl,0x2(%rdi)
mov    %al,0x1(%rdi)
ret
cmp    %dl,%cl
jbe    1133 <ordnen+0x33>
mov    %dl,(%rdi)
cmp    %cl,%al
jbe    1139 <ordnen+0x39>
mov    %cl,0x1(%rdi)
jmp    1135 <ordnen+0x35>
cmp    %dl,%cl
jae    1138 <ordnen+0x38>
mov    %dl,0x2(%rdi)
mov    %cl,0x1(%rdi)
ret
mov    %cl,(%rdi)
mov    %al,0x2(%rdi)
ret
mov    %al,0x1(%rdi)
ret

LLVM IR (-O0):
define void @ordnen(i8* %0) {
%2 = alloca i8*
%3 = alloca i8
store i8* %0, i8** %2
%4 = load i8*, i8** %2
%5 = getelementptr inbounds i8, i8* %4, i64 0
%6 = load i8, i8* %5
%7 = zext i8 %6 to i32
%8 = load i8*, i8** %2
%9 = getelementptr inbounds i8, i8* %8, i64 1
%10 = load i8, i8* %9
%11 = zext i8 %10 to i32
%12 = icmp slt i32 %7, %11
br i1 %12, label %13, label %64
13: ; preds = %1
%14 = load i8*, i8** %2
%15 = getelementptr inbounds i8, i8* %14, i64 2
%16 = load i8, i8* %15
%17 = zext i8 %16 to i32
%18 = load i8*, i8** %2
%19 = getelementptr inbounds i8, i8* %18, i64 0
%20 = load i8, i8* %19
%21 = zext i8 %20 to i32
%22 = icmp slt i32 %17, %21
br i1 %22, label %23, label %40
23: ; preds = %13
%24 = load i8*, i8** %2
%25 = getelementptr inbounds i8, i8* %24, i64 0
%26 = load i8, i8* %25
store i8 %26, i8* %3
%27 = load i8*, i8** %2
%28 = getelementptr inbounds i8, i8* %27, i64 2
%29 = load i8, i8* %28
%30 = load i8*, i8** %2
%31 = getelementptr inbounds i8, i8* %30, i64 0
store i8 %29, i8* %31
%32 = load i8*, i8** %2
%33 = getelementptr inbounds i8, i8* %32, i64 1
%34 = load i8, i8* %33
%35 = load i8*, i8** %2
%36 = getelementptr inbounds i8, i8* %35, i64 2
store i8 %34, i8* %36
%37 = load i8, i8* %3
%38 = load i8*, i8** %2
%39 = getelementptr inbounds i8, i8* %38, i64 1
store i8 %37, i8* %39
br label %63
40: ; preds = %13
%41 = load i8*, i8** %2
%42 = getelementptr inbounds i8, i8* %41, i64 2
%43 = load i8, i8* %42
%44 = zext i8 %43 to i32
%45 = load i8*, i8** %2
%46 = getelementptr inbounds i8, i8* %45, i64 1
%47 = load i8, i8* %46
%48 = zext i8 %47 to i32
%49 = icmp slt i32 %44, %48
br i1 %49, label %50, label %62
50: ; preds = %40
%51 = load i8*, i8** %2
%52 = getelementptr inbounds i8, i8* %51, i64 2
%53 = load i8, i8* %52
store i8 %53, i8* %3
%54 = load i8*, i8** %2
%55 = getelementptr inbounds i8, i8* %54, i64 1
%56 = load i8, i8* %55
%57 = load i8*, i8** %2
%58 = getelementptr inbounds i8, i8* %57, i64 2
store i8 %56, i8* %58
%59 = load i8, i8* %3
%60 = load i8*, i8** %2
%61 = getelementptr inbounds i8, i8* %60, i64 1
store i8 %59, i8* %61
br label %62
62: ; preds = %50, %40
br label %63
63: ; preds = %62, %23
br label %127
64: ; preds = %1
%65 = load i8*, i8** %2
%66 = getelementptr inbounds i8, i8* %65, i64 2
%67 = load i8, i8* %66
%68 = zext i8 %67 to i32
%69 = load i8*, i8** %2
%70 = getelementptr inbounds i8, i8* %69, i64 1
%71 = load i8, i8* %70
%72 = zext i8 %71 to i32
%73 = icmp sle i32 %68, %72
br i1 %73, label %74, label %86
74: ; preds = %64
%75 = load i8*, i8** %2
%76 = getelementptr inbounds i8, i8* %75, i64 0
%77 = load i8, i8* %76
store i8 %77, i8* %3
%78 = load i8*, i8** %2
%79 = getelementptr inbounds i8, i8* %78, i64 2
%80 = load i8, i8* %79
%81 = load i8*, i8** %2
%82 = getelementptr inbounds i8, i8* %81, i64 0
store i8 %80, i8* %82
%83 = load i8, i8* %3
%84 = load i8*, i8** %2
%85 = getelementptr inbounds i8, i8* %84, i64 2
store i8 %83, i8* %85
br label %126
86: ; preds = %64
%87 = load i8*, i8** %2
%88 = getelementptr inbounds i8, i8* %87, i64 0
%89 = load i8, i8* %88
%90 = zext i8 %89 to i32
%91 = load i8*, i8** %2
%92 = getelementptr inbounds i8, i8* %91, i64 2
%93 = load i8, i8* %92
%94 = zext i8 %93 to i32
%95 = icmp sle i32 %90, %94
br i1 %95, label %96, label %108
96: ; preds = %86
%97 = load i8*, i8** %2
%98 = getelementptr inbounds i8, i8* %97, i64 0
%99 = load i8, i8* %98
store i8 %99, i8* %3
%100 = load i8*, i8** %2
%101 = getelementptr inbounds i8, i8* %100, i64 1
%102 = load i8, i8* %101
%103 = load i8*, i8** %2
%104 = getelementptr inbounds i8, i8* %103, i64 0
store i8 %102, i8* %104
%105 = load i8, i8* %3
%106 = load i8*, i8** %2
%107 = getelementptr inbounds i8, i8* %106, i64 1
store i8 %105, i8* %107
br label %125
108: ; preds = %86
%109 = load i8*, i8** %2
%110 = getelementptr inbounds i8, i8* %109, i64 0
%111 = load i8, i8* %110
store i8 %111, i8* %3
%112 = load i8*, i8** %2
%113 = getelementptr inbounds i8, i8* %112, i64 1
%114 = load i8, i8* %113
%115 = load i8*, i8** %2
%116 = getelementptr inbounds i8, i8* %115, i64 0
store i8 %114, i8* %116
%117 = load i8*, i8** %2
%118 = getelementptr inbounds i8, i8* %117, i64 2
%119 = load i8, i8* %118
%120 = load i8*, i8** %2
%121 = getelementptr inbounds i8, i8* %120, i64 1
store i8 %119, i8* %121
%122 = load i8, i8* %3
%123 = load i8*, i8** %2
%124 = getelementptr inbounds i8, i8* %123, i64 2
store i8 %122, i8* %124
br label %125
125: ; preds = %108, %96
br label %126
126: ; preds = %125, %74
br label %127
127: ; preds = %126, %63
ret void
}

LLVM IR (-O2):
define void @ordnen(i8* nocapture %0) {
%2 = load i8, i8* %0
%3 = getelementptr inbounds i8, i8* %0, i64 1
%4 = load i8, i8* %3
%5 = icmp ult i8 %2, %4
%6 = getelementptr inbounds i8, i8* %0, i64 2
%7 = load i8, i8* %6
br i1 %5, label %8, label %14
8: ; preds = %1
%9 = icmp ult i8 %7, %2
br i1 %9, label %10, label %11
10: ; preds = %8
store i8 %7, i8* %0
store i8 %4, i8* %6
store i8 %2, i8* %3
br label %21
11: ; preds = %8
%12 = icmp ult i8 %7, %4
br i1 %12, label %13, label %21
13: ; preds = %11
store i8 %4, i8* %6
store i8 %7, i8* %3
br label %21
14: ; preds = %1
%15 = icmp ugt i8 %7, %4
br i1 %15, label %17, label %16
16: ; preds = %14
store i8 %7, i8* %0
store i8 %2, i8* %6
br label %21
17: ; preds = %14
%18 = icmp ugt i8 %2, %7
store i8 %4, i8* %0
br i1 %18, label %20, label %19
19: ; preds = %17
store i8 %2, i8* %3
br label %21
20: ; preds = %17
store i8 %7, i8* %3
store i8 %2, i8* %6
br label %21
21: ; preds = %16, %20, %19, %10, %13, %11
ret void
}