unsigned short count2color(int count, int repeat) {
  if (count == repeat) {
    return 0;
  } else {
    unsigned char r = 15.0f * count / repeat;
    unsigned char g = 15.0f * count / repeat * count / repeat;
    unsigned char b = (count > repeat / 2)
                          ? (15.0f * (count - repeat / 2) / repeat)
                          : 15.0f * 2 * count / repeat;
    return (r << 8) | (g << 4) | b;
  }
}


x86 assembly (clang, -O0):
<count2color>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    -0x8(%rbp),%eax
cmp    -0xc(%rbp),%eax
jne    1121 <count2color+0x21>
movw   $0x0,-0x2(%rbp)
jmp    1204 <count2color+0x104>
cvtsi2ssl -0x8(%rbp),%xmm0
movss  0xed2(%rip),%xmm1
mulss  %xmm1,%xmm0
cvtsi2ssl -0xc(%rbp),%xmm2
divss  %xmm2,%xmm0
cvttss2si %xmm0,%eax
mov    %al,-0xd(%rbp)
cvtsi2ssl -0x8(%rbp),%xmm2
movaps %xmm2,%xmm0
mulss  %xmm1,%xmm0
cvtsi2ssl -0xc(%rbp),%xmm1
divss  %xmm1,%xmm0
mulss  %xmm2,%xmm0
divss  %xmm1,%xmm0
cvttss2si %xmm0,%eax
mov    %al,-0xe(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0xc(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x14(%rbp),%eax
cmp    %ecx,%eax
jle    11bf <count2color+0xbf>
mov    -0x8(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0xc(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
cvtsi2ss %eax,%xmm1
movss  0xe58(%rip),%xmm0
mulss  %xmm1,%xmm0
cvtsi2ssl -0xc(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x18(%rbp)
jmp    11de <count2color+0xde>
cvtsi2ssl -0x8(%rbp),%xmm1
movss  0xe38(%rip),%xmm0
mulss  %xmm1,%xmm0
cvtsi2ssl -0xc(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x18(%rbp),%xmm0
cvttss2si %xmm0,%eax
mov    %al,-0xf(%rbp)
movzbl -0xd(%rbp),%eax
shl    $0x8,%eax
movzbl -0xe(%rbp),%ecx
shl    $0x4,%ecx
or     %ecx,%eax
movzbl -0xf(%rbp),%ecx
or     %ecx,%eax
mov    %ax,-0x2(%rbp)
movzwl -0x2(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<count2color>:
cmp    %esi,%edi
jne    1107 <count2color+0x7>
xor    %eax,%eax
ret
cvtsi2ss %edi,%xmm0
movss  0xeed(%rip),%xmm2
movaps %xmm0,%xmm3
mulss  %xmm2,%xmm3
cvtsi2ss %esi,%xmm1
divss  %xmm1,%xmm3
movaps %xmm3,%xmm4
mulss  %xmm0,%xmm4
divss  %xmm1,%xmm4
unpcklps %xmm3,%xmm4
cvttps2dq %xmm4,%xmm3
mov    %esi,%eax
shr    $0x1f,%eax
add    %esi,%eax
sar    %eax
sub    %eax,%edi
jg     114b <count2color+0x4b>
mulss  0xebb(%rip),%xmm0
jmp    1156 <count2color+0x56>
xorps  %xmm0,%xmm0
cvtsi2ss %edi,%xmm0
mulss  %xmm2,%xmm0
divss  %xmm1,%xmm0
cvttss2si %xmm0,%eax
pshuflw $0xe8,%xmm3,%xmm0
pand   0xea5(%rip),%xmm0
pmullw 0xead(%rip),%xmm0
movdqa %xmm0,%xmm1
psrld  $0x10,%xmm1
por    %xmm0,%xmm1
movd   %xmm1,%ecx
movzbl %al,%eax
or     %ecx,%eax
ret

LLVM IR (-O0):
define zeroext i16 @count2color(i32 %0, i32 %1) {
%3 = alloca i16
%4 = alloca i32
%5 = alloca i32
%6 = alloca i8
%7 = alloca i8
%8 = alloca i8
store i32 %0, i32* %4
store i32 %1, i32* %5
%9 = load i32, i32* %4
%10 = load i32, i32* %5
%11 = icmp eq i32 %9, %10
br i1 %11, label %12, label %13
12: ; preds = %2
store i16 0, i16* %3
br label %69
13: ; preds = %2
%14 = load i32, i32* %4
%15 = sitofp i32 %14 to float
%16 = fmul float 1.500000e+01, %15
%17 = load i32, i32* %5
%18 = sitofp i32 %17 to float
%19 = fdiv float %16, %18
%20 = fptoui float %19 to i8
store i8 %20, i8* %6
%21 = load i32, i32* %4
%22 = sitofp i32 %21 to float
%23 = fmul float 1.500000e+01, %22
%24 = load i32, i32* %5
%25 = sitofp i32 %24 to float
%26 = fdiv float %23, %25
%27 = load i32, i32* %4
%28 = sitofp i32 %27 to float
%29 = fmul float %26, %28
%30 = load i32, i32* %5
%31 = sitofp i32 %30 to float
%32 = fdiv float %29, %31
%33 = fptoui float %32 to i8
store i8 %33, i8* %7
%34 = load i32, i32* %4
%35 = load i32, i32* %5
%36 = sdiv i32 %35, 2
%37 = icmp sgt i32 %34, %36
br i1 %37, label %38, label %48
38: ; preds = %13
%39 = load i32, i32* %4
%40 = load i32, i32* %5
%41 = sdiv i32 %40, 2
%42 = sub nsw i32 %39, %41
%43 = sitofp i32 %42 to float
%44 = fmul float 1.500000e+01, %43
%45 = load i32, i32* %5
%46 = sitofp i32 %45 to float
%47 = fdiv float %44, %46
br label %55
48: ; preds = %13
%49 = load i32, i32* %4
%50 = sitofp i32 %49 to float
%51 = fmul float 3.000000e+01, %50
%52 = load i32, i32* %5
%53 = sitofp i32 %52 to float
%54 = fdiv float %51, %53
br label %55
55: ; preds = %48, %38
%56 = phi float [ %47, %38 ], [ %54, %48 ]
%57 = fptoui float %56 to i8
store i8 %57, i8* %8
%58 = load i8, i8* %6
%59 = zext i8 %58 to i32
%60 = shl i32 %59, 8
%61 = load i8, i8* %7
%62 = zext i8 %61 to i32
%63 = shl i32 %62, 4
%64 = or i32 %60, %63
%65 = load i8, i8* %8
%66 = zext i8 %65 to i32
%67 = or i32 %64, %66
%68 = trunc i32 %67 to i16
store i16 %68, i16* %3
br label %69
69: ; preds = %55, %12
%70 = load i16, i16* %3
ret i16 %70
}

LLVM IR (-O2):
define zeroext i16 @count2color(i32 %0, i32 %1) {
%3 = icmp eq i32 %0, %1
br i1 %3, label %30, label %4
4: ; preds = %2
%5 = sitofp i32 %0 to float
%6 = fmul float %5, 1.500000e+01
%7 = sitofp i32 %1 to float
%8 = fdiv float %6, %7
%9 = fmul float %8, %5
%10 = fdiv float %9, %7
%11 = insertelement <2 x float> poison, float %10, i64 0
%12 = insertelement <2 x float> %11, float %8, i64 1
%13 = fptoui <2 x float> %12 to <2 x i8>
%14 = sdiv i32 %1, 2
%15 = icmp slt i32 %14, %0
%16 = sub nsw i32 %0, %14
%17 = sitofp i32 %16 to float
%18 = fmul float %17, 1.500000e+01
%19 = fmul float %5, 3.000000e+01
%20 = select i1 %15, float %18, float %19
%21 = fdiv float %20, %7
%22 = fptoui float %21 to i8
%23 = zext <2 x i8> %13 to <2 x i16>
%24 = shl nuw <2 x i16> %23, <i16 4, i16 8>
%25 = shufflevector <2 x i16> %24, <2 x i16> poison, <2 x i32> <i32 1, i32 undef>
%26 = or <2 x i16> %24, %25
%27 = extractelement <2 x i16> %26, i64 0
%28 = zext i8 %22 to i16
%29 = or i16 %27, %28
br label %30
30: ; preds = %2, %4
%31 = phi i16 [ %29, %4 ], [ 0, %2 ]
ret i16 %31
}