char *number(char *buf, char *end, long long numll, int base, int size,
             int precision, int type) {
  unsigned long num;
  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;
  num = (unsigned long)numll;
  if (type & 2) {
    if (numll < 0) {
      sign = '-';
      num = -numll;
      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[num % base];
      num /= 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    $0x100,%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    -0xb0(%rbp),%rdi
lea    0xebd(%rip),%rsi
mov    $0x25,%edx
call   1030 <memcpy@plt>
lea    -0xe0(%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    -0xe0(%rbp),%rax
mov    %rax,-0xf0(%rbp)
jmp    1195 <number+0x85>
lea    -0xb0(%rbp),%rax
mov    %rax,-0xf0(%rbp)
mov    -0xf0(%rbp),%rax
mov    %rax,-0x88(%rbp)
mov    0x10(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     11bb <number+0xab>
mov    0x10(%rbp),%eax
and    $0xfffffffe,%eax
mov    %eax,0x10(%rbp)
cmpl   $0x2,-0x24(%rbp)
jl     11cf <number+0xbf>
cmpl   $0x24,-0x24(%rbp)
jle    11dc <number+0xcc>
movq   $0x0,-0x8(%rbp)
jmp    15d0 <number+0x4c0>
mov    0x10(%rbp),%edx
and    $0x1,%edx
mov    $0x20,%eax
mov    $0x30,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %al,-0x39(%rbp)
movb   $0x0,-0x3a(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    0x10(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     1283 <number+0x173>
cmpq   $0x0,-0x20(%rbp)
jge    1237 <number+0x127>
movb   $0x2d,-0x3a(%rbp)
xor    %eax,%eax
sub    -0x20(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
jmp    127e <number+0x16e>
mov    0x10(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     1258 <number+0x148>
movb   $0x2b,-0x3a(%rbp)
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
jmp    1279 <number+0x169>
mov    0x10(%rbp),%eax
and    $0x8,%eax
cmp    $0x0,%eax
je     1274 <number+0x164>
movb   $0x20,-0x3a(%rbp)
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
jmp    1279 <number+0x169>
jmp    127e <number+0x16e>
jmp    1283 <number+0x173>
mov    0x10(%rbp),%eax
and    $0x20,%eax
cmp    $0x0,%eax
je     12c7 <number+0x1b7>
cmpl   $0x10,-0x24(%rbp)
jne    12aa <number+0x19a>
mov    -0x28(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x28(%rbp)
jmp    12c2 <number+0x1b2>
cmpl   $0x8,-0x24(%rbp)
jne    12bd <number+0x1ad>
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
jmp    12c2 <number+0x1b2>
jmp    12c7 <number+0x1b7>
movl   $0x0,-0xe4(%rbp)
cmpq   $0x0,-0x38(%rbp)
jne    12f9 <number+0x1e9>
mov    -0xe4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0xe4(%rbp)
cltq
movb   $0x30,-0x80(%rbp,%rax,1)
jmp    1360 <number+0x250>
jmp    12fe <number+0x1ee>
cmpq   $0x0,-0x38(%rbp)
je     135b <number+0x24b>
mov    -0x88(%rbp),%rax
mov    %rax,-0xf8(%rbp)
mov    -0x38(%rbp),%rax
movslq -0x24(%rbp),%rcx
xor    %edx,%edx
div    %rcx
mov    -0xf8(%rbp),%rax
mov    (%rax,%rdx,1),%cl
mov    -0xe4(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0xe4(%rbp)
cltq
mov    %cl,-0x80(%rbp,%rax,1)
movslq -0x24(%rbp),%rcx
mov    -0x38(%rbp),%rax
xor    %edx,%edx
div    %rcx
mov    %rax,-0x38(%rbp)
jmp    12fe <number+0x1ee>
jmp    1360 <number+0x250>
mov    -0xe4(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jle    1378 <number+0x268>
mov    -0xe4(%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    13d6 <number+0x2c6>
jmp    1397 <number+0x287>
mov    -0x28(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
cmp    $0x0,%eax
jle    13d1 <number+0x2c1>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     13c0 <number+0x2b0>
mov    -0x10(%rbp),%rax
movb   $0x20,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1397 <number+0x287>
jmp    13d6 <number+0x2c6>
cmpb   $0x0,-0x3a(%rbp)
je     1403 <number+0x2f3>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     13f7 <number+0x2e7>
mov    -0x3a(%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     14a1 <number+0x391>
cmpl   $0x8,-0x24(%rbp)
jne    1442 <number+0x332>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     1431 <number+0x321>
mov    -0x10(%rbp),%rax
movb   $0x30,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    149c <number+0x38c>
cmpl   $0x10,-0x24(%rbp)
jne    1497 <number+0x387>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     1461 <number+0x351>
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     148b <number+0x37b>
mov    -0x88(%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    149c <number+0x38c>
jmp    14a1 <number+0x391>
mov    0x10(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
jne    14f6 <number+0x3e6>
jmp    14b5 <number+0x3a5>
mov    -0x28(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
cmp    $0x0,%eax
jle    14f1 <number+0x3e1>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     14e0 <number+0x3d0>
mov    -0x39(%rbp),%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    14b5 <number+0x3a5>
jmp    14f6 <number+0x3e6>
jmp    14fb <number+0x3eb>
mov    -0xe4(%rbp),%eax
mov    -0x2c(%rbp),%ecx
mov    %ecx,%edx
add    $0xffffffff,%edx
mov    %edx,-0x2c(%rbp)
cmp    %ecx,%eax
jge    153a <number+0x42a>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     1529 <number+0x419>
mov    -0x10(%rbp),%rax
movb   $0x30,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    14fb <number+0x3eb>
jmp    153f <number+0x42f>
mov    -0xe4(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0xe4(%rbp)
cmp    $0x0,%eax
jle    1589 <number+0x479>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     1578 <number+0x468>
movslq -0xe4(%rbp),%rax
mov    -0x80(%rbp,%rax,1),%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    153f <number+0x42f>
jmp    158e <number+0x47e>
mov    -0x28(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
cmp    $0x0,%eax
jle    15c8 <number+0x4b8>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
ja     15b7 <number+0x4a7>
mov    -0x10(%rbp),%rax
movb   $0x20,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    158e <number+0x47e>
mov    -0x10(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x100,%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 i64
%17 = alloca i8
%18 = alloca i8
%19 = alloca [66 x i8]
%20 = alloca i8*
%21 = alloca [37 x i8]
%22 = alloca [37 x i8]
%23 = 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
%24 = bitcast [37 x i8]* %21 to i8*
%25 = bitcast [37 x i8]* %22 to i8*
%26 = load i32, i32* %15
%27 = and i32 %26, 64
%28 = icmp ne i32 %27, 0
br i1 %28, label %29, label %31
29: ; preds = %7
%30 = getelementptr inbounds [37 x i8], [37 x i8]* %22, i64 0, i64 0
br label %33
31: ; preds = %7
%32 = getelementptr inbounds [37 x i8], [37 x i8]* %21, i64 0, i64 0
br label %33
33: ; preds = %31, %29
%34 = phi i8* [ %30, %29 ], [ %32, %31 ]
store i8* %34, i8** %20
%35 = load i32, i32* %15
%36 = and i32 %35, 16
%37 = icmp ne i32 %36, 0
br i1 %37, label %38, label %41
38: ; preds = %33
%39 = load i32, i32* %15
%40 = and i32 %39, -2
store i32 %40, i32* %15
br label %41
41: ; preds = %38, %33
%42 = load i32, i32* %12
%43 = icmp slt i32 %42, 2
br i1 %43, label %47, label %44
44: ; preds = %41
%45 = load i32, i32* %12
%46 = icmp sgt i32 %45, 36
br i1 %46, label %47, label %48
47: ; preds = %44, %41
store i8* null, i8** %8
br label %282
48: ; preds = %44
%49 = load i32, i32* %15
%50 = and i32 %49, 1
%51 = icmp ne i32 %50, 0
%52 = zext i1 %51 to i64
%53 = select i1 %51, i32 48, i32 32
%54 = trunc i32 %53 to i8
store i8 %54, i8* %17
store i8 0, i8* %18
%55 = load i64, i64* %11
store i64 %55, i64* %16
%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 = %48
%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* %18
%63 = load i64, i64* %11
%64 = sub nsw i64 0, %63
store i64 %64, i64* %16
%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* %18
%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* %18
%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, %48
%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* %23
%103 = load i64, i64* %16
%104 = icmp eq i64 %103, 0
br i1 %104, label %105, label %110
105: ; preds = %102
%106 = load i32, i32* %23
%107 = add nsw i32 %106, 1
store i32 %107, i32* %23
%108 = sext i32 %106 to i64
%109 = getelementptr inbounds [66 x i8], [66 x i8]* %19, i64 0, i64 %108
store i8 48, i8* %109
br label %131
110: ; preds = %102
br label %111
111: ; preds = %114, %110
%112 = load i64, i64* %16
%113 = icmp ne i64 %112, 0
br i1 %113, label %114, label %130
114: ; preds = %111
%115 = load i8*, i8** %20
%116 = load i64, i64* %16
%117 = load i32, i32* %12
%118 = sext i32 %117 to i64
%119 = urem i64 %116, %118
%120 = getelementptr inbounds i8, i8* %115, i64 %119
%121 = load i8, i8* %120
%122 = load i32, i32* %23
%123 = add nsw i32 %122, 1
store i32 %123, i32* %23
%124 = sext i32 %122 to i64
%125 = getelementptr inbounds [66 x i8], [66 x i8]* %19, i64 0, i64 %124
store i8 %121, i8* %125
%126 = load i32, i32* %12
%127 = sext i32 %126 to i64
%128 = load i64, i64* %16
%129 = udiv i64 %128, %127
store i64 %129, i64* %16
br label %111
130: ; preds = %111
br label %131
131: ; preds = %130, %105
%132 = load i32, i32* %23
%133 = load i32, i32* %14
%134 = icmp sgt i32 %132, %133
br i1 %134, label %135, label %137
135: ; preds = %131
%136 = load i32, i32* %23
store i32 %136, i32* %14
br label %137
137: ; preds = %135, %131
%138 = load i32, i32* %14
%139 = load i32, i32* %13
%140 = sub nsw i32 %139, %138
store i32 %140, i32* %13
%141 = load i32, i32* %15
%142 = and i32 %141, 17
%143 = icmp ne i32 %142, 0
br i1 %143, label %159, label %144
144: ; preds = %137
br label %145
145: ; preds = %155, %144
%146 = load i32, i32* %13
%147 = add nsw i32 %146, -1
store i32 %147, i32* %13
%148 = icmp sgt i32 %146, 0
br i1 %148, label %149, label %158
149: ; preds = %145
%150 = load i8*, i8** %9
%151 = load i8*, i8** %10
%152 = icmp ule i8* %150, %151
br i1 %152, label %153, label %155
153: ; preds = %149
%154 = load i8*, i8** %9
store i8 32, i8* %154
br label %155
155: ; preds = %153, %149
%156 = load i8*, i8** %9
%157 = getelementptr inbounds i8, i8* %156, i32 1
store i8* %157, i8** %9
br label %145
158: ; preds = %145
br label %159
159: ; preds = %158, %137
%160 = load i8, i8* %18
%161 = icmp ne i8 %160, 0
br i1 %161, label %162, label %172
162: ; preds = %159
%163 = load i8*, i8** %9
%164 = load i8*, i8** %10
%165 = icmp ule i8* %163, %164
br i1 %165, label %166, label %169
166: ; preds = %162
%167 = load i8, i8* %18
%168 = load i8*, i8** %9
store i8 %167, i8* %168
br label %169
169: ; preds = %166, %162
%170 = load i8*, i8** %9
%171 = getelementptr inbounds i8, i8* %170, i32 1
store i8* %171, i8** %9
br label %172
172: ; preds = %169, %159
%173 = load i32, i32* %15
%174 = and i32 %173, 32
%175 = icmp ne i32 %174, 0
br i1 %175, label %176, label %213
176: ; preds = %172
%177 = load i32, i32* %12
%178 = icmp eq i32 %177, 8
br i1 %178, label %179, label %188
179: ; preds = %176
%180 = load i8*, i8** %9
%181 = load i8*, i8** %10
%182 = icmp ule i8* %180, %181
br i1 %182, label %183, label %185
183: ; preds = %179
%184 = load i8*, i8** %9
store i8 48, i8* %184
br label %185
185: ; preds = %183, %179
%186 = load i8*, i8** %9
%187 = getelementptr inbounds i8, i8* %186, i32 1
store i8* %187, i8** %9
br label %212
188: ; preds = %176
%189 = load i32, i32* %12
%190 = icmp eq i32 %189, 16
br i1 %190, label %191, label %211
191: ; preds = %188
%192 = load i8*, i8** %9
%193 = load i8*, i8** %10
%194 = icmp ule i8* %192, %193
br i1 %194, label %195, label %197
195: ; preds = %191
%196 = load i8*, i8** %9
store i8 48, i8* %196
br label %197
197: ; preds = %195, %191
%198 = load i8*, i8** %9
%199 = getelementptr inbounds i8, i8* %198, i32 1
store i8* %199, i8** %9
%200 = load i8*, i8** %9
%201 = load i8*, i8** %10
%202 = icmp ule i8* %200, %201
br i1 %202, label %203, label %208
203: ; preds = %197
%204 = load i8*, i8** %20
%205 = getelementptr inbounds i8, i8* %204, i64 33
%206 = load i8, i8* %205
%207 = load i8*, i8** %9
store i8 %206, i8* %207
br label %208
208: ; preds = %203, %197
%209 = load i8*, i8** %9
%210 = getelementptr inbounds i8, i8* %209, i32 1
store i8* %210, i8** %9
br label %211
211: ; preds = %208, %188
br label %212
212: ; preds = %211, %185
br label %213
213: ; preds = %212, %172
%214 = load i32, i32* %15
%215 = and i32 %214, 16
%216 = icmp ne i32 %215, 0
br i1 %216, label %233, label %217
217: ; preds = %213
br label %218
218: ; preds = %229, %217
%219 = load i32, i32* %13
%220 = add nsw i32 %219, -1
store i32 %220, i32* %13
%221 = icmp sgt i32 %219, 0
br i1 %221, label %222, label %232
222: ; preds = %218
%223 = load i8*, i8** %9
%224 = load i8*, i8** %10
%225 = icmp ule i8* %223, %224
br i1 %225, label %226, label %229
226: ; preds = %222
%227 = load i8, i8* %17
%228 = load i8*, i8** %9
store i8 %227, i8* %228
br label %229
229: ; preds = %226, %222
%230 = load i8*, i8** %9
%231 = getelementptr inbounds i8, i8* %230, i32 1
store i8* %231, i8** %9
br label %218
232: ; preds = %218
br label %233
233: ; preds = %232, %213
br label %234
234: ; preds = %245, %233
%235 = load i32, i32* %23
%236 = load i32, i32* %14
%237 = add nsw i32 %236, -1
store i32 %237, i32* %14
%238 = icmp slt i32 %235, %236
br i1 %238, label %239, label %248
239: ; preds = %234
%240 = load i8*, i8** %9
%241 = load i8*, i8** %10
%242 = icmp ule i8* %240, %241
br i1 %242, label %243, label %245
243: ; preds = %239
%244 = load i8*, i8** %9
store i8 48, i8* %244
br label %245
245: ; preds = %243, %239
%246 = load i8*, i8** %9
%247 = getelementptr inbounds i8, i8* %246, i32 1
store i8* %247, i8** %9
br label %234
248: ; preds = %234
br label %249
249: ; preds = %263, %248
%250 = load i32, i32* %23
%251 = add nsw i32 %250, -1
store i32 %251, i32* %23
%252 = icmp sgt i32 %250, 0
br i1 %252, label %253, label %266
253: ; preds = %249
%254 = load i8*, i8** %9
%255 = load i8*, i8** %10
%256 = icmp ule i8* %254, %255
br i1 %256, label %257, label %263
257: ; preds = %253
%258 = load i32, i32* %23
%259 = sext i32 %258 to i64
%260 = getelementptr inbounds [66 x i8], [66 x i8]* %19, i64 0, i64 %259
%261 = load i8, i8* %260
%262 = load i8*, i8** %9
store i8 %261, i8* %262
br label %263
263: ; preds = %257, %253
%264 = load i8*, i8** %9
%265 = getelementptr inbounds i8, i8* %264, i32 1
store i8* %265, i8** %9
br label %249
266: ; preds = %249
br label %267
267: ; preds = %277, %266
%268 = load i32, i32* %13
%269 = add nsw i32 %268, -1
store i32 %269, i32* %13
%270 = icmp sgt i32 %268, 0
br i1 %270, label %271, label %280
271: ; preds = %267
%272 = load i8*, i8** %9
%273 = load i8*, i8** %10
%274 = icmp ule i8* %272, %273
br i1 %274, label %275, label %277
275: ; preds = %271
%276 = load i8*, i8** %9
store i8 32, i8* %276
br label %277
277: ; preds = %275, %271
%278 = load i8*, i8** %9
%279 = getelementptr inbounds i8, i8* %278, i32 1
store i8* %279, i8** %9
br label %267
280: ; preds = %267
%281 = load i8*, i8** %9
store i8* %281, i8** %8
br label %282
282: ; preds = %280, %47
%283 = load i8*, i8** %8
ret i8* %283
}

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 i64 [ %32, %31 ], [ %2, %37 ], [ %2, %42 ], [ %2, %39 ], [ %2, %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 %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 %46, 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 [ %46, %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
}