char *number(char *buf, char *end, long long num, int base, int size,
             int precision, int type) {
  char c, sign, tmp[66];
  const char *digits;
  const char small_digits[] = "0123456789abcdefghijklmnopqrstuvwxyz";
  const char large_digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  int i;
  digits = (type & 64) ? large_digits : small_digits;
  if (type & 16)
    type &= ~1;
  if (base < 2 || base > 36)
    return 0;
  c = (type & 1) ? '0' : ' ';
  sign = 0;
  if (type & 2) {
    if (num < 0) {
      sign = '-';
      num = -num;
      size--;
    } else if (type & 4) {
      sign = '+';
      size--;
    } else if (type & 8) {
      sign = ' ';
      size--;
    }
  }
  if (type & 32) {
    if (base == 16)
      size -= 2;
    else if (base == 8)
      size--;
  }
  i = 0;
  if (num == 0)
    tmp[i++] = '0';
  else
    while (num != 0) {
      tmp[i++] = digits[(unsigned long long)num % (unsigned long long)base];
      num = (unsigned long long)num / (unsigned long long)base;
    }
  if (i > precision)
    precision = i;
  size -= precision;
  if (!(type & (1 + 16))) {
    while (size-- > 0) {
      if (buf <= end)
        *buf = ' ';
      ++buf;
    }
  }
  if (sign) {
    if (buf <= end)
      *buf = sign;
    ++buf;
  }
  if (type & 32) {
    if (base == 8) {
      if (buf <= end)
        *buf = '0';
      ++buf;
    } else if (base == 16) {
      if (buf <= end)
        *buf = '0';
      ++buf;
      if (buf <= end)
        *buf = digits[33];
      ++buf;
    }
  }
  if (!(type & 16)) {
    while (size-- > 0) {
      if (buf <= end)
        *buf = c;
      ++buf;
    }
  }
  while (i < precision--) {
    if (buf <= end)
      *buf = '0';
    ++buf;
  }
  while (i-- > 0) {
    if (buf <= end)
      *buf = tmp[i];
    ++buf;
  }
  while (size-- > 0) {
    if (buf <= end)
      *buf = ' ';
    ++buf;
  }
  return buf;
}


x86 assembly (clang, -O0):
<number>:
push   %rbp
mov    %rsp,%rbp
sub    $0xf0,%rsp
mov    0x10(%rbp),%eax
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
mov    %r8d,-0x28(%rbp)
mov    %r9d,-0x2c(%rbp)
lea    -0xa0(%rbp),%rdi
lea    0xebd(%rip),%rsi
mov    $0x25,%edx
call   1030 <memcpy@plt>
lea    -0xd0(%rbp),%rdi
lea    0xed5(%rip),%rsi
mov    $0x25,%edx
call   1030 <memcpy@plt>
mov    0x10(%rbp),%eax
and    $0x40,%eax
cmp    $0x0,%eax
je     1187 <number+0x77>
lea    -0xd0(%rbp),%rax
mov    %rax,-0xe0(%rbp)
jmp    1195 <number+0x85>
lea    -0xa0(%rbp),%rax
mov    %rax,-0xe0(%rbp)
mov    -0xe0(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    0x10(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     11b8 <number+0xa8>
mov    0x10(%rbp),%eax
and    $0xfffffffe,%eax
mov    %eax,0x10(%rbp)
cmpl   $0x2,-0x24(%rbp)
jl     11cc <number+0xbc>
cmpl   $0x24,-0x24(%rbp)
jle    11d9 <number+0xc9>
movq   $0x0,-0x8(%rbp)
jmp    15bf <number+0x4af>
mov    0x10(%rbp),%edx
and    $0x1,%edx
mov    $0x20,%eax
mov    $0x30,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %al,-0x2d(%rbp)
movb   $0x0,-0x2e(%rbp)
mov    0x10(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     1278 <number+0x168>
cmpq   $0x0,-0x20(%rbp)
jge    122c <number+0x11c>
movb   $0x2d,-0x2e(%rbp)
xor    %eax,%eax
sub    -0x20(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
jmp    1273 <number+0x163>
mov    0x10(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     124d <number+0x13d>
movb   $0x2b,-0x2e(%rbp)
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
jmp    126e <number+0x15e>
mov    0x10(%rbp),%eax
and    $0x8,%eax
cmp    $0x0,%eax
je     1269 <number+0x159>
movb   $0x20,-0x2e(%rbp)
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
jmp    126e <number+0x15e>
jmp    1273 <number+0x163>
jmp    1278 <number+0x168>
mov    0x10(%rbp),%eax
and    $0x20,%eax
cmp    $0x0,%eax
je     12bc <number+0x1ac>
cmpl   $0x10,-0x24(%rbp)
jne    129f <number+0x18f>
mov    -0x28(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x28(%rbp)
jmp    12b7 <number+0x1a7>
cmpl   $0x8,-0x24(%rbp)
jne    12b2 <number+0x1a2>
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
jmp    12b7 <number+0x1a7>
jmp    12bc <number+0x1ac>
movl   $0x0,-0xd4(%rbp)
cmpq   $0x0,-0x20(%rbp)
jne    12ee <number+0x1de>
mov    -0xd4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0xd4(%rbp)
cltq
movb   $0x30,-0x70(%rbp,%rax,1)
jmp    1352 <number+0x242>
jmp    12f3 <number+0x1e3>
cmpq   $0x0,-0x20(%rbp)
je     134d <number+0x23d>
mov    -0x78(%rbp),%rax
mov    %rax,-0xe8(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
xor    %edx,%edx
div    %rcx
mov    -0xe8(%rbp),%rax
mov    (%rax,%rdx,1),%cl
mov    -0xd4(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0xd4(%rbp)
cltq
mov    %cl,-0x70(%rbp,%rax,1)
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
xor    %edx,%edx
div    %rcx
mov    %rax,-0x20(%rbp)
jmp    12f3 <number+0x1e3>
jmp    1352 <number+0x242>
mov    -0xd4(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jle    136a <number+0x25a>
mov    -0xd4(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%ecx
mov    -0x28(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x28(%rbp)
mov    0x10(%rbp),%eax
and    $0x11,%eax
cmp    $0x0,%eax
jne    13c8 <number+0x2b8>
jmp    1389 <number+0x279>
mov    -0x28(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
cmp    $0x0,%eax
jle    13c3 <number+0x2b3>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     13b2 <number+0x2a2>
mov    -0x10(%rbp),%rax
movb   $0x20,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1389 <number+0x279>
jmp    13c8 <number+0x2b8>
cmpb   $0x0,-0x2e(%rbp)
je     13f5 <number+0x2e5>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     13e9 <number+0x2d9>
mov    -0x2e(%rbp),%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    0x10(%rbp),%eax
and    $0x20,%eax
cmp    $0x0,%eax
je     1490 <number+0x380>
cmpl   $0x8,-0x24(%rbp)
jne    1434 <number+0x324>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     1423 <number+0x313>
mov    -0x10(%rbp),%rax
movb   $0x30,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    148b <number+0x37b>
cmpl   $0x10,-0x24(%rbp)
jne    1486 <number+0x376>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     1453 <number+0x343>
mov    -0x10(%rbp),%rax
movb   $0x30,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     147a <number+0x36a>
mov    -0x78(%rbp),%rax
mov    0x21(%rax),%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    148b <number+0x37b>
jmp    1490 <number+0x380>
mov    0x10(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
jne    14e5 <number+0x3d5>
jmp    14a4 <number+0x394>
mov    -0x28(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
cmp    $0x0,%eax
jle    14e0 <number+0x3d0>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     14cf <number+0x3bf>
mov    -0x2d(%rbp),%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    14a4 <number+0x394>
jmp    14e5 <number+0x3d5>
jmp    14ea <number+0x3da>
mov    -0xd4(%rbp),%eax
mov    -0x2c(%rbp),%ecx
mov    %ecx,%edx
add    $0xffffffff,%edx
mov    %edx,-0x2c(%rbp)
cmp    %ecx,%eax
jge    1529 <number+0x419>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     1518 <number+0x408>
mov    -0x10(%rbp),%rax
movb   $0x30,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    14ea <number+0x3da>
jmp    152e <number+0x41e>
mov    -0xd4(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0xd4(%rbp)
cmp    $0x0,%eax
jle    1578 <number+0x468>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     1567 <number+0x457>
movslq -0xd4(%rbp),%rax
mov    -0x70(%rbp,%rax,1),%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    152e <number+0x41e>
jmp    157d <number+0x46d>
mov    -0x28(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
cmp    $0x0,%eax
jle    15b7 <number+0x4a7>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     15a6 <number+0x496>
mov    -0x10(%rbp),%rax
movb   $0x20,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    157d <number+0x46d>
mov    -0x10(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0xf0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<number>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    0x70(%rsp),%r12d
movaps 0xef6(%rip),%xmm0
movaps %xmm0,-0x30(%rsp)
movaps 0xeda(%rip),%xmm0
movaps %xmm0,-0x40(%rsp)
movabs $0x7a797877767574,%rax
mov    %rax,-0x23(%rsp)
movaps 0xeff(%rip),%xmm0
movaps %xmm0,-0x60(%rsp)
movaps 0xee3(%rip),%xmm0
movaps %xmm0,-0x70(%rsp)
movabs $0x5a595857565554,%rax
mov    %rax,-0x53(%rsp)
test   $0x40,%r12b
lea    -0x40(%rsp),%rbx
lea    -0x70(%rsp),%r15
cmove  %rbx,%r15
mov    %r12d,%r14d
and    $0xfffffffe,%r14d
test   $0x10,%r12b
cmove  %r12d,%r14d
lea    -0x25(%rcx),%eax
cmp    $0xffffffdd,%eax
jae    1191 <number+0x91>
xor    %edi,%edi
jmp    15c0 <number+0x4c0>
mov    %rdx,%r10
mov    $0x1,%r13b
test   $0x2,%r14b
jne    11ad <number+0xad>
movl   $0x0,-0x78(%rsp)
test   $0x20,%r14b
je     11f2 <number+0xf2>
jmp    11e4 <number+0xe4>
test   %r10,%r10
js     11c6 <number+0xc6>
test   $0x4,%r14b
jne    11d1 <number+0xd1>
test   $0x8,%r14b
je     119d <number+0x9d>
add    $0xffffffff,%r8d
mov    $0x20,%al
jmp    11d7 <number+0xd7>
neg    %r10
add    $0xffffffff,%r8d
mov    $0x2d,%al
jmp    11d7 <number+0xd7>
add    $0xffffffff,%r8d
mov    $0x2b,%al
mov    %eax,-0x78(%rsp)
xor    %r13d,%r13d
test   $0x20,%r14b
je     11f2 <number+0xf2>
cmp    $0x8,%ecx
je     1230 <number+0x130>
cmp    $0x10,%ecx
jne    11f2 <number+0xf2>
add    $0xfffffffe,%r8d
test   %r10,%r10
je     1239 <number+0x139>
mov    %ecx,%ebp
xor    %r11d,%r11d
jmp    121e <number+0x11e>
xchg   %ax,%ax
mov    %r10,%rax
xor    %edx,%edx
div    %rbp
movzbl (%r15,%rdx,1),%edx
mov    %dl,-0x10(%rsp,%r11,1)
add    $0x1,%r11
cmp    %rbp,%r10
mov    %rax,%r10
jb     1244 <number+0x144>
mov    %r10,%rax
shr    $0x20,%rax
jne    1200 <number+0x100>
mov    %r10d,%eax
xor    %edx,%edx
div    %ebp
jmp    1208 <number+0x108>
add    $0xffffffff,%r8d
test   %r10,%r10
jne    11f7 <number+0xf7>
movb   $0x30,-0x10(%rsp)
mov    $0x1,%r11d
cmp    %r9d,%r11d
mov    %r9d,%edx
cmovg  %r11d,%edx
mov    %r8d,%r15d
sub    %edx,%r15d
test   $0x11,%r14b
je     1272 <number+0x172>
test   %r13b,%r13b
je     133c <number+0x23c>
test   $0x20,%r14b
jne    1351 <number+0x251>
jmp    1367 <number+0x267>
lea    -0x1(%r15),%r10d
test   %r15d,%r15d
jle    12b7 <number+0x1b7>
test   $0x3,%r15b
mov    %r13d,-0x74(%rsp)
je     12ce <number+0x1ce>
mov    %rbx,%r15
sub    %dl,%r8b
movzbl %r8b,%eax
and    $0x3,%eax
xor    %ebx,%ebx
jmp    12a8 <number+0x1a8>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rbx
cmp    %ebx,%eax
je     12c1 <number+0x1c1>
lea    (%rdi,%rbx,1),%rbp
cmp    %rsi,%rbp
ja     12a0 <number+0x1a0>
movb   $0x20,0x0(%rbp)
jmp    12a0 <number+0x1a0>
mov    %r10d,%r15d
test   %r13b,%r13b
jne    1263 <number+0x163>
jmp    133c <number+0x23c>
mov    %r10d,%ebp
sub    %ebx,%ebp
add    %rbx,%rdi
mov    %r15,%rbx
jmp    12d1 <number+0x1d1>
mov    %r10d,%ebp
mov    $0xffffffff,%r15d
cmp    $0x3,%r10d
jb     132e <number+0x22e>
add    $0x4,%ebp
add    $0x3,%rdi
jmp    12fc <number+0x1fc>
cs nopw 0x0(%rax,%rax,1)
add    $0xfffffffc,%ebp
add    $0x4,%rdi
cmp    $0x3,%ebp
jle    132a <number+0x22a>
lea    -0x3(%rdi),%rax
cmp    %rsi,%rax
ja     1308 <number+0x208>
movb   $0x20,(%rax)
lea    -0x2(%rdi),%rax
cmp    %rsi,%rax
ja     1314 <number+0x214>
movb   $0x20,(%rax)
lea    -0x1(%rdi),%rax
cmp    %rsi,%rax
ja     1320 <number+0x220>
movb   $0x20,(%rax)
cmp    %rsi,%rdi
ja     12f0 <number+0x1f0>
movb   $0x20,(%rdi)
jmp    12f0 <number+0x1f0>
add    $0xfffffffffffffffd,%rdi
mov    -0x74(%rsp),%r13d
test   %r13b,%r13b
jne    1263 <number+0x163>
cmp    %rsi,%rdi
ja     1347 <number+0x247>
mov    -0x78(%rsp),%eax
mov    %al,(%rdi)
add    $0x1,%rdi
test   $0x20,%r14b
je     1367 <number+0x267>
cmp    $0x10,%ecx
je     13c8 <number+0x2c8>
cmp    $0x8,%ecx
jne    1367 <number+0x267>
cmp    %rsi,%rdi
ja     1363 <number+0x263>
movb   $0x30,(%rdi)
add    $0x1,%rdi
test   $0x10,%r14b
jne    145e <number+0x35e>
lea    -0x1(%r15),%ebp
test   %r15d,%r15d
jle    13b7 <number+0x2b7>
and    $0x1,%r14b
shl    $0x4,%r14b
or     $0x20,%r14b
test   $0x3,%r15b
je     13fb <number+0x2fb>
and    $0x3,%r15d
xor    %ebx,%ebx
jmp    13a9 <number+0x2a9>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%rbx
cmp    %ebx,%r15d
je     13bf <number+0x2bf>
lea    (%rdi,%rbx,1),%rax
cmp    %rsi,%rax
ja     13a0 <number+0x2a0>
mov    %r14b,(%rax)
jmp    13a0 <number+0x2a0>
mov    %ebp,%r15d
jmp    145e <number+0x35e>
mov    %ebp,%ecx
sub    %ebx,%ecx
add    %rbx,%rdi
jmp    13fd <number+0x2fd>
cmp    %rsi,%rdi
ja     13d0 <number+0x2d0>
movb   $0x30,(%rdi)
lea    0x1(%rdi),%rax
cmp    %rsi,%rax
ja     13eb <number+0x2eb>
test   $0x40,%r12b
lea    -0x70(%rsp),%rcx
cmove  %rbx,%rcx
mov    0x21(%rcx),%cl
mov    %cl,(%rax)
add    $0x2,%rdi
test   $0x10,%r14b
je     1371 <number+0x271>
jmp    145e <number+0x35e>
mov    %ebp,%ecx
mov    $0xffffffff,%r15d
cmp    $0x3,%ebp
jb     145e <number+0x35e>
add    $0x4,%ecx
add    $0x3,%rdi
jmp    142c <number+0x32c>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0xfffffffc,%ecx
add    $0x4,%rdi
cmp    $0x3,%ecx
jle    145a <number+0x35a>
lea    -0x3(%rdi),%rax
cmp    %rsi,%rax
ja     1438 <number+0x338>
mov    %r14b,(%rax)
lea    -0x2(%rdi),%rax
cmp    %rsi,%rax
ja     1444 <number+0x344>
mov    %r14b,(%rax)
lea    -0x1(%rdi),%rax
cmp    %rsi,%rax
ja     1450 <number+0x350>
mov    %r14b,(%rax)
cmp    %rsi,%rdi
ja     1420 <number+0x320>
mov    %r14b,(%rdi)
jmp    1420 <number+0x320>
add    $0xfffffffffffffffd,%rdi
cmp    %r9d,%r11d
jge    14fe <number+0x3fe>
mov    %edx,%eax
sub    %r11d,%eax
mov    %r11d,%ecx
not    %ecx
add    %edx,%ecx
test   $0x3,%al
je     14ab <number+0x3ab>
mov    %edx,%eax
sub    %r11b,%al
movzbl %al,%ebp
and    $0x3,%ebp
xor    %ebx,%ebx
jmp    1498 <number+0x398>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%rbx
cmp    %ebx,%ebp
je     14a6 <number+0x3a6>
lea    (%rdi,%rbx,1),%rax
cmp    %rsi,%rax
ja     1490 <number+0x390>
movb   $0x30,(%rax)
jmp    1490 <number+0x390>
sub    %ebx,%edx
add    %rbx,%rdi
cmp    $0x3,%ecx
jb     14fe <number+0x3fe>
add    $0x3,%rdi
jmp    14c9 <number+0x3c9>
cs nopw 0x0(%rax,%rax,1)
add    $0x4,%rdi
cmp    %edx,%r11d
jge    14fa <number+0x3fa>
lea    -0x3(%rdi),%rax
cmp    %rsi,%rax
ja     14d5 <number+0x3d5>
movb   $0x30,(%rax)
lea    -0x2(%rdi),%rax
cmp    %rsi,%rax
ja     14e1 <number+0x3e1>
movb   $0x30,(%rax)
lea    -0x1(%rdi),%rax
cmp    %rsi,%rax
ja     14ed <number+0x3ed>
movb   $0x30,(%rax)
add    $0xfffffffc,%edx
cmp    %rsi,%rdi
ja     14c0 <number+0x3c0>
movb   $0x30,(%rdi)
jmp    14c0 <number+0x3c0>
add    $0xfffffffffffffffd,%rdi
lea    0x1(%r11),%ecx
add    $0xffffffff,%r11d
lea    (%rsp,%r11,1),%rdx
add    $0xfffffffffffffff0,%rdx
jmp    1520 <number+0x420>
add    $0x1,%rdi
add    $0xffffffff,%ecx
add    $0xffffffffffffffff,%rdx
cmp    $0x1,%ecx
jle    152c <number+0x42c>
cmp    %rsi,%rdi
ja     1510 <number+0x410>
movzbl (%rdx),%eax
mov    %al,(%rdi)
jmp    1510 <number+0x410>
test   %r15d,%r15d
jle    15c0 <number+0x4c0>
lea    -0x1(%r15),%ecx
test   $0x3,%r15b
je     156d <number+0x46d>
mov    %r15d,%eax
and    $0x3,%eax
xor    %edx,%edx
jmp    1558 <number+0x458>
nopl   0x0(%rax)
add    $0x1,%rdx
cmp    %edx,%eax
je     1567 <number+0x467>
lea    (%rdi,%rdx,1),%rbp
cmp    %rsi,%rbp
ja     1550 <number+0x450>
movb   $0x20,(%rdi,%rdx,1)
jmp    1550 <number+0x450>
sub    %edx,%r15d
add    %rdx,%rdi
cmp    $0x3,%ecx
jb     15c0 <number+0x4c0>
add    $0xffffffff,%r15d
add    $0x3,%rdi
jmp    158e <number+0x48e>
nopl   0x0(%rax)
add    $0xfffffffc,%r15d
add    $0x4,%rdi
cmp    $0xfffffffe,%r15d
jae    15bc <number+0x4bc>
lea    -0x3(%rdi),%rax
cmp    %rsi,%rax
ja     159a <number+0x49a>
movb   $0x20,(%rax)
lea    -0x2(%rdi),%rax
cmp    %rsi,%rax
ja     15a6 <number+0x4a6>
movb   $0x20,(%rax)
lea    -0x1(%rdi),%rax
cmp    %rsi,%rax
ja     15b2 <number+0x4b2>
movb   $0x20,(%rax)
cmp    %rsi,%rdi
ja     1580 <number+0x480>
movb   $0x20,(%rdi)
jmp    1580 <number+0x480>
add    $0xfffffffffffffffd,%rdi
mov    %rdi,%rax
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@__const.number.small_digits = [37 x i8] c"0123456789abcdefghijklmnopqrstuvwxyz\00"
@__const.number.large_digits = [37 x i8] c"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\00"
define i8* @number(i8* %0, i8* %1, i64 %2, i32 %3, i32 %4, i32 %5, i32 %6) {
%8 = alloca i8*
%9 = alloca i8*
%10 = alloca i8*
%11 = alloca i64
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i8
%17 = alloca i8
%18 = alloca [66 x i8]
%19 = alloca i8*
%20 = alloca [37 x i8]
%21 = alloca [37 x i8]
%22 = alloca i32
store i8* %0, i8** %9
store i8* %1, i8** %10
store i64 %2, i64* %11
store i32 %3, i32* %12
store i32 %4, i32* %13
store i32 %5, i32* %14
store i32 %6, i32* %15
%23 = bitcast [37 x i8]* %20 to i8*
%24 = bitcast [37 x i8]* %21 to i8*
%25 = load i32, i32* %15
%26 = and i32 %25, 64
%27 = icmp ne i32 %26, 0
br i1 %27, label %28, label %30
28: ; preds = %7
%29 = getelementptr inbounds [37 x i8], [37 x i8]* %21, i64 0, i64 0
br label %32
30: ; preds = %7
%31 = getelementptr inbounds [37 x i8], [37 x i8]* %20, i64 0, i64 0
br label %32
32: ; preds = %30, %28
%33 = phi i8* [ %29, %28 ], [ %31, %30 ]
store i8* %33, i8** %19
%34 = load i32, i32* %15
%35 = and i32 %34, 16
%36 = icmp ne i32 %35, 0
br i1 %36, label %37, label %40
37: ; preds = %32
%38 = load i32, i32* %15
%39 = and i32 %38, -2
store i32 %39, i32* %15
br label %40
40: ; preds = %37, %32
%41 = load i32, i32* %12
%42 = icmp slt i32 %41, 2
br i1 %42, label %46, label %43
43: ; preds = %40
%44 = load i32, i32* %12
%45 = icmp sgt i32 %44, 36
br i1 %45, label %46, label %47
46: ; preds = %43, %40
store i8* null, i8** %8
br label %280
47: ; preds = %43
%48 = load i32, i32* %15
%49 = and i32 %48, 1
%50 = icmp ne i32 %49, 0
%51 = zext i1 %50 to i64
%52 = select i1 %50, i32 48, i32 32
%53 = trunc i32 %52 to i8
store i8 %53, i8* %16
store i8 0, i8* %17
%54 = load i32, i32* %15
%55 = and i32 %54, 2
%56 = icmp ne i32 %55, 0
br i1 %56, label %57, label %82
57: ; preds = %47
%58 = load i64, i64* %11
%59 = icmp slt i64 %58, 0
br i1 %59, label %60, label %65
60: ; preds = %57
store i8 45, i8* %17
%61 = load i64, i64* %11
%62 = sub nsw i64 0, %61
store i64 %62, i64* %11
%63 = load i32, i32* %13
%64 = add nsw i32 %63, -1
store i32 %64, i32* %13
br label %81
65: ; preds = %57
%66 = load i32, i32* %15
%67 = and i32 %66, 4
%68 = icmp ne i32 %67, 0
br i1 %68, label %69, label %72
69: ; preds = %65
store i8 43, i8* %17
%70 = load i32, i32* %13
%71 = add nsw i32 %70, -1
store i32 %71, i32* %13
br label %80
72: ; preds = %65
%73 = load i32, i32* %15
%74 = and i32 %73, 8
%75 = icmp ne i32 %74, 0
br i1 %75, label %76, label %79
76: ; preds = %72
store i8 32, i8* %17
%77 = load i32, i32* %13
%78 = add nsw i32 %77, -1
store i32 %78, i32* %13
br label %79
79: ; preds = %76, %72
br label %80
80: ; preds = %79, %69
br label %81
81: ; preds = %80, %60
br label %82
82: ; preds = %81, %47
%83 = load i32, i32* %15
%84 = and i32 %83, 32
%85 = icmp ne i32 %84, 0
br i1 %85, label %86, label %100
86: ; preds = %82
%87 = load i32, i32* %12
%88 = icmp eq i32 %87, 16
br i1 %88, label %89, label %92
89: ; preds = %86
%90 = load i32, i32* %13
%91 = sub nsw i32 %90, 2
store i32 %91, i32* %13
br label %99
92: ; preds = %86
%93 = load i32, i32* %12
%94 = icmp eq i32 %93, 8
br i1 %94, label %95, label %98
95: ; preds = %92
%96 = load i32, i32* %13
%97 = add nsw i32 %96, -1
store i32 %97, i32* %13
br label %98
98: ; preds = %95, %92
br label %99
99: ; preds = %98, %89
br label %100
100: ; preds = %99, %82
store i32 0, i32* %22
%101 = load i64, i64* %11
%102 = icmp eq i64 %101, 0
br i1 %102, label %103, label %108
103: ; preds = %100
%104 = load i32, i32* %22
%105 = add nsw i32 %104, 1
store i32 %105, i32* %22
%106 = sext i32 %104 to i64
%107 = getelementptr inbounds [66 x i8], [66 x i8]* %18, i64 0, i64 %106
store i8 48, i8* %107
br label %129
108: ; preds = %100
br label %109
109: ; preds = %112, %108
%110 = load i64, i64* %11
%111 = icmp ne i64 %110, 0
br i1 %111, label %112, label %128
112: ; preds = %109
%113 = load i8*, i8** %19
%114 = load i64, i64* %11
%115 = load i32, i32* %12
%116 = sext i32 %115 to i64
%117 = urem i64 %114, %116
%118 = getelementptr inbounds i8, i8* %113, i64 %117
%119 = load i8, i8* %118
%120 = load i32, i32* %22
%121 = add nsw i32 %120, 1
store i32 %121, i32* %22
%122 = sext i32 %120 to i64
%123 = getelementptr inbounds [66 x i8], [66 x i8]* %18, i64 0, i64 %122
store i8 %119, i8* %123
%124 = load i64, i64* %11
%125 = load i32, i32* %12
%126 = sext i32 %125 to i64
%127 = udiv i64 %124, %126
store i64 %127, i64* %11
br label %109
128: ; preds = %109
br label %129
129: ; preds = %128, %103
%130 = load i32, i32* %22
%131 = load i32, i32* %14
%132 = icmp sgt i32 %130, %131
br i1 %132, label %133, label %135
133: ; preds = %129
%134 = load i32, i32* %22
store i32 %134, i32* %14
br label %135
135: ; preds = %133, %129
%136 = load i32, i32* %14
%137 = load i32, i32* %13
%138 = sub nsw i32 %137, %136
store i32 %138, i32* %13
%139 = load i32, i32* %15
%140 = and i32 %139, 17
%141 = icmp ne i32 %140, 0
br i1 %141, label %157, label %142
142: ; preds = %135
br label %143
143: ; preds = %153, %142
%144 = load i32, i32* %13
%145 = add nsw i32 %144, -1
store i32 %145, i32* %13
%146 = icmp sgt i32 %144, 0
br i1 %146, label %147, label %156
147: ; preds = %143
%148 = load i8*, i8** %9
%149 = load i8*, i8** %10
%150 = icmp ule i8* %148, %149
br i1 %150, label %151, label %153
151: ; preds = %147
%152 = load i8*, i8** %9
store i8 32, i8* %152
br label %153
153: ; preds = %151, %147
%154 = load i8*, i8** %9
%155 = getelementptr inbounds i8, i8* %154, i32 1
store i8* %155, i8** %9
br label %143
156: ; preds = %143
br label %157
157: ; preds = %156, %135
%158 = load i8, i8* %17
%159 = icmp ne i8 %158, 0
br i1 %159, label %160, label %170
160: ; preds = %157
%161 = load i8*, i8** %9
%162 = load i8*, i8** %10
%163 = icmp ule i8* %161, %162
br i1 %163, label %164, label %167
164: ; preds = %160
%165 = load i8, i8* %17
%166 = load i8*, i8** %9
store i8 %165, i8* %166
br label %167
167: ; preds = %164, %160
%168 = load i8*, i8** %9
%169 = getelementptr inbounds i8, i8* %168, i32 1
store i8* %169, i8** %9
br label %170
170: ; preds = %167, %157
%171 = load i32, i32* %15
%172 = and i32 %171, 32
%173 = icmp ne i32 %172, 0
br i1 %173, label %174, label %211
174: ; preds = %170
%175 = load i32, i32* %12
%176 = icmp eq i32 %175, 8
br i1 %176, label %177, label %186
177: ; preds = %174
%178 = load i8*, i8** %9
%179 = load i8*, i8** %10
%180 = icmp ule i8* %178, %179
br i1 %180, label %181, label %183
181: ; preds = %177
%182 = load i8*, i8** %9
store i8 48, i8* %182
br label %183
183: ; preds = %181, %177
%184 = load i8*, i8** %9
%185 = getelementptr inbounds i8, i8* %184, i32 1
store i8* %185, i8** %9
br label %210
186: ; preds = %174
%187 = load i32, i32* %12
%188 = icmp eq i32 %187, 16
br i1 %188, label %189, label %209
189: ; preds = %186
%190 = load i8*, i8** %9
%191 = load i8*, i8** %10
%192 = icmp ule i8* %190, %191
br i1 %192, label %193, label %195
193: ; preds = %189
%194 = load i8*, i8** %9
store i8 48, i8* %194
br label %195
195: ; preds = %193, %189
%196 = load i8*, i8** %9
%197 = getelementptr inbounds i8, i8* %196, i32 1
store i8* %197, i8** %9
%198 = load i8*, i8** %9
%199 = load i8*, i8** %10
%200 = icmp ule i8* %198, %199
br i1 %200, label %201, label %206
201: ; preds = %195
%202 = load i8*, i8** %19
%203 = getelementptr inbounds i8, i8* %202, i64 33
%204 = load i8, i8* %203
%205 = load i8*, i8** %9
store i8 %204, i8* %205
br label %206
206: ; preds = %201, %195
%207 = load i8*, i8** %9
%208 = getelementptr inbounds i8, i8* %207, i32 1
store i8* %208, i8** %9
br label %209
209: ; preds = %206, %186
br label %210
210: ; preds = %209, %183
br label %211
211: ; preds = %210, %170
%212 = load i32, i32* %15
%213 = and i32 %212, 16
%214 = icmp ne i32 %213, 0
br i1 %214, label %231, label %215
215: ; preds = %211
br label %216
216: ; preds = %227, %215
%217 = load i32, i32* %13
%218 = add nsw i32 %217, -1
store i32 %218, i32* %13
%219 = icmp sgt i32 %217, 0
br i1 %219, label %220, label %230
220: ; preds = %216
%221 = load i8*, i8** %9
%222 = load i8*, i8** %10
%223 = icmp ule i8* %221, %222
br i1 %223, label %224, label %227
224: ; preds = %220
%225 = load i8, i8* %16
%226 = load i8*, i8** %9
store i8 %225, i8* %226
br label %227
227: ; preds = %224, %220
%228 = load i8*, i8** %9
%229 = getelementptr inbounds i8, i8* %228, i32 1
store i8* %229, i8** %9
br label %216
230: ; preds = %216
br label %231
231: ; preds = %230, %211
br label %232
232: ; preds = %243, %231
%233 = load i32, i32* %22
%234 = load i32, i32* %14
%235 = add nsw i32 %234, -1
store i32 %235, i32* %14
%236 = icmp slt i32 %233, %234
br i1 %236, label %237, label %246
237: ; preds = %232
%238 = load i8*, i8** %9
%239 = load i8*, i8** %10
%240 = icmp ule i8* %238, %239
br i1 %240, label %241, label %243
241: ; preds = %237
%242 = load i8*, i8** %9
store i8 48, i8* %242
br label %243
243: ; preds = %241, %237
%244 = load i8*, i8** %9
%245 = getelementptr inbounds i8, i8* %244, i32 1
store i8* %245, i8** %9
br label %232
246: ; preds = %232
br label %247
247: ; preds = %261, %246
%248 = load i32, i32* %22
%249 = add nsw i32 %248, -1
store i32 %249, i32* %22
%250 = icmp sgt i32 %248, 0
br i1 %250, label %251, label %264
251: ; preds = %247
%252 = load i8*, i8** %9
%253 = load i8*, i8** %10
%254 = icmp ule i8* %252, %253
br i1 %254, label %255, label %261
255: ; preds = %251
%256 = load i32, i32* %22
%257 = sext i32 %256 to i64
%258 = getelementptr inbounds [66 x i8], [66 x i8]* %18, i64 0, i64 %257
%259 = load i8, i8* %258
%260 = load i8*, i8** %9
store i8 %259, i8* %260
br label %261
261: ; preds = %255, %251
%262 = load i8*, i8** %9
%263 = getelementptr inbounds i8, i8* %262, i32 1
store i8* %263, i8** %9
br label %247
264: ; preds = %247
br label %265
265: ; preds = %275, %264
%266 = load i32, i32* %13
%267 = add nsw i32 %266, -1
store i32 %267, i32* %13
%268 = icmp sgt i32 %266, 0
br i1 %268, label %269, label %278
269: ; preds = %265
%270 = load i8*, i8** %9
%271 = load i8*, i8** %10
%272 = icmp ule i8* %270, %271
br i1 %272, label %273, label %275
273: ; preds = %269
%274 = load i8*, i8** %9
store i8 32, i8* %274
br label %275
275: ; preds = %273, %269
%276 = load i8*, i8** %9
%277 = getelementptr inbounds i8, i8* %276, i32 1
store i8* %277, i8** %9
br label %265
278: ; preds = %265
%279 = load i8*, i8** %9
store i8* %279, i8** %8
br label %280
280: ; preds = %278, %46
%281 = load i8*, i8** %8
ret i8* %281
}

LLVM IR (-O2):
@__const.number.small_digits = [37 x i8] c"0123456789abcdefghijklmnopqrstuvwxyz\00"
@__const.number.large_digits = [37 x i8] c"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\00"
define i8* @number(i8* writeonly %0, i8* readnone %1, i64 %2, i32 %3, i32 %4, i32 %5, i32 %6) {
%8 = alloca [66 x i8]
%9 = alloca [37 x i8]
%10 = alloca [37 x i8]
%11 = getelementptr inbounds [66 x i8], [66 x i8]* %8, i64 0, i64 0
%12 = getelementptr inbounds [37 x i8], [37 x i8]* %9, i64 0, i64 0
%13 = getelementptr inbounds [37 x i8], [37 x i8]* %10, i64 0, i64 0
%14 = and i32 %6, 64
%15 = icmp eq i32 %14, 0
%16 = select i1 %15, i8* %12, i8* %13
%17 = and i32 %6, 16
%18 = icmp eq i32 %17, 0
%19 = and i32 %6, -2
%20 = select i1 %18, i32 %6, i32 %19
%21 = add i32 %3, -37
%22 = icmp ult i32 %21, -35
br i1 %22, label %308, label %23
23: ; preds = %7
%24 = and i32 %20, 1
%25 = icmp eq i32 %24, 0
%26 = select i1 %25, i8 32, i8 48
%27 = and i32 %20, 2
%28 = icmp eq i32 %27, 0
br i1 %28, label %44, label %29
29: ; preds = %23
%30 = icmp slt i64 %2, 0
br i1 %30, label %31, label %34
31: ; preds = %29
%32 = sub nsw i64 0, %2
%33 = add nsw i32 %4, -1
br label %44
34: ; preds = %29
%35 = and i32 %20, 4
%36 = icmp eq i32 %35, 0
br i1 %36, label %39, label %37
37: ; preds = %34
%38 = add nsw i32 %4, -1
br label %44
39: ; preds = %34
%40 = and i32 %20, 8
%41 = icmp eq i32 %40, 0
br i1 %41, label %44, label %42
42: ; preds = %39
%43 = add nsw i32 %4, -1
br label %44
44: ; preds = %31, %39, %42, %37, %23
%45 = phi i64 [ %32, %31 ], [ %2, %37 ], [ %2, %42 ], [ %2, %39 ], [ %2, %23 ]
%46 = phi i32 [ %33, %31 ], [ %38, %37 ], [ %43, %42 ], [ %4, %39 ], [ %4, %23 ]
%47 = phi i1 [ false, %31 ], [ false, %37 ], [ false, %42 ], [ true, %39 ], [ true, %23 ]
%48 = phi i8 [ 45, %31 ], [ 43, %37 ], [ 32, %42 ], [ 0, %39 ], [ 0, %23 ]
%49 = and i32 %20, 32
%50 = icmp eq i32 %49, 0
br i1 %50, label %56, label %51
51: ; preds = %44
switch i32 %3, label %56 [
i32 16, label %52
i32 8, label %54
]
52: ; preds = %51
%53 = add nsw i32 %46, -2
br label %56
54: ; preds = %51
%55 = add nsw i32 %46, -1
br label %56
56: ; preds = %51, %52, %54, %44
%57 = phi i32 [ %53, %52 ], [ %55, %54 ], [ %46, %44 ], [ %46, %51 ]
%58 = icmp eq i64 %45, 0
br i1 %58, label %61, label %59
59: ; preds = %56
%60 = zext i32 %3 to i64
br label %62
61: ; preds = %56
store i8 48, i8* %11
br label %74
62: ; preds = %59, %62
%63 = phi i64 [ 0, %59 ], [ %68, %62 ]
%64 = phi i64 [ %45, %59 ], [ %70, %62 ]
%65 = urem i64 %64, %60
%66 = getelementptr inbounds i8, i8* %16, i64 %65
%67 = load i8, i8* %66
%68 = add nuw i64 %63, 1
%69 = getelementptr inbounds [66 x i8], [66 x i8]* %8, i64 0, i64 %63
store i8 %67, i8* %69
%70 = udiv i64 %64, %60
%71 = icmp ult i64 %64, %60
br i1 %71, label %72, label %62
72: ; preds = %62
%73 = trunc i64 %68 to i32
br label %74
74: ; preds = %72, %61
%75 = phi i32 [ 1, %61 ], [ %73, %72 ]
%76 = icmp sgt i32 %75, %5
%77 = select i1 %76, i32 %75, i32 %5
%78 = sub i32 %57, %77
%79 = and i32 %20, 17
%80 = icmp eq i32 %79, 0
br i1 %80, label %81, label %124
81: ; preds = %74
%82 = add i32 %78, -1
%83 = icmp sgt i32 %78, 0
br i1 %83, label %84, label %124
84: ; preds = %81
%85 = and i32 %78, 3
%86 = icmp eq i32 %85, 0
br i1 %86, label %98, label %87
87: ; preds = %84, %93
%88 = phi i32 [ %95, %93 ], [ %82, %84 ]
%89 = phi i8* [ %94, %93 ], [ %0, %84 ]
%90 = phi i32 [ %96, %93 ], [ 0, %84 ]
%91 = icmp ugt i8* %89, %1
br i1 %91, label %93, label %92
92: ; preds = %87
store i8 32, i8* %89
br label %93
93: ; preds = %92, %87
%94 = getelementptr inbounds i8, i8* %89, i64 1
%95 = add nsw i32 %88, -1
%96 = add i32 %90, 1
%97 = icmp eq i32 %96, %85
br i1 %97, label %98, label %87
98: ; preds = %93, %84
%99 = phi i32 [ %82, %84 ], [ %95, %93 ]
%100 = phi i8* [ %0, %84 ], [ %94, %93 ]
%101 = phi i8* [ undef, %84 ], [ %94, %93 ]
%102 = icmp ult i32 %82, 3
br i1 %102, label %124, label %103
103: ; preds = %98, %120
%104 = phi i32 [ %122, %120 ], [ %99, %98 ]
%105 = phi i8* [ %121, %120 ], [ %100, %98 ]
%106 = icmp ugt i8* %105, %1
br i1 %106, label %108, label %107
107: ; preds = %103
store i8 32, i8* %105
br label %108
108: ; preds = %107, %103
%109 = getelementptr inbounds i8, i8* %105, i64 1
%110 = icmp ugt i8* %109, %1
br i1 %110, label %112, label %111
111: ; preds = %108
store i8 32, i8* %109
br label %112
112: ; preds = %111, %108
%113 = getelementptr inbounds i8, i8* %105, i64 2
%114 = icmp ugt i8* %113, %1
br i1 %114, label %116, label %115
115: ; preds = %112
store i8 32, i8* %113
br label %116
116: ; preds = %115, %112
%117 = getelementptr inbounds i8, i8* %105, i64 3
%118 = icmp ugt i8* %117, %1
br i1 %118, label %120, label %119
119: ; preds = %116
store i8 32, i8* %117
br label %120
120: ; preds = %119, %116
%121 = getelementptr inbounds i8, i8* %105, i64 4
%122 = add nsw i32 %104, -4
%123 = icmp sgt i32 %104, 3
br i1 %123, label %103, label %124
124: ; preds = %98, %120, %81, %74
%125 = phi i32 [ %78, %74 ], [ %82, %81 ], [ -1, %120 ], [ -1, %98 ]
%126 = phi i8* [ %0, %74 ], [ %0, %81 ], [ %101, %98 ], [ %121, %120 ]
br i1 %47, label %132, label %127
127: ; preds = %124
%128 = icmp ugt i8* %126, %1
br i1 %128, label %130, label %129
129: ; preds = %127
store i8 %48, i8* %126
br label %130
130: ; preds = %129, %127
%131 = getelementptr inbounds i8, i8* %126, i64 1
br label %132
132: ; preds = %130, %124
%133 = phi i8* [ %131, %130 ], [ %126, %124 ]
br i1 %50, label %154, label %134
134: ; preds = %132
switch i32 %3, label %154 [
i32 8, label %135
i32 16, label %140
]
135: ; preds = %134
%136 = icmp ugt i8* %133, %1
br i1 %136, label %138, label %137
137: ; preds = %135
store i8 48, i8* %133
br label %138
138: ; preds = %137, %135
%139 = getelementptr inbounds i8, i8* %133, i64 1
br label %154
140: ; preds = %134
%141 = icmp ugt i8* %133, %1
br i1 %141, label %143, label %142
142: ; preds = %140
store i8 48, i8* %133
br label %143
143: ; preds = %142, %140
%144 = getelementptr inbounds i8, i8* %133, i64 1
%145 = icmp ugt i8* %144, %1
br i1 %145, label %152, label %146
146: ; preds = %143
%147 = getelementptr inbounds [37 x i8], [37 x i8]* %9, i64 0, i64 33
%148 = getelementptr inbounds [37 x i8], [37 x i8]* %10, i64 0, i64 33
%149 = load i8, i8* %147
%150 = load i8, i8* %148
%151 = select i1 %15, i8 %149, i8 %150
store i8 %151, i8* %144
br label %152
152: ; preds = %146, %143
%153 = getelementptr inbounds i8, i8* %133, i64 2
br label %154
154: ; preds = %134, %138, %152, %132
%155 = phi i8* [ %139, %138 ], [ %153, %152 ], [ %133, %132 ], [ %133, %134 ]
%156 = and i32 %20, 16
%157 = icmp eq i32 %156, 0
br i1 %157, label %158, label %201
158: ; preds = %154
%159 = add i32 %125, -1
%160 = icmp sgt i32 %125, 0
br i1 %160, label %161, label %201
161: ; preds = %158
%162 = and i32 %125, 3
%163 = icmp eq i32 %162, 0
br i1 %163, label %175, label %164
164: ; preds = %161, %170
%165 = phi i32 [ %172, %170 ], [ %159, %161 ]
%166 = phi i8* [ %171, %170 ], [ %155, %161 ]
%167 = phi i32 [ %173, %170 ], [ 0, %161 ]
%168 = icmp ugt i8* %166, %1
br i1 %168, label %170, label %169
169: ; preds = %164
store i8 %26, i8* %166
br label %170
170: ; preds = %169, %164
%171 = getelementptr inbounds i8, i8* %166, i64 1
%172 = add nsw i32 %165, -1
%173 = add i32 %167, 1
%174 = icmp eq i32 %173, %162
br i1 %174, label %175, label %164
175: ; preds = %170, %161
%176 = phi i32 [ %159, %161 ], [ %172, %170 ]
%177 = phi i8* [ %155, %161 ], [ %171, %170 ]
%178 = phi i8* [ undef, %161 ], [ %171, %170 ]
%179 = icmp ult i32 %159, 3
br i1 %179, label %201, label %180
180: ; preds = %175, %197
%181 = phi i32 [ %199, %197 ], [ %176, %175 ]
%182 = phi i8* [ %198, %197 ], [ %177, %175 ]
%183 = icmp ugt i8* %182, %1
br i1 %183, label %185, label %184
184: ; preds = %180
store i8 %26, i8* %182
br label %185
185: ; preds = %184, %180
%186 = getelementptr inbounds i8, i8* %182, i64 1
%187 = icmp ugt i8* %186, %1
br i1 %187, label %189, label %188
188: ; preds = %185
store i8 %26, i8* %186
br label %189
189: ; preds = %188, %185
%190 = getelementptr inbounds i8, i8* %182, i64 2
%191 = icmp ugt i8* %190, %1
br i1 %191, label %193, label %192
192: ; preds = %189
store i8 %26, i8* %190
br label %193
193: ; preds = %192, %189
%194 = getelementptr inbounds i8, i8* %182, i64 3
%195 = icmp ugt i8* %194, %1
br i1 %195, label %197, label %196
196: ; preds = %193
store i8 %26, i8* %194
br label %197
197: ; preds = %196, %193
%198 = getelementptr inbounds i8, i8* %182, i64 4
%199 = add nsw i32 %181, -4
%200 = icmp sgt i32 %181, 3
br i1 %200, label %180, label %201
201: ; preds = %175, %197, %158, %154
%202 = phi i32 [ %125, %154 ], [ %159, %158 ], [ -1, %197 ], [ -1, %175 ]
%203 = phi i8* [ %155, %154 ], [ %155, %158 ], [ %178, %175 ], [ %198, %197 ]
%204 = icmp slt i32 %75, %5
br i1 %204, label %205, label %227
205: ; preds = %201
%206 = sub i32 %77, %75
%207 = xor i32 %75, -1
%208 = add i32 %77, %207
%209 = and i32 %206, 3
%210 = icmp eq i32 %209, 0
br i1 %210, label %222, label %211
211: ; preds = %205, %218
%212 = phi i32 [ %215, %218 ], [ %77, %205 ]
%213 = phi i8* [ %219, %218 ], [ %203, %205 ]
%214 = phi i32 [ %220, %218 ], [ 0, %205 ]
%215 = add nsw i32 %212, -1
%216 = icmp ugt i8* %213, %1
br i1 %216, label %218, label %217
217: ; preds = %211
store i8 48, i8* %213
br label %218
218: ; preds = %217, %211
%219 = getelementptr inbounds i8, i8* %213, i64 1
%220 = add i32 %214, 1
%221 = icmp eq i32 %220, %209
br i1 %221, label %222, label %211
222: ; preds = %218, %205
%223 = phi i32 [ %77, %205 ], [ %215, %218 ]
%224 = phi i8* [ %203, %205 ], [ %219, %218 ]
%225 = phi i8* [ undef, %205 ], [ %219, %218 ]
%226 = icmp ult i32 %208, 3
br i1 %226, label %227, label %230
227: ; preds = %222, %248, %201
%228 = phi i8* [ %203, %201 ], [ %225, %222 ], [ %249, %248 ]
%229 = zext i32 %75 to i64
br label %273
230: ; preds = %222, %248
%231 = phi i32 [ %245, %248 ], [ %223, %222 ]
%232 = phi i8* [ %249, %248 ], [ %224, %222 ]
%233 = icmp ugt i8* %232, %1
br i1 %233, label %235, label %234
234: ; preds = %230
store i8 48, i8* %232
br label %235
235: ; preds = %234, %230
%236 = getelementptr inbounds i8, i8* %232, i64 1
%237 = icmp ugt i8* %236, %1
br i1 %237, label %239, label %238
238: ; preds = %235
store i8 48, i8* %236
br label %239
239: ; preds = %238, %235
%240 = getelementptr inbounds i8, i8* %232, i64 2
%241 = icmp ugt i8* %240, %1
br i1 %241, label %243, label %242
242: ; preds = %239
store i8 48, i8* %240
br label %243
243: ; preds = %242, %239
%244 = getelementptr inbounds i8, i8* %232, i64 3
%245 = add nsw i32 %231, -4
%246 = icmp ugt i8* %244, %1
br i1 %246, label %248, label %247
247: ; preds = %243
store i8 48, i8* %244
br label %248
248: ; preds = %247, %243
%249 = getelementptr inbounds i8, i8* %232, i64 4
%250 = icmp slt i32 %75, %245
br i1 %250, label %230, label %227
251: ; preds = %282
%252 = icmp sgt i32 %202, 0
br i1 %252, label %253, label %308
253: ; preds = %251
%254 = add i32 %202, -1
%255 = and i32 %202, 3
%256 = icmp eq i32 %255, 0
br i1 %256, label %268, label %257
257: ; preds = %253, %264
%258 = phi i32 [ %261, %264 ], [ %202, %253 ]
%259 = phi i8* [ %265, %264 ], [ %283, %253 ]
%260 = phi i32 [ %266, %264 ], [ 0, %253 ]
%261 = add nsw i32 %258, -1
%262 = icmp ugt i8* %259, %1
br i1 %262, label %264, label %263
263: ; preds = %257
store i8 32, i8* %259
br label %264
264: ; preds = %263, %257
%265 = getelementptr inbounds i8, i8* %259, i64 1
%266 = add i32 %260, 1
%267 = icmp eq i32 %266, %255
br i1 %267, label %268, label %257
268: ; preds = %264, %253
%269 = phi i32 [ %202, %253 ], [ %261, %264 ]
%270 = phi i8* [ %283, %253 ], [ %265, %264 ]
%271 = phi i8* [ undef, %253 ], [ %265, %264 ]
%272 = icmp ult i32 %254, 3
br i1 %272, label %308, label %286
273: ; preds = %227, %282
%274 = phi i64 [ %229, %227 ], [ %276, %282 ]
%275 = phi i8* [ %228, %227 ], [ %283, %282 ]
%276 = add nsw i64 %274, -1
%277 = icmp ugt i8* %275, %1
br i1 %277, label %282, label %278
278: ; preds = %273
%279 = and i64 %276, 4294967295
%280 = getelementptr inbounds [66 x i8], [66 x i8]* %8, i64 0, i64 %279
%281 = load i8, i8* %280
store i8 %281, i8* %275
br label %282
282: ; preds = %278, %273
%283 = getelementptr inbounds i8, i8* %275, i64 1
%284 = trunc i64 %274 to i32
%285 = icmp sgt i32 %284, 1
br i1 %285, label %273, label %251
286: ; preds = %268, %304
%287 = phi i32 [ %301, %304 ], [ %269, %268 ]
%288 = phi i8* [ %305, %304 ], [ %270, %268 ]
%289 = icmp ugt i8* %288, %1
br i1 %289, label %291, label %290
290: ; preds = %286
store i8 32, i8* %288
br label %291
291: ; preds = %290, %286
%292 = getelementptr inbounds i8, i8* %288, i64 1
%293 = icmp ugt i8* %292, %1
br i1 %293, label %295, label %294
294: ; preds = %291
store i8 32, i8* %292
br label %295
295: ; preds = %294, %291
%296 = getelementptr inbounds i8, i8* %288, i64 2
%297 = icmp ugt i8* %296, %1
br i1 %297, label %299, label %298
298: ; preds = %295
store i8 32, i8* %296
br label %299
299: ; preds = %298, %295
%300 = getelementptr inbounds i8, i8* %288, i64 3
%301 = add nsw i32 %287, -4
%302 = icmp ugt i8* %300, %1
br i1 %302, label %304, label %303
303: ; preds = %299
store i8 32, i8* %300
br label %304
304: ; preds = %303, %299
%305 = getelementptr inbounds i8, i8* %288, i64 4
%306 = add i32 %287, -5
%307 = icmp ult i32 %306, -2
br i1 %307, label %286, label %308
308: ; preds = %268, %304, %251, %7
%309 = phi i8* [ null, %7 ], [ %283, %251 ], [ %271, %268 ], [ %305, %304 ]
ret i8* %309
}