void color32x16(char c, char x, char y) {
  unsigned short p = 0x5800 + y * 64 + x * 2 + 8 + 32;
  *(unsigned char *)p = c;
  p++;
  *(unsigned char *)p = c;
  p++;
  *(unsigned char *)p = c;
  p++;
  *(unsigned char *)p = c;
  p += 31;
  *(unsigned char *)p = c;
  p++;
  *(unsigned char *)p = c;
  p++;
  *(unsigned char *)p = c;
  p++;
  *(unsigned char *)p = c;
}


x86 assembly (clang, -O0):
<color32x16>:
push   %rbp
mov    %rsp,%rbp
mov    %dl,%al
mov    %sil,%cl
mov    %dil,%dl
mov    %dl,-0x1(%rbp)
mov    %cl,-0x2(%rbp)
mov    %al,-0x3(%rbp)
movsbl -0x3(%rbp),%eax
shl    $0x6,%eax
add    $0x5800,%eax
movsbl -0x2(%rbp),%ecx
shl    $0x1,%ecx
add    %ecx,%eax
add    $0x8,%eax
add    $0x20,%eax
mov    %ax,-0x6(%rbp)
mov    -0x1(%rbp),%cl
movzwl -0x6(%rbp),%eax
mov    %cl,(%rax)
mov    -0x6(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x6(%rbp)
mov    -0x1(%rbp),%cl
movzwl -0x6(%rbp),%eax
mov    %cl,(%rax)
mov    -0x6(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x6(%rbp)
mov    -0x1(%rbp),%cl
movzwl -0x6(%rbp),%eax
mov    %cl,(%rax)
mov    -0x6(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x6(%rbp)
mov    -0x1(%rbp),%cl
movzwl -0x6(%rbp),%eax
mov    %cl,(%rax)
movzwl -0x6(%rbp),%eax
add    $0x1f,%eax
mov    %ax,-0x6(%rbp)
mov    -0x1(%rbp),%cl
movzwl -0x6(%rbp),%eax
mov    %cl,(%rax)
mov    -0x6(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x6(%rbp)
mov    -0x1(%rbp),%cl
movzwl -0x6(%rbp),%eax
mov    %cl,(%rax)
mov    -0x6(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x6(%rbp)
mov    -0x1(%rbp),%cl
movzwl -0x6(%rbp),%eax
mov    %cl,(%rax)
mov    -0x6(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x6(%rbp)
mov    -0x1(%rbp),%cl
movzwl -0x6(%rbp),%eax
mov    %cl,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<color32x16>:
shl    $0x6,%edx
lea    (%rdx,%rsi,2),%eax
add    $0x5828,%eax
movzwl %ax,%eax
mov    %dil,(%rax)
lea    0x5829(%rdx,%rsi,2),%eax
movzwl %ax,%eax
mov    %dil,(%rax)
lea    0x582a(%rdx,%rsi,2),%eax
movzwl %ax,%eax
mov    %dil,(%rax)
lea    0x582b(%rdx,%rsi,2),%eax
movzwl %ax,%eax
mov    %dil,(%rax)
lea    0x584a(%rdx,%rsi,2),%eax
movzwl %ax,%eax
mov    %dil,(%rax)
lea    0x584b(%rdx,%rsi,2),%eax
movzwl %ax,%eax
mov    %dil,(%rax)
lea    0x584c(%rdx,%rsi,2),%eax
movzwl %ax,%eax
mov    %dil,(%rax)
lea    (%rdx,%rsi,2),%eax
add    $0x584d,%eax
movzwl %ax,%eax
mov    %dil,(%rax)
ret

LLVM IR (-O0):
define void @color32x16(i8 signext %0, i8 signext %1, i8 signext %2) {
%4 = alloca i8
%5 = alloca i8
%6 = alloca i8
%7 = alloca i16
store i8 %0, i8* %4
store i8 %1, i8* %5
store i8 %2, i8* %6
%8 = load i8, i8* %6
%9 = sext i8 %8 to i32
%10 = mul nsw i32 %9, 64
%11 = add nsw i32 22528, %10
%12 = load i8, i8* %5
%13 = sext i8 %12 to i32
%14 = mul nsw i32 %13, 2
%15 = add nsw i32 %11, %14
%16 = add nsw i32 %15, 8
%17 = add nsw i32 %16, 32
%18 = trunc i32 %17 to i16
store i16 %18, i16* %7
%19 = load i8, i8* %4
%20 = load i16, i16* %7
%21 = zext i16 %20 to i64
%22 = inttoptr i64 %21 to i8*
store i8 %19, i8* %22
%23 = load i16, i16* %7
%24 = add i16 %23, 1
store i16 %24, i16* %7
%25 = load i8, i8* %4
%26 = load i16, i16* %7
%27 = zext i16 %26 to i64
%28 = inttoptr i64 %27 to i8*
store i8 %25, i8* %28
%29 = load i16, i16* %7
%30 = add i16 %29, 1
store i16 %30, i16* %7
%31 = load i8, i8* %4
%32 = load i16, i16* %7
%33 = zext i16 %32 to i64
%34 = inttoptr i64 %33 to i8*
store i8 %31, i8* %34
%35 = load i16, i16* %7
%36 = add i16 %35, 1
store i16 %36, i16* %7
%37 = load i8, i8* %4
%38 = load i16, i16* %7
%39 = zext i16 %38 to i64
%40 = inttoptr i64 %39 to i8*
store i8 %37, i8* %40
%41 = load i16, i16* %7
%42 = zext i16 %41 to i32
%43 = add nsw i32 %42, 31
%44 = trunc i32 %43 to i16
store i16 %44, i16* %7
%45 = load i8, i8* %4
%46 = load i16, i16* %7
%47 = zext i16 %46 to i64
%48 = inttoptr i64 %47 to i8*
store i8 %45, i8* %48
%49 = load i16, i16* %7
%50 = add i16 %49, 1
store i16 %50, i16* %7
%51 = load i8, i8* %4
%52 = load i16, i16* %7
%53 = zext i16 %52 to i64
%54 = inttoptr i64 %53 to i8*
store i8 %51, i8* %54
%55 = load i16, i16* %7
%56 = add i16 %55, 1
store i16 %56, i16* %7
%57 = load i8, i8* %4
%58 = load i16, i16* %7
%59 = zext i16 %58 to i64
%60 = inttoptr i64 %59 to i8*
store i8 %57, i8* %60
%61 = load i16, i16* %7
%62 = add i16 %61, 1
store i16 %62, i16* %7
%63 = load i8, i8* %4
%64 = load i16, i16* %7
%65 = zext i16 %64 to i64
%66 = inttoptr i64 %65 to i8*
store i8 %63, i8* %66
ret void
}

LLVM IR (-O2):
define void @color32x16(i8 signext %0, i8 signext %1, i8 signext %2) {
%4 = sext i8 %2 to i16
%5 = shl nsw i16 %4, 6
%6 = sext i8 %1 to i16
%7 = shl nsw i16 %6, 1
%8 = add i16 %7, 22528
%9 = add i16 %8, %5
%10 = add i16 %9, 40
%11 = zext i16 %10 to i64
%12 = inttoptr i64 %11 to i8*
store i8 %0, i8* %12
%13 = add i16 %9, 41
%14 = zext i16 %13 to i64
%15 = inttoptr i64 %14 to i8*
store i8 %0, i8* %15
%16 = add i16 %9, 42
%17 = zext i16 %16 to i64
%18 = inttoptr i64 %17 to i8*
store i8 %0, i8* %18
%19 = add i16 %9, 43
%20 = zext i16 %19 to i64
%21 = inttoptr i64 %20 to i8*
store i8 %0, i8* %21
%22 = add i16 %9, 74
%23 = zext i16 %22 to i64
%24 = inttoptr i64 %23 to i8*
store i8 %0, i8* %24
%25 = add i16 %9, 75
%26 = zext i16 %25 to i64
%27 = inttoptr i64 %26 to i8*
store i8 %0, i8* %27
%28 = add i16 %9, 76
%29 = zext i16 %28 to i64
%30 = inttoptr i64 %29 to i8*
store i8 %0, i8* %30
%31 = add i16 %9, 77
%32 = zext i16 %31 to i64
%33 = inttoptr i64 %32 to i8*
store i8 %0, i8* %33
ret void
}