void render_key(char key, char *buf) {
  switch (key) {
  case 0 ... 26:
    buf[0] = '^';
    buf[1] = 'A' + key - 1;
    buf[2] = '\0';
    return;
  case 0x7F:
    buf[0] = '^';
    buf[1] = '?';
    buf[2] = '\0';
    return;
  default:
    buf[0] = key;
    buf[1] = '\0';
    return;
  }
}


x86 assembly (clang, -O0):
<render_key>:
push   %rbp
mov    %rsp,%rbp
mov    %dil,%al
mov    %al,-0x1(%rbp)
mov    %rsi,-0x10(%rbp)
movsbl -0x1(%rbp),%eax
mov    %eax,-0x14(%rbp)
sub    $0x1b,%eax
jb     1134 <render_key+0x34>
jmp    1123 <render_key+0x23>
mov    -0x14(%rbp),%eax
sub    $0x7f,%eax
je     115b <render_key+0x5b>
jmp    1177 <render_key+0x77>
mov    -0x10(%rbp),%rax
movb   $0x5e,(%rax)
movsbl -0x1(%rbp),%eax
add    $0x41,%eax
sub    $0x1,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x1(%rax)
mov    -0x10(%rbp),%rax
movb   $0x0,0x2(%rax)
jmp    1188 <render_key+0x88>
mov    -0x10(%rbp),%rax
movb   $0x5e,(%rax)
mov    -0x10(%rbp),%rax
movb   $0x3f,0x1(%rax)
mov    -0x10(%rbp),%rax
movb   $0x0,0x2(%rax)
jmp    1188 <render_key+0x88>
mov    -0x1(%rbp),%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
movb   $0x0,0x1(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<render_key>:
cmp    $0x1b,%edi
jae    1118 <render_key+0x18>
movb   $0x5e,(%rsi)
lea    0x40(%rdi),%eax
mov    %al,0x1(%rsi)
mov    $0x2,%eax
movb   $0x0,(%rsi,%rax,1)
ret
cmp    $0x7f,%edi
jne    1124 <render_key+0x24>
movw   $0x3f5e,(%rsi)
jmp    110e <render_key+0xe>
mov    %dil,(%rsi)
mov    $0x1,%eax
movb   $0x0,(%rsi,%rax,1)
ret

LLVM IR (-O0):
define void @render_key(i8 signext %0, i8* %1) {
%3 = alloca i8
%4 = alloca i8*
store i8 %0, i8* %3
store i8* %1, i8** %4
%5 = load i8, i8* %3
%6 = sext i8 %5 to i32
switch i32 %6, label %26 [
i32 0, label %7
i32 1, label %7
i32 2, label %7
i32 3, label %7
i32 4, label %7
i32 5, label %7
i32 6, label %7
i32 7, label %7
i32 8, label %7
i32 9, label %7
i32 10, label %7
i32 11, label %7
i32 12, label %7
i32 13, label %7
i32 14, label %7
i32 15, label %7
i32 16, label %7
i32 17, label %7
i32 18, label %7
i32 19, label %7
i32 20, label %7
i32 21, label %7
i32 22, label %7
i32 23, label %7
i32 24, label %7
i32 25, label %7
i32 26, label %7
i32 127, label %19
]
7: ; preds = %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2
%8 = load i8*, i8** %4
%9 = getelementptr inbounds i8, i8* %8, i64 0
store i8 94, i8* %9
%10 = load i8, i8* %3
%11 = sext i8 %10 to i32
%12 = add nsw i32 65, %11
%13 = sub nsw i32 %12, 1
%14 = trunc i32 %13 to i8
%15 = load i8*, i8** %4
%16 = getelementptr inbounds i8, i8* %15, i64 1
store i8 %14, i8* %16
%17 = load i8*, i8** %4
%18 = getelementptr inbounds i8, i8* %17, i64 2
store i8 0, i8* %18
br label %32
19: ; preds = %2
%20 = load i8*, i8** %4
%21 = getelementptr inbounds i8, i8* %20, i64 0
store i8 94, i8* %21
%22 = load i8*, i8** %4
%23 = getelementptr inbounds i8, i8* %22, i64 1
store i8 63, i8* %23
%24 = load i8*, i8** %4
%25 = getelementptr inbounds i8, i8* %24, i64 2
store i8 0, i8* %25
br label %32
26: ; preds = %2
%27 = load i8, i8* %3
%28 = load i8*, i8** %4
%29 = getelementptr inbounds i8, i8* %28, i64 0
store i8 %27, i8* %29
%30 = load i8*, i8** %4
%31 = getelementptr inbounds i8, i8* %30, i64 1
store i8 0, i8* %31
br label %32
32: ; preds = %26, %19, %7
ret void
}

LLVM IR (-O2):
define void @render_key(i8 signext %0, i8* nocapture writeonly %1) {
%3 = sext i8 %0 to i32
switch i32 %3, label %9 [
i32 0, label %4
i32 1, label %4
i32 2, label %4
i32 3, label %4
i32 4, label %4
i32 5, label %4
i32 6, label %4
i32 7, label %4
i32 8, label %4
i32 9, label %4
i32 10, label %4
i32 11, label %4
i32 12, label %4
i32 13, label %4
i32 14, label %4
i32 15, label %4
i32 16, label %4
i32 17, label %4
i32 18, label %4
i32 19, label %4
i32 20, label %4
i32 21, label %4
i32 22, label %4
i32 23, label %4
i32 24, label %4
i32 25, label %4
i32 26, label %4
i32 127, label %7
]
4: ; preds = %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2
store i8 94, i8* %1
%5 = add i8 %0, 64
%6 = getelementptr inbounds i8, i8* %1, i64 1
store i8 %5, i8* %6
br label %10
7: ; preds = %2
store i8 94, i8* %1
%8 = getelementptr inbounds i8, i8* %1, i64 1
store i8 63, i8* %8
br label %10
9: ; preds = %2
store i8 %0, i8* %1
br label %10
10: ; preds = %9, %7, %4
%11 = phi i64 [ 1, %9 ], [ 2, %7 ], [ 2, %4 ]
%12 = getelementptr inbounds i8, i8* %1, i64 %11
store i8 0, i8* %12
ret void
}