int CRC_Check(int Data0, int Data1, int Data2, int Data3, int Data4, int Data5,
              int Data6, int Data7, int Data8) {
  int i, k;
  int polynom = 0x119, bit_in = 0, temp = 0, speicher = 0;
  Data0 = (Data0 << 24) | (Data1 << 16) | (Data2 << 8) | (Data3);
  for (k = 0; k < 2; k++) {
    for (i = 31; i >= 0; i--) {
      bit_in = (Data0 >> i) & 0x01;
      temp = ((speicher & 0x01) ^ bit_in) * polynom;
      temp = temp >> 1;
      speicher = speicher >> 1;
      speicher = speicher ^ temp;
    }
    Data0 = (Data4 << 24) | (Data5 << 16) | (Data6 << 8) | (Data7);
  }
  for (i = 7; i >= 0; i--) {
    bit_in = (Data8 >> i) & 0x01;
    temp = ((speicher & 0x01) ^ bit_in) * polynom;
    temp = temp >> 1;
    speicher = speicher >> 1;
    speicher = speicher ^ temp;
  }
  return speicher;
}


x86 assembly (clang, -O0):
<CRC_Check>:
push   %rbp
mov    %rsp,%rbp
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    %r8d,-0x14(%rbp)
mov    %r9d,-0x18(%rbp)
movl   $0x119,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x4(%rbp),%eax
shl    $0x18,%eax
mov    -0x8(%rbp),%ecx
shl    $0x10,%ecx
or     %ecx,%eax
mov    -0xc(%rbp),%ecx
shl    $0x8,%ecx
or     %ecx,%eax
or     -0x10(%rbp),%eax
mov    %eax,-0x4(%rbp)
movl   $0x0,-0x20(%rbp)
cmpl   $0x2,-0x20(%rbp)
jge    11ec <CRC_Check+0xec>
movl   $0x1f,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jl     11c2 <CRC_Check+0xc2>
mov    -0x4(%rbp),%eax
mov    -0x1c(%rbp),%ecx
sar    %cl,%eax
and    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x30(%rbp),%eax
and    $0x1,%eax
xor    -0x28(%rbp),%eax
imul   -0x24(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
xor    -0x2c(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    1171 <CRC_Check+0x71>
mov    -0x14(%rbp),%eax
shl    $0x18,%eax
mov    -0x18(%rbp),%ecx
shl    $0x10,%ecx
or     %ecx,%eax
mov    0x10(%rbp),%ecx
shl    $0x8,%ecx
or     %ecx,%eax
or     0x18(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1160 <CRC_Check+0x60>
movl   $0x7,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jl     1244 <CRC_Check+0x144>
mov    0x20(%rbp),%eax
mov    -0x1c(%rbp),%ecx
sar    %cl,%eax
and    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x30(%rbp),%eax
and    $0x1,%eax
xor    -0x28(%rbp),%eax
imul   -0x24(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
xor    -0x2c(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    11f3 <CRC_Check+0xf3>
mov    -0x30(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<CRC_Check>:
mov    0x18(%rsp),%r10d
mov    0x8(%rsp),%r11d
shl    $0x18,%edi
shl    $0x10,%esi
or     %edi,%esi
shl    $0x8,%edx
or     %ecx,%edx
or     %esi,%edx
shl    $0x18,%r8d
shl    $0x10,%r9d
or     %r8d,%r9d
shl    $0x8,%r11d
or     %r9d,%r11d
or     0x10(%rsp),%r11d
mov    $0x1f,%ecx
xor    %eax,%eax
nopw   0x0(%rax,%rax,1)
mov    %edx,%esi
shr    %cl,%esi
xor    %eax,%esi
and    $0x1,%esi
imul   $0x119,%esi,%esi
shr    %esi
sar    %eax
add    $0xffffffff,%ecx
mov    %edx,%edi
shr    %cl,%edi
xor    %esi,%eax
xor    %eax,%edi
and    $0x1,%edi
imul   $0x119,%edi,%esi
shr    %esi
sar    %eax
xor    %esi,%eax
sub    $0x1,%ecx
jae    1140 <CRC_Check+0x40>
mov    $0x1f,%ecx
nopw   0x0(%rax,%rax,1)
mov    %r11d,%edx
shr    %cl,%edx
xor    %eax,%edx
and    $0x1,%edx
imul   $0x119,%edx,%edx
shr    %edx
sar    %eax
add    $0xffffffff,%ecx
mov    %r11d,%esi
shr    %cl,%esi
xor    %edx,%eax
xor    %eax,%esi
and    $0x1,%esi
imul   $0x119,%esi,%edx
shr    %edx
sar    %eax
xor    %edx,%eax
sub    $0x1,%ecx
jae    1180 <CRC_Check+0x80>
mov    %r10d,%ecx
shr    $0x7,%ecx
xor    %eax,%ecx
and    $0x1,%ecx
imul   $0x119,%ecx,%ecx
shr    %ecx
sar    %eax
xor    %ecx,%eax
mov    %r10d,%ecx
shr    $0x6,%ecx
xor    %eax,%ecx
and    $0x1,%ecx
imul   $0x119,%ecx,%ecx
shr    %ecx
sar    %eax
xor    %ecx,%eax
mov    %r10d,%ecx
shr    $0x5,%ecx
xor    %eax,%ecx
and    $0x1,%ecx
imul   $0x119,%ecx,%ecx
shr    %ecx
sar    %eax
xor    %ecx,%eax
mov    %r10d,%ecx
shr    $0x4,%ecx
xor    %eax,%ecx
and    $0x1,%ecx
imul   $0x119,%ecx,%ecx
shr    %ecx
sar    %eax
xor    %ecx,%eax
mov    %r10d,%ecx
shr    $0x3,%ecx
xor    %eax,%ecx
and    $0x1,%ecx
imul   $0x119,%ecx,%ecx
shr    %ecx
sar    %eax
xor    %ecx,%eax
mov    %r10d,%ecx
shr    $0x2,%ecx
xor    %eax,%ecx
and    $0x1,%ecx
imul   $0x119,%ecx,%ecx
shr    %ecx
sar    %eax
xor    %ecx,%eax
mov    %r10d,%ecx
shr    %ecx
xor    %eax,%ecx
and    $0x1,%ecx
imul   $0x119,%ecx,%ecx
shr    %ecx
sar    %eax
xor    %ecx,%eax
xor    %eax,%r10d
and    $0x1,%r10d
imul   $0x119,%r10d,%ecx
shr    %ecx
sar    %eax
xor    %ecx,%eax
ret

LLVM IR (-O0):
define i32 @CRC_Check(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8) {
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca i32
%24 = alloca i32
store i32 %0, i32* %10
store i32 %1, i32* %11
store i32 %2, i32* %12
store i32 %3, i32* %13
store i32 %4, i32* %14
store i32 %5, i32* %15
store i32 %6, i32* %16
store i32 %7, i32* %17
store i32 %8, i32* %18
store i32 281, i32* %21
store i32 0, i32* %22
store i32 0, i32* %23
store i32 0, i32* %24
%25 = load i32, i32* %10
%26 = shl i32 %25, 24
%27 = load i32, i32* %11
%28 = shl i32 %27, 16
%29 = or i32 %26, %28
%30 = load i32, i32* %12
%31 = shl i32 %30, 8
%32 = or i32 %29, %31
%33 = load i32, i32* %13
%34 = or i32 %32, %33
store i32 %34, i32* %10
store i32 0, i32* %20
br label %35
35: ; preds = %74, %9
%36 = load i32, i32* %20
%37 = icmp slt i32 %36, 2
br i1 %37, label %38, label %77
38: ; preds = %35
store i32 31, i32* %19
br label %39
39: ; preds = %60, %38
%40 = load i32, i32* %19
%41 = icmp sge i32 %40, 0
br i1 %41, label %42, label %63
42: ; preds = %39
%43 = load i32, i32* %10
%44 = load i32, i32* %19
%45 = ashr i32 %43, %44
%46 = and i32 %45, 1
store i32 %46, i32* %22
%47 = load i32, i32* %24
%48 = and i32 %47, 1
%49 = load i32, i32* %22
%50 = xor i32 %48, %49
%51 = load i32, i32* %21
%52 = mul nsw i32 %50, %51
store i32 %52, i32* %23
%53 = load i32, i32* %23
%54 = ashr i32 %53, 1
store i32 %54, i32* %23
%55 = load i32, i32* %24
%56 = ashr i32 %55, 1
store i32 %56, i32* %24
%57 = load i32, i32* %24
%58 = load i32, i32* %23
%59 = xor i32 %57, %58
store i32 %59, i32* %24
br label %60
60: ; preds = %42
%61 = load i32, i32* %19
%62 = add nsw i32 %61, -1
store i32 %62, i32* %19
br label %39
63: ; preds = %39
%64 = load i32, i32* %14
%65 = shl i32 %64, 24
%66 = load i32, i32* %15
%67 = shl i32 %66, 16
%68 = or i32 %65, %67
%69 = load i32, i32* %16
%70 = shl i32 %69, 8
%71 = or i32 %68, %70
%72 = load i32, i32* %17
%73 = or i32 %71, %72
store i32 %73, i32* %10
br label %74
74: ; preds = %63
%75 = load i32, i32* %20
%76 = add nsw i32 %75, 1
store i32 %76, i32* %20
br label %35
77: ; preds = %35
store i32 7, i32* %19
br label %78
78: ; preds = %99, %77
%79 = load i32, i32* %19
%80 = icmp sge i32 %79, 0
br i1 %80, label %81, label %102
81: ; preds = %78
%82 = load i32, i32* %18
%83 = load i32, i32* %19
%84 = ashr i32 %82, %83
%85 = and i32 %84, 1
store i32 %85, i32* %22
%86 = load i32, i32* %24
%87 = and i32 %86, 1
%88 = load i32, i32* %22
%89 = xor i32 %87, %88
%90 = load i32, i32* %21
%91 = mul nsw i32 %89, %90
store i32 %91, i32* %23
%92 = load i32, i32* %23
%93 = ashr i32 %92, 1
store i32 %93, i32* %23
%94 = load i32, i32* %24
%95 = ashr i32 %94, 1
store i32 %95, i32* %24
%96 = load i32, i32* %24
%97 = load i32, i32* %23
%98 = xor i32 %96, %97
store i32 %98, i32* %24
br label %99
99: ; preds = %81
%100 = load i32, i32* %19
%101 = add nsw i32 %100, -1
store i32 %101, i32* %19
br label %78
102: ; preds = %78
%103 = load i32, i32* %24
ret i32 %103
}

LLVM IR (-O2):
define i32 @CRC_Check(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8) {
%10 = shl i32 %0, 24
%11 = shl i32 %1, 16
%12 = or i32 %11, %10
%13 = shl i32 %2, 8
%14 = or i32 %12, %13
%15 = or i32 %14, %3
%16 = shl i32 %4, 24
%17 = shl i32 %5, 16
%18 = or i32 %17, %16
%19 = shl i32 %6, 8
%20 = or i32 %18, %19
%21 = or i32 %20, %7
br label %22
22: ; preds = %22, %9
%23 = phi i32 [ 0, %9 ], [ %39, %22 ]
%24 = phi i32 [ 31, %9 ], [ %40, %22 ]
%25 = lshr i32 %15, %24
%26 = xor i32 %23, %25
%27 = and i32 %26, 1
%28 = mul nuw nsw i32 %27, 281
%29 = lshr i32 %28, 1
%30 = ashr i32 %23, 1
%31 = xor i32 %29, %30
%32 = add nsw i32 %24, -1
%33 = lshr i32 %15, %32
%34 = xor i32 %31, %33
%35 = and i32 %34, 1
%36 = mul nuw nsw i32 %35, 281
%37 = lshr i32 %36, 1
%38 = ashr i32 %31, 1
%39 = xor i32 %37, %38
%40 = add nsw i32 %24, -2
%41 = icmp eq i32 %32, 0
br i1 %41, label %42, label %22
42: ; preds = %22, %42
%43 = phi i32 [ %59, %42 ], [ %39, %22 ]
%44 = phi i32 [ %60, %42 ], [ 31, %22 ]
%45 = lshr i32 %21, %44
%46 = xor i32 %43, %45
%47 = and i32 %46, 1
%48 = mul nuw nsw i32 %47, 281
%49 = lshr i32 %48, 1
%50 = ashr i32 %43, 1
%51 = xor i32 %49, %50
%52 = add nsw i32 %44, -1
%53 = lshr i32 %21, %52
%54 = xor i32 %51, %53
%55 = and i32 %54, 1
%56 = mul nuw nsw i32 %55, 281
%57 = lshr i32 %56, 1
%58 = ashr i32 %51, 1
%59 = xor i32 %57, %58
%60 = add nsw i32 %44, -2
%61 = icmp eq i32 %52, 0
br i1 %61, label %62, label %42
62: ; preds = %42
%63 = lshr i32 %8, 7
%64 = xor i32 %59, %63
%65 = and i32 %64, 1
%66 = mul nuw nsw i32 %65, 281
%67 = lshr i32 %66, 1
%68 = ashr i32 %59, 1
%69 = xor i32 %67, %68
%70 = lshr i32 %8, 6
%71 = xor i32 %69, %70
%72 = and i32 %71, 1
%73 = mul nuw nsw i32 %72, 281
%74 = lshr i32 %73, 1
%75 = ashr i32 %69, 1
%76 = xor i32 %74, %75
%77 = lshr i32 %8, 5
%78 = xor i32 %76, %77
%79 = and i32 %78, 1
%80 = mul nuw nsw i32 %79, 281
%81 = lshr i32 %80, 1
%82 = ashr i32 %76, 1
%83 = xor i32 %81, %82
%84 = lshr i32 %8, 4
%85 = xor i32 %83, %84
%86 = and i32 %85, 1
%87 = mul nuw nsw i32 %86, 281
%88 = lshr i32 %87, 1
%89 = ashr i32 %83, 1
%90 = xor i32 %88, %89
%91 = lshr i32 %8, 3
%92 = xor i32 %90, %91
%93 = and i32 %92, 1
%94 = mul nuw nsw i32 %93, 281
%95 = lshr i32 %94, 1
%96 = ashr i32 %90, 1
%97 = xor i32 %95, %96
%98 = lshr i32 %8, 2
%99 = xor i32 %97, %98
%100 = and i32 %99, 1
%101 = mul nuw nsw i32 %100, 281
%102 = lshr i32 %101, 1
%103 = ashr i32 %97, 1
%104 = xor i32 %102, %103
%105 = lshr i32 %8, 1
%106 = xor i32 %104, %105
%107 = and i32 %106, 1
%108 = mul nuw nsw i32 %107, 281
%109 = lshr i32 %108, 1
%110 = ashr i32 %104, 1
%111 = xor i32 %109, %110
%112 = xor i32 %111, %8
%113 = and i32 %112, 1
%114 = mul nuw nsw i32 %113, 281
%115 = lshr i32 %114, 1
%116 = ashr i32 %111, 1
%117 = xor i32 %115, %116
ret i32 %117
}