void A2C128_A(unsigned char **ppOutPos, unsigned char c) {
  unsigned char *pOutPos = *ppOutPos;
  switch (c) {
  case (unsigned char)(133):
    *pOutPos = 100;
    break;
  case (unsigned char)(131):
    *pOutPos = 101;
    break;
  case (unsigned char)(128):
    *pOutPos = 102;
    break;
  case (unsigned char)(129):
    *pOutPos = 97;
    break;
  case (unsigned char)(130):
    *pOutPos = 96;
    break;
  case (unsigned char)(134):
    *pOutPos = 99;
    break;
  case (unsigned char)(135):
    *pOutPos = 98;
    break;
  default:
    if (c >= ' ' && c <= '_')
      *pOutPos = (unsigned char)(c - ' ');
    else
      *pOutPos = (unsigned char)(c + 64);
    break;
  }
  (*ppOutPos)++;
}


x86 assembly (clang, -O0):
<A2C128_A>:
push   %rbp
mov    %rsp,%rbp
mov    %sil,%al
mov    %rdi,-0x8(%rbp)
mov    %al,-0x9(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x18(%rbp)
movzbl -0x9(%rbp),%eax
add    $0xffffff80,%eax
mov    %eax,%ecx
mov    %rcx,-0x20(%rbp)
sub    $0x7,%eax
ja     1197 <A2C128_A+0x97>
mov    -0x20(%rbp),%rax
lea    0xec6(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x18(%rbp),%rax
movb   $0x64,(%rax)
jmp    11d9 <A2C128_A+0xd9>
mov    -0x18(%rbp),%rax
movb   $0x65,(%rax)
jmp    11d9 <A2C128_A+0xd9>
mov    -0x18(%rbp),%rax
movb   $0x66,(%rax)
jmp    11d9 <A2C128_A+0xd9>
mov    -0x18(%rbp),%rax
movb   $0x61,(%rax)
jmp    11d9 <A2C128_A+0xd9>
mov    -0x18(%rbp),%rax
movb   $0x60,(%rax)
jmp    11d9 <A2C128_A+0xd9>
mov    -0x18(%rbp),%rax
movb   $0x63,(%rax)
jmp    11d9 <A2C128_A+0xd9>
mov    -0x18(%rbp),%rax
movb   $0x62,(%rax)
jmp    11d9 <A2C128_A+0xd9>
movzbl -0x9(%rbp),%eax
cmp    $0x20,%eax
jl     11c5 <A2C128_A+0xc5>
movzbl -0x9(%rbp),%eax
cmp    $0x5f,%eax
jg     11c5 <A2C128_A+0xc5>
movzbl -0x9(%rbp),%eax
sub    $0x20,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %cl,(%rax)
jmp    11d4 <A2C128_A+0xd4>
movzbl -0x9(%rbp),%eax
add    $0x40,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %cl,(%rax)
jmp    11d9 <A2C128_A+0xd9>
mov    -0x8(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<A2C128_A>:
mov    (%rdi),%rax
mov    %esi,%ecx
xor    $0x80,%cl
cmp    $0x8,%cl
jae    111a <A2C128_A+0x1a>
movzbl %cl,%ecx
mov    $0xef,%edx
bt     %ecx,%edx
jb     1130 <A2C128_A+0x30>
lea    -0x20(%rsi),%ecx
add    $0x40,%sil
cmp    $0x40,%cl
movzbl %cl,%ecx
movzbl %sil,%edx
cmovb  %ecx,%edx
jmp    1140 <A2C128_A+0x40>
shl    $0x3,%ecx
movabs $0x6263646465606166,%rdx
64 63 62
shr    %cl,%rdx
mov    %dl,(%rax)
addq   $0x1,(%rdi)
ret

LLVM IR (-O0):
define void @A2C128_A(i8** %0, i8 zeroext %1) {
%3 = alloca i8**
%4 = alloca i8
%5 = alloca i8*
store i8** %0, i8*** %3
store i8 %1, i8* %4
%6 = load i8**, i8*** %3
%7 = load i8*, i8** %6
store i8* %7, i8** %5
%8 = load i8, i8* %4
%9 = zext i8 %8 to i32
switch i32 %9, label %24 [
i32 133, label %10
i32 131, label %12
i32 128, label %14
i32 129, label %16
i32 130, label %18
i32 134, label %20
i32 135, label %22
]
10: ; preds = %2
%11 = load i8*, i8** %5
store i8 100, i8* %11
br label %45
12: ; preds = %2
%13 = load i8*, i8** %5
store i8 101, i8* %13
br label %45
14: ; preds = %2
%15 = load i8*, i8** %5
store i8 102, i8* %15
br label %45
16: ; preds = %2
%17 = load i8*, i8** %5
store i8 97, i8* %17
br label %45
18: ; preds = %2
%19 = load i8*, i8** %5
store i8 96, i8* %19
br label %45
20: ; preds = %2
%21 = load i8*, i8** %5
store i8 99, i8* %21
br label %45
22: ; preds = %2
%23 = load i8*, i8** %5
store i8 98, i8* %23
br label %45
24: ; preds = %2
%25 = load i8, i8* %4
%26 = zext i8 %25 to i32
%27 = icmp sge i32 %26, 32
br i1 %27, label %28, label %38
28: ; preds = %24
%29 = load i8, i8* %4
%30 = zext i8 %29 to i32
%31 = icmp sle i32 %30, 95
br i1 %31, label %32, label %38
32: ; preds = %28
%33 = load i8, i8* %4
%34 = zext i8 %33 to i32
%35 = sub nsw i32 %34, 32
%36 = trunc i32 %35 to i8
%37 = load i8*, i8** %5
store i8 %36, i8* %37
br label %44
38: ; preds = %28, %24
%39 = load i8, i8* %4
%40 = zext i8 %39 to i32
%41 = add nsw i32 %40, 64
%42 = trunc i32 %41 to i8
%43 = load i8*, i8** %5
store i8 %42, i8* %43
br label %44
44: ; preds = %38, %32
br label %45
45: ; preds = %44, %22, %20, %18, %16, %14, %12, %10
%46 = load i8**, i8*** %3
%47 = load i8*, i8** %46
%48 = getelementptr inbounds i8, i8* %47, i32 1
store i8* %48, i8** %46
ret void
}

LLVM IR (-O2):
define void @A2C128_A(i8** nocapture %0, i8 zeroext %1) {
%3 = load i8*, i8** %0
%4 = xor i8 %1, -128
%5 = icmp ult i8 %4, 8
br i1 %5, label %11, label %6
6: ; preds = %11, %2
%7 = add i8 %1, -32
%8 = icmp ult i8 %7, 64
%9 = add i8 %1, 64
%10 = select i1 %8, i8 %7, i8 %9
br label %20
11: ; preds = %2
%12 = lshr i8 -17, %4
%13 = and i8 %12, 1
%14 = icmp eq i8 %13, 0
br i1 %14, label %6, label %15
15: ; preds = %11
%16 = zext i8 %4 to i64
%17 = shl nuw nsw i64 %16, 3
%18 = lshr i64 7089620620771615078, %17
%19 = trunc i64 %18 to i8
br label %20
20: ; preds = %15, %6
%21 = phi i8 [ %10, %6 ], [ %19, %15 ]
store i8 %21, i8* %3
%22 = load i8*, i8** %0
%23 = getelementptr inbounds i8, i8* %22, i64 1
store i8* %23, i8** %0
ret void
}