int create_16bit_table(unsigned short *table) {
  unsigned short generator = 0x1021;
  short delenec = 0;
  while (delenec <= 255) {
    unsigned short aktualny = ((unsigned short)(delenec << 8));
    for (char bit = 0; bit < 8; bit++) {
      if ((aktualny & 0x8000) == 0) {
        aktualny = aktualny << 1;
      } else {
        aktualny = aktualny << 1;
        aktualny = aktualny ^ generator;
      }
    }
    table[delenec] = aktualny;
    delenec++;
  }
}


x86 assembly (clang, -O0):
<create_16bit_table>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
movw   $0x1021,-0x12(%rbp)
movw   $0x0,-0x14(%rbp)
movswl -0x14(%rbp),%eax
cmp    $0xff,%eax
jg     11ae <create_16bit_table+0xae>
movswl -0x14(%rbp),%eax
shl    $0x8,%eax
mov    %ax,-0x16(%rbp)
movb   $0x0,-0x17(%rbp)
movsbl -0x17(%rbp),%eax
cmp    $0x8,%eax
jge    118c <create_16bit_table+0x8c>
movzwl -0x16(%rbp),%eax
and    $0x8000,%eax
cmp    $0x0,%eax
jne    1161 <create_16bit_table+0x61>
movzwl -0x16(%rbp),%eax
shl    $0x1,%eax
mov    %ax,-0x16(%rbp)
jmp    117a <create_16bit_table+0x7a>
movzwl -0x16(%rbp),%eax
shl    $0x1,%eax
mov    %ax,-0x16(%rbp)
movzwl -0x16(%rbp),%eax
movzwl -0x12(%rbp),%ecx
xor    %ecx,%eax
mov    %ax,-0x16(%rbp)
jmp    117f <create_16bit_table+0x7f>
mov    -0x17(%rbp),%al
add    $0x1,%al
mov    %al,-0x17(%rbp)
jmp    1132 <create_16bit_table+0x32>
mov    -0x16(%rbp),%dx
mov    -0x10(%rbp),%rax
movswq -0x14(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x14(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x14(%rbp)
jmp    1114 <create_16bit_table+0x14>
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<create_16bit_table>:
movdqa 0xef8(%rip),%xmm0
xor    %eax,%eax
movdqa 0xefe(%rip),%xmm1
pcmpeqd %xmm2,%xmm2
movdqa 0xf02(%rip),%xmm3
xchg   %ax,%ax
movdqa %xmm0,%xmm4
psllw  $0x9,%xmm4
movdqa %xmm0,%xmm5
psllw  $0x8,%xmm5
psraw  $0xf,%xmm5
movdqa %xmm5,%xmm6
pandn  %xmm4,%xmm6
pxor   %xmm1,%xmm4
pand   %xmm5,%xmm4
por    %xmm6,%xmm4
movdqa %xmm4,%xmm5
pcmpgtw %xmm2,%xmm5
paddw  %xmm4,%xmm4
movdqa %xmm4,%xmm6
pxor   %xmm1,%xmm6
pand   %xmm5,%xmm4
pandn  %xmm6,%xmm5
por    %xmm4,%xmm5
movdqa %xmm5,%xmm4
pcmpgtw %xmm2,%xmm4
paddw  %xmm5,%xmm5
movdqa %xmm5,%xmm6
pxor   %xmm1,%xmm6
pand   %xmm4,%xmm5
pandn  %xmm6,%xmm4
por    %xmm5,%xmm4
movdqa %xmm4,%xmm5
pcmpgtw %xmm2,%xmm5
paddw  %xmm4,%xmm4
movdqa %xmm4,%xmm6
pxor   %xmm1,%xmm6
pand   %xmm5,%xmm4
pandn  %xmm6,%xmm5
por    %xmm4,%xmm5
movdqa %xmm5,%xmm4
pcmpgtw %xmm2,%xmm4
paddw  %xmm5,%xmm5
movdqa %xmm5,%xmm6
pxor   %xmm1,%xmm6
pand   %xmm4,%xmm5
pandn  %xmm6,%xmm4
por    %xmm5,%xmm4
movdqa %xmm4,%xmm5
pcmpgtw %xmm2,%xmm5
paddw  %xmm4,%xmm4
movdqa %xmm4,%xmm6
pxor   %xmm1,%xmm6
pand   %xmm5,%xmm4
pandn  %xmm6,%xmm5
por    %xmm4,%xmm5
movdqa %xmm5,%xmm4
pcmpgtw %xmm2,%xmm4
paddw  %xmm5,%xmm5
movdqa %xmm5,%xmm6
pxor   %xmm1,%xmm6
pand   %xmm4,%xmm5
pandn  %xmm6,%xmm4
por    %xmm5,%xmm4
movdqa %xmm4,%xmm5
pcmpgtw %xmm2,%xmm5
paddw  %xmm4,%xmm4
movdqa %xmm4,%xmm6
pxor   %xmm1,%xmm6
pand   %xmm5,%xmm4
pandn  %xmm6,%xmm5
por    %xmm4,%xmm5
movdqu %xmm5,(%rdi,%rax,2)
add    $0x8,%rax
paddw  %xmm3,%xmm0
cmp    $0x100,%rax
jne    1120 <create_16bit_table+0x20>
ret

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

LLVM IR (-O2):
define i32 @create_16bit_table(i16* nocapture writeonly %0) {
br label %2
2: ; preds = %2, %1
%3 = phi i64 [ 0, %1 ], [ %40, %2 ]
%4 = phi <8 x i16> [ <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, %1 ], [ %41, %2 ]
%5 = and <8 x i16> %4, <i16 128, i16 128, i16 128, i16 128, i16 128, i16 128, i16 128, i16 128>
%6 = icmp eq <8 x i16> %5, zeroinitializer
%7 = shl <8 x i16> %4, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9>
%8 = xor <8 x i16> %7, <i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129>
%9 = select <8 x i1> %6, <8 x i16> %7, <8 x i16> %8
%10 = icmp sgt <8 x i16> %9, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
%11 = shl <8 x i16> %9, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%12 = xor <8 x i16> %11, <i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129>
%13 = select <8 x i1> %10, <8 x i16> %11, <8 x i16> %12
%14 = icmp sgt <8 x i16> %13, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
%15 = shl <8 x i16> %13, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%16 = xor <8 x i16> %15, <i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129>
%17 = select <8 x i1> %14, <8 x i16> %15, <8 x i16> %16
%18 = icmp sgt <8 x i16> %17, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
%19 = shl <8 x i16> %17, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%20 = xor <8 x i16> %19, <i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129>
%21 = select <8 x i1> %18, <8 x i16> %19, <8 x i16> %20
%22 = icmp sgt <8 x i16> %21, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
%23 = shl <8 x i16> %21, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%24 = xor <8 x i16> %23, <i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129>
%25 = select <8 x i1> %22, <8 x i16> %23, <8 x i16> %24
%26 = icmp sgt <8 x i16> %25, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
%27 = shl <8 x i16> %25, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%28 = xor <8 x i16> %27, <i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129>
%29 = select <8 x i1> %26, <8 x i16> %27, <8 x i16> %28
%30 = icmp sgt <8 x i16> %29, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
%31 = shl <8 x i16> %29, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%32 = xor <8 x i16> %31, <i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129>
%33 = select <8 x i1> %30, <8 x i16> %31, <8 x i16> %32
%34 = icmp sgt <8 x i16> %33, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
%35 = shl <8 x i16> %33, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%36 = xor <8 x i16> %35, <i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129, i16 4129>
%37 = select <8 x i1> %34, <8 x i16> %35, <8 x i16> %36
%38 = getelementptr inbounds i16, i16* %0, i64 %3
%39 = bitcast i16* %38 to <8 x i16>*
store <8 x i16> %37, <8 x i16>* %39
%40 = add nuw i64 %3, 8
%41 = add <8 x i16> %4, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
%42 = icmp eq i64 %40, 256
br i1 %42, label %43, label %2
43: ; preds = %2
ret i32 undef
}