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[({
        int __res;
        __res = ((unsigned long)num) % (unsigned)base;
        num = ((unsigned long)num) / (unsigned)base;
        __res;
      })];
  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,-0xe8(%rbp)
jmp    1195 <number+0x85>
lea    -0xa0(%rbp),%rax
mov    %rax,-0xe8(%rbp)
mov    -0xe8(%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    15db <number+0x4cb>
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    136e <number+0x25e>
jmp    12f3 <number+0x1e3>
cmpq   $0x0,-0x20(%rbp)
je     1369 <number+0x259>
mov    -0x78(%rbp),%rax
mov    %rax,-0xf0(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x24(%rbp),%ecx
xor    %edx,%edx
div    %rcx
mov    %edx,%eax
mov    %eax,-0xd8(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x24(%rbp),%ecx
xor    %edx,%edx
div    %rcx
mov    %rax,%rcx
mov    -0xf0(%rbp),%rax
mov    %rcx,-0x20(%rbp)
mov    -0xd8(%rbp),%ecx
mov    %ecx,-0xdc(%rbp)
movslq -0xdc(%rbp),%rcx
mov    (%rax,%rcx,1),%cl
mov    -0xd4(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0xd4(%rbp)
cltq
mov    %cl,-0x70(%rbp,%rax,1)
jmp    12f3 <number+0x1e3>
jmp    136e <number+0x25e>
mov    -0xd4(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jle    1386 <number+0x276>
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    13e4 <number+0x2d4>
jmp    13a5 <number+0x295>
mov    -0x28(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
cmp    $0x0,%eax
jle    13df <number+0x2cf>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     13ce <number+0x2be>
mov    -0x10(%rbp),%rax
movb   $0x20,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    13a5 <number+0x295>
jmp    13e4 <number+0x2d4>
cmpb   $0x0,-0x2e(%rbp)
je     1411 <number+0x301>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     1405 <number+0x2f5>
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     14ac <number+0x39c>
cmpl   $0x8,-0x24(%rbp)
jne    1450 <number+0x340>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     143f <number+0x32f>
mov    -0x10(%rbp),%rax
movb   $0x30,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    14a7 <number+0x397>
cmpl   $0x10,-0x24(%rbp)
jne    14a2 <number+0x392>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     146f <number+0x35f>
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     1496 <number+0x386>
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    14a7 <number+0x397>
jmp    14ac <number+0x39c>
mov    0x10(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
jne    1501 <number+0x3f1>
jmp    14c0 <number+0x3b0>
mov    -0x28(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
cmp    $0x0,%eax
jle    14fc <number+0x3ec>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     14eb <number+0x3db>
mov    -0x2d(%rbp),%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    14c0 <number+0x3b0>
jmp    1501 <number+0x3f1>
jmp    1506 <number+0x3f6>
mov    -0xd4(%rbp),%eax
mov    -0x2c(%rbp),%ecx
mov    %ecx,%edx
add    $0xffffffff,%edx
mov    %edx,-0x2c(%rbp)
cmp    %ecx,%eax
jge    1545 <number+0x435>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     1534 <number+0x424>
mov    -0x10(%rbp),%rax
movb   $0x30,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1506 <number+0x3f6>
jmp    154a <number+0x43a>
mov    -0xd4(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0xd4(%rbp)
cmp    $0x0,%eax
jle    1594 <number+0x484>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     1583 <number+0x473>
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    154a <number+0x43a>
jmp    1599 <number+0x489>
mov    -0x28(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
cmp    $0x0,%eax
jle    15d3 <number+0x4c3>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     15c2 <number+0x4b2>
mov    -0x10(%rbp),%rax
movb   $0x20,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1599 <number+0x489>
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
%23 = alloca i32
%24 = 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
%25 = bitcast [37 x i8]* %20 to i8*
%26 = bitcast [37 x i8]* %21 to i8*
%27 = load i32, i32* %15
%28 = and i32 %27, 64
%29 = icmp ne i32 %28, 0
br i1 %29, label %30, label %32
30: ; preds = %7
%31 = getelementptr inbounds [37 x i8], [37 x i8]* %21, i64 0, i64 0
br label %34
32: ; preds = %7
%33 = getelementptr inbounds [37 x i8], [37 x i8]* %20, i64 0, i64 0
br label %34
34: ; preds = %32, %30
%35 = phi i8* [ %31, %30 ], [ %33, %32 ]
store i8* %35, i8** %19
%36 = load i32, i32* %15
%37 = and i32 %36, 16
%38 = icmp ne i32 %37, 0
br i1 %38, label %39, label %42
39: ; preds = %34
%40 = load i32, i32* %15
%41 = and i32 %40, -2
store i32 %41, i32* %15
br label %42
42: ; preds = %39, %34
%43 = load i32, i32* %12
%44 = icmp slt i32 %43, 2
br i1 %44, label %48, label %45
45: ; preds = %42
%46 = load i32, i32* %12
%47 = icmp sgt i32 %46, 36
br i1 %47, label %48, label %49
48: ; preds = %45, %42
store i8* null, i8** %8
br label %286
49: ; preds = %45
%50 = load i32, i32* %15
%51 = and i32 %50, 1
%52 = icmp ne i32 %51, 0
%53 = zext i1 %52 to i64
%54 = select i1 %52, i32 48, i32 32
%55 = trunc i32 %54 to i8
store i8 %55, i8* %16
store i8 0, i8* %17
%56 = load i32, i32* %15
%57 = and i32 %56, 2
%58 = icmp ne i32 %57, 0
br i1 %58, label %59, label %84
59: ; preds = %49
%60 = load i64, i64* %11
%61 = icmp slt i64 %60, 0
br i1 %61, label %62, label %67
62: ; preds = %59
store i8 45, i8* %17
%63 = load i64, i64* %11
%64 = sub nsw i64 0, %63
store i64 %64, i64* %11
%65 = load i32, i32* %13
%66 = add nsw i32 %65, -1
store i32 %66, i32* %13
br label %83
67: ; preds = %59
%68 = load i32, i32* %15
%69 = and i32 %68, 4
%70 = icmp ne i32 %69, 0
br i1 %70, label %71, label %74
71: ; preds = %67
store i8 43, i8* %17
%72 = load i32, i32* %13
%73 = add nsw i32 %72, -1
store i32 %73, i32* %13
br label %82
74: ; preds = %67
%75 = load i32, i32* %15
%76 = and i32 %75, 8
%77 = icmp ne i32 %76, 0
br i1 %77, label %78, label %81
78: ; preds = %74
store i8 32, i8* %17
%79 = load i32, i32* %13
%80 = add nsw i32 %79, -1
store i32 %80, i32* %13
br label %81
81: ; preds = %78, %74
br label %82
82: ; preds = %81, %71
br label %83
83: ; preds = %82, %62
br label %84
84: ; preds = %83, %49
%85 = load i32, i32* %15
%86 = and i32 %85, 32
%87 = icmp ne i32 %86, 0
br i1 %87, label %88, label %102
88: ; preds = %84
%89 = load i32, i32* %12
%90 = icmp eq i32 %89, 16
br i1 %90, label %91, label %94
91: ; preds = %88
%92 = load i32, i32* %13
%93 = sub nsw i32 %92, 2
store i32 %93, i32* %13
br label %101
94: ; preds = %88
%95 = load i32, i32* %12
%96 = icmp eq i32 %95, 8
br i1 %96, label %97, label %100
97: ; preds = %94
%98 = load i32, i32* %13
%99 = add nsw i32 %98, -1
store i32 %99, i32* %13
br label %100
100: ; preds = %97, %94
br label %101
101: ; preds = %100, %91
br label %102
102: ; preds = %101, %84
store i32 0, i32* %22
%103 = load i64, i64* %11
%104 = icmp eq i64 %103, 0
br i1 %104, label %105, label %110
105: ; preds = %102
%106 = load i32, i32* %22
%107 = add nsw i32 %106, 1
store i32 %107, i32* %22
%108 = sext i32 %106 to i64
%109 = getelementptr inbounds [66 x i8], [66 x i8]* %18, i64 0, i64 %108
store i8 48, i8* %109
br label %135
110: ; preds = %102
br label %111
111: ; preds = %114, %110
%112 = load i64, i64* %11
%113 = icmp ne i64 %112, 0
br i1 %113, label %114, label %134
114: ; preds = %111
%115 = load i8*, i8** %19
%116 = load i64, i64* %11
%117 = load i32, i32* %12
%118 = zext i32 %117 to i64
%119 = urem i64 %116, %118
%120 = trunc i64 %119 to i32
store i32 %120, i32* %23
%121 = load i64, i64* %11
%122 = load i32, i32* %12
%123 = zext i32 %122 to i64
%124 = udiv i64 %121, %123
store i64 %124, i64* %11
%125 = load i32, i32* %23
store i32 %125, i32* %24
%126 = load i32, i32* %24
%127 = sext i32 %126 to i64
%128 = getelementptr inbounds i8, i8* %115, i64 %127
%129 = load i8, i8* %128
%130 = load i32, i32* %22
%131 = add nsw i32 %130, 1
store i32 %131, i32* %22
%132 = sext i32 %130 to i64
%133 = getelementptr inbounds [66 x i8], [66 x i8]* %18, i64 0, i64 %132
store i8 %129, i8* %133
br label %111
134: ; preds = %111
br label %135
135: ; preds = %134, %105
%136 = load i32, i32* %22
%137 = load i32, i32* %14
%138 = icmp sgt i32 %136, %137
br i1 %138, label %139, label %141
139: ; preds = %135
%140 = load i32, i32* %22
store i32 %140, i32* %14
br label %141
141: ; preds = %139, %135
%142 = load i32, i32* %14
%143 = load i32, i32* %13
%144 = sub nsw i32 %143, %142
store i32 %144, i32* %13
%145 = load i32, i32* %15
%146 = and i32 %145, 17
%147 = icmp ne i32 %146, 0
br i1 %147, label %163, label %148
148: ; preds = %141
br label %149
149: ; preds = %159, %148
%150 = load i32, i32* %13
%151 = add nsw i32 %150, -1
store i32 %151, i32* %13
%152 = icmp sgt i32 %150, 0
br i1 %152, label %153, label %162
153: ; preds = %149
%154 = load i8*, i8** %9
%155 = load i8*, i8** %10
%156 = icmp ule i8* %154, %155
br i1 %156, label %157, label %159
157: ; preds = %153
%158 = load i8*, i8** %9
store i8 32, i8* %158
br label %159
159: ; preds = %157, %153
%160 = load i8*, i8** %9
%161 = getelementptr inbounds i8, i8* %160, i32 1
store i8* %161, i8** %9
br label %149
162: ; preds = %149
br label %163
163: ; preds = %162, %141
%164 = load i8, i8* %17
%165 = icmp ne i8 %164, 0
br i1 %165, label %166, label %176
166: ; preds = %163
%167 = load i8*, i8** %9
%168 = load i8*, i8** %10
%169 = icmp ule i8* %167, %168
br i1 %169, label %170, label %173
170: ; preds = %166
%171 = load i8, i8* %17
%172 = load i8*, i8** %9
store i8 %171, i8* %172
br label %173
173: ; preds = %170, %166
%174 = load i8*, i8** %9
%175 = getelementptr inbounds i8, i8* %174, i32 1
store i8* %175, i8** %9
br label %176
176: ; preds = %173, %163
%177 = load i32, i32* %15
%178 = and i32 %177, 32
%179 = icmp ne i32 %178, 0
br i1 %179, label %180, label %217
180: ; preds = %176
%181 = load i32, i32* %12
%182 = icmp eq i32 %181, 8
br i1 %182, label %183, label %192
183: ; preds = %180
%184 = load i8*, i8** %9
%185 = load i8*, i8** %10
%186 = icmp ule i8* %184, %185
br i1 %186, label %187, label %189
187: ; preds = %183
%188 = load i8*, i8** %9
store i8 48, i8* %188
br label %189
189: ; preds = %187, %183
%190 = load i8*, i8** %9
%191 = getelementptr inbounds i8, i8* %190, i32 1
store i8* %191, i8** %9
br label %216
192: ; preds = %180
%193 = load i32, i32* %12
%194 = icmp eq i32 %193, 16
br i1 %194, label %195, label %215
195: ; preds = %192
%196 = load i8*, i8** %9
%197 = load i8*, i8** %10
%198 = icmp ule i8* %196, %197
br i1 %198, label %199, label %201
199: ; preds = %195
%200 = load i8*, i8** %9
store i8 48, i8* %200
br label %201
201: ; preds = %199, %195
%202 = load i8*, i8** %9
%203 = getelementptr inbounds i8, i8* %202, i32 1
store i8* %203, i8** %9
%204 = load i8*, i8** %9
%205 = load i8*, i8** %10
%206 = icmp ule i8* %204, %205
br i1 %206, label %207, label %212
207: ; preds = %201
%208 = load i8*, i8** %19
%209 = getelementptr inbounds i8, i8* %208, i64 33
%210 = load i8, i8* %209
%211 = load i8*, i8** %9
store i8 %210, i8* %211
br label %212
212: ; preds = %207, %201
%213 = load i8*, i8** %9
%214 = getelementptr inbounds i8, i8* %213, i32 1
store i8* %214, i8** %9
br label %215
215: ; preds = %212, %192
br label %216
216: ; preds = %215, %189
br label %217
217: ; preds = %216, %176
%218 = load i32, i32* %15
%219 = and i32 %218, 16
%220 = icmp ne i32 %219, 0
br i1 %220, label %237, label %221
221: ; preds = %217
br label %222
222: ; preds = %233, %221
%223 = load i32, i32* %13
%224 = add nsw i32 %223, -1
store i32 %224, i32* %13
%225 = icmp sgt i32 %223, 0
br i1 %225, label %226, label %236
226: ; preds = %222
%227 = load i8*, i8** %9
%228 = load i8*, i8** %10
%229 = icmp ule i8* %227, %228
br i1 %229, label %230, label %233
230: ; preds = %226
%231 = load i8, i8* %16
%232 = load i8*, i8** %9
store i8 %231, i8* %232
br label %233
233: ; preds = %230, %226
%234 = load i8*, i8** %9
%235 = getelementptr inbounds i8, i8* %234, i32 1
store i8* %235, i8** %9
br label %222
236: ; preds = %222
br label %237
237: ; preds = %236, %217
br label %238
238: ; preds = %249, %237
%239 = load i32, i32* %22
%240 = load i32, i32* %14
%241 = add nsw i32 %240, -1
store i32 %241, i32* %14
%242 = icmp slt i32 %239, %240
br i1 %242, label %243, label %252
243: ; preds = %238
%244 = load i8*, i8** %9
%245 = load i8*, i8** %10
%246 = icmp ule i8* %244, %245
br i1 %246, label %247, label %249
247: ; preds = %243
%248 = load i8*, i8** %9
store i8 48, i8* %248
br label %249
249: ; preds = %247, %243
%250 = load i8*, i8** %9
%251 = getelementptr inbounds i8, i8* %250, i32 1
store i8* %251, i8** %9
br label %238
252: ; preds = %238
br label %253
253: ; preds = %267, %252
%254 = load i32, i32* %22
%255 = add nsw i32 %254, -1
store i32 %255, i32* %22
%256 = icmp sgt i32 %254, 0
br i1 %256, label %257, label %270
257: ; preds = %253
%258 = load i8*, i8** %9
%259 = load i8*, i8** %10
%260 = icmp ule i8* %258, %259
br i1 %260, label %261, label %267
261: ; preds = %257
%262 = load i32, i32* %22
%263 = sext i32 %262 to i64
%264 = getelementptr inbounds [66 x i8], [66 x i8]* %18, i64 0, i64 %263
%265 = load i8, i8* %264
%266 = load i8*, i8** %9
store i8 %265, i8* %266
br label %267
267: ; preds = %261, %257
%268 = load i8*, i8** %9
%269 = getelementptr inbounds i8, i8* %268, i32 1
store i8* %269, i8** %9
br label %253
270: ; preds = %253
br label %271
271: ; preds = %281, %270
%272 = load i32, i32* %13
%273 = add nsw i32 %272, -1
store i32 %273, i32* %13
%274 = icmp sgt i32 %272, 0
br i1 %274, label %275, label %284
275: ; preds = %271
%276 = load i8*, i8** %9
%277 = load i8*, i8** %10
%278 = icmp ule i8* %276, %277
br i1 %278, label %279, label %281
279: ; preds = %275
%280 = load i8*, i8** %9
store i8 32, i8* %280
br label %281
281: ; preds = %279, %275
%282 = load i8*, i8** %9
%283 = getelementptr inbounds i8, i8* %282, i32 1
store i8* %283, i8** %9
br label %271
284: ; preds = %271
%285 = load i8*, i8** %9
store i8* %285, i8** %8
br label %286
286: ; preds = %284, %48
%287 = load i8*, i8** %8
ret i8* %287
}

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 i32 [ %33, %31 ], [ %38, %37 ], [ %43, %42 ], [ %4, %39 ], [ %4, %23 ]
%46 = phi i1 [ false, %31 ], [ false, %37 ], [ false, %42 ], [ true, %39 ], [ true, %23 ]
%47 = phi i8 [ 45, %31 ], [ 43, %37 ], [ 32, %42 ], [ 0, %39 ], [ 0, %23 ]
%48 = phi i64 [ %32, %31 ], [ %2, %37 ], [ %2, %42 ], [ %2, %39 ], [ %2, %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 %45, -2
br label %56
54: ; preds = %51
%55 = add nsw i32 %45, -1
br label %56
56: ; preds = %51, %52, %54, %44
%57 = phi i32 [ %53, %52 ], [ %55, %54 ], [ %45, %44 ], [ %45, %51 ]
%58 = icmp eq i64 %48, 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 ], [ %69, %62 ]
%64 = phi i64 [ %48, %59 ], [ %66, %62 ]
%65 = urem i64 %64, %60
%66 = udiv i64 %64, %60
%67 = getelementptr inbounds i8, i8* %16, i64 %65
%68 = load i8, i8* %67
%69 = add nuw i64 %63, 1
%70 = getelementptr inbounds [66 x i8], [66 x i8]* %8, i64 0, i64 %63
store i8 %68, i8* %70
%71 = icmp ult i64 %64, %60
br i1 %71, label %72, label %62
72: ; preds = %62
%73 = trunc i64 %69 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 %46, 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 %47, 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
}