unsigned char convert_value_to_base32_char(unsigned char value) {
  unsigned char result;
  if (value >= 50 && value <= 55) {
    result = 0x1a + (value - 50);
  } else if (value == 61) {
    result = 0x20;
  } else if ((value <= 49) || (value >= 56 && value <= 64)) {
    result = 0xFF;
  } else if (value >= 65 && value <= 90) {
    result = 0x00 + (value - 65);
  } else if (value >= 91 && value <= 96) {
    result = 0xFF;
  } else if (value >= 97 && value <= 123) {
    result = 0x00 + (value - 97);
  } else {
    result = 0xFF;
  }
  return result;
}


x86 assembly (clang, -O0):
<convert_value_to_base32_char>:
push   %rbp
mov    %rsp,%rbp
mov    %dil,%al
mov    %al,-0x1(%rbp)
movzbl -0x1(%rbp),%eax
cmp    $0x32,%eax
jl     1136 <convert_value_to_base32_char+0x36>
movzbl -0x1(%rbp),%eax
cmp    $0x37,%eax
jg     1136 <convert_value_to_base32_char+0x36>
movzbl -0x1(%rbp),%eax
sub    $0x32,%eax
add    $0x1a,%eax
mov    %al,-0x2(%rbp)
jmp    1214 <convert_value_to_base32_char+0x114>
movzbl -0x1(%rbp),%eax
cmp    $0x3d,%eax
jne    114c <convert_value_to_base32_char+0x4c>
movb   $0x20,-0x2(%rbp)
jmp    120f <convert_value_to_base32_char+0x10f>
movzbl -0x1(%rbp),%eax
cmp    $0x31,%eax
jle    1173 <convert_value_to_base32_char+0x73>
movzbl -0x1(%rbp),%eax
cmp    $0x38,%eax
jl     117c <convert_value_to_base32_char+0x7c>
movzbl -0x1(%rbp),%eax
cmp    $0x40,%eax
jg     117c <convert_value_to_base32_char+0x7c>
movb   $0xff,-0x2(%rbp)
jmp    120a <convert_value_to_base32_char+0x10a>
movzbl -0x1(%rbp),%eax
cmp    $0x41,%eax
jl     11a8 <convert_value_to_base32_char+0xa8>
movzbl -0x1(%rbp),%eax
cmp    $0x5a,%eax
jg     11a8 <convert_value_to_base32_char+0xa8>
movzbl -0x1(%rbp),%eax
sub    $0x41,%eax
add    $0x0,%eax
mov    %al,-0x2(%rbp)
jmp    1205 <convert_value_to_base32_char+0x105>
movzbl -0x1(%rbp),%eax
cmp    $0x5b,%eax
jl     11cb <convert_value_to_base32_char+0xcb>
movzbl -0x1(%rbp),%eax
cmp    $0x60,%eax
jg     11cb <convert_value_to_base32_char+0xcb>
movb   $0xff,-0x2(%rbp)
jmp    1200 <convert_value_to_base32_char+0x100>
movzbl -0x1(%rbp),%eax
cmp    $0x61,%eax
jl     11f7 <convert_value_to_base32_char+0xf7>
movzbl -0x1(%rbp),%eax
cmp    $0x7b,%eax
jg     11f7 <convert_value_to_base32_char+0xf7>
movzbl -0x1(%rbp),%eax
sub    $0x61,%eax
add    $0x0,%eax
mov    %al,-0x2(%rbp)
jmp    11fb <convert_value_to_base32_char+0xfb>
movb   $0xff,-0x2(%rbp)
jmp    1200 <convert_value_to_base32_char+0x100>
jmp    1205 <convert_value_to_base32_char+0x105>
jmp    120a <convert_value_to_base32_char+0x10a>
jmp    120f <convert_value_to_base32_char+0x10f>
jmp    1214 <convert_value_to_base32_char+0x114>
movzbl -0x2(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<convert_value_to_base32_char>:
lea    -0x32(%rdi),%eax
cmp    $0x5,%al
ja     110e <convert_value_to_base32_char+0xe>
add    $0xe8,%dil
mov    %edi,%eax
ret
mov    $0x20,%al
cmp    $0x3d,%dil
je     1141 <convert_value_to_base32_char+0x41>
mov    $0xff,%al
cmp    $0x32,%dil
jb     1141 <convert_value_to_base32_char+0x41>
lea    -0x38(%rdi),%ecx
cmp    $0x9,%cl
jb     1141 <convert_value_to_base32_char+0x41>
lea    -0x41(%rdi),%eax
cmp    $0x1a,%al
jb     1141 <convert_value_to_base32_char+0x41>
add    $0x9f,%dil
cmp    $0x1b,%dil
movzbl %dil,%ecx
mov    $0xff,%eax
cmovb  %ecx,%eax
ret

LLVM IR (-O0):
define zeroext i8 @convert_value_to_base32_char(i8 zeroext %0) {
%2 = alloca i8
%3 = alloca i8
store i8 %0, i8* %2
%4 = load i8, i8* %2
%5 = zext i8 %4 to i32
%6 = icmp sge i32 %5, 50
br i1 %6, label %7, label %17
7: ; preds = %1
%8 = load i8, i8* %2
%9 = zext i8 %8 to i32
%10 = icmp sle i32 %9, 55
br i1 %10, label %11, label %17
11: ; preds = %7
%12 = load i8, i8* %2
%13 = zext i8 %12 to i32
%14 = sub nsw i32 %13, 50
%15 = add nsw i32 26, %14
%16 = trunc i32 %15 to i8
store i8 %16, i8* %3
br label %78
17: ; preds = %7, %1
%18 = load i8, i8* %2
%19 = zext i8 %18 to i32
%20 = icmp eq i32 %19, 61
br i1 %20, label %21, label %22
21: ; preds = %17
store i8 32, i8* %3
br label %77
22: ; preds = %17
%23 = load i8, i8* %2
%24 = zext i8 %23 to i32
%25 = icmp sle i32 %24, 49
br i1 %25, label %34, label %26
26: ; preds = %22
%27 = load i8, i8* %2
%28 = zext i8 %27 to i32
%29 = icmp sge i32 %28, 56
br i1 %29, label %30, label %35
30: ; preds = %26
%31 = load i8, i8* %2
%32 = zext i8 %31 to i32
%33 = icmp sle i32 %32, 64
br i1 %33, label %34, label %35
34: ; preds = %30, %22
store i8 -1, i8* %3
br label %76
35: ; preds = %30, %26
%36 = load i8, i8* %2
%37 = zext i8 %36 to i32
%38 = icmp sge i32 %37, 65
br i1 %38, label %39, label %49
39: ; preds = %35
%40 = load i8, i8* %2
%41 = zext i8 %40 to i32
%42 = icmp sle i32 %41, 90
br i1 %42, label %43, label %49
43: ; preds = %39
%44 = load i8, i8* %2
%45 = zext i8 %44 to i32
%46 = sub nsw i32 %45, 65
%47 = add nsw i32 0, %46
%48 = trunc i32 %47 to i8
store i8 %48, i8* %3
br label %75
49: ; preds = %39, %35
%50 = load i8, i8* %2
%51 = zext i8 %50 to i32
%52 = icmp sge i32 %51, 91
br i1 %52, label %53, label %58
53: ; preds = %49
%54 = load i8, i8* %2
%55 = zext i8 %54 to i32
%56 = icmp sle i32 %55, 96
br i1 %56, label %57, label %58
57: ; preds = %53
store i8 -1, i8* %3
br label %74
58: ; preds = %53, %49
%59 = load i8, i8* %2
%60 = zext i8 %59 to i32
%61 = icmp sge i32 %60, 97
br i1 %61, label %62, label %72
62: ; preds = %58
%63 = load i8, i8* %2
%64 = zext i8 %63 to i32
%65 = icmp sle i32 %64, 123
br i1 %65, label %66, label %72
66: ; preds = %62
%67 = load i8, i8* %2
%68 = zext i8 %67 to i32
%69 = sub nsw i32 %68, 97
%70 = add nsw i32 0, %69
%71 = trunc i32 %70 to i8
store i8 %71, i8* %3
br label %73
72: ; preds = %62, %58
store i8 -1, i8* %3
br label %73
73: ; preds = %72, %66
br label %74
74: ; preds = %73, %57
br label %75
75: ; preds = %74, %43
br label %76
76: ; preds = %75, %34
br label %77
77: ; preds = %76, %21
br label %78
78: ; preds = %77, %11
%79 = load i8, i8* %3
ret i8 %79
}

LLVM IR (-O2):
define zeroext i8 @convert_value_to_base32_char(i8 zeroext %0) {
%2 = add i8 %0, -50
%3 = icmp ult i8 %2, 6
br i1 %3, label %4, label %6
4: ; preds = %1
%5 = add nsw i8 %0, -24
br label %20
6: ; preds = %1
%7 = icmp eq i8 %0, 61
br i1 %7, label %20, label %8
8: ; preds = %6
%9 = icmp ult i8 %0, 50
%10 = add i8 %0, -56
%11 = icmp ult i8 %10, 9
%12 = or i1 %9, %11
br i1 %12, label %20, label %13
13: ; preds = %8
%14 = add i8 %0, -65
%15 = icmp ult i8 %14, 26
br i1 %15, label %20, label %16
16: ; preds = %13
%17 = add i8 %0, -97
%18 = icmp ult i8 %17, 27
%19 = select i1 %18, i8 %17, i8 -1
br label %20
20: ; preds = %13, %16, %8, %6, %4
%21 = phi i8 [ %5, %4 ], [ 32, %6 ], [ -1, %8 ], [ %19, %16 ], [ %14, %13 ]
ret i8 %21
}