int base64decode(const char *encoded, char *decoded) {
  char c, t1, t2, u1, u2, u3;
  while (1) {
    c = *encoded++;
    if (c == 0) {
      *decoded = 0;
      return 0;
    }
    t1 = ((c) >= 'A'   ? ((c) <= 'Z'   ? (c) - 'A'
                          : (c) >= 'a' ? (c <= 'z' ? (c) - 'a' + 26 : 64)
                                       : 64)
          : (c) <= '9' ? ((c) >= '0'   ? (c) - '0' + 52
                          : (c) == '+' ? 62
                          : (c) == '/' ? 63
                                       : 64)
          : (c) == '=' ? 0
                       : 64);
    if (t1 == 64)
      return -1;
    c = *encoded++;
    if (c == 0)
      return -1;
    t2 = ((c) >= 'A'   ? ((c) <= 'Z'   ? (c) - 'A'
                          : (c) >= 'a' ? (c <= 'z' ? (c) - 'a' + 26 : 64)
                                       : 64)
          : (c) <= '9' ? ((c) >= '0'   ? (c) - '0' + 52
                          : (c) == '+' ? 62
                          : (c) == '/' ? 63
                                       : 64)
          : (c) == '=' ? 0
                       : 64);
    if (t2 == 64)
      return -1;
    u1 = t1 << 2 | t2 >> 4;
    c = *encoded++;
    if (c == 0)
      return -1;
    t1 = ((c) >= 'A'   ? ((c) <= 'Z'   ? (c) - 'A'
                          : (c) >= 'a' ? (c <= 'z' ? (c) - 'a' + 26 : 64)
                                       : 64)
          : (c) <= '9' ? ((c) >= '0'   ? (c) - '0' + 52
                          : (c) == '+' ? 62
                          : (c) == '/' ? 63
                                       : 64)
          : (c) == '=' ? 0
                       : 64);
    if (t1 == 64)
      return -1;
    u2 = (t2 & 0xf) << 4 | t1 >> 2;
    c = *encoded++;
    if (c == 0)
      return -1;
    t2 = ((c) >= 'A'   ? ((c) <= 'Z'   ? (c) - 'A'
                          : (c) >= 'a' ? (c <= 'z' ? (c) - 'a' + 26 : 64)
                                       : 64)
          : (c) <= '9' ? ((c) >= '0'   ? (c) - '0' + 52
                          : (c) == '+' ? 62
                          : (c) == '/' ? 63
                                       : 64)
          : (c) == '=' ? 0
                       : 64);
    if (t2 == 64)
      return -1;
    u3 = (t1 & 0x3) << 6 | t2;
    *decoded++ = u1;
    if (u1 == 0)
      return 0;
    *decoded++ = u2;
    if (u2 == 0)
      return 0;
    *decoded++ = u3;
    if (u3 == 0)
      return 0;
  }
}


x86 assembly (clang, -O0):
<base64decode>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x19(%rbp)
movsbl -0x19(%rbp),%eax
cmp    $0x0,%eax
jne    1144 <base64decode+0x44>
mov    -0x18(%rbp),%rax
movb   $0x0,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    177f <base64decode+0x67f>
movsbl -0x19(%rbp),%eax
cmp    $0x41,%eax
jl     11cf <base64decode+0xcf>
movsbl -0x19(%rbp),%eax
cmp    $0x5a,%eax
jg     116d <base64decode+0x6d>
movsbl -0x19(%rbp),%eax
sub    $0x41,%eax
mov    %eax,-0x24(%rbp)
jmp    11c4 <base64decode+0xc4>
movsbl -0x19(%rbp),%eax
cmp    $0x61,%eax
jl     11b1 <base64decode+0xb1>
movsbl -0x19(%rbp),%eax
cmp    $0x7a,%eax
jg     1199 <base64decode+0x99>
movsbl -0x19(%rbp),%eax
sub    $0x61,%eax
add    $0x1a,%eax
mov    %eax,-0x28(%rbp)
jmp    11a6 <base64decode+0xa6>
mov    $0x40,%eax
mov    %eax,-0x28(%rbp)
jmp    11a6 <base64decode+0xa6>
mov    -0x28(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    11be <base64decode+0xbe>
mov    $0x40,%eax
mov    %eax,-0x2c(%rbp)
jmp    11be <base64decode+0xbe>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x30(%rbp)
jmp    1257 <base64decode+0x157>
movsbl -0x19(%rbp),%eax
cmp    $0x39,%eax
jg     123d <base64decode+0x13d>
movsbl -0x19(%rbp),%eax
cmp    $0x30,%eax
jl     11fb <base64decode+0xfb>
movsbl -0x19(%rbp),%eax
sub    $0x30,%eax
add    $0x34,%eax
mov    %eax,-0x34(%rbp)
jmp    1232 <base64decode+0x132>
movsbl -0x19(%rbp),%eax
cmp    $0x2b,%eax
jne    1215 <base64decode+0x115>
mov    $0x3e,%eax
mov    %eax,-0x38(%rbp)
jmp    122c <base64decode+0x12c>
movsbl -0x19(%rbp),%edx
mov    $0x40,%eax
mov    $0x3f,%ecx
cmp    $0x2f,%edx
cmove  %ecx,%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x3c(%rbp)
jmp    1251 <base64decode+0x151>
movsbl -0x19(%rbp),%edx
mov    $0x40,%eax
xor    %ecx,%ecx
cmp    $0x3d,%edx
cmove  %ecx,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %al,-0x1a(%rbp)
movsbl -0x1a(%rbp),%eax
cmp    $0x40,%eax
jne    1276 <base64decode+0x176>
movl   $0xffffffff,-0x4(%rbp)
jmp    177f <base64decode+0x67f>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x19(%rbp)
movsbl -0x19(%rbp),%eax
cmp    $0x0,%eax
jne    12a3 <base64decode+0x1a3>
movl   $0xffffffff,-0x4(%rbp)
jmp    177f <base64decode+0x67f>
movsbl -0x19(%rbp),%eax
cmp    $0x41,%eax
jl     132e <base64decode+0x22e>
movsbl -0x19(%rbp),%eax
cmp    $0x5a,%eax
jg     12cc <base64decode+0x1cc>
movsbl -0x19(%rbp),%eax
sub    $0x41,%eax
mov    %eax,-0x40(%rbp)
jmp    1323 <base64decode+0x223>
movsbl -0x19(%rbp),%eax
cmp    $0x61,%eax
jl     1310 <base64decode+0x210>
movsbl -0x19(%rbp),%eax
cmp    $0x7a,%eax
jg     12f8 <base64decode+0x1f8>
movsbl -0x19(%rbp),%eax
sub    $0x61,%eax
add    $0x1a,%eax
mov    %eax,-0x44(%rbp)
jmp    1305 <base64decode+0x205>
mov    $0x40,%eax
mov    %eax,-0x44(%rbp)
jmp    1305 <base64decode+0x205>
mov    -0x44(%rbp),%eax
mov    %eax,-0x48(%rbp)
jmp    131d <base64decode+0x21d>
mov    $0x40,%eax
mov    %eax,-0x48(%rbp)
jmp    131d <base64decode+0x21d>
mov    -0x48(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x4c(%rbp)
jmp    13b6 <base64decode+0x2b6>
movsbl -0x19(%rbp),%eax
cmp    $0x39,%eax
jg     139c <base64decode+0x29c>
movsbl -0x19(%rbp),%eax
cmp    $0x30,%eax
jl     135a <base64decode+0x25a>
movsbl -0x19(%rbp),%eax
sub    $0x30,%eax
add    $0x34,%eax
mov    %eax,-0x50(%rbp)
jmp    1391 <base64decode+0x291>
movsbl -0x19(%rbp),%eax
cmp    $0x2b,%eax
jne    1374 <base64decode+0x274>
mov    $0x3e,%eax
mov    %eax,-0x54(%rbp)
jmp    138b <base64decode+0x28b>
movsbl -0x19(%rbp),%edx
mov    $0x40,%eax
mov    $0x3f,%ecx
cmp    $0x2f,%edx
cmove  %ecx,%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
mov    %eax,-0x58(%rbp)
jmp    13b0 <base64decode+0x2b0>
movsbl -0x19(%rbp),%edx
mov    $0x40,%eax
xor    %ecx,%ecx
cmp    $0x3d,%edx
cmove  %ecx,%eax
mov    %eax,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    %al,-0x1b(%rbp)
movsbl -0x1b(%rbp),%eax
cmp    $0x40,%eax
jne    13d5 <base64decode+0x2d5>
movl   $0xffffffff,-0x4(%rbp)
jmp    177f <base64decode+0x67f>
movsbl -0x1a(%rbp),%eax
shl    $0x2,%eax
movsbl -0x1b(%rbp),%ecx
sar    $0x4,%ecx
or     %ecx,%eax
mov    %al,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x19(%rbp)
movsbl -0x19(%rbp),%eax
cmp    $0x0,%eax
jne    1415 <base64decode+0x315>
movl   $0xffffffff,-0x4(%rbp)
jmp    177f <base64decode+0x67f>
movsbl -0x19(%rbp),%eax
cmp    $0x41,%eax
jl     14a0 <base64decode+0x3a0>
movsbl -0x19(%rbp),%eax
cmp    $0x5a,%eax
jg     143e <base64decode+0x33e>
movsbl -0x19(%rbp),%eax
sub    $0x41,%eax
mov    %eax,-0x5c(%rbp)
jmp    1495 <base64decode+0x395>
movsbl -0x19(%rbp),%eax
cmp    $0x61,%eax
jl     1482 <base64decode+0x382>
movsbl -0x19(%rbp),%eax
cmp    $0x7a,%eax
jg     146a <base64decode+0x36a>
movsbl -0x19(%rbp),%eax
sub    $0x61,%eax
add    $0x1a,%eax
mov    %eax,-0x60(%rbp)
jmp    1477 <base64decode+0x377>
mov    $0x40,%eax
mov    %eax,-0x60(%rbp)
jmp    1477 <base64decode+0x377>
mov    -0x60(%rbp),%eax
mov    %eax,-0x64(%rbp)
jmp    148f <base64decode+0x38f>
mov    $0x40,%eax
mov    %eax,-0x64(%rbp)
jmp    148f <base64decode+0x38f>
mov    -0x64(%rbp),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
mov    %eax,-0x68(%rbp)
jmp    1528 <base64decode+0x428>
movsbl -0x19(%rbp),%eax
cmp    $0x39,%eax
jg     150e <base64decode+0x40e>
movsbl -0x19(%rbp),%eax
cmp    $0x30,%eax
jl     14cc <base64decode+0x3cc>
movsbl -0x19(%rbp),%eax
sub    $0x30,%eax
add    $0x34,%eax
mov    %eax,-0x6c(%rbp)
jmp    1503 <base64decode+0x403>
movsbl -0x19(%rbp),%eax
cmp    $0x2b,%eax
jne    14e6 <base64decode+0x3e6>
mov    $0x3e,%eax
mov    %eax,-0x70(%rbp)
jmp    14fd <base64decode+0x3fd>
movsbl -0x19(%rbp),%edx
mov    $0x40,%eax
mov    $0x3f,%ecx
cmp    $0x2f,%edx
cmove  %ecx,%eax
mov    %eax,-0x70(%rbp)
mov    -0x70(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
mov    %eax,-0x74(%rbp)
jmp    1522 <base64decode+0x422>
movsbl -0x19(%rbp),%edx
mov    $0x40,%eax
xor    %ecx,%ecx
cmp    $0x3d,%edx
cmove  %ecx,%eax
mov    %eax,-0x74(%rbp)
mov    -0x74(%rbp),%eax
mov    %eax,-0x68(%rbp)
mov    -0x68(%rbp),%eax
mov    %al,-0x1a(%rbp)
movsbl -0x1a(%rbp),%eax
cmp    $0x40,%eax
jne    1547 <base64decode+0x447>
movl   $0xffffffff,-0x4(%rbp)
jmp    177f <base64decode+0x67f>
movsbl -0x1b(%rbp),%eax
and    $0xf,%eax
shl    $0x4,%eax
movsbl -0x1a(%rbp),%ecx
sar    $0x2,%ecx
or     %ecx,%eax
mov    %al,-0x1d(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x19(%rbp)
movsbl -0x19(%rbp),%eax
cmp    $0x0,%eax
jne    158a <base64decode+0x48a>
movl   $0xffffffff,-0x4(%rbp)
jmp    177f <base64decode+0x67f>
movsbl -0x19(%rbp),%eax
cmp    $0x41,%eax
jl     1618 <base64decode+0x518>
movsbl -0x19(%rbp),%eax
cmp    $0x5a,%eax
jg     15b3 <base64decode+0x4b3>
movsbl -0x19(%rbp),%eax
sub    $0x41,%eax
mov    %eax,-0x78(%rbp)
jmp    160a <base64decode+0x50a>
movsbl -0x19(%rbp),%eax
cmp    $0x61,%eax
jl     15f7 <base64decode+0x4f7>
movsbl -0x19(%rbp),%eax
cmp    $0x7a,%eax
jg     15df <base64decode+0x4df>
movsbl -0x19(%rbp),%eax
sub    $0x61,%eax
add    $0x1a,%eax
mov    %eax,-0x7c(%rbp)
jmp    15ec <base64decode+0x4ec>
mov    $0x40,%eax
mov    %eax,-0x7c(%rbp)
jmp    15ec <base64decode+0x4ec>
mov    -0x7c(%rbp),%eax
mov    %eax,-0x80(%rbp)
jmp    1604 <base64decode+0x504>
mov    $0x40,%eax
mov    %eax,-0x80(%rbp)
jmp    1604 <base64decode+0x504>
mov    -0x80(%rbp),%eax
mov    %eax,-0x78(%rbp)
mov    -0x78(%rbp),%eax
mov    %eax,-0x84(%rbp)
jmp    16be <base64decode+0x5be>
movsbl -0x19(%rbp),%eax
cmp    $0x39,%eax
jg     169b <base64decode+0x59b>
movsbl -0x19(%rbp),%eax
cmp    $0x30,%eax
jl     1647 <base64decode+0x547>
movsbl -0x19(%rbp),%eax
sub    $0x30,%eax
add    $0x34,%eax
mov    %eax,-0x88(%rbp)
jmp    168a <base64decode+0x58a>
movsbl -0x19(%rbp),%eax
cmp    $0x2b,%eax
jne    1664 <base64decode+0x564>
mov    $0x3e,%eax
mov    %eax,-0x8c(%rbp)
jmp    167e <base64decode+0x57e>
movsbl -0x19(%rbp),%edx
mov    $0x40,%eax
mov    $0x3f,%ecx
cmp    $0x2f,%edx
cmove  %ecx,%eax
mov    %eax,-0x8c(%rbp)
mov    -0x8c(%rbp),%eax
mov    %eax,-0x88(%rbp)
mov    -0x88(%rbp),%eax
mov    %eax,-0x90(%rbp)
jmp    16b2 <base64decode+0x5b2>
movsbl -0x19(%rbp),%edx
mov    $0x40,%eax
xor    %ecx,%ecx
cmp    $0x3d,%edx
cmove  %ecx,%eax
mov    %eax,-0x90(%rbp)
mov    -0x90(%rbp),%eax
mov    %eax,-0x84(%rbp)
mov    -0x84(%rbp),%eax
mov    %al,-0x1b(%rbp)
movsbl -0x1b(%rbp),%eax
cmp    $0x40,%eax
jne    16e0 <base64decode+0x5e0>
movl   $0xffffffff,-0x4(%rbp)
jmp    177f <base64decode+0x67f>
movsbl -0x1a(%rbp),%eax
and    $0x3,%eax
shl    $0x6,%eax
movsbl -0x1b(%rbp),%ecx
or     %ecx,%eax
mov    %al,-0x1e(%rbp)
mov    -0x1c(%rbp),%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
movsbl -0x1c(%rbp),%eax
cmp    $0x0,%eax
jne    1720 <base64decode+0x620>
movl   $0x0,-0x4(%rbp)
jmp    177f <base64decode+0x67f>
mov    -0x1d(%rbp),%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
movsbl -0x1d(%rbp),%eax
cmp    $0x0,%eax
jne    174d <base64decode+0x64d>
movl   $0x0,-0x4(%rbp)
jmp    177f <base64decode+0x67f>
mov    -0x1e(%rbp),%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
movsbl -0x1e(%rbp),%eax
cmp    $0x0,%eax
jne    177a <base64decode+0x67a>
movl   $0x0,-0x4(%rbp)
jmp    177f <base64decode+0x67f>
jmp    1110 <base64decode+0x10>
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<base64decode>:
movzbl (%rdi),%eax
test   %al,%al
je     1350 <base64decode+0x250>
cmp    $0x41,%al
jl     1120 <base64decode+0x20>
cmp    $0x5a,%al
ja     1130 <base64decode+0x30>
add    $0xbf,%al
mov    %eax,%r8d
jmp    1170 <base64decode+0x70>
nopw   0x0(%rax,%rax,1)
cmp    $0x39,%al
jg     1150 <base64decode+0x50>
cmp    $0x30,%al
jl     115d <base64decode+0x5d>
add    $0x4,%al
mov    %eax,%r8d
jmp    1170 <base64decode+0x70>
nop
lea    -0x61(%rax),%ecx
cmp    $0x1a,%cl
jae    1356 <base64decode+0x256>
add    $0xb9,%al
mov    %eax,%r8d
jmp    1170 <base64decode+0x70>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmp    $0x3d,%al
jne    1356 <base64decode+0x256>
xor    %r8d,%r8d
jmp    1170 <base64decode+0x70>
mov    $0x3e,%r8b
cmp    $0x2b,%al
je     1170 <base64decode+0x70>
cmp    $0x2f,%al
jne    1356 <base64decode+0x256>
mov    $0x3f,%r8b
nop
movzbl 0x1(%rdi),%ecx
mov    $0xffffffff,%eax
test   %cl,%cl
je     134f <base64decode+0x24f>
cmp    $0x41,%cl
jl     11a0 <base64decode+0xa0>
cmp    $0x5a,%cl
ja     11c0 <base64decode+0xc0>
add    $0xbf,%cl
mov    %ecx,%r9d
jmp    1210 <base64decode+0x110>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmp    $0x39,%cl
jg     11e0 <base64decode+0xe0>
cmp    $0x30,%cl
jl     11ee <base64decode+0xee>
add    $0x4,%cl
mov    %ecx,%r9d
jmp    1210 <base64decode+0x110>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
lea    -0x61(%rcx),%edx
cmp    $0x1a,%dl
jae    134f <base64decode+0x24f>
add    $0xb9,%cl
mov    %ecx,%r9d
jmp    1210 <base64decode+0x110>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmp    $0x3d,%cl
jne    134f <base64decode+0x24f>
xor    %r9d,%r9d
jmp    1210 <base64decode+0x110>
mov    $0x3e,%r9b
cmp    $0x2b,%cl
je     1210 <base64decode+0x110>
cmp    $0x2f,%cl
jne    134f <base64decode+0x24f>
mov    $0x3f,%r9b
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl 0x2(%rdi),%ecx
test   %cl,%cl
je     134f <base64decode+0x24f>
cmp    $0x41,%cl
jl     1230 <base64decode+0x130>
cmp    $0x5a,%cl
ja     1250 <base64decode+0x150>
add    $0xbf,%cl
mov    %ecx,%r10d
jmp    12a0 <base64decode+0x1a0>
xchg   %ax,%ax
cmp    $0x39,%cl
jg     1270 <base64decode+0x170>
cmp    $0x30,%cl
jl     127e <base64decode+0x17e>
add    $0x4,%cl
mov    %ecx,%r10d
jmp    12a0 <base64decode+0x1a0>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
lea    -0x61(%rcx),%edx
cmp    $0x1a,%dl
jae    134f <base64decode+0x24f>
add    $0xb9,%cl
mov    %ecx,%r10d
jmp    12a0 <base64decode+0x1a0>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmp    $0x3d,%cl
jne    134f <base64decode+0x24f>
xor    %r10d,%r10d
jmp    12a0 <base64decode+0x1a0>
mov    $0x3e,%r10b
cmp    $0x2b,%cl
je     12a0 <base64decode+0x1a0>
cmp    $0x2f,%cl
jne    134f <base64decode+0x24f>
mov    $0x3f,%r10b
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl 0x3(%rdi),%ecx
test   %cl,%cl
je     134f <base64decode+0x24f>
cmp    $0x41,%cl
jl     12c0 <base64decode+0x1c0>
cmp    $0x5a,%cl
ja     12e0 <base64decode+0x1e0>
add    $0xbf,%cl
mov    %ecx,%edx
jmp    1310 <base64decode+0x210>
nopl   (%rax)
cmp    $0x39,%cl
jg     12f0 <base64decode+0x1f0>
cmp    $0x30,%cl
jl     12f9 <base64decode+0x1f9>
add    $0x4,%cl
mov    %ecx,%edx
jmp    1310 <base64decode+0x210>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
lea    -0x61(%rcx),%edx
cmp    $0x1a,%dl
jae    134f <base64decode+0x24f>
add    $0xb9,%cl
mov    %ecx,%edx
jmp    1310 <base64decode+0x210>
nop
cmp    $0x3d,%cl
jne    134f <base64decode+0x24f>
xor    %edx,%edx
jmp    1310 <base64decode+0x210>
mov    $0x3e,%dl
cmp    $0x2b,%cl
je     1310 <base64decode+0x210>
cmp    $0x2f,%cl
jne    134f <base64decode+0x24f>
mov    $0x3f,%dl
nopw   0x0(%rax,%rax,1)
shl    $0x2,%r8b
mov    %r9d,%ecx
shr    $0x4,%cl
xor    %eax,%eax
or     %r8b,%cl
mov    %cl,(%rsi)
je     134f <base64decode+0x24f>
shl    $0x4,%r9b
mov    %r10d,%ecx
shr    $0x2,%cl
or     %r9b,%cl
mov    %cl,0x1(%rsi)
je     134f <base64decode+0x24f>
shl    $0x6,%r10b
or     %r10b,%dl
mov    %dl,0x2(%rsi)
add    $0x3,%rsi
add    $0x4,%rdi
test   %dl,%dl
jne    1100 <base64decode>
ret
movb   $0x0,(%rsi)
xor    %eax,%eax
ret
mov    $0xffffffff,%eax
ret

LLVM IR (-O0):
define i32 @base64decode(i8* %0, i8* %1) {
%3 = alloca i32
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i8
%7 = alloca i8
%8 = alloca i8
%9 = alloca i8
%10 = alloca i8
%11 = alloca i8
store i8* %0, i8** %4
store i8* %1, i8** %5
br label %12
12: ; preds = %2, %398
%13 = load i8*, i8** %4
%14 = getelementptr inbounds i8, i8* %13, i32 1
store i8* %14, i8** %4
%15 = load i8, i8* %13
store i8 %15, i8* %6
%16 = load i8, i8* %6
%17 = sext i8 %16 to i32
%18 = icmp eq i32 %17, 0
br i1 %18, label %19, label %21
19: ; preds = %12
%20 = load i8*, i8** %5
store i8 0, i8* %20
store i32 0, i32* %3
br label %399
21: ; preds = %12
%22 = load i8, i8* %6
%23 = sext i8 %22 to i32
%24 = icmp sge i32 %23, 65
br i1 %24, label %25, label %54
25: ; preds = %21
%26 = load i8, i8* %6
%27 = sext i8 %26 to i32
%28 = icmp sle i32 %27, 90
br i1 %28, label %29, label %33
29: ; preds = %25
%30 = load i8, i8* %6
%31 = sext i8 %30 to i32
%32 = sub nsw i32 %31, 65
br label %52
33: ; preds = %25
%34 = load i8, i8* %6
%35 = sext i8 %34 to i32
%36 = icmp sge i32 %35, 97
br i1 %36, label %37, label %49
37: ; preds = %33
%38 = load i8, i8* %6
%39 = sext i8 %38 to i32
%40 = icmp sle i32 %39, 122
br i1 %40, label %41, label %46
41: ; preds = %37
%42 = load i8, i8* %6
%43 = sext i8 %42 to i32
%44 = sub nsw i32 %43, 97
%45 = add nsw i32 %44, 26
br label %47
46: ; preds = %37
br label %47
47: ; preds = %46, %41
%48 = phi i32 [ %45, %41 ], [ 64, %46 ]
br label %50
49: ; preds = %33
br label %50
50: ; preds = %49, %47
%51 = phi i32 [ %48, %47 ], [ 64, %49 ]
br label %52
52: ; preds = %50, %29
%53 = phi i32 [ %32, %29 ], [ %51, %50 ]
br label %90
54: ; preds = %21
%55 = load i8, i8* %6
%56 = sext i8 %55 to i32
%57 = icmp sle i32 %56, 57
br i1 %57, label %58, label %82
58: ; preds = %54
%59 = load i8, i8* %6
%60 = sext i8 %59 to i32
%61 = icmp sge i32 %60, 48
br i1 %61, label %62, label %67
62: ; preds = %58
%63 = load i8, i8* %6
%64 = sext i8 %63 to i32
%65 = sub nsw i32 %64, 48
%66 = add nsw i32 %65, 52
br label %80
67: ; preds = %58
%68 = load i8, i8* %6
%69 = sext i8 %68 to i32
%70 = icmp eq i32 %69, 43
br i1 %70, label %71, label %72
71: ; preds = %67
br label %78
72: ; preds = %67
%73 = load i8, i8* %6
%74 = sext i8 %73 to i32
%75 = icmp eq i32 %74, 47
%76 = zext i1 %75 to i64
%77 = select i1 %75, i32 63, i32 64
br label %78
78: ; preds = %72, %71
%79 = phi i32 [ 62, %71 ], [ %77, %72 ]
br label %80
80: ; preds = %78, %62
%81 = phi i32 [ %66, %62 ], [ %79, %78 ]
br label %88
82: ; preds = %54
%83 = load i8, i8* %6
%84 = sext i8 %83 to i32
%85 = icmp eq i32 %84, 61
%86 = zext i1 %85 to i64
%87 = select i1 %85, i32 0, i32 64
br label %88
88: ; preds = %82, %80
%89 = phi i32 [ %81, %80 ], [ %87, %82 ]
br label %90
90: ; preds = %88, %52
%91 = phi i32 [ %53, %52 ], [ %89, %88 ]
%92 = trunc i32 %91 to i8
store i8 %92, i8* %7
%93 = load i8, i8* %7
%94 = sext i8 %93 to i32
%95 = icmp eq i32 %94, 64
br i1 %95, label %96, label %97
96: ; preds = %90
store i32 -1, i32* %3
br label %399
97: ; preds = %90
%98 = load i8*, i8** %4
%99 = getelementptr inbounds i8, i8* %98, i32 1
store i8* %99, i8** %4
%100 = load i8, i8* %98
store i8 %100, i8* %6
%101 = load i8, i8* %6
%102 = sext i8 %101 to i32
%103 = icmp eq i32 %102, 0
br i1 %103, label %104, label %105
104: ; preds = %97
store i32 -1, i32* %3
br label %399
105: ; preds = %97
%106 = load i8, i8* %6
%107 = sext i8 %106 to i32
%108 = icmp sge i32 %107, 65
br i1 %108, label %109, label %138
109: ; preds = %105
%110 = load i8, i8* %6
%111 = sext i8 %110 to i32
%112 = icmp sle i32 %111, 90
br i1 %112, label %113, label %117
113: ; preds = %109
%114 = load i8, i8* %6
%115 = sext i8 %114 to i32
%116 = sub nsw i32 %115, 65
br label %136
117: ; preds = %109
%118 = load i8, i8* %6
%119 = sext i8 %118 to i32
%120 = icmp sge i32 %119, 97
br i1 %120, label %121, label %133
121: ; preds = %117
%122 = load i8, i8* %6
%123 = sext i8 %122 to i32
%124 = icmp sle i32 %123, 122
br i1 %124, label %125, label %130
125: ; preds = %121
%126 = load i8, i8* %6
%127 = sext i8 %126 to i32
%128 = sub nsw i32 %127, 97
%129 = add nsw i32 %128, 26
br label %131
130: ; preds = %121
br label %131
131: ; preds = %130, %125
%132 = phi i32 [ %129, %125 ], [ 64, %130 ]
br label %134
133: ; preds = %117
br label %134
134: ; preds = %133, %131
%135 = phi i32 [ %132, %131 ], [ 64, %133 ]
br label %136
136: ; preds = %134, %113
%137 = phi i32 [ %116, %113 ], [ %135, %134 ]
br label %174
138: ; preds = %105
%139 = load i8, i8* %6
%140 = sext i8 %139 to i32
%141 = icmp sle i32 %140, 57
br i1 %141, label %142, label %166
142: ; preds = %138
%143 = load i8, i8* %6
%144 = sext i8 %143 to i32
%145 = icmp sge i32 %144, 48
br i1 %145, label %146, label %151
146: ; preds = %142
%147 = load i8, i8* %6
%148 = sext i8 %147 to i32
%149 = sub nsw i32 %148, 48
%150 = add nsw i32 %149, 52
br label %164
151: ; preds = %142
%152 = load i8, i8* %6
%153 = sext i8 %152 to i32
%154 = icmp eq i32 %153, 43
br i1 %154, label %155, label %156
155: ; preds = %151
br label %162
156: ; preds = %151
%157 = load i8, i8* %6
%158 = sext i8 %157 to i32
%159 = icmp eq i32 %158, 47
%160 = zext i1 %159 to i64
%161 = select i1 %159, i32 63, i32 64
br label %162
162: ; preds = %156, %155
%163 = phi i32 [ 62, %155 ], [ %161, %156 ]
br label %164
164: ; preds = %162, %146
%165 = phi i32 [ %150, %146 ], [ %163, %162 ]
br label %172
166: ; preds = %138
%167 = load i8, i8* %6
%168 = sext i8 %167 to i32
%169 = icmp eq i32 %168, 61
%170 = zext i1 %169 to i64
%171 = select i1 %169, i32 0, i32 64
br label %172
172: ; preds = %166, %164
%173 = phi i32 [ %165, %164 ], [ %171, %166 ]
br label %174
174: ; preds = %172, %136
%175 = phi i32 [ %137, %136 ], [ %173, %172 ]
%176 = trunc i32 %175 to i8
store i8 %176, i8* %8
%177 = load i8, i8* %8
%178 = sext i8 %177 to i32
%179 = icmp eq i32 %178, 64
br i1 %179, label %180, label %181
180: ; preds = %174
store i32 -1, i32* %3
br label %399
181: ; preds = %174
%182 = load i8, i8* %7
%183 = sext i8 %182 to i32
%184 = shl i32 %183, 2
%185 = load i8, i8* %8
%186 = sext i8 %185 to i32
%187 = ashr i32 %186, 4
%188 = or i32 %184, %187
%189 = trunc i32 %188 to i8
store i8 %189, i8* %9
%190 = load i8*, i8** %4
%191 = getelementptr inbounds i8, i8* %190, i32 1
store i8* %191, i8** %4
%192 = load i8, i8* %190
store i8 %192, i8* %6
%193 = load i8, i8* %6
%194 = sext i8 %193 to i32
%195 = icmp eq i32 %194, 0
br i1 %195, label %196, label %197
196: ; preds = %181
store i32 -1, i32* %3
br label %399
197: ; preds = %181
%198 = load i8, i8* %6
%199 = sext i8 %198 to i32
%200 = icmp sge i32 %199, 65
br i1 %200, label %201, label %230
201: ; preds = %197
%202 = load i8, i8* %6
%203 = sext i8 %202 to i32
%204 = icmp sle i32 %203, 90
br i1 %204, label %205, label %209
205: ; preds = %201
%206 = load i8, i8* %6
%207 = sext i8 %206 to i32
%208 = sub nsw i32 %207, 65
br label %228
209: ; preds = %201
%210 = load i8, i8* %6
%211 = sext i8 %210 to i32
%212 = icmp sge i32 %211, 97
br i1 %212, label %213, label %225
213: ; preds = %209
%214 = load i8, i8* %6
%215 = sext i8 %214 to i32
%216 = icmp sle i32 %215, 122
br i1 %216, label %217, label %222
217: ; preds = %213
%218 = load i8, i8* %6
%219 = sext i8 %218 to i32
%220 = sub nsw i32 %219, 97
%221 = add nsw i32 %220, 26
br label %223
222: ; preds = %213
br label %223
223: ; preds = %222, %217
%224 = phi i32 [ %221, %217 ], [ 64, %222 ]
br label %226
225: ; preds = %209
br label %226
226: ; preds = %225, %223
%227 = phi i32 [ %224, %223 ], [ 64, %225 ]
br label %228
228: ; preds = %226, %205
%229 = phi i32 [ %208, %205 ], [ %227, %226 ]
br label %266
230: ; preds = %197
%231 = load i8, i8* %6
%232 = sext i8 %231 to i32
%233 = icmp sle i32 %232, 57
br i1 %233, label %234, label %258
234: ; preds = %230
%235 = load i8, i8* %6
%236 = sext i8 %235 to i32
%237 = icmp sge i32 %236, 48
br i1 %237, label %238, label %243
238: ; preds = %234
%239 = load i8, i8* %6
%240 = sext i8 %239 to i32
%241 = sub nsw i32 %240, 48
%242 = add nsw i32 %241, 52
br label %256
243: ; preds = %234
%244 = load i8, i8* %6
%245 = sext i8 %244 to i32
%246 = icmp eq i32 %245, 43
br i1 %246, label %247, label %248
247: ; preds = %243
br label %254
248: ; preds = %243
%249 = load i8, i8* %6
%250 = sext i8 %249 to i32
%251 = icmp eq i32 %250, 47
%252 = zext i1 %251 to i64
%253 = select i1 %251, i32 63, i32 64
br label %254
254: ; preds = %248, %247
%255 = phi i32 [ 62, %247 ], [ %253, %248 ]
br label %256
256: ; preds = %254, %238
%257 = phi i32 [ %242, %238 ], [ %255, %254 ]
br label %264
258: ; preds = %230
%259 = load i8, i8* %6
%260 = sext i8 %259 to i32
%261 = icmp eq i32 %260, 61
%262 = zext i1 %261 to i64
%263 = select i1 %261, i32 0, i32 64
br label %264
264: ; preds = %258, %256
%265 = phi i32 [ %257, %256 ], [ %263, %258 ]
br label %266
266: ; preds = %264, %228
%267 = phi i32 [ %229, %228 ], [ %265, %264 ]
%268 = trunc i32 %267 to i8
store i8 %268, i8* %7
%269 = load i8, i8* %7
%270 = sext i8 %269 to i32
%271 = icmp eq i32 %270, 64
br i1 %271, label %272, label %273
272: ; preds = %266
store i32 -1, i32* %3
br label %399
273: ; preds = %266
%274 = load i8, i8* %8
%275 = sext i8 %274 to i32
%276 = and i32 %275, 15
%277 = shl i32 %276, 4
%278 = load i8, i8* %7
%279 = sext i8 %278 to i32
%280 = ashr i32 %279, 2
%281 = or i32 %277, %280
%282 = trunc i32 %281 to i8
store i8 %282, i8* %10
%283 = load i8*, i8** %4
%284 = getelementptr inbounds i8, i8* %283, i32 1
store i8* %284, i8** %4
%285 = load i8, i8* %283
store i8 %285, i8* %6
%286 = load i8, i8* %6
%287 = sext i8 %286 to i32
%288 = icmp eq i32 %287, 0
br i1 %288, label %289, label %290
289: ; preds = %273
store i32 -1, i32* %3
br label %399
290: ; preds = %273
%291 = load i8, i8* %6
%292 = sext i8 %291 to i32
%293 = icmp sge i32 %292, 65
br i1 %293, label %294, label %323
294: ; preds = %290
%295 = load i8, i8* %6
%296 = sext i8 %295 to i32
%297 = icmp sle i32 %296, 90
br i1 %297, label %298, label %302
298: ; preds = %294
%299 = load i8, i8* %6
%300 = sext i8 %299 to i32
%301 = sub nsw i32 %300, 65
br label %321
302: ; preds = %294
%303 = load i8, i8* %6
%304 = sext i8 %303 to i32
%305 = icmp sge i32 %304, 97
br i1 %305, label %306, label %318
306: ; preds = %302
%307 = load i8, i8* %6
%308 = sext i8 %307 to i32
%309 = icmp sle i32 %308, 122
br i1 %309, label %310, label %315
310: ; preds = %306
%311 = load i8, i8* %6
%312 = sext i8 %311 to i32
%313 = sub nsw i32 %312, 97
%314 = add nsw i32 %313, 26
br label %316
315: ; preds = %306
br label %316
316: ; preds = %315, %310
%317 = phi i32 [ %314, %310 ], [ 64, %315 ]
br label %319
318: ; preds = %302
br label %319
319: ; preds = %318, %316
%320 = phi i32 [ %317, %316 ], [ 64, %318 ]
br label %321
321: ; preds = %319, %298
%322 = phi i32 [ %301, %298 ], [ %320, %319 ]
br label %359
323: ; preds = %290
%324 = load i8, i8* %6
%325 = sext i8 %324 to i32
%326 = icmp sle i32 %325, 57
br i1 %326, label %327, label %351
327: ; preds = %323
%328 = load i8, i8* %6
%329 = sext i8 %328 to i32
%330 = icmp sge i32 %329, 48
br i1 %330, label %331, label %336
331: ; preds = %327
%332 = load i8, i8* %6
%333 = sext i8 %332 to i32
%334 = sub nsw i32 %333, 48
%335 = add nsw i32 %334, 52
br label %349
336: ; preds = %327
%337 = load i8, i8* %6
%338 = sext i8 %337 to i32
%339 = icmp eq i32 %338, 43
br i1 %339, label %340, label %341
340: ; preds = %336
br label %347
341: ; preds = %336
%342 = load i8, i8* %6
%343 = sext i8 %342 to i32
%344 = icmp eq i32 %343, 47
%345 = zext i1 %344 to i64
%346 = select i1 %344, i32 63, i32 64
br label %347
347: ; preds = %341, %340
%348 = phi i32 [ 62, %340 ], [ %346, %341 ]
br label %349
349: ; preds = %347, %331
%350 = phi i32 [ %335, %331 ], [ %348, %347 ]
br label %357
351: ; preds = %323
%352 = load i8, i8* %6
%353 = sext i8 %352 to i32
%354 = icmp eq i32 %353, 61
%355 = zext i1 %354 to i64
%356 = select i1 %354, i32 0, i32 64
br label %357
357: ; preds = %351, %349
%358 = phi i32 [ %350, %349 ], [ %356, %351 ]
br label %359
359: ; preds = %357, %321
%360 = phi i32 [ %322, %321 ], [ %358, %357 ]
%361 = trunc i32 %360 to i8
store i8 %361, i8* %8
%362 = load i8, i8* %8
%363 = sext i8 %362 to i32
%364 = icmp eq i32 %363, 64
br i1 %364, label %365, label %366
365: ; preds = %359
store i32 -1, i32* %3
br label %399
366: ; preds = %359
%367 = load i8, i8* %7
%368 = sext i8 %367 to i32
%369 = and i32 %368, 3
%370 = shl i32 %369, 6
%371 = load i8, i8* %8
%372 = sext i8 %371 to i32
%373 = or i32 %370, %372
%374 = trunc i32 %373 to i8
store i8 %374, i8* %11
%375 = load i8, i8* %9
%376 = load i8*, i8** %5
%377 = getelementptr inbounds i8, i8* %376, i32 1
store i8* %377, i8** %5
store i8 %375, i8* %376
%378 = load i8, i8* %9
%379 = sext i8 %378 to i32
%380 = icmp eq i32 %379, 0
br i1 %380, label %381, label %382
381: ; preds = %366
store i32 0, i32* %3
br label %399
382: ; preds = %366
%383 = load i8, i8* %10
%384 = load i8*, i8** %5
%385 = getelementptr inbounds i8, i8* %384, i32 1
store i8* %385, i8** %5
store i8 %383, i8* %384
%386 = load i8, i8* %10
%387 = sext i8 %386 to i32
%388 = icmp eq i32 %387, 0
br i1 %388, label %389, label %390
389: ; preds = %382
store i32 0, i32* %3
br label %399
390: ; preds = %382
%391 = load i8, i8* %11
%392 = load i8*, i8** %5
%393 = getelementptr inbounds i8, i8* %392, i32 1
store i8* %393, i8** %5
store i8 %391, i8* %392
%394 = load i8, i8* %11
%395 = sext i8 %394 to i32
%396 = icmp eq i32 %395, 0
br i1 %396, label %397, label %398
397: ; preds = %390
store i32 0, i32* %3
br label %399
398: ; preds = %390
br label %12
399: ; preds = %397, %389, %381, %365, %289, %272, %196, %180, %104, %96, %19
%400 = load i32, i32* %3
ret i32 %400
}

LLVM IR (-O2):
define i32 @base64decode(i8* nocapture %0, i8* nocapture writeonly %1) {
br label %3
3: ; preds = %119, %2
%4 = phi i8* [ %1, %2 ], [ %121, %119 ]
%5 = phi i8* [ %0, %2 ], [ %88, %119 ]
%6 = getelementptr inbounds i8, i8* %5, i64 1
%7 = load i8, i8* %5
%8 = icmp eq i8 %7, 0
br i1 %8, label %9, label %10
9: ; preds = %3
store i8 0, i8* %4
br label %123
10: ; preds = %3
%11 = icmp sgt i8 %7, 64
br i1 %11, label %12, label %20
12: ; preds = %10
%13 = icmp ult i8 %7, 91
br i1 %13, label %14, label %16
14: ; preds = %12
%15 = add nsw i8 %7, -65
br label %30
16: ; preds = %12
%17 = add nsw i8 %7, -71
%18 = add nsw i8 %7, -97
%19 = icmp ult i8 %18, 26
br i1 %19, label %30, label %123
20: ; preds = %10
%21 = icmp slt i8 %7, 58
br i1 %21, label %22, label %27
22: ; preds = %20
%23 = icmp sgt i8 %7, 47
br i1 %23, label %24, label %26
24: ; preds = %22
%25 = add nuw nsw i8 %7, 4
br label %30
26: ; preds = %22
switch i8 %7, label %123 [
i8 43, label %30
i8 47, label %29
]
27: ; preds = %20
%28 = icmp eq i8 %7, 61
br i1 %28, label %30, label %123
29: ; preds = %26
br label %30
30: ; preds = %26, %29, %16, %27, %14, %24
%31 = phi i8 [ 62, %26 ], [ %25, %24 ], [ %15, %14 ], [ 0, %27 ], [ %17, %16 ], [ 63, %29 ]
%32 = getelementptr inbounds i8, i8* %5, i64 2
%33 = load i8, i8* %6
%34 = icmp eq i8 %33, 0
br i1 %34, label %123, label %35
35: ; preds = %30
%36 = icmp sgt i8 %33, 64
br i1 %36, label %37, label %45
37: ; preds = %35
%38 = icmp ult i8 %33, 91
br i1 %38, label %39, label %41
39: ; preds = %37
%40 = add nsw i8 %33, -65
br label %55
41: ; preds = %37
%42 = add nsw i8 %33, -71
%43 = add nsw i8 %33, -97
%44 = icmp ult i8 %43, 26
br i1 %44, label %55, label %123
45: ; preds = %35
%46 = icmp slt i8 %33, 58
br i1 %46, label %47, label %52
47: ; preds = %45
%48 = icmp sgt i8 %33, 47
br i1 %48, label %49, label %51
49: ; preds = %47
%50 = add nuw nsw i8 %33, 4
br label %55
51: ; preds = %47
switch i8 %33, label %123 [
i8 43, label %55
i8 47, label %54
]
52: ; preds = %45
%53 = icmp eq i8 %33, 61
br i1 %53, label %55, label %123
54: ; preds = %51
br label %55
55: ; preds = %51, %54, %41, %52, %39, %49
%56 = phi i8 [ 62, %51 ], [ %50, %49 ], [ %40, %39 ], [ 0, %52 ], [ %42, %41 ], [ 63, %54 ]
%57 = shl nuw i8 %31, 2
%58 = lshr i8 %56, 4
%59 = or i8 %58, %57
%60 = getelementptr inbounds i8, i8* %5, i64 3
%61 = load i8, i8* %32
%62 = icmp eq i8 %61, 0
br i1 %62, label %123, label %63
63: ; preds = %55
%64 = icmp sgt i8 %61, 64
br i1 %64, label %65, label %73
65: ; preds = %63
%66 = icmp ult i8 %61, 91
br i1 %66, label %67, label %69
67: ; preds = %65
%68 = add nsw i8 %61, -65
br label %83
69: ; preds = %65
%70 = add nsw i8 %61, -71
%71 = add nsw i8 %61, -97
%72 = icmp ult i8 %71, 26
br i1 %72, label %83, label %123
73: ; preds = %63
%74 = icmp slt i8 %61, 58
br i1 %74, label %75, label %80
75: ; preds = %73
%76 = icmp sgt i8 %61, 47
br i1 %76, label %77, label %79
77: ; preds = %75
%78 = add nuw nsw i8 %61, 4
br label %83
79: ; preds = %75
switch i8 %61, label %123 [
i8 43, label %83
i8 47, label %82
]
80: ; preds = %73
%81 = icmp eq i8 %61, 61
br i1 %81, label %83, label %123
82: ; preds = %79
br label %83
83: ; preds = %79, %82, %69, %80, %67, %77
%84 = phi i8 [ 62, %79 ], [ %78, %77 ], [ %68, %67 ], [ 0, %80 ], [ %70, %69 ], [ 63, %82 ]
%85 = shl i8 %56, 4
%86 = lshr i8 %84, 2
%87 = or i8 %86, %85
%88 = getelementptr inbounds i8, i8* %5, i64 4
%89 = load i8, i8* %60
%90 = icmp eq i8 %89, 0
br i1 %90, label %123, label %91
91: ; preds = %83
%92 = icmp sgt i8 %89, 64
br i1 %92, label %93, label %101
93: ; preds = %91
%94 = icmp ult i8 %89, 91
br i1 %94, label %95, label %97
95: ; preds = %93
%96 = add nsw i8 %89, -65
br label %111
97: ; preds = %93
%98 = add nsw i8 %89, -71
%99 = add nsw i8 %89, -97
%100 = icmp ult i8 %99, 26
br i1 %100, label %111, label %123
101: ; preds = %91
%102 = icmp slt i8 %89, 58
br i1 %102, label %103, label %108
103: ; preds = %101
%104 = icmp sgt i8 %89, 47
br i1 %104, label %105, label %107
105: ; preds = %103
%106 = add nuw nsw i8 %89, 4
br label %111
107: ; preds = %103
switch i8 %89, label %123 [
i8 43, label %111
i8 47, label %110
]
108: ; preds = %101
%109 = icmp eq i8 %89, 61
br i1 %109, label %111, label %123
110: ; preds = %107
br label %111
111: ; preds = %107, %110, %97, %108, %95, %105
%112 = phi i8 [ 62, %107 ], [ %106, %105 ], [ %96, %95 ], [ 0, %108 ], [ %98, %97 ], [ 63, %110 ]
%113 = shl i8 %84, 6
%114 = or i8 %112, %113
store i8 %59, i8* %4
%115 = icmp eq i8 %59, 0
br i1 %115, label %123, label %116
116: ; preds = %111
%117 = getelementptr inbounds i8, i8* %4, i64 1
store i8 %87, i8* %117
%118 = icmp eq i8 %87, 0
br i1 %118, label %123, label %119
119: ; preds = %116
%120 = getelementptr inbounds i8, i8* %4, i64 2
%121 = getelementptr inbounds i8, i8* %4, i64 3
store i8 %114, i8* %120
%122 = icmp eq i8 %114, 0
br i1 %122, label %123, label %3
123: ; preds = %107, %79, %51, %26, %97, %108, %69, %80, %41, %52, %16, %27, %119, %116, %111, %83, %55, %30, %9
%124 = phi i32 [ 0, %9 ], [ -1, %107 ], [ -1, %79 ], [ -1, %51 ], [ -1, %26 ], [ -1, %97 ], [ -1, %108 ], [ -1, %69 ], [ -1, %80 ], [ -1, %41 ], [ -1, %52 ], [ -1, %16 ], [ -1, %27 ], [ 0, %119 ], [ 0, %116 ], [ 0, %111 ], [ -1, %83 ], [ -1, %55 ], [ -1, %30 ]
ret i32 %124
}