char alpha41(int v) {
  char c;
  v &= 0x13f;
  if (v <= 0x1f)
    c = v + '@';
  else if (v <= 0x3f) {
    if (v == 0x2c)
      c = '<';
    else if (v == 0x2e)
      c = '>';
    else if (v == 0x3a)
      c = '*';
    else
      c = v;
  } else if (v <= 0x105)
    c = v - 0xa0;
  else if (v <= 0x11f)
    if (v == 0x106)
      c = '~';
    else if (v == 0x107)
      c = '\'';
    else if (v == 0x10c)
      c = 'u';
    else if (v == 0x10d)
      c = '#';
    else if (v == 0x10e)
      c = 's';
    else if (v == 0x10f)
      c = 'a';
    else
      c = 'x';
  else
    c = v - 0x120 + 'a' - 1;
  return (c);
}


x86 assembly (clang, -O0):
<alpha41>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    -0x4(%rbp),%eax
and    $0x13f,%eax
mov    %eax,-0x4(%rbp)
cmpl   $0x1f,-0x4(%rbp)
jg     112a <alpha41+0x2a>
mov    -0x4(%rbp),%eax
add    $0x40,%eax
mov    %al,-0x5(%rbp)
jmp    1272 <alpha41+0x172>
cmpl   $0x3f,-0x4(%rbp)
jg     1182 <alpha41+0x82>
cmpl   $0x2c,-0x4(%rbp)
jne    1147 <alpha41+0x47>
movb   $0x3c,-0x5(%rbp)
jmp    117d <alpha41+0x7d>
cmpl   $0x2e,-0x4(%rbp)
jne    115a <alpha41+0x5a>
movb   $0x3e,-0x5(%rbp)
jmp    1178 <alpha41+0x78>
cmpl   $0x3a,-0x4(%rbp)
jne    116d <alpha41+0x6d>
movb   $0x2a,-0x5(%rbp)
jmp    1173 <alpha41+0x73>
mov    -0x4(%rbp),%eax
mov    %al,-0x5(%rbp)
jmp    1178 <alpha41+0x78>
jmp    117d <alpha41+0x7d>
jmp    126d <alpha41+0x16d>
cmpl   $0x105,-0x4(%rbp)
jg     119f <alpha41+0x9f>
mov    -0x4(%rbp),%eax
sub    $0xa0,%eax
mov    %al,-0x5(%rbp)
jmp    1268 <alpha41+0x168>
cmpl   $0x11f,-0x4(%rbp)
jg     1252 <alpha41+0x152>
cmpl   $0x106,-0x4(%rbp)
jne    11c2 <alpha41+0xc2>
movb   $0x7e,-0x5(%rbp)
jmp    124d <alpha41+0x14d>
cmpl   $0x107,-0x4(%rbp)
jne    11d8 <alpha41+0xd8>
movb   $0x27,-0x5(%rbp)
jmp    1248 <alpha41+0x148>
cmpl   $0x10c,-0x4(%rbp)
jne    11ee <alpha41+0xee>
movb   $0x75,-0x5(%rbp)
jmp    1243 <alpha41+0x143>
cmpl   $0x10d,-0x4(%rbp)
jne    1204 <alpha41+0x104>
movb   $0x23,-0x5(%rbp)
jmp    123e <alpha41+0x13e>
cmpl   $0x10e,-0x4(%rbp)
jne    121a <alpha41+0x11a>
movb   $0x73,-0x5(%rbp)
jmp    1239 <alpha41+0x139>
cmpl   $0x10f,-0x4(%rbp)
jne    1230 <alpha41+0x130>
movb   $0x61,-0x5(%rbp)
jmp    1234 <alpha41+0x134>
movb   $0x78,-0x5(%rbp)
jmp    1239 <alpha41+0x139>
jmp    123e <alpha41+0x13e>
jmp    1243 <alpha41+0x143>
jmp    1248 <alpha41+0x148>
jmp    124d <alpha41+0x14d>
jmp    1263 <alpha41+0x163>
mov    -0x4(%rbp),%eax
sub    $0x120,%eax
add    $0x61,%eax
sub    $0x1,%eax
mov    %al,-0x5(%rbp)
jmp    1268 <alpha41+0x168>
jmp    126d <alpha41+0x16d>
jmp    1272 <alpha41+0x172>
movsbl -0x5(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<alpha41>:
mov    %edi,%eax
and    $0x13f,%eax
cmp    $0x1f,%eax
ja     110f <alpha41+0xf>
or     $0x40,%al
ret
cmp    $0x3f,%eax
ja     1126 <alpha41+0x26>
cmp    $0x2c,%eax
je     1155 <alpha41+0x55>
cmp    $0x3a,%eax
je     1152 <alpha41+0x52>
cmp    $0x2e,%eax
jne    1151 <alpha41+0x51>
mov    $0x3e,%al
ret
cmp    $0x105,%eax
ja     1130 <alpha41+0x30>
add    $0x60,%al
ret
cmp    $0x11f,%eax
ja     110c <alpha41+0xc>
mov    %eax,%ecx
add    $0xfffffffffffffefa,%rcx
mov    $0x78,%al
cmp    $0xa,%ecx
jae    1151 <alpha41+0x51>
lea    0xeb2(%rip),%rax
mov    (%rcx,%rax,1),%al
ret
mov    $0x2a,%al
ret
mov    $0x3c,%al
ret

LLVM IR (-O0):
define signext i8 @alpha41(i32 %0) {
%2 = alloca i32
%3 = alloca i8
store i32 %0, i32* %2
%4 = load i32, i32* %2
%5 = and i32 %4, 319
store i32 %5, i32* %2
%6 = load i32, i32* %2
%7 = icmp sle i32 %6, 31
br i1 %7, label %8, label %12
8: ; preds = %1
%9 = load i32, i32* %2
%10 = add nsw i32 %9, 64
%11 = trunc i32 %10 to i8
store i8 %11, i8* %3
br label %83
12: ; preds = %1
%13 = load i32, i32* %2
%14 = icmp sle i32 %13, 63
br i1 %14, label %15, label %33
15: ; preds = %12
%16 = load i32, i32* %2
%17 = icmp eq i32 %16, 44
br i1 %17, label %18, label %19
18: ; preds = %15
store i8 60, i8* %3
br label %32
19: ; preds = %15
%20 = load i32, i32* %2
%21 = icmp eq i32 %20, 46
br i1 %21, label %22, label %23
22: ; preds = %19
store i8 62, i8* %3
br label %31
23: ; preds = %19
%24 = load i32, i32* %2
%25 = icmp eq i32 %24, 58
br i1 %25, label %26, label %27
26: ; preds = %23
store i8 42, i8* %3
br label %30
27: ; preds = %23
%28 = load i32, i32* %2
%29 = trunc i32 %28 to i8
store i8 %29, i8* %3
br label %30
30: ; preds = %27, %26
br label %31
31: ; preds = %30, %22
br label %32
32: ; preds = %31, %18
br label %82
33: ; preds = %12
%34 = load i32, i32* %2
%35 = icmp sle i32 %34, 261
br i1 %35, label %36, label %40
36: ; preds = %33
%37 = load i32, i32* %2
%38 = sub nsw i32 %37, 160
%39 = trunc i32 %38 to i8
store i8 %39, i8* %3
br label %81
40: ; preds = %33
%41 = load i32, i32* %2
%42 = icmp sle i32 %41, 287
br i1 %42, label %43, label %74
43: ; preds = %40
%44 = load i32, i32* %2
%45 = icmp eq i32 %44, 262
br i1 %45, label %46, label %47
46: ; preds = %43
store i8 126, i8* %3
br label %73
47: ; preds = %43
%48 = load i32, i32* %2
%49 = icmp eq i32 %48, 263
br i1 %49, label %50, label %51
50: ; preds = %47
store i8 39, i8* %3
br label %72
51: ; preds = %47
%52 = load i32, i32* %2
%53 = icmp eq i32 %52, 268
br i1 %53, label %54, label %55
54: ; preds = %51
store i8 117, i8* %3
br label %71
55: ; preds = %51
%56 = load i32, i32* %2
%57 = icmp eq i32 %56, 269
br i1 %57, label %58, label %59
58: ; preds = %55
store i8 35, i8* %3
br label %70
59: ; preds = %55
%60 = load i32, i32* %2
%61 = icmp eq i32 %60, 270
br i1 %61, label %62, label %63
62: ; preds = %59
store i8 115, i8* %3
br label %69
63: ; preds = %59
%64 = load i32, i32* %2
%65 = icmp eq i32 %64, 271
br i1 %65, label %66, label %67
66: ; preds = %63
store i8 97, i8* %3
br label %68
67: ; preds = %63
store i8 120, i8* %3
br label %68
68: ; preds = %67, %66
br label %69
69: ; preds = %68, %62
br label %70
70: ; preds = %69, %58
br label %71
71: ; preds = %70, %54
br label %72
72: ; preds = %71, %50
br label %73
73: ; preds = %72, %46
br label %80
74: ; preds = %40
%75 = load i32, i32* %2
%76 = sub nsw i32 %75, 288
%77 = add nsw i32 %76, 97
%78 = sub nsw i32 %77, 1
%79 = trunc i32 %78 to i8
store i8 %79, i8* %3
br label %80
80: ; preds = %74, %73
br label %81
81: ; preds = %80, %36
br label %82
82: ; preds = %81, %32
br label %83
83: ; preds = %82, %8
%84 = load i8, i8* %3
ret i8 %84
}

LLVM IR (-O2):
@switch.table.alpha41 = [10 x i8] c"~'xxxxu#sa"
define signext i8 @alpha41(i32 %0) {
%2 = and i32 %0, 319
%3 = icmp ult i32 %2, 32
br i1 %3, label %4, label %7
4: ; preds = %1
%5 = trunc i32 %2 to i8
%6 = or i8 %5, 64
br label %31
7: ; preds = %1
%8 = icmp ult i32 %2, 64
br i1 %8, label %9, label %14
9: ; preds = %7
switch i32 %2, label %12 [
i32 44, label %31
i32 46, label %10
i32 58, label %11
]
10: ; preds = %9
br label %31
11: ; preds = %9
br label %31
12: ; preds = %9
%13 = trunc i32 %2 to i8
br label %31
14: ; preds = %7
%15 = icmp ult i32 %2, 262
br i1 %15, label %16, label %19
16: ; preds = %14
%17 = trunc i32 %2 to i8
%18 = add nuw i8 %17, 96
br label %31
19: ; preds = %14
%20 = icmp ult i32 %2, 288
br i1 %20, label %21, label %24
21: ; preds = %19
%22 = add nsw i32 %2, -262
%23 = icmp ult i32 %22, 10
br i1 %23, label %27, label %31
24: ; preds = %19
%25 = trunc i32 %2 to i8
%26 = or i8 %25, 64
br label %31
27: ; preds = %21
%28 = sext i32 %22 to i64
%29 = getelementptr inbounds [10 x i8], [10 x i8]* @switch.table.alpha41, i64 0, i64 %28
%30 = load i8, i8* %29
br label %31
31: ; preds = %21, %27, %9, %10, %12, %11, %24, %16, %4
%32 = phi i8 [ %6, %4 ], [ 62, %10 ], [ 42, %11 ], [ %13, %12 ], [ %18, %16 ], [ %26, %24 ], [ 60, %9 ], [ %30, %27 ], [ 120, %21 ]
ret i8 %32
}