#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ memcpy(char *, char *, int);
scalar_t__ strchr(char *, char);
void mprintf_conv_int(char *dst, int flags, int minwidth, int precision,
                      char convchar, unsigned int x) {
  int i = x;
  char neg = 0;
  int k;
  int fillchars;
  char aux;
  if (precision < 1)
    precision = 1;
  if (i < 0 && (convchar == 'i' || convchar == 'd')) {
    x = -x;
    neg = 1;
  }
  if (strchr("uoxXbc", convchar)) {
    flags &= ~4;
    flags &= ~8;
  }
  if (strchr("duci", convchar)) {
    flags &= ~16;
  }
  k = 1024;
  switch (convchar) {
  case 'u':
  case 'd':
  case 'i':
    for (; x && k > 0;) {
      dst[--k] = x % 10 + '0';
      x /= 10;
    }
    break;
  case 'o':
    for (; x && k > 0;) {
      dst[--k] = (x & 7) + '0';
      x >>= 3;
    }
    break;
  case 'X':
  case 'x':
    aux = convchar - 'X' + 'A' - '0' - 10;
    for (; x && k > 0;) {
      dst[--k] = (x & 0xF) + '0';
      x >>= 4;
      if (dst[k] > '9')
        dst[k] += aux;
    }
    break;
  case 'b':
    for (; x && k > 0;) {
      dst[--k] = (x & 1) + '0';
      x >>= 1;
    }
    break;
  case 'c':
    if (x)
      dst[--k] = x;
    else
      dst[--k] = -1;
    break;
  }
  while (1024 - k < precision)
    dst[--k] = '0';
  if (minwidth > 0 && flags & 2) {
    fillchars = minwidth - (1024 - k);
    if (neg)
      fillchars--;
    else if (flags & (8 | 4))
      fillchars--;
    if (flags & 16) {
      if (convchar == 'o')
        fillchars--;
      else if (strchr("Xxb", convchar))
        fillchars -= 2;
    }
    while (fillchars-- > 0)
      dst[--k] = '0';
  }
  if (neg)
    dst[--k] = '-';
  else if (flags & 8)
    dst[--k] = ' ';
  else if (flags & 4)
    dst[--k] = '+';
  if (flags & 16) {
    switch (convchar) {
    case 'o':
      dst[--k] = '0';
      break;
    case 'X':
      dst[--k] = 'X';
      dst[--k] = '0';
      break;
    case 'x':
      dst[--k] = 'x';
      dst[--k] = '0';
      break;
    case 'b':
      dst[--k] = '_';
      dst[--k] = '0';
      break;
    }
  }
  if (flags & 1) {
    memcpy(dst, dst + k, 1024 - k);
    k = 1024 - k;
    while (k < minwidth)
      dst[k++] = ' ';
    dst[k] = 0;
  } else {
    if (minwidth > 0)
      fillchars = minwidth - (1024 - k);
    else
      fillchars = 0;
    if (fillchars < 0)
      fillchars = 0;
    for (i = fillchars; i-- > 0;)
      dst[i] = ' ';
    memcpy(dst + fillchars, dst + k, 1024 - k);
    dst[fillchars + 1024 - k] = 0;
  }
  return;
}


x86 assembly (clang, -O0):
<mprintf_conv_int>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %r8b,%al
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %al,-0x15(%rbp)
mov    %r9d,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x20(%rbp)
movb   $0x0,-0x21(%rbp)
cmpl   $0x1,-0x14(%rbp)
jge    115a <mprintf_conv_int+0x3a>
movl   $0x1,-0x14(%rbp)
cmpl   $0x0,-0x20(%rbp)
jge    118a <mprintf_conv_int+0x6a>
movsbl -0x15(%rbp),%eax
cmp    $0x69,%eax
je     117e <mprintf_conv_int+0x5e>
movsbl -0x15(%rbp),%eax
cmp    $0x64,%eax
jne    118a <mprintf_conv_int+0x6a>
xor    %eax,%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
movb   $0x1,-0x21(%rbp)
lea    0xf77(%rip),%rdi
movsbl -0x15(%rbp),%esi
call   1030 <strchr@plt>
cmp    $0x0,%rax
je     11b6 <mprintf_conv_int+0x96>
mov    -0xc(%rbp),%eax
and    $0xfffffffb,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%eax
and    $0xfffffff7,%eax
mov    %eax,-0xc(%rbp)
lea    0xf52(%rip),%rdi
movsbl -0x15(%rbp),%esi
call   1030 <strchr@plt>
cmp    $0x0,%rax
je     11d9 <mprintf_conv_int+0xb9>
mov    -0xc(%rbp),%eax
and    $0xffffffef,%eax
mov    %eax,-0xc(%rbp)
movl   $0x400,-0x28(%rbp)
movsbl -0x15(%rbp),%eax
add    $0xffffffa8,%eax
mov    %eax,%ecx
mov    %rcx,-0x38(%rbp)
sub    $0x20,%eax
ja     1408 <mprintf_conv_int+0x2e8>
mov    -0x38(%rbp),%rax
lea    0xdff(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
jmp    120f <mprintf_conv_int+0xef>
xor    %eax,%eax
cmpl   $0x0,-0x1c(%rbp)
mov    %al,-0x39(%rbp)
je     1228 <mprintf_conv_int+0x108>
cmpl   $0x0,-0x28(%rbp)
setg   %al
mov    %al,-0x39(%rbp)
mov    -0x39(%rbp),%al
test   $0x1,%al
jne    1238 <mprintf_conv_int+0x118>
jmp    126e <mprintf_conv_int+0x14e>
mov    -0x1c(%rbp),%eax
mov    $0xa,%ecx
xor    %edx,%edx
div    %ecx
add    $0x30,%edx
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1c(%rbp),%eax
mov    $0xa,%ecx
xor    %edx,%edx
div    %ecx
mov    %eax,-0x1c(%rbp)
jmp    120f <mprintf_conv_int+0xef>
jmp    1408 <mprintf_conv_int+0x2e8>
jmp    1278 <mprintf_conv_int+0x158>
xor    %eax,%eax
cmpl   $0x0,-0x1c(%rbp)
mov    %al,-0x3a(%rbp)
je     1291 <mprintf_conv_int+0x171>
cmpl   $0x0,-0x28(%rbp)
setg   %al
mov    %al,-0x3a(%rbp)
mov    -0x3a(%rbp),%al
test   $0x1,%al
jne    12a1 <mprintf_conv_int+0x181>
jmp    12cd <mprintf_conv_int+0x1ad>
mov    -0x1c(%rbp),%eax
and    $0x7,%eax
add    $0x30,%eax
mov    %al,%dl
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1c(%rbp),%eax
shr    $0x3,%eax
mov    %eax,-0x1c(%rbp)
jmp    1278 <mprintf_conv_int+0x158>
jmp    1408 <mprintf_conv_int+0x2e8>
movsbl -0x15(%rbp),%eax
sub    $0x58,%eax
add    $0x41,%eax
sub    $0x30,%eax
sub    $0xa,%eax
mov    %al,-0x2d(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x1c(%rbp)
mov    %al,-0x3b(%rbp)
je     12fe <mprintf_conv_int+0x1de>
cmpl   $0x0,-0x28(%rbp)
setg   %al
mov    %al,-0x3b(%rbp)
mov    -0x3b(%rbp),%al
test   $0x1,%al
jne    130e <mprintf_conv_int+0x1ee>
jmp    1364 <mprintf_conv_int+0x244>
mov    -0x1c(%rbp),%eax
and    $0xf,%eax
add    $0x30,%eax
mov    %al,%dl
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1c(%rbp),%eax
shr    $0x4,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jle    135f <mprintf_conv_int+0x23f>
movsbl -0x2d(%rbp),%esi
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
add    %esi,%edx
mov    %dl,(%rax,%rcx,1)
jmp    12e5 <mprintf_conv_int+0x1c5>
jmp    1408 <mprintf_conv_int+0x2e8>
jmp    136e <mprintf_conv_int+0x24e>
xor    %eax,%eax
cmpl   $0x0,-0x1c(%rbp)
mov    %al,-0x3c(%rbp)
je     1387 <mprintf_conv_int+0x267>
cmpl   $0x0,-0x28(%rbp)
setg   %al
mov    %al,-0x3c(%rbp)
mov    -0x3c(%rbp),%al
test   $0x1,%al
jne    1397 <mprintf_conv_int+0x277>
jmp    13c3 <mprintf_conv_int+0x2a3>
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
add    $0x30,%eax
mov    %al,%dl
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1c(%rbp),%eax
shr    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    136e <mprintf_conv_int+0x24e>
jmp    1408 <mprintf_conv_int+0x2e8>
cmpl   $0x0,-0x1c(%rbp)
je     13ef <mprintf_conv_int+0x2cf>
mov    -0x1c(%rbp),%eax
mov    %al,%dl
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
jmp    1403 <mprintf_conv_int+0x2e3>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0xff,(%rax,%rcx,1)
jmp    1408 <mprintf_conv_int+0x2e8>
jmp    140d <mprintf_conv_int+0x2ed>
mov    $0x400,%eax
sub    -0x28(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1437 <mprintf_conv_int+0x317>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0x30,(%rax,%rcx,1)
jmp    140d <mprintf_conv_int+0x2ed>
cmpl   $0x0,-0x10(%rbp)
jle    1523 <mprintf_conv_int+0x403>
mov    -0xc(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     1523 <mprintf_conv_int+0x403>
mov    -0x10(%rbp),%eax
mov    $0x400,%ecx
sub    -0x28(%rbp),%ecx
sub    %ecx,%eax
mov    %eax,-0x2c(%rbp)
cmpb   $0x0,-0x21(%rbp)
je     1478 <mprintf_conv_int+0x358>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    1495 <mprintf_conv_int+0x375>
mov    -0xc(%rbp),%eax
and    $0xc,%eax
cmp    $0x0,%eax
je     1490 <mprintf_conv_int+0x370>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    1495 <mprintf_conv_int+0x375>
mov    -0xc(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     14ec <mprintf_conv_int+0x3cc>
movsbl -0x15(%rbp),%eax
cmp    $0x6f,%eax
jne    14bf <mprintf_conv_int+0x39f>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    14e7 <mprintf_conv_int+0x3c7>
lea    0xc4e(%rip),%rdi
movsbl -0x15(%rbp),%esi
call   1030 <strchr@plt>
cmp    $0x0,%rax
je     14e2 <mprintf_conv_int+0x3c2>
mov    -0x2c(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x2c(%rbp)
jmp    14e7 <mprintf_conv_int+0x3c7>
jmp    14ec <mprintf_conv_int+0x3cc>
jmp    14f1 <mprintf_conv_int+0x3d1>
mov    -0x2c(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x2c(%rbp)
cmp    $0x0,%eax
jle    151e <mprintf_conv_int+0x3fe>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0x30,(%rax,%rcx,1)
jmp    14f1 <mprintf_conv_int+0x3d1>
jmp    1523 <mprintf_conv_int+0x403>
cmpb   $0x0,-0x21(%rbp)
je     1546 <mprintf_conv_int+0x426>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0x2d,(%rax,%rcx,1)
jmp    159b <mprintf_conv_int+0x47b>
mov    -0xc(%rbp),%eax
and    $0x8,%eax
cmp    $0x0,%eax
je     156e <mprintf_conv_int+0x44e>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0x20,(%rax,%rcx,1)
jmp    1596 <mprintf_conv_int+0x476>
mov    -0xc(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     1591 <mprintf_conv_int+0x471>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0x2b,(%rax,%rcx,1)
jmp    1596 <mprintf_conv_int+0x476>
jmp    159b <mprintf_conv_int+0x47b>
mov    -0xc(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1674 <mprintf_conv_int+0x554>
movsbl -0x15(%rbp),%eax
add    $0xffffffa8,%eax
mov    %eax,%ecx
mov    %rcx,-0x48(%rbp)
sub    $0x20,%eax
ja     166f <mprintf_conv_int+0x54f>
mov    -0x48(%rbp),%rax
lea    0xab9(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0x30,(%rax,%rcx,1)
jmp    166f <mprintf_conv_int+0x54f>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0x58,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0x30,(%rax,%rcx,1)
jmp    166f <mprintf_conv_int+0x54f>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0x78,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0x30,(%rax,%rcx,1)
jmp    166f <mprintf_conv_int+0x54f>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0x5f,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0x30,(%rax,%rcx,1)
jmp    1674 <mprintf_conv_int+0x554>
mov    -0xc(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     16e2 <mprintf_conv_int+0x5c2>
mov    -0x8(%rbp),%rdi
mov    -0x8(%rbp),%rsi
movslq -0x28(%rbp),%rax
add    %rax,%rsi
mov    $0x400,%edx
sub    -0x28(%rbp),%edx
call   1040 <memcpy@plt>
mov    $0x400,%eax
sub    -0x28(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    16d1 <mprintf_conv_int+0x5b1>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0x20,(%rax,%rcx,1)
jmp    16aa <mprintf_conv_int+0x58a>
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    177e <mprintf_conv_int+0x65e>
cmpl   $0x0,-0x10(%rbp)
jle    1701 <mprintf_conv_int+0x5e1>
mov    -0x10(%rbp),%eax
mov    $0x400,%ecx
sub    -0x28(%rbp),%ecx
sub    %ecx,%eax
mov    %eax,-0x2c(%rbp)
jmp    1708 <mprintf_conv_int+0x5e8>
movl   $0x0,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jge    1719 <mprintf_conv_int+0x5f9>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x20(%rbp)
cmp    $0x0,%eax
jle    1744 <mprintf_conv_int+0x624>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movb   $0x20,(%rax,%rcx,1)
jmp    171f <mprintf_conv_int+0x5ff>
mov    -0x8(%rbp),%rdi
movslq -0x2c(%rbp),%rax
add    %rax,%rdi
mov    -0x8(%rbp),%rsi
movslq -0x28(%rbp),%rax
add    %rax,%rsi
mov    $0x400,%edx
sub    -0x28(%rbp),%edx
call   1040 <memcpy@plt>
mov    -0x8(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x400,%ecx
sub    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<mprintf_conv_int>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %r9d,%ebx
mov    %esi,%r14d
mov    %rdi,%r13
test   %ecx,%ecx
mov    $0x1,%r12d
cmovg  %ecx,%r12d
mov    $0x1,%al
mov    %eax,0xc(%rsp)
test   %r9d,%r9d
mov    %rdx,0x18(%rsp)
jns    1179 <mprintf_conv_int+0x49>
cmp    $0x69,%r8b
je     116f <mprintf_conv_int+0x3f>
cmp    $0x64,%r8b
jne    1179 <mprintf_conv_int+0x49>
neg    %ebx
movl   $0x0,0xc(%rsp)
mov    %r8,0x28(%rsp)
movsbl %r8b,%r15d
lea    0xf8f(%rip),%rdi
mov    %r15d,%esi
call   1030 <strchr@plt>
mov    %r14d,%ebp
and    $0xfffffff3,%ebp
test   %rax,%rax
cmove  %r14d,%ebp
lea    0xf7a(%rip),%rdi
mov    %r15d,%esi
call   1030 <strchr@plt>
mov    %ebp,%r14d
and    $0xffffffef,%r14d
test   %rax,%rax
cmove  %ebp,%r14d
mov    $0x400,%ebp
mov    %r15,0x30(%rsp)
lea    -0x58(%r15),%r8d
mov    $0x400,%r15d
cmp    $0x20,%r8d
ja     130f <mprintf_conv_int+0x1df>
lea    0xe30(%rip),%rcx
movslq (%rcx,%r8,4),%rdx
add    %rcx,%rdx
mov    $0x400,%r15d
jmp    *%rdx
mov    $0x400,%r15d
test   %ebx,%ebx
je     130f <mprintf_conv_int+0x1df>
mov    $0x3ff,%r15d
mov    $0xcccccccd,%ecx
nopl   0x0(%rax,%rax,1)
mov    %ebx,%esi
mov    %ebx,%ebx
imul   %rcx,%rbx
shr    $0x23,%rbx
lea    (%rbx,%rbx,1),%edx
lea    (%rdx,%rdx,4),%edx
mov    %esi,%edi
sub    %edx,%edi
or     $0x30,%dil
mov    %dil,0x0(%r13,%r15,1)
add    $0xffffffffffffffff,%r15
setb   %dl
cmp    $0xa,%esi
jb     130b <mprintf_conv_int+0x1db>
test   %dl,%dl
jne    1210 <mprintf_conv_int+0xe0>
jmp    130b <mprintf_conv_int+0x1db>
mov    $0x400,%r15d
test   %ebx,%ebx
je     130f <mprintf_conv_int+0x1df>
mov    0x28(%rsp),%rax
lea    -0x51(%rax),%ecx
mov    $0x3ff,%r15d
movzbl %cl,%ecx
mov    %ebx,%edx
nopl   0x0(%rax)
mov    %ebx,%eax
and    $0xf,%al
or     $0x30,%al
shr    $0x4,%edx
cmp    $0x3a,%al
mov    $0x0,%esi
cmovae %ecx,%esi
add    %al,%sil
mov    %sil,0x0(%r13,%r15,1)
add    $0xffffffffffffffff,%r15
cmp    $0xf,%ebx
mov    %edx,%ebx
ja     1270 <mprintf_conv_int+0x140>
jmp    130b <mprintf_conv_int+0x1db>
mov    $0x400,%r15d
test   %ebx,%ebx
je     130f <mprintf_conv_int+0x1df>
mov    $0x3ff,%r15d
mov    %ebx,%ecx
nopw   0x0(%rax,%rax,1)
mov    %ebx,%eax
and    $0x1,%al
or     $0x30,%al
mov    %al,0x0(%r13,%r15,1)
shr    %ecx
add    $0xffffffffffffffff,%r15
cmp    $0x1,%ebx
mov    %ecx,%ebx
ja     12b0 <mprintf_conv_int+0x180>
jmp    130b <mprintf_conv_int+0x1db>
test   %ebx,%ebx
je     15f5 <mprintf_conv_int+0x4c5>
mov    %bl,0x3ff(%r13)
jmp    15fd <mprintf_conv_int+0x4cd>
mov    $0x400,%r15d
test   %ebx,%ebx
je     130f <mprintf_conv_int+0x1df>
mov    $0x3ff,%r15d
mov    %ebx,%ecx
mov    %ebx,%edx
and    $0x7,%dl
or     $0x30,%dl
mov    %dl,0x0(%r13,%r15,1)
shr    $0x3,%ecx
add    $0xffffffffffffffff,%r15
cmp    $0x7,%ebx
mov    %ecx,%ebx
ja     12f0 <mprintf_conv_int+0x1c0>
add    $0x1,%r15d
sub    %r15d,%ebp
cmp    %r12d,%ebp
mov    %r8,0x10(%rsp)
jge    1371 <mprintf_conv_int+0x241>
mov    %r14d,0x24(%rsp)
mov    %r15d,%ebx
mov    %r15d,%eax
add    %r12d,%r15d
lea    (%rax,%r12,1),%r14d
add    $0xfffffbff,%r14d
mov    %r14,%rdi
not    %rdi
add    %rbx,%rdi
add    %r13,%rdi
lea    0x1(%r14),%rdx
mov    $0x30,%esi
call   1040 <memset@plt>
test   $0x7,%r15b
je     137f <mprintf_conv_int+0x24f>
and    $0x7,%r15d
xor    %eax,%eax
nopl   0x0(%rax,%rax,1)
add    $0x1,%rax
cmp    %eax,%r15d
jne    1360 <mprintf_conv_int+0x230>
sub    %rax,%rbx
mov    %rbx,%r15
jmp    137f <mprintf_conv_int+0x24f>
mov    %ebp,%r12d
mov    0x18(%rsp),%rbp
test   %ebp,%ebp
jg     13b5 <mprintf_conv_int+0x285>
jmp    13f4 <mprintf_conv_int+0x2c4>
mov    0x18(%rsp),%rbp
mov    0x10(%rsp),%r8
cmp    $0x7,%r14d
jb     13ac <mprintf_conv_int+0x27c>
mov    $0x400,%eax
sub    %ebx,%eax
mov    %rbx,%r15
nopl   0x0(%rax)
add    $0xfffffffffffffff8,%r15
add    $0x8,%eax
cmp    %r12d,%eax
jb     13a0 <mprintf_conv_int+0x270>
mov    0x24(%rsp),%r14d
test   %ebp,%ebp
jle    13f4 <mprintf_conv_int+0x2c4>
mov    %r14d,%eax
and    $0x2,%eax
je     13f4 <mprintf_conv_int+0x2c4>
mov    %ebp,%ebx
sub    %r12d,%ebx
test   $0xc,%r14b
setne  %al
mov    0xc(%rsp),%r12d
mov    %r12d,%ecx
xor    $0x1,%cl
or     %al,%cl
movzbl %cl,%eax
sub    %eax,%ebx
test   $0x10,%r14b
je     13eb <mprintf_conv_int+0x2bb>
cmpb   $0x6f,0x28(%rsp)
jne    13fe <mprintf_conv_int+0x2ce>
add    $0xffffffff,%ebx
test   %ebx,%ebx
jg     1427 <mprintf_conv_int+0x2f7>
jmp    14ec <mprintf_conv_int+0x3bc>
mov    0xc(%rsp),%r12d
jmp    14ec <mprintf_conv_int+0x3bc>
lea    0xd1f(%rip),%rdi
mov    0x30(%rsp),%rsi
call   1030 <strchr@plt>
mov    0x10(%rsp),%r8
lea    -0x2(%rbx),%ecx
test   %rax,%rax
cmove  %ebx,%ecx
mov    %ecx,%ebx
test   %ebx,%ebx
jle    14ec <mprintf_conv_int+0x3bc>
movslq %r15d,%r15
lea    -0x1(%rbx),%edi
not    %rdi
add    %r15,%rdi
add    %r13,%rdi
mov    %ebx,%edx
mov    $0x30,%esi
call   1040 <memset@plt>
cmp    $0x4,%ebx
jae    1451 <mprintf_conv_int+0x321>
mov    0x10(%rsp),%r8
jmp    14d6 <mprintf_conv_int+0x3a6>
mov    %ebx,%eax
and    $0xfffffffc,%eax
movq   %r15,%xmm0
lea    -0x4(%rax),%esi
mov    %esi,%edx
shr    $0x2,%edx
add    $0x1,%edx
mov    %edx,%ecx
and    $0x7,%ecx
cmp    $0x1c,%esi
jae    147b <mprintf_conv_int+0x34b>
pxor   %xmm1,%xmm1
mov    0x10(%rsp),%r8
jmp    149d <mprintf_conv_int+0x36d>
and    $0xfffffff8,%edx
pxor   %xmm1,%xmm1
movdqa 0xb76(%rip),%xmm2
mov    0x10(%rsp),%r8
nop
paddq  %xmm2,%xmm0
paddq  %xmm2,%xmm1
add    $0xfffffff8,%edx
jne    1490 <mprintf_conv_int+0x360>
test   %ecx,%ecx
je     14bd <mprintf_conv_int+0x38d>
pcmpeqd %xmm2,%xmm2
cs nopw 0x0(%rax,%rax,1)
nop
paddq  %xmm2,%xmm0
paddq  %xmm2,%xmm1
add    $0xffffffff,%ecx
jne    14b0 <mprintf_conv_int+0x380>
paddq  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddq  %xmm0,%xmm1
movq   %xmm1,%r15
cmp    %eax,%ebx
je     14ec <mprintf_conv_int+0x3bc>
and    $0x3,%ebx
add    $0x1,%ebx
nopl   0x0(%rax)
add    $0xffffffffffffffff,%r15
add    $0xffffffff,%ebx
cmp    $0x1,%ebx
ja     14e0 <mprintf_conv_int+0x3b0>
mov    $0x2d,%al
test   %r12b,%r12b
je     1503 <mprintf_conv_int+0x3d3>
mov    $0x20,%al
test   $0x8,%r14b
jne    1503 <mprintf_conv_int+0x3d3>
mov    $0x2b,%al
test   $0x4,%r14b
je     150f <mprintf_conv_int+0x3df>
movslq %r15d,%r15
mov    %al,-0x1(%r13,%r15,1)
add    $0xffffffffffffffff,%r15
test   $0x10,%r14b
je     1551 <mprintf_conv_int+0x421>
cmp    $0x20,%r8d
ja     1551 <mprintf_conv_int+0x421>
mov    $0x58,%al
mov    $0xffffffff,%ecx
lea    0xb6b(%rip),%rdx
movslq (%rdx,%r8,4),%rsi
add    %rdx,%rsi
jmp    *%rsi
mov    $0x5f,%al
jmp    1538 <mprintf_conv_int+0x408>
mov    $0x78,%al
movslq %r15d,%rcx
mov    %al,-0x1(%rcx,%r13,1)
mov    $0xfffffffe,%ecx
add    %ecx,%r15d
movslq %r15d,%rax
movb   $0x30,0x0(%r13,%rax,1)
test   $0x1,%r14b
jne    159f <mprintf_conv_int+0x46f>
xor    %eax,%eax
test   %ebp,%ebp
lea    -0x400(%rbp,%r15,1),%ebx
ff
cmovle %eax,%ebx
test   %ebx,%ebx
cmovs  %eax,%ebx
jle    1581 <mprintf_conv_int+0x451>
lea    -0x1(%rbx),%edx
add    $0x1,%rdx
mov    %r13,%rdi
mov    $0x20,%esi
call   1040 <memset@plt>
mov    %ebx,%edi
add    %r13,%rdi
movslq %r15d,%rsi
add    %r13,%rsi
mov    $0x400,%ebp
sub    %r15d,%ebp
mov    %ebp,%edx
call   1050 <memcpy@plt>
add    %ebx,%ebp
jmp    15dd <mprintf_conv_int+0x4ad>
movslq %r15d,%rax
lea    (%rax,%r13,1),%rsi
mov    $0x400,%ebx
sub    %eax,%ebx
mov    %r13,%rdi
mov    %ebx,%edx
call   1050 <memcpy@plt>
cmp    %ebp,%ebx
jge    15db <mprintf_conv_int+0x4ab>
movslq %ebx,%rdi
add    %r13,%rdi
lea    (%r15,%rbp,1),%edx
add    $0xfffffbff,%edx
add    $0x1,%rdx
mov    $0x20,%esi
call   1040 <memset@plt>
jmp    15dd <mprintf_conv_int+0x4ad>
mov    %ebx,%ebp
movslq %ebp,%rax
movb   $0x0,0x0(%r13,%rax,1)
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
movb   $0xff,0x3ff(%r13)
ff
mov    $0x3ff,%r15d
jmp    130f <mprintf_conv_int+0x1df>

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

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