void color16x16(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;
}


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

x86 assembly (clang, -O2):
<color16x16>:
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    (%rdx,%rsi,2),%eax
add    $0x5849,%eax
movzwl %ax,%eax
mov    %dil,(%rax)
ret

LLVM IR (-O0):
define void @color16x16(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
ret void
}

LLVM IR (-O2):
define void @color16x16(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
ret void
}