void numtostr(char **dest, char flags, long int value, int base, int prec,
              char sig) {
  char *ndest = *dest;
  long int pos, div, quo;
  unsigned long int udiv, uquo, rem;
  char temp, sch, fch;
  int i, sh, len;
  pos = 0;
  if (sig) {
    div = value < 0 ? (value * -1) : value;
    quo = 1;
    rem = 0;
    if (base != 16) {
      while (quo != 0) {
        quo = (div / base);
        rem = (div % base);
        div = quo;
        ndest[pos] = (rem + '0');
        pos++;
      }
    } else {
      while (quo != 0) {
        quo = (div / base);
        rem = (div % base);
        div = quo;
        if (rem >= 10) {
          ndest[pos] = (rem - 10 + 'A');
        } else {
          ndest[pos] = (rem + '0');
        }
        pos++;
      }
    }
  } else {
    udiv = (unsigned)value;
    uquo = 1;
    rem = 0;
    if (base != 16) {
      while (uquo != 0) {
        uquo = (udiv / base);
        rem = (udiv % base);
        udiv = uquo;
        ndest[pos] = (rem + '0');
        pos++;
      }
    } else {
      while (uquo != 0) {
        uquo = (udiv / base);
        rem = (udiv % base);
        udiv = uquo;
        if (rem >= 10) {
          ndest[pos] = (rem - 10 + 'A');
        } else {
          ndest[pos] = (rem + '0');
        }
        pos++;
      }
    }
  }
  pos--;
  for (i = 0; i <= (pos / 2); i++) {
    temp = ndest[i];
    ndest[i] = ndest[pos - i];
    ndest[pos - i] = temp;
  }
  sh = 0;
  sch = 0;
  if (((flags >> 0x03) & 0x01) || ((flags >> 0x04) & 0x01)) {
    sh = 1;
    if (value >= 0) {
      if (((flags >> 0x04) & 0x01)) {
        sch = '+';
      } else {
        sch = ' ';
      }
    } else {
      if (sig)
        sch = '-';
    }
  }
  fch = ' ';
  pos++;
  if (prec > 0) {
    len = (prec - pos);
    if (len > 0)
      sh += len;
    if (((flags >> 0x01) & 0x01))
      fch = '0';
  }
  if (sh > 0) {
    for (i = pos; i >= 0; i--)
      ndest[i + sh] = ndest[i];
    for (i = 0; i < sh; i++)
      ndest[i] = fch;
    if (sch) {
      if (((flags >> 0x01) & 0x01))
        ndest[0] = sch;
      else
        ndest[sh - 1] = sch;
    }
  }
  *dest += (pos + sh);
}


x86 assembly (clang, -O0):
<numtostr>:
push   %rbp
mov    %rsp,%rbp
mov    %r9b,%al
mov    %rdi,-0x8(%rbp)
mov    %sil,-0x9(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8d,-0x20(%rbp)
mov    %al,-0x21(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x30(%rbp)
movq   $0x0,-0x38(%rbp)
cmpb   $0x0,-0x21(%rbp)
je     1275 <numtostr+0x175>
cmpq   $0x0,-0x18(%rbp)
jge    1153 <numtostr+0x53>
imul   $0xffffffffffffffff,-0x18(%rbp),%rax
mov    %rax,-0x78(%rbp)
jmp    115b <numtostr+0x5b>
mov    -0x18(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    -0x78(%rbp),%rax
mov    %rax,-0x40(%rbp)
movq   $0x1,-0x48(%rbp)
movq   $0x0,-0x60(%rbp)
cmpl   $0x10,-0x1c(%rbp)
je     11e2 <numtostr+0xe2>
jmp    1182 <numtostr+0x82>
cmpq   $0x0,-0x48(%rbp)
je     11dd <numtostr+0xdd>
mov    -0x40(%rbp),%rax
movslq -0x1c(%rbp),%rcx
cqto
idiv   %rcx
mov    %rax,-0x48(%rbp)
mov    -0x40(%rbp),%rax
movslq -0x1c(%rbp),%rcx
cqto
idiv   %rcx
mov    %rdx,-0x60(%rbp)
mov    -0x48(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x60(%rbp),%rax
add    $0x30,%rax
mov    %al,%dl
mov    -0x30(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    1182 <numtostr+0x82>
jmp    1270 <numtostr+0x170>
jmp    11e7 <numtostr+0xe7>
cmpq   $0x0,-0x48(%rbp)
je     126b <numtostr+0x16b>
mov    -0x40(%rbp),%rax
movslq -0x1c(%rbp),%rcx
cqto
idiv   %rcx
mov    %rax,-0x48(%rbp)
mov    -0x40(%rbp),%rax
movslq -0x1c(%rbp),%rcx
cqto
idiv   %rcx
mov    %rdx,-0x60(%rbp)
mov    -0x48(%rbp),%rax
mov    %rax,-0x40(%rbp)
cmpq   $0xa,-0x60(%rbp)
jb     1245 <numtostr+0x145>
mov    -0x60(%rbp),%rax
sub    $0xa,%rax
add    $0x41,%rax
mov    %al,%dl
mov    -0x30(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    125a <numtostr+0x15a>
mov    -0x60(%rbp),%rax
add    $0x30,%rax
mov    %al,%dl
mov    -0x30(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    11e7 <numtostr+0xe7>
jmp    1270 <numtostr+0x170>
jmp    1391 <numtostr+0x291>
mov    -0x18(%rbp),%rax
mov    %eax,%eax
mov    %rax,-0x50(%rbp)
movq   $0x1,-0x58(%rbp)
movq   $0x0,-0x60(%rbp)
cmpl   $0x10,-0x1c(%rbp)
je     12fe <numtostr+0x1fe>
jmp    129e <numtostr+0x19e>
cmpq   $0x0,-0x58(%rbp)
je     12f9 <numtostr+0x1f9>
mov    -0x50(%rbp),%rax
movslq -0x1c(%rbp),%rcx
xor    %edx,%edx
div    %rcx
mov    %rax,-0x58(%rbp)
mov    -0x50(%rbp),%rax
movslq -0x1c(%rbp),%rcx
xor    %edx,%edx
div    %rcx
mov    %rdx,-0x60(%rbp)
mov    -0x58(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x60(%rbp),%rax
add    $0x30,%rax
mov    %al,%dl
mov    -0x30(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    129e <numtostr+0x19e>
jmp    138c <numtostr+0x28c>
jmp    1303 <numtostr+0x203>
cmpq   $0x0,-0x58(%rbp)
je     1387 <numtostr+0x287>
mov    -0x50(%rbp),%rax
movslq -0x1c(%rbp),%rcx
xor    %edx,%edx
div    %rcx
mov    %rax,-0x58(%rbp)
mov    -0x50(%rbp),%rax
movslq -0x1c(%rbp),%rcx
xor    %edx,%edx
div    %rcx
mov    %rdx,-0x60(%rbp)
mov    -0x58(%rbp),%rax
mov    %rax,-0x50(%rbp)
cmpq   $0xa,-0x60(%rbp)
jb     1361 <numtostr+0x261>
mov    -0x60(%rbp),%rax
sub    $0xa,%rax
add    $0x41,%rax
mov    %al,%dl
mov    -0x30(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    1376 <numtostr+0x276>
mov    -0x60(%rbp),%rax
add    $0x30,%rax
mov    %al,%dl
mov    -0x30(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    1303 <numtostr+0x203>
jmp    138c <numtostr+0x28c>
jmp    1391 <numtostr+0x291>
mov    -0x38(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x38(%rbp)
movl   $0x0,-0x68(%rbp)
movslq -0x68(%rbp),%rax
mov    %rax,-0x80(%rbp)
mov    -0x38(%rbp),%rax
mov    $0x2,%ecx
cqto
idiv   %rcx
mov    %rax,%rcx
mov    -0x80(%rbp),%rax
cmp    %rcx,%rax
jg     1418 <numtostr+0x318>
mov    -0x30(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x61(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x38(%rbp),%rcx
movslq -0x68(%rbp),%rdx
sub    %rdx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x30(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x61(%rbp),%dl
mov    -0x30(%rbp),%rax
mov    -0x38(%rbp),%rcx
movslq -0x68(%rbp),%rsi
sub    %rsi,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    13a4 <numtostr+0x2a4>
movl   $0x0,-0x6c(%rbp)
movb   $0x0,-0x62(%rbp)
movsbl -0x9(%rbp),%eax
sar    $0x3,%eax
and    $0x1,%eax
cmp    $0x0,%eax
jne    1449 <numtostr+0x349>
movsbl -0x9(%rbp),%eax
sar    $0x4,%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     1498 <numtostr+0x398>
movl   $0x1,-0x6c(%rbp)
cmpq   $0x0,-0x18(%rbp)
jl     1480 <numtostr+0x380>
movsbl -0x9(%rbp),%eax
sar    $0x4,%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     1477 <numtostr+0x377>
movb   $0x2b,-0x62(%rbp)
jmp    147b <numtostr+0x37b>
movb   $0x20,-0x62(%rbp)
jmp    1493 <numtostr+0x393>
cmpb   $0x0,-0x21(%rbp)
je     148e <numtostr+0x38e>
movb   $0x2d,-0x62(%rbp)
jmp    1493 <numtostr+0x393>
jmp    1498 <numtostr+0x398>
movb   $0x20,-0x63(%rbp)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
cmpl   $0x0,-0x20(%rbp)
jle    14ec <numtostr+0x3ec>
movslq -0x20(%rbp),%rax
sub    -0x38(%rbp),%rax
mov    %eax,-0x70(%rbp)
cmpl   $0x0,-0x70(%rbp)
jle    14d0 <numtostr+0x3d0>
mov    -0x70(%rbp),%eax
add    -0x6c(%rbp),%eax
mov    %eax,-0x6c(%rbp)
movsbl -0x9(%rbp),%eax
sar    $0x1,%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     14e7 <numtostr+0x3e7>
movb   $0x30,-0x63(%rbp)
jmp    14ec <numtostr+0x3ec>
cmpl   $0x0,-0x6c(%rbp)
jle    15a7 <numtostr+0x4a7>
mov    -0x38(%rbp),%rax
mov    %eax,-0x68(%rbp)
cmpl   $0x0,-0x68(%rbp)
jl     1530 <numtostr+0x430>
mov    -0x30(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x30(%rbp),%rax
mov    -0x68(%rbp),%ecx
add    -0x6c(%rbp),%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x68(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x68(%rbp)
jmp    14fd <numtostr+0x3fd>
movl   $0x0,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x6c(%rbp),%eax
jge    155f <numtostr+0x45f>
mov    -0x63(%rbp),%dl
mov    -0x30(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    1537 <numtostr+0x437>
cmpb   $0x0,-0x62(%rbp)
je     15a2 <numtostr+0x4a2>
movsbl -0x9(%rbp),%eax
sar    $0x1,%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     158a <numtostr+0x48a>
mov    -0x62(%rbp),%cl
mov    -0x30(%rbp),%rax
mov    %cl,(%rax)
jmp    159d <numtostr+0x49d>
mov    -0x62(%rbp),%dl
mov    -0x30(%rbp),%rax
mov    -0x6c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
jmp    15a2 <numtostr+0x4a2>
jmp    15a7 <numtostr+0x4a7>
mov    -0x38(%rbp),%rcx
movslq -0x6c(%rbp),%rax
add    %rax,%rcx
mov    -0x8(%rbp),%rax
add    (%rax),%rcx
mov    %rcx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<numtostr>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %rdx,%r10
mov    %esi,%r15d
mov    (%rdi),%r14
test   %r9b,%r9b
sete   %r13b
mov    %rdi,0x20(%rsp)
je     118e <numtostr+0x7e>
mov    %r10,%rax
neg    %rax
cmovs  %r10,%rax
cmp    $0x10,%ecx
jne    12e4 <numtostr+0x1d4>
xor    %ebp,%ebp
mov    $0x37,%ecx
nop
lea    0xf(%rax),%rdx
test   %rax,%rax
mov    %rax,%rsi
cmovs  %rdx,%rsi
mov    %rsi,%rdi
sar    $0x4,%rdi
and    $0xfffffffffffffff0,%rsi
sub    %rsi,%rax
cmp    $0xa,%rax
mov    $0x30,%esi
cmovae %ecx,%esi
add    %al,%sil
mov    %sil,(%r14,%rbp,1)
add    $0x1,%rbp
mov    %rdi,%rax
cmp    $0x1f,%rdx
jae    1150 <numtostr+0x40>
jmp    11ce <numtostr+0xbe>
mov    %r10d,%esi
cmp    $0x10,%ecx
jne    13d4 <numtostr+0x2c4>
xor    %ebp,%ebp
mov    %rsi,%rax
nop
shr    $0x4,%rax
mov    %esi,%ecx
and    $0xf,%ecx
lea    0x37(%rcx),%edx
lea    0x30(%rcx),%edi
cmp    $0xa,%rcx
movzbl %dl,%ecx
movzbl %dil,%edx
cmovae %ecx,%edx
mov    %dl,(%r14,%rbp,1)
add    $0x1,%rbp
cmp    $0xf,%rsi
mov    %rax,%rsi
ja     11a0 <numtostr+0x90>
lea    -0x1(%rbp),%r11
mov    %r11,%rax
shr    $0x3f,%rax
lea    (%rax,%rbp,1),%r12
add    $0xffffffffffffffff,%r12
sar    %r12
xor    %edx,%edx
test   %r12,%r12
cmovle %rdx,%r12
add    $0x1,%r12
cmp    $0x3,%rbp
jge    1243 <numtostr+0x133>
test   $0x1,%r12b
jne    1296 <numtostr+0x186>
test   $0x18,%r15b
je     12b3 <numtostr+0x1a3>
test   %r10,%r10
js     131b <numtostr+0x20b>
test   $0x10,%r15b
mov    $0x20,%eax
mov    $0x2b,%r13d
cmove  %eax,%r13d
mov    $0x1,%r12d
movl   $0x0,0xc(%rsp)
test   %r8d,%r8d
jg     12c4 <numtostr+0x1b4>
jmp    133a <numtostr+0x22a>
lea    0x1(%r14),%rsi
lea    (%r14,%r11,1),%rdi
mov    %r12,%rcx
and    $0xfffffffffffffffe,%rcx
neg    %rcx
xor    %edx,%edx
nopw   0x0(%rax,%rax,1)
movzbl -0x1(%rsi),%ebx
movzbl (%rdi,%rdx,1),%eax
mov    %al,-0x1(%rsi)
mov    %bl,(%rdi,%rdx,1)
movzbl (%rsi),%eax
movzbl -0x1(%rdi,%rdx,1),%ebx
mov    %bl,(%rsi)
mov    %al,-0x1(%rdi,%rdx,1)
add    $0x2,%rsi
add    $0xfffffffffffffffe,%rdx
cmp    %rdx,%rcx
jne    1260 <numtostr+0x150>
neg    %rdx
test   $0x1,%r12b
je     1201 <numtostr+0xf1>
mov    (%r14,%rdx,1),%al
sub    %rdx,%r11
mov    (%r14,%r11,1),%cl
mov    %cl,(%r14,%rdx,1)
mov    %al,(%r14,%r11,1)
test   $0x18,%r15b
jne    120b <numtostr+0xfb>
xor    %r13d,%r13d
mov    $0x1,%al
mov    %eax,0xc(%rsp)
xor    %r12d,%r12d
test   %r8d,%r8d
jle    133a <numtostr+0x22a>
xor    %eax,%eax
sub    %ebp,%r8d
cmovs  %eax,%r8d
add    %r8d,%r12d
mov    %r15d,%eax
and    $0x2,%al
shl    $0x3,%al
or     $0x20,%al
test   %r12d,%r12d
jne    1341 <numtostr+0x231>
jmp    13b7 <numtostr+0x2a7>
movslq %ecx,%rsi
xor    %ebp,%ebp
jmp    1309 <numtostr+0x1f9>
nopl   0x0(%rax,%rax,1)
cqto
idiv   %rsi
add    $0x30,%dl
mov    %dl,(%r14,%rbp,1)
add    $0x1,%rbp
test   %rax,%rax
je     11ce <numtostr+0xbe>
mov    %rax,%rdx
or     %rsi,%rdx
shr    $0x20,%rdx
jne    12f0 <numtostr+0x1e0>
xor    %edx,%edx
div    %ecx
jmp    12f5 <numtostr+0x1e5>
mov    %r13d,0xc(%rsp)
xor    %eax,%eax
test   %r9b,%r9b
mov    $0x2d,%r13d
cmove  %eax,%r13d
mov    $0x1,%r12d
test   %r8d,%r8d
jg     12c4 <numtostr+0x1b4>
mov    $0x20,%al
test   %r12d,%r12d
je     13b7 <numtostr+0x2a7>
mov    %r12d,%edx
test   $0x80000000,%ebp
jne    1393 <numtostr+0x283>
movslq %ebp,%r11
xor    %ecx,%ecx
test   %r11,%r11
cmovs  %r11,%rcx
neg    %rcx
lea    (%r11,%rcx,1),%r9
add    $0x1,%r9
cmp    $0x4,%r9
jae    1413 <numtostr+0x303>
mov    %r11,%rsi
add    $0x1,%rsi
lea    (%r14,%rdx,1),%rcx
nopl   0x0(%rax,%rax,1)
movzbl -0x1(%r14,%rsi,1),%ebx
mov    %bl,-0x1(%rcx,%rsi,1)
add    $0xffffffffffffffff,%rsi
test   %rsi,%rsi
jg     1380 <numtostr+0x270>
movzbl %al,%esi
mov    %r14,%rdi
call   1030 <memset@plt>
cmpb   $0x0,0xc(%rsp)
jne    13b7 <numtostr+0x2a7>
lea    -0x1(%r12),%eax
xor    %ecx,%ecx
test   $0x2,%r15b
cmove  %eax,%ecx
mov    %r13b,(%r14,%rcx,1)
movslq %r12d,%rax
add    %rax,%rbp
mov    0x20(%rsp),%rax
add    %rbp,(%rax)
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
movslq %ecx,%rdi
xor    %ebp,%ebp
jmp    13ff <numtostr+0x2ef>
nopl   0x0(%rax,%rax,1)
mov    %rsi,%rax
xor    %edx,%edx
div    %rdi
add    $0x30,%dl
mov    %dl,(%r14,%rbp,1)
add    $0x1,%rbp
cmp    %rdi,%rsi
mov    %rax,%rsi
jb     11ce <numtostr+0xbe>
mov    %rsi,%rax
or     %rdi,%rax
shr    $0x20,%rax
jne    13e0 <numtostr+0x2d0>
mov    %esi,%eax
xor    %edx,%edx
div    %ecx
jmp    13e8 <numtostr+0x2d8>
xor    %esi,%esi
test   %r11,%r11
cmovs  %r11,%rsi
mov    %r11,%rcx
sub    %rsi,%rcx
lea    (%r11,%rdx,1),%rbx
lea    (%r14,%rbx,1),%rsi
mov    %rsi,%rdi
sub    %rcx,%rdi
cmp    %rsi,%rdi
ja     136d <numtostr+0x25d>
lea    (%r14,%r11,1),%rsi
mov    %rsi,%rdi
sub    %rcx,%rdi
cmp    %rsi,%rdi
ja     136d <numtostr+0x25d>
xor    %ecx,%ecx
test   %r11,%r11
cmovs  %r11,%rcx
lea    (%rcx,%rdx,1),%rsi
add    %r14,%rsi
lea    (%r11,%r14,1),%rdi
add    $0x1,%rdi
cmp    %rdi,%rsi
jae    147d <numtostr+0x36d>
lea    (%r14,%rbx,1),%rsi
add    $0x1,%rsi
add    %r14,%rcx
cmp    %rsi,%rcx
jb     136d <numtostr+0x25d>
cmp    $0x10,%r9
jae    148a <numtostr+0x37a>
xor    %edi,%edi
jmp    1574 <numtostr+0x464>
mov    %r9,%rdi
and    $0xfffffffffffffff0,%rdi
lea    -0x10(%rdi),%rsi
mov    %rsi,%rcx
shr    $0x4,%rcx
add    $0x1,%rcx
mov    %ecx,%r10d
and    $0x3,%r10d
cmp    $0x30,%rsi
jae    14b1 <numtostr+0x3a1>
xor    %esi,%esi
jmp    1525 <numtostr+0x415>
mov    %r9,0x18(%rsp)
and    $0xfffffffffffffffc,%rcx
mov    %rbx,0x10(%rsp)
lea    (%r14,%rbx,1),%r8
add    $0xfffffffffffffff1,%r8
lea    (%r11,%r14,1),%r9
add    $0xfffffffffffffff1,%r9
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movups (%r9,%rsi,1),%xmm0
movups %xmm0,(%r8,%rsi,1)
movups -0x10(%r9,%rsi,1),%xmm0
movups %xmm0,-0x10(%r8,%rsi,1)
movups -0x20(%r9,%rsi,1),%xmm0
movups %xmm0,-0x20(%r8,%rsi,1)
movups -0x30(%r9,%rsi,1),%xmm0
movups %xmm0,-0x30(%r8,%rsi,1)
add    $0xffffffffffffffc0,%rsi
add    $0xfffffffffffffffc,%rcx
jne    14e0 <numtostr+0x3d0>
neg    %rsi
mov    0x18(%rsp),%r9
mov    0x10(%rsp),%rbx
test   %r10,%r10
je     1565 <numtostr+0x455>
sub    %rsi,%rbx
lea    (%rbx,%r14,1),%r8
add    $0xfffffffffffffff1,%r8
mov    %r11,%rcx
sub    %rsi,%rcx
lea    (%rcx,%r14,1),%rsi
add    $0xfffffffffffffff1,%rsi
shl    $0x4,%r10
xor    %ecx,%ecx
nopl   0x0(%rax)
movups (%rsi,%rcx,1),%xmm0
movups %xmm0,(%r8,%rcx,1)
add    $0xfffffffffffffff0,%rcx
mov    %r10,%rbx
add    %rcx,%rbx
jne    1550 <numtostr+0x440>
cmp    %rdi,%r9
je     1393 <numtostr+0x283>
test   $0xc,%r9b
je     15cd <numtostr+0x4bd>
xor    %ecx,%ecx
test   %r11,%r11
cmovs  %r11,%rcx
neg    %rcx
lea    (%r11,%rcx,1),%r8
add    $0x1,%r8
mov    %r8,%r9
and    $0xfffffffffffffffc,%r9
mov    %r11,%rsi
sub    %r9,%rsi
sub    %rdi,%r11
sub    %r9,%rdi
lea    (%r11,%r14,1),%rcx
add    $0xfffffffffffffffd,%rcx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    (%rcx),%ebx
mov    %ebx,(%rcx,%rdx,1)
add    $0xfffffffffffffffc,%rcx
add    $0x4,%rdi
jne    15b0 <numtostr+0x4a0>
cmp    %r9,%r8
jne    1370 <numtostr+0x260>
jmp    1393 <numtostr+0x283>
sub    %rdi,%r11
jmp    136d <numtostr+0x25d>

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

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