char map(char c) {
  static const char display[] = {
      0x20, 0xAD, 0xBD, 0x9C, 0xCF, 0xBE, 0x7C, 0xF5, 0x00, 0x00, 0xA6, 0xAE,
      0x00, 0x2D, 0x00, 0x00, 0xF8, 0xF1, 0xFD, 0xFC, 0x27, 0x16, 0xF4, 0x2E,
      0x00, 0xFB, 0xA7, 0xAF, 0xAC, 0xAB, 0xF3, 0xA8, 0xB7, 0xB5, 0xB6, 0xC7,
      0x8E, 0x8F, 0x92, 0x80, 0xD4, 0x90, 0xD2, 0xD3, 0xD6, 0x49, 0xD7, 0xD8,
      0xD1, 0xA5, 0xE3, 0xE0, 0xE2, 0xE5, 0x99, 0x9E, 0xBF, 0xEB, 0xE9, 0xEA,
      0x9A, 0xED, 0xE7, 0xE1, 0x85, 0xA0, 0x83, 0xC6, 0x84, 0x86, 0x91, 0x87,
      0x8A, 0x82, 0x88, 0x89, 0x8D, 0xA1, 0x8C, 0x8B, 0xD0, 0xA4, 0x95, 0xA2,
      0x93, 0xE4, 0x94, 0xF6, 0xCB, 0x97, 0x75, 0x96, 0x81, 0xEC, 0xE8, 0x98};
  unsigned char d = c;
  if (d >= 0x20 && d <= 0x7F) {
    return d;
  } else if (d >= 0xA0) {
    return display[d - 0xA0];
  } else {
    return 0;
  }
}


x86 assembly (clang, -O0):
<map>:
push   %rbp
mov    %rsp,%rbp
mov    %dil,%al
mov    %al,-0x2(%rbp)
mov    -0x2(%rbp),%al
mov    %al,-0x3(%rbp)
movzbl -0x3(%rbp),%eax
cmp    $0x20,%eax
jl     1135 <map+0x35>
movzbl -0x3(%rbp),%eax
cmp    $0x7f,%eax
jg     1135 <map+0x35>
mov    -0x3(%rbp),%al
mov    %al,-0x1(%rbp)
jmp    1166 <map+0x66>
movzbl -0x3(%rbp),%eax
cmp    $0xa0,%eax
jl     1162 <map+0x62>
movzbl -0x3(%rbp),%eax
sub    $0xa0,%eax
movslq %eax,%rcx
lea    0xea9(%rip),%rax
mov    (%rax,%rcx,1),%al
mov    %al,-0x1(%rbp)
jmp    1166 <map+0x66>
movb   $0x0,-0x1(%rbp)
movsbl -0x1(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<map>:
mov    %edi,%eax
cmp    $0x1f,%al
jg     111c <map+0x1c>
cmp    $0xa0,%al
jb     111d <map+0x1d>
movzbl %al,%eax
add    $0xffffff60,%eax
lea    0xee7(%rip),%rcx
mov    (%rax,%rcx,1),%al
ret
xor    %eax,%eax
ret

LLVM IR (-O0):
@map.display = internal constant [96 x i8] c" \AD\BD\9C\CF\BE|\F5\00\00\A6\AE\00-\00\00\F8\F1\FD\FC'\16\F4.\00\FB\A7\AF\AC\AB\F3\A8\B7\B5\B6\C7\8E\8F\92\80\D4\90\D2\D3\D6I\D7\D8\D1\A5\E3\E0\E2\E5\99\9E\BF\EB\E9\EA\9A\ED\E7\E1\85\A0\83\C6\84\86\91\87\8A\82\88\89\8D\A1\8C\8B\D0\A4\95\A2\93\E4\94\F6\CB\97u\96\81\EC\E8\98"
define signext i8 @map(i8 signext %0) {
%2 = alloca i8
%3 = alloca i8
%4 = alloca i8
store i8 %0, i8* %3
%5 = load i8, i8* %3
store i8 %5, i8* %4
%6 = load i8, i8* %4
%7 = zext i8 %6 to i32
%8 = icmp sge i32 %7, 32
br i1 %8, label %9, label %15
9: ; preds = %1
%10 = load i8, i8* %4
%11 = zext i8 %10 to i32
%12 = icmp sle i32 %11, 127
br i1 %12, label %13, label %15
13: ; preds = %9
%14 = load i8, i8* %4
store i8 %14, i8* %2
br label %27
15: ; preds = %9, %1
%16 = load i8, i8* %4
%17 = zext i8 %16 to i32
%18 = icmp sge i32 %17, 160
br i1 %18, label %19, label %26
19: ; preds = %15
%20 = load i8, i8* %4
%21 = zext i8 %20 to i32
%22 = sub nsw i32 %21, 160
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds [96 x i8], [96 x i8]* @map.display, i64 0, i64 %23
%25 = load i8, i8* %24
store i8 %25, i8* %2
br label %27
26: ; preds = %15
store i8 0, i8* %2
br label %27
27: ; preds = %26, %19, %13
%28 = load i8, i8* %2
ret i8 %28
}

LLVM IR (-O2):
@map.display = internal unnamed_addr constant [96 x i8] c" \AD\BD\9C\CF\BE|\F5\00\00\A6\AE\00-\00\00\F8\F1\FD\FC'\16\F4.\00\FB\A7\AF\AC\AB\F3\A8\B7\B5\B6\C7\8E\8F\92\80\D4\90\D2\D3\D6I\D7\D8\D1\A5\E3\E0\E2\E5\99\9E\BF\EB\E9\EA\9A\ED\E7\E1\85\A0\83\C6\84\86\91\87\8A\82\88\89\8D\A1\8C\8B\D0\A4\95\A2\93\E4\94\F6\CB\97u\96\81\EC\E8\98"
define signext i8 @map(i8 signext %0) {
%2 = zext i8 %0 to i64
%3 = icmp sgt i8 %0, 31
br i1 %3, label %11, label %4
4: ; preds = %1
%5 = icmp ugt i8 %0, -97
br i1 %5, label %6, label %11
6: ; preds = %4
%7 = add nuw nsw i64 %2, 4294967136
%8 = and i64 %7, 4294967295
%9 = getelementptr inbounds [96 x i8], [96 x i8]* @map.display, i64 0, i64 %8
%10 = load i8, i8* %9
br label %11
11: ; preds = %4, %1, %6
%12 = phi i8 [ %10, %6 ], [ %0, %1 ], [ 0, %4 ]
ret i8 %12
}