void color16x32(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 += 31;
  *(unsigned char *)p = c;
  p++;
  *(unsigned char *)p = c;
  p += 31;
  *(unsigned char *)p = c;
  p++;
  *(unsigned char *)p = c;
  p += 31;
  *(unsigned char *)p = c;
  p++;
  *(unsigned char *)p = c;
}


x86 assembly (clang, -O0):
<color16x32>:
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)
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)
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)
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)
pop    %rbp
ret

x86 assembly (clang, -O2):
<color16x32>:
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    0x5848(%rdx,%rsi,2),%eax
movzwl %ax,%eax
mov    %dil,(%rax)
lea    0x5849(%rdx,%rsi,2),%eax
movzwl %ax,%eax
mov    %dil,(%rax)
lea    0x5868(%rdx,%rsi,2),%eax
movzwl %ax,%eax
mov    %dil,(%rax)
lea    0x5869(%rdx,%rsi,2),%eax
movzwl %ax,%eax
mov    %dil,(%rax)
lea    0x5888(%rdx,%rsi,2),%eax
movzwl %ax,%eax
mov    %dil,(%rax)
lea    (%rdx,%rsi,2),%eax
add    $0x5889,%eax
movzwl %ax,%eax
mov    %dil,(%rax)
ret

LLVM IR (-O0):
define void @color16x32(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 = zext i16 %29 to i32
%31 = add nsw i32 %30, 31
%32 = trunc i32 %31 to i16
store i16 %32, i16* %7
%33 = load i8, i8* %4
%34 = load i16, i16* %7
%35 = zext i16 %34 to i64
%36 = inttoptr i64 %35 to i8*
store i8 %33, i8* %36
%37 = load i16, i16* %7
%38 = add i16 %37, 1
store i16 %38, i16* %7
%39 = load i8, i8* %4
%40 = load i16, i16* %7
%41 = zext i16 %40 to i64
%42 = inttoptr i64 %41 to i8*
store i8 %39, i8* %42
%43 = load i16, i16* %7
%44 = zext i16 %43 to i32
%45 = add nsw i32 %44, 31
%46 = trunc i32 %45 to i16
store i16 %46, i16* %7
%47 = load i8, i8* %4
%48 = load i16, i16* %7
%49 = zext i16 %48 to i64
%50 = inttoptr i64 %49 to i8*
store i8 %47, i8* %50
%51 = load i16, i16* %7
%52 = add i16 %51, 1
store i16 %52, i16* %7
%53 = load i8, i8* %4
%54 = load i16, i16* %7
%55 = zext i16 %54 to i64
%56 = inttoptr i64 %55 to i8*
store i8 %53, i8* %56
%57 = load i16, i16* %7
%58 = zext i16 %57 to i32
%59 = add nsw i32 %58, 31
%60 = trunc i32 %59 to i16
store i16 %60, i16* %7
%61 = load i8, i8* %4
%62 = load i16, i16* %7
%63 = zext i16 %62 to i64
%64 = inttoptr i64 %63 to i8*
store i8 %61, i8* %64
%65 = load i16, i16* %7
%66 = add i16 %65, 1
store i16 %66, i16* %7
%67 = load i8, i8* %4
%68 = load i16, i16* %7
%69 = zext i16 %68 to i64
%70 = inttoptr i64 %69 to i8*
store i8 %67, i8* %70
ret void
}

LLVM IR (-O2):
define void @color16x32(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, 72
%17 = zext i16 %16 to i64
%18 = inttoptr i64 %17 to i8*
store i8 %0, i8* %18
%19 = add i16 %9, 73
%20 = zext i16 %19 to i64
%21 = inttoptr i64 %20 to i8*
store i8 %0, i8* %21
%22 = add i16 %9, 104
%23 = zext i16 %22 to i64
%24 = inttoptr i64 %23 to i8*
store i8 %0, i8* %24
%25 = add i16 %9, 105
%26 = zext i16 %25 to i64
%27 = inttoptr i64 %26 to i8*
store i8 %0, i8* %27
%28 = add i16 %9, 136
%29 = zext i16 %28 to i64
%30 = inttoptr i64 %29 to i8*
store i8 %0, i8* %30
%31 = add i16 %9, 137
%32 = zext i16 %31 to i64
%33 = inttoptr i64 %32 to i8*
store i8 %0, i8* %33
ret void
}