char *tparam1(string, outstring, len, up, left, argp)
char *string;
char *outstring;
int len;
char *up, *left;
register int *argp;
{
  register int c;
  register char *p = string;
  register char *op = outstring;
  char *outend;
  int outlen = 0;
  register int tem;
  int *old_argp = argp;
  int doleft = 0;
  int doup = 0;
  outend = outstring + len;
  while (1) {
    if (op + 5 >= outend) {
      register char *new;
      int offset = op - outstring;
      if (outlen == 0) {
        outlen = len + 40;
        new = (char *)xmalloc(outlen);
        memcpy((new), (outstring), (offset));
      } else {
        outlen *= 2;
        new = (char *)xrealloc(outstring, outlen);
      }
      op = new + offset;
      outend = new + outlen;
      outstring = new;
    }
    c = *p++;
    if (!c)
      break;
    if (c == '%') {
      c = *p++;
      tem = *argp;
      switch (c) {
      case 'd':
        if (tem < 10)
          goto onedigit;
        if (tem < 100)
          goto twodigit;
      case '3':
        if (tem > 999) {
          *op++ = tem / 1000 + '0';
          tem %= 1000;
        }
        *op++ = tem / 100 + '0';
      case '2':
      twodigit:
        tem %= 100;
        *op++ = tem / 10 + '0';
      onedigit:
        *op++ = tem % 10 + '0';
        argp++;
        break;
      case 'C':
        if (tem >= 96) {
          *op++ = tem / 96;
          tem %= 96;
        }
      case '+':
        tem += *p++;
      case '.':
        if (left) {
          while (tem == 0 || tem == '\n' || tem == '\t') {
            tem++;
            if (argp == old_argp)
              doup++, outend -= strlen(up);
            else
              doleft++, outend -= strlen(left);
          }
        }
        *op++ = tem ? tem : 0200;
      case 'f':
        argp++;
        break;
      case 'b':
        argp--;
        break;
      case 'r':
        argp[0] = argp[1];
        argp[1] = tem;
        old_argp++;
        break;
      case '>':
        if (argp[0] > *p++)
          argp[0] += *p;
        p++;
        break;
      case 'a':
        tem = p[2] & 0177;
        if (p[1] == 'p')
          tem = argp[tem - 0100];
        if (p[0] == '-')
          argp[0] -= tem;
        else if (p[0] == '+')
          argp[0] += tem;
        else if (p[0] == '*')
          argp[0] *= tem;
        else if (p[0] == '/')
          argp[0] /= tem;
        else
          argp[0] = tem;
        p += 3;
        break;
      case 'i':
        argp[0]++;
        argp[1]++;
        break;
      case '%':
        goto ordinary;
      case 'n':
        argp[0] ^= 0140;
        argp[1] ^= 0140;
        break;
      case 'm':
        argp[0] ^= 0177;
        argp[1] ^= 0177;
        break;
      case 'B':
        argp[0] += 6 * (tem / 10);
        break;
      case 'D':
        argp[0] -= 2 * (tem % 16);
        break;
      default:
        abort();
      }
    } else
    ordinary:
      *op++ = c;
  }
  *op = 0;
  while (doup-- > 0)
    strcat(op, up);
  while (doleft-- > 0)
    strcat(op, left);
  return outstring;
}


x86 assembly (clang, -O0):
<tparam1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x48(%rbp)
movl   $0x0,-0x54(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,-0x60(%rbp)
movl   $0x0,-0x64(%rbp)
movl   $0x0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
mov    -0x48(%rbp),%rax
add    $0x5,%rax
cmp    -0x50(%rbp),%rax
jb     125a <tparam1+0xfa>
mov    -0x48(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x74(%rbp)
cmpl   $0x0,-0x54(%rbp)
jne    1217 <tparam1+0xb7>
mov    -0x14(%rbp),%eax
add    $0x28,%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%edi
mov    $0x0,%al
call   1060 <xmalloc@plt>
cltq
mov    %rax,-0x70(%rbp)
mov    -0x70(%rbp),%rdi
mov    -0x10(%rbp),%rsi
movslq -0x74(%rbp),%rdx
call   1070 <memcpy@plt>
jmp    1234 <tparam1+0xd4>
mov    -0x54(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x54(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x54(%rbp),%esi
mov    $0x0,%al
call   1050 <xrealloc@plt>
cltq
mov    %rax,-0x70(%rbp)
mov    -0x70(%rbp),%rax
movslq -0x74(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x48(%rbp)
mov    -0x70(%rbp),%rax
movslq -0x54(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
mov    -0x70(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x40(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x34(%rbp)
cmpl   $0x0,-0x34(%rbp)
jne    127e <tparam1+0x11e>
jmp    1746 <tparam1+0x5e6>
cmpl   $0x25,-0x34(%rbp)
jne    1726 <tparam1+0x5c6>
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x40(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x58(%rbp)
mov    -0x34(%rbp),%eax
add    $0xffffffdb,%eax
mov    %eax,%ecx
mov    %rcx,-0x80(%rbp)
sub    $0x4d,%eax
ja     171c <tparam1+0x5bc>
mov    -0x80(%rbp),%rax
lea    0xd3a(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
cmpl   $0xa,-0x58(%rbp)
jge    12de <tparam1+0x17e>
jmp    1383 <tparam1+0x223>
cmpl   $0x64,-0x58(%rbp)
jge    12ed <tparam1+0x18d>
jmp    1354 <tparam1+0x1f4>
jmp    12f2 <tparam1+0x192>
cmpl   $0x3e7,-0x58(%rbp)
jle    132e <tparam1+0x1ce>
mov    -0x58(%rbp),%eax
mov    $0x3e8,%ecx
cltd
idiv   %ecx
add    $0x30,%eax
mov    %al,%cl
mov    -0x48(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x48(%rbp)
mov    %cl,(%rax)
mov    -0x58(%rbp),%eax
mov    $0x3e8,%ecx
cltd
idiv   %ecx
mov    %edx,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
add    $0x30,%eax
mov    %al,%cl
mov    -0x48(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x48(%rbp)
mov    %cl,(%rax)
jmp    1354 <tparam1+0x1f4>
mov    -0x58(%rbp),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %edx,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
add    $0x30,%eax
mov    %al,%cl
mov    -0x48(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x48(%rbp)
mov    %cl,(%rax)
mov    -0x58(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
add    $0x30,%edx
mov    %dl,%cl
mov    -0x48(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x48(%rbp)
mov    %cl,(%rax)
mov    -0x30(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x30(%rbp)
jmp    1721 <tparam1+0x5c1>
cmpl   $0x60,-0x58(%rbp)
jl     13eb <tparam1+0x28b>
mov    -0x58(%rbp),%eax
mov    $0x60,%ecx
cltd
idiv   %ecx
mov    %al,%cl
mov    -0x48(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x48(%rbp)
mov    %cl,(%rax)
mov    -0x58(%rbp),%eax
mov    $0x60,%ecx
cltd
idiv   %ecx
mov    %edx,-0x58(%rbp)
jmp    13f0 <tparam1+0x290>
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x40(%rbp)
movsbl (%rax),%eax
add    -0x58(%rbp),%eax
mov    %eax,-0x58(%rbp)
cmpq   $0x0,-0x28(%rbp)
je     14cc <tparam1+0x36c>
jmp    1418 <tparam1+0x2b8>
mov    $0x1,%al
cmpl   $0x0,-0x58(%rbp)
mov    %al,-0x81(%rbp)
je     1449 <tparam1+0x2e9>
mov    $0x1,%al
cmpl   $0xa,-0x58(%rbp)
mov    %al,-0x81(%rbp)
je     1449 <tparam1+0x2e9>
cmpl   $0x9,-0x58(%rbp)
sete   %al
mov    %al,-0x81(%rbp)
mov    -0x81(%rbp),%al
test   $0x1,%al
jne    145c <tparam1+0x2fc>
jmp    14c7 <tparam1+0x367>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x60(%rbp),%rax
jne    149d <tparam1+0x33d>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
mov    -0x20(%rbp),%rdi
call   1040 <strlen@plt>
mov    %rax,%rdx
mov    -0x50(%rbp),%rax
xor    %ecx,%ecx
sub    %rdx,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
jmp    14c2 <tparam1+0x362>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
mov    -0x28(%rbp),%rdi
call   1040 <strlen@plt>
mov    %rax,%rdx
mov    -0x50(%rbp),%rax
xor    %ecx,%ecx
sub    %rdx,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
jmp    1418 <tparam1+0x2b8>
jmp    14cc <tparam1+0x36c>
cmpl   $0x0,-0x58(%rbp)
je     14e4 <tparam1+0x384>
mov    -0x58(%rbp),%eax
mov    %eax,-0x88(%rbp)
jmp    14f4 <tparam1+0x394>
mov    $0x80,%eax
mov    %eax,-0x88(%rbp)
jmp    14f4 <tparam1+0x394>
mov    -0x88(%rbp),%eax
mov    %al,%cl
mov    -0x48(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x48(%rbp)
mov    %cl,(%rax)
mov    -0x30(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x30(%rbp)
jmp    1721 <tparam1+0x5c1>
mov    -0x30(%rbp),%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,-0x30(%rbp)
jmp    1721 <tparam1+0x5c1>
mov    -0x30(%rbp),%rax
mov    0x4(%rax),%ecx
mov    -0x30(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x58(%rbp),%ecx
mov    -0x30(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x60(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x60(%rbp)
jmp    1721 <tparam1+0x5c1>
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
mov    -0x40(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x40(%rbp)
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jle    1586 <tparam1+0x426>
mov    -0x40(%rbp),%rax
movsbl (%rax),%ecx
mov    -0x30(%rbp),%rax
add    (%rax),%ecx
mov    %ecx,(%rax)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    1721 <tparam1+0x5c1>
mov    -0x40(%rbp),%rax
movsbl 0x2(%rax),%eax
and    $0x7f,%eax
mov    %eax,-0x58(%rbp)
mov    -0x40(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x70,%eax
jne    15c9 <tparam1+0x469>
mov    -0x30(%rbp),%rax
mov    -0x58(%rbp),%ecx
sub    $0x40,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x58(%rbp)
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    15eb <tparam1+0x48b>
mov    -0x58(%rbp),%edx
mov    -0x30(%rbp),%rax
mov    (%rax),%ecx
sub    %edx,%ecx
mov    %ecx,(%rax)
jmp    1677 <tparam1+0x517>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
jne    160b <tparam1+0x4ab>
mov    -0x58(%rbp),%ecx
mov    -0x30(%rbp),%rax
add    (%rax),%ecx
mov    %ecx,(%rax)
jmp    1672 <tparam1+0x512>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
jne    162c <tparam1+0x4cc>
mov    -0x58(%rbp),%ecx
mov    -0x30(%rbp),%rax
imul   (%rax),%ecx
mov    %ecx,(%rax)
jmp    166d <tparam1+0x50d>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    165f <tparam1+0x4ff>
mov    -0x58(%rbp),%ecx
mov    -0x30(%rbp),%rax
mov    %rax,-0x90(%rbp)
mov    (%rax),%eax
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x90(%rbp),%rax
mov    %ecx,(%rax)
jmp    1668 <tparam1+0x508>
mov    -0x58(%rbp),%ecx
mov    -0x30(%rbp),%rax
mov    %ecx,(%rax)
jmp    166d <tparam1+0x50d>
jmp    1672 <tparam1+0x512>
jmp    1677 <tparam1+0x517>
mov    -0x40(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x40(%rbp)
jmp    1721 <tparam1+0x5c1>
mov    -0x30(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    -0x30(%rbp),%rax
mov    0x4(%rax),%ecx
add    $0x1,%ecx
mov    %ecx,0x4(%rax)
jmp    1721 <tparam1+0x5c1>
jmp    172b <tparam1+0x5cb>
mov    -0x30(%rbp),%rax
mov    (%rax),%ecx
xor    $0x60,%ecx
mov    %ecx,(%rax)
mov    -0x30(%rbp),%rax
mov    0x4(%rax),%ecx
xor    $0x60,%ecx
mov    %ecx,0x4(%rax)
jmp    1721 <tparam1+0x5c1>
mov    -0x30(%rbp),%rax
mov    (%rax),%ecx
xor    $0x7f,%ecx
mov    %ecx,(%rax)
mov    -0x30(%rbp),%rax
mov    0x4(%rax),%ecx
xor    $0x7f,%ecx
mov    %ecx,0x4(%rax)
jmp    1721 <tparam1+0x5c1>
mov    -0x58(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
imul   $0x6,%eax,%ecx
mov    -0x30(%rbp),%rax
add    (%rax),%ecx
mov    %ecx,(%rax)
jmp    1721 <tparam1+0x5c1>
mov    -0x58(%rbp),%eax
mov    $0x10,%ecx
cltd
idiv   %ecx
shl    $0x1,%edx
mov    -0x30(%rbp),%rax
mov    (%rax),%ecx
sub    %edx,%ecx
mov    %ecx,(%rax)
jmp    1721 <tparam1+0x5c1>
call   1030 <abort@plt>
jmp    1741 <tparam1+0x5e1>
jmp    172b <tparam1+0x5cb>
mov    -0x34(%rbp),%eax
mov    %al,%cl
mov    -0x48(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x48(%rbp)
mov    %cl,(%rax)
jmp    11be <tparam1+0x5e>
mov    -0x48(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x68(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x68(%rbp)
cmp    $0x0,%eax
jle    1773 <tparam1+0x613>
mov    -0x48(%rbp),%rdi
mov    -0x20(%rbp),%rsi
call   1080 <strcat@plt>
jmp    174d <tparam1+0x5ed>
jmp    1778 <tparam1+0x618>
mov    -0x64(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x64(%rbp)
cmp    $0x0,%eax
jle    179e <tparam1+0x63e>
mov    -0x48(%rbp),%rdi
mov    -0x28(%rbp),%rsi
call   1080 <strcat@plt>
jmp    1778 <tparam1+0x618>
mov    -0x10(%rbp),%rax
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<tparam1>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %r8,0x20(%rsp)
mov    %rcx,0x18(%rsp)
mov    %rsi,%r13
mov    %rdi,%r15
movslq %edx,%rax
lea    (%rsi,%rax,1),%r14
add    $0x28,%eax
mov    %rax,0x40(%rsp)
xor    %ebx,%ebx
mov    %r9,0x8(%rsp)
mov    %r9,0x28(%rsp)
xor    %r12d,%r12d
movl   $0x0,0x10(%rsp)
mov    %rsi,%rdi
jmp    11d2 <tparam1+0x72>
mov    0x30(%rsp),%r13
test   %ebp,%ebp
mov    $0x80,%eax
cmove  %eax,%ebp
mov    %bpl,0x0(%r13)
add    $0x1,%r13
mov    0x38(%rsp),%rdi
mov    0x14(%rsp),%ebx
addq   $0x4,0x8(%rsp)
mov    %rsi,%r15
lea    0x5(%r13),%rax
cmp    %r14,%rax
jb     1226 <tparam1+0xc6>
sub    %rdi,%r13
test   %ebx,%ebx
je     11f5 <tparam1+0x95>
add    %ebx,%ebx
mov    %ebx,%esi
xor    %eax,%eax
call   1050 <xrealloc@plt>
movslq %eax,%rdi
movslq %r13d,%r13
jmp    121d <tparam1+0xbd>
mov    0x40(%rsp),%rbx
mov    %rdi,%r14
mov    %ebx,%edi
xor    %eax,%eax
call   1060 <xmalloc@plt>
movslq %eax,%rbp
movslq %r13d,%r13
mov    %rbp,%rdi
mov    %r14,%rsi
mov    %r13,%rdx
call   1070 <memcpy@plt>
mov    %rbp,%rdi
add    %rdi,%r13
movslq %ebx,%r14
add    %rdi,%r14
mov    (%r15),%al
cmp    $0x25,%al
je     1250 <tparam1+0xf0>
test   %al,%al
je     151e <tparam1+0x3be>
add    $0x1,%r15
mov    %r15,%rsi
mov    %al,0x0(%r13)
add    $0x1,%r13
mov    %rsi,%r15
jmp    11d2 <tparam1+0x72>
nopl   0x0(%rax)
movsbl 0x1(%r15),%ecx
add    $0xffffffdb,%ecx
cmp    $0x4d,%ecx
ja     1597 <tparam1+0x437>
lea    0x2(%r15),%rsi
mov    0x8(%rsp),%rdx
mov    (%rdx),%ebp
lea    0xd8d(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
cmp    $0x3e8,%ebp
jl     12a4 <tparam1+0x144>
mov    %ebp,%eax
imul   $0x10624dd3,%rax,%rax
shr    $0x26,%rax
lea    0x30(%rax),%ecx
mov    %cl,0x0(%r13)
add    $0x1,%r13
imul   $0x3e8,%eax,%eax
sub    %eax,%ebp
movslq %ebp,%rax
imul   $0x51eb851f,%rax,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
shr    $0x25,%rax
add    %ecx,%eax
add    $0x30,%al
mov    %al,0x0(%r13)
add    $0x1,%r13
movslq %ebp,%rbp
imul   $0x51eb851f,%rbp,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
sar    $0x25,%rax
add    %ecx,%eax
imul   $0x64,%eax,%eax
sub    %eax,%ebp
movsbl %bpl,%eax
imul   $0x67,%eax,%eax
movzwl %ax,%eax
movswl %ax,%ecx
shr    $0xf,%eax
shr    $0xa,%ecx
add    %al,%cl
add    $0x30,%cl
mov    %cl,0x0(%r13)
add    $0x1,%r13
movslq %ebp,%rax
imul   $0x66666667,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
shr    $0x22,%rcx
add    %edx,%ecx
add    %ecx,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %ecx,%eax
add    $0x30,%al
mov    %al,0x0(%r13)
add    $0x1,%r13
jmp    11c9 <tparam1+0x69>
movsbl (%rsi),%eax
cmp    %eax,%ebp
jle    1343 <tparam1+0x1e3>
movsbl 0x3(%r15),%eax
add    %eax,%ebp
mov    0x8(%rsp),%rax
mov    %ebp,(%rax)
add    $0x4,%r15
jmp    11d2 <tparam1+0x72>
movslq %ebp,%rax
imul   $0x66666667,%rax,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
sar    $0x22,%rax
add    %ecx,%eax
lea    (%rax,%rax,2),%eax
lea    0x0(%rbp,%rax,2),%eax
mov    0x8(%rsp),%rcx
mov    %eax,(%rcx)
mov    %rsi,%r15
jmp    11d2 <tparam1+0x72>
cmp    $0x60,%ebp
jl     139d <tparam1+0x23d>
mov    %ebp,%eax
mov    $0xaaaaaaab,%ecx
imul   %rcx,%rax
shr    $0x26,%rax
mov    %al,0x0(%r13)
add    $0x1,%r13
shl    $0x5,%eax
lea    (%rax,%rax,2),%eax
sub    %eax,%ebp
movsbl 0x2(%r15),%eax
add    $0x3,%r15
add    %ebp,%eax
mov    %r15,%rsi
mov    %eax,%ebp
mov    %ebx,0x14(%rsp)
mov    %rdi,0x38(%rsp)
mov    0x20(%rsp),%rbx
test   %rbx,%rbx
je     11ae <tparam1+0x4e>
mov    %r13,0x30(%rsp)
mov    0x18(%rsp),%r15
jmp    13e6 <tparam1+0x286>
addl   $0x1,0x10(%rsp)
mov    %r15,%rdi
call   1040 <strlen@plt>
sub    %rax,%r14
add    $0x1,%ebp
mov    %r13,%rsi
cmp    $0xa,%ebp
ja     11a9 <tparam1+0x49>
mov    $0x601,%eax
bt     %ebp,%eax
jae    11a9 <tparam1+0x49>
mov    %rsi,%r13
mov    0x28(%rsp),%rax
cmp    %rax,0x8(%rsp)
je     13d0 <tparam1+0x270>
add    $0x1,%r12d
mov    %rbx,%rdi
jmp    13d8 <tparam1+0x278>
lea    0xf(%rbp),%eax
test   %ebp,%ebp
cmovns %ebp,%eax
and    $0x7ffffff0,%eax
mov    %ebp,%ecx
sub    %eax,%ecx
add    %ecx,%ecx
sub    %ecx,%ebp
mov    0x8(%rsp),%rax
mov    %ebp,(%rax)
mov    %rsi,%r15
jmp    11d2 <tparam1+0x72>
movzbl 0x4(%r15),%ecx
and    $0x7f,%ecx
cmpb   $0x70,0x3(%r15)
jne    1454 <tparam1+0x2f4>
mov    0x8(%rsp),%rax
mov    -0x100(%rax,%rcx,4),%ecx
mov    (%rsi),%al
add    $0xd6,%al
cmp    $0x5,%al
ja     150e <tparam1+0x3ae>
movzbl %al,%eax
lea    0xcce(%rip),%rdx
movslq (%rdx,%rax,4),%rax
add    %rdx,%rax
jmp    *%rax
imul   %ebp,%ecx
jmp    150e <tparam1+0x3ae>
addq   $0xfffffffffffffffc,0x8(%rsp)
mov    %rsi,%r15
jmp    11d2 <tparam1+0x72>
cmp    $0xa,%ebp
jl     1301 <tparam1+0x1a1>
cmp    $0x64,%ebp
jae    127c <tparam1+0x11c>
jmp    12c5 <tparam1+0x165>
add    $0x1,%ebp
mov    0x8(%rsp),%rax
mov    %ebp,(%rax)
addl   $0x1,0x4(%rax)
mov    %rsi,%r15
jmp    11d2 <tparam1+0x72>
xor    $0x7f,%ebp
mov    0x8(%rsp),%rax
mov    %ebp,(%rax)
xorb   $0x7f,0x4(%rax)
mov    %rsi,%r15
jmp    11d2 <tparam1+0x72>
xor    $0x60,%ebp
mov    0x8(%rsp),%rax
mov    %ebp,(%rax)
xorb   $0x60,0x4(%rax)
mov    %rsi,%r15
jmp    11d2 <tparam1+0x72>
mov    0x8(%rsp),%rcx
mov    0x4(%rcx),%eax
mov    %eax,(%rcx)
mov    %ebp,0x4(%rcx)
addq   $0x4,0x28(%rsp)
mov    %rsi,%r15
jmp    11d2 <tparam1+0x72>
add    %ebp,%ecx
jmp    150e <tparam1+0x3ae>
sub    %ecx,%ebp
mov    %ebp,%ecx
jmp    150e <tparam1+0x3ae>
mov    %ebp,%eax
cltd
idiv   %ecx
mov    %eax,%ecx
mov    0x8(%rsp),%rax
mov    %ecx,(%rax)
add    $0x5,%r15
jmp    11d2 <tparam1+0x72>
mov    %rdi,%r14
movb   $0x0,0x0(%r13)
mov    0x10(%rsp),%ebp
test   %ebp,%ebp
mov    0x18(%rsp),%rbx
jle    1553 <tparam1+0x3f3>
add    $0x1,%ebp
cs nopw 0x0(%rax,%rax,1)
mov    %r13,%rdi
mov    %rbx,%rsi
call   1080 <strcat@plt>
add    $0xffffffff,%ebp
cmp    $0x1,%ebp
ja     1540 <tparam1+0x3e0>
test   %r12d,%r12d
mov    0x20(%rsp),%rbx
jle    1585 <tparam1+0x425>
add    $0x1,%r12d
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %r13,%rdi
mov    %rbx,%rsi
call   1080 <strcat@plt>
add    $0xffffffff,%r12d
cmp    $0x1,%r12d
ja     1570 <tparam1+0x410>
mov    %r14,%rax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
call   1030 <abort@plt>

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

LLVM IR (-O2):
define i8* @tparam1(i8* nocapture %0, i8* %1, i32 %2, i8* nocapture %3, i8* %4, i32* %5) {
%7 = sext i32 %2 to i64
%8 = getelementptr inbounds i8, i8* %1, i64 %7
%9 = add nsw i32 %2, 40
%10 = icmp eq i8* %4, null
br label %11
11: ; preds = %95, %6
%12 = phi i32* [ %5, %6 ], [ %96, %95 ]
%13 = phi i8* [ %0, %6 ], [ %97, %95 ]
%14 = phi i8* [ %1, %6 ], [ %98, %95 ]
%15 = phi i8* [ %8, %6 ], [ %99, %95 ]
%16 = phi i32 [ 0, %6 ], [ %51, %95 ]
%17 = phi i32* [ %5, %6 ], [ %100, %95 ]
%18 = phi i32 [ 0, %6 ], [ %101, %95 ]
%19 = phi i32 [ 0, %6 ], [ %102, %95 ]
%20 = phi i8* [ %1, %6 ], [ %52, %95 ]
%21 = getelementptr inbounds i8, i8* %14, i64 5
%22 = icmp ult i8* %21, %15
br i1 %22, label %48, label %23
23: ; preds = %11
%24 = ptrtoint i8* %14 to i64
%25 = ptrtoint i8* %20 to i64
%26 = sub i64 %24, %25
%27 = icmp eq i32 %16, 0
br i1 %27, label %28, label %34
28: ; preds = %23
%29 = tail call i32 (i32, ...) bitcast (i32 (...)* @xmalloc to i32 (i32, ...)*)(i32 %9)
%30 = sext i32 %29 to i64
%31 = inttoptr i64 %30 to i8*
%32 = shl i64 %26, 32
%33 = ashr exact i64 %32, 32
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %31, i8* align 1 %20, i64 %33, i1 false)
br label %41
34: ; preds = %23
%35 = shl nsw i32 %16, 1
%36 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @xrealloc to i32 (i8*, i32, ...)*)(i8* %20, i32 %35)
%37 = sext i32 %36 to i64
%38 = inttoptr i64 %37 to i8*
%39 = shl i64 %26, 32
%40 = ashr exact i64 %39, 32
br label %41
41: ; preds = %34, %28
%42 = phi i64 [ %40, %34 ], [ %33, %28 ]
%43 = phi i32 [ %35, %34 ], [ %9, %28 ]
%44 = phi i8* [ %38, %34 ], [ %31, %28 ]
%45 = getelementptr inbounds i8, i8* %44, i64 %42
%46 = sext i32 %43 to i64
%47 = getelementptr inbounds i8, i8* %44, i64 %46
br label %48
48: ; preds = %41, %11
%49 = phi i8* [ %45, %41 ], [ %14, %11 ]
%50 = phi i8* [ %47, %41 ], [ %15, %11 ]
%51 = phi i32 [ %43, %41 ], [ %16, %11 ]
%52 = phi i8* [ %44, %41 ], [ %20, %11 ]
%53 = getelementptr inbounds i8, i8* %13, i64 1
%54 = load i8, i8* %13
switch i8 %54, label %226 [
i8 0, label %229
i8 37, label %55
]
55: ; preds = %48
%56 = getelementptr inbounds i8, i8* %13, i64 2
%57 = load i8, i8* %53
%58 = sext i8 %57 to i32
%59 = load i32, i32* %12
switch i32 %58, label %225 [
i32 100, label %60
i32 51, label %64
i32 50, label %79
i32 67, label %103
i32 43, label %110
i32 46, label %117
i32 102, label %151
i32 98, label %158
i32 114, label %160
i32 62, label %164
i32 97, label %175
i32 105, label %202
i32 37, label %226
i32 110, label %207
i32 109, label %212
i32 66, label %217
i32 68, label %221
]
60: ; preds = %55
%61 = icmp slt i32 %59, 10
br i1 %61, label %87, label %62
62: ; preds = %60
%63 = icmp ult i32 %59, 100
br i1 %63, label %79, label %64
64: ; preds = %62, %55
%65 = icmp sgt i32 %59, 999
br i1 %65, label %66, label %72
66: ; preds = %64
%67 = udiv i32 %59, 1000
%68 = trunc i32 %67 to i8
%69 = add i8 %68, 48
%70 = getelementptr inbounds i8, i8* %49, i64 1
store i8 %69, i8* %49
%71 = urem i32 %59, 1000
br label %72
72: ; preds = %66, %64
%73 = phi i8* [ %70, %66 ], [ %49, %64 ]
%74 = phi i32 [ %71, %66 ], [ %59, %64 ]
%75 = sdiv i32 %74, 100
%76 = trunc i32 %75 to i8
%77 = add i8 %76, 48
%78 = getelementptr inbounds i8, i8* %73, i64 1
store i8 %77, i8* %73
br label %79
79: ; preds = %72, %55, %62
%80 = phi i8* [ %49, %55 ], [ %78, %72 ], [ %49, %62 ]
%81 = phi i32 [ %59, %55 ], [ %74, %72 ], [ %59, %62 ]
%82 = srem i32 %81, 100
%83 = trunc i32 %82 to i8
%84 = sdiv i8 %83, 10
%85 = add nsw i8 %84, 48
%86 = getelementptr inbounds i8, i8* %80, i64 1
store i8 %85, i8* %80
br label %87
87: ; preds = %60, %79
%88 = phi i8* [ %86, %79 ], [ %49, %60 ]
%89 = phi i32 [ %82, %79 ], [ %59, %60 ]
%90 = srem i32 %89, 10
%91 = trunc i32 %90 to i8
%92 = add nsw i8 %91, 48
%93 = getelementptr inbounds i8, i8* %88, i64 1
store i8 %92, i8* %88
%94 = getelementptr inbounds i32, i32* %12, i64 1
br label %95
95: ; preds = %87, %151, %158, %160, %173, %199, %202, %207, %212, %217, %221, %226
%96 = phi i32* [ %12, %221 ], [ %12, %217 ], [ %12, %212 ], [ %12, %207 ], [ %12, %226 ], [ %12, %202 ], [ %12, %199 ], [ %12, %173 ], [ %12, %160 ], [ %159, %158 ], [ %157, %151 ], [ %94, %87 ]
%97 = phi i8* [ %56, %221 ], [ %56, %217 ], [ %56, %212 ], [ %56, %207 ], [ %227, %226 ], [ %56, %202 ], [ %201, %199 ], [ %174, %173 ], [ %56, %160 ], [ %56, %158 ], [ %152, %151 ], [ %56, %87 ]
%98 = phi i8* [ %49, %221 ], [ %49, %217 ], [ %49, %212 ], [ %49, %207 ], [ %228, %226 ], [ %49, %202 ], [ %49, %199 ], [ %49, %173 ], [ %49, %160 ], [ %49, %158 ], [ %153, %151 ], [ %93, %87 ]
%99 = phi i8* [ %50, %221 ], [ %50, %217 ], [ %50, %212 ], [ %50, %207 ], [ %50, %226 ], [ %50, %202 ], [ %50, %199 ], [ %50, %173 ], [ %50, %160 ], [ %50, %158 ], [ %154, %151 ], [ %50, %87 ]
%100 = phi i32* [ %17, %221 ], [ %17, %217 ], [ %17, %212 ], [ %17, %207 ], [ %17, %226 ], [ %17, %202 ], [ %17, %199 ], [ %17, %173 ], [ %163, %160 ], [ %17, %158 ], [ %17, %151 ], [ %17, %87 ]
%101 = phi i32 [ %18, %221 ], [ %18, %217 ], [ %18, %212 ], [ %18, %207 ], [ %18, %226 ], [ %18, %202 ], [ %18, %199 ], [ %18, %173 ], [ %18, %160 ], [ %18, %158 ], [ %155, %151 ], [ %18, %87 ]
%102 = phi i32 [ %19, %221 ], [ %19, %217 ], [ %19, %212 ], [ %19, %207 ], [ %19, %226 ], [ %19, %202 ], [ %19, %199 ], [ %19, %173 ], [ %19, %160 ], [ %19, %158 ], [ %156, %151 ], [ %19, %87 ]
br label %11
103: ; preds = %55
%104 = icmp sgt i32 %59, 95
br i1 %104, label %105, label %110
105: ; preds = %103
%106 = udiv i32 %59, 96
%107 = trunc i32 %106 to i8
%108 = getelementptr inbounds i8, i8* %49, i64 1
store i8 %107, i8* %49
%109 = urem i32 %59, 96
br label %110
110: ; preds = %103, %105, %55
%111 = phi i8* [ %49, %55 ], [ %108, %105 ], [ %49, %103 ]
%112 = phi i32 [ %59, %55 ], [ %109, %105 ], [ %59, %103 ]
%113 = getelementptr inbounds i8, i8* %13, i64 3
%114 = load i8, i8* %56
%115 = sext i8 %114 to i32
%116 = add nsw i32 %112, %115
br label %117
117: ; preds = %55, %110
%118 = phi i8* [ %56, %55 ], [ %113, %110 ]
%119 = phi i8* [ %49, %55 ], [ %111, %110 ]
%120 = phi i32 [ %59, %55 ], [ %116, %110 ]
br i1 %10, label %142, label %121
121: ; preds = %117
%122 = icmp eq i32* %12, %17
br label %123
123: ; preds = %121, %136
%124 = phi i8* [ %141, %136 ], [ %50, %121 ]
%125 = phi i32 [ %129, %136 ], [ %120, %121 ]
%126 = phi i32 [ %138, %136 ], [ %18, %121 ]
%127 = phi i32 [ %139, %136 ], [ %19, %121 ]
switch i32 %125, label %142 [
i32 10, label %128
i32 9, label %128
i32 0, label %128
]
128: ; preds = %123, %123, %123
%129 = add nuw nsw i32 %125, 1
br i1 %122, label %130, label %133
130: ; preds = %128
%131 = add nsw i32 %127, 1
%132 = tail call i64 @strlen(i8* dereferenceable(1) %3)
br label %136
133: ; preds = %128
%134 = add nsw i32 %126, 1
%135 = tail call i64 @strlen(i8* %4)
br label %136
136: ; preds = %133, %130
%137 = phi i64 [ %132, %130 ], [ %135, %133 ]
%138 = phi i32 [ %126, %130 ], [ %134, %133 ]
%139 = phi i32 [ %131, %130 ], [ %127, %133 ]
%140 = sub i64 0, %137
%141 = getelementptr inbounds i8, i8* %124, i64 %140
br label %123
142: ; preds = %123, %117
%143 = phi i8* [ %50, %117 ], [ %124, %123 ]
%144 = phi i32 [ %120, %117 ], [ %125, %123 ]
%145 = phi i32 [ %18, %117 ], [ %126, %123 ]
%146 = phi i32 [ %19, %117 ], [ %127, %123 ]
%147 = icmp eq i32 %144, 0
%148 = trunc i32 %144 to i8
%149 = select i1 %147, i8 -128, i8 %148
%150 = getelementptr inbounds i8, i8* %119, i64 1
store i8 %149, i8* %119
br label %151
151: ; preds = %55, %142
%152 = phi i8* [ %56, %55 ], [ %118, %142 ]
%153 = phi i8* [ %49, %55 ], [ %150, %142 ]
%154 = phi i8* [ %50, %55 ], [ %143, %142 ]
%155 = phi i32 [ %18, %55 ], [ %145, %142 ]
%156 = phi i32 [ %19, %55 ], [ %146, %142 ]
%157 = getelementptr inbounds i32, i32* %12, i64 1
br label %95
158: ; preds = %55
%159 = getelementptr inbounds i32, i32* %12, i64 -1
br label %95
160: ; preds = %55
%161 = getelementptr inbounds i32, i32* %12, i64 1
%162 = load i32, i32* %161
store i32 %162, i32* %12
store i32 %59, i32* %161
%163 = getelementptr inbounds i32, i32* %17, i64 1
br label %95
164: ; preds = %55
%165 = load i8, i8* %56
%166 = sext i8 %165 to i32
%167 = icmp sgt i32 %59, %166
br i1 %167, label %168, label %173
168: ; preds = %164
%169 = getelementptr inbounds i8, i8* %13, i64 3
%170 = load i8, i8* %169
%171 = sext i8 %170 to i32
%172 = add nsw i32 %59, %171
store i32 %172, i32* %12
br label %173
173: ; preds = %168, %164
%174 = getelementptr inbounds i8, i8* %13, i64 4
br label %95
175: ; preds = %55
%176 = getelementptr inbounds i8, i8* %13, i64 4
%177 = load i8, i8* %176
%178 = and i8 %177, 127
%179 = zext i8 %178 to i32
%180 = getelementptr inbounds i8, i8* %13, i64 3
%181 = load i8, i8* %180
%182 = icmp eq i8 %181, 112
br i1 %182, label %183, label %188
183: ; preds = %175
%184 = add nsw i32 %179, -64
%185 = sext i32 %184 to i64
%186 = getelementptr inbounds i32, i32* %12, i64 %185
%187 = load i32, i32* %186
br label %188
188: ; preds = %183, %175
%189 = phi i32 [ %187, %183 ], [ %179, %175 ]
%190 = load i8, i8* %56
switch i8 %190, label %199 [
i8 45, label %191
i8 43, label %193
i8 42, label %195
i8 47, label %197
]
191: ; preds = %188
%192 = sub nsw i32 %59, %189
br label %199
193: ; preds = %188
%194 = add nsw i32 %189, %59
br label %199
195: ; preds = %188
%196 = mul nsw i32 %189, %59
br label %199
197: ; preds = %188
%198 = sdiv i32 %59, %189
br label %199
199: ; preds = %188, %193, %197, %195, %191
%200 = phi i32 [ %194, %193 ], [ %198, %197 ], [ %196, %195 ], [ %192, %191 ], [ %189, %188 ]
store i32 %200, i32* %12
%201 = getelementptr inbounds i8, i8* %13, i64 5
br label %95
202: ; preds = %55
%203 = add nsw i32 %59, 1
store i32 %203, i32* %12
%204 = getelementptr inbounds i32, i32* %12, i64 1
%205 = load i32, i32* %204
%206 = add nsw i32 %205, 1
store i32 %206, i32* %204
br label %95
207: ; preds = %55
%208 = xor i32 %59, 96
store i32 %208, i32* %12
%209 = getelementptr inbounds i32, i32* %12, i64 1
%210 = load i32, i32* %209
%211 = xor i32 %210, 96
store i32 %211, i32* %209
br label %95
212: ; preds = %55
%213 = xor i32 %59, 127
store i32 %213, i32* %12
%214 = getelementptr inbounds i32, i32* %12, i64 1
%215 = load i32, i32* %214
%216 = xor i32 %215, 127
store i32 %216, i32* %214
br label %95
217: ; preds = %55
%218 = sdiv i32 %59, 10
%219 = mul nsw i32 %218, 6
%220 = add nsw i32 %219, %59
store i32 %220, i32* %12
br label %95
221: ; preds = %55
%222 = srem i32 %59, 16
%223 = mul nsw i32 %222, -2
%224 = add i32 %223, %59
store i32 %224, i32* %12
br label %95
225: ; preds = %55
tail call void @abort()
unreachable
226: ; preds = %48, %55
%227 = phi i8* [ %56, %55 ], [ %53, %48 ]
%228 = getelementptr inbounds i8, i8* %49, i64 1
store i8 %54, i8* %49
br label %95
229: ; preds = %48
store i8 0, i8* %49
%230 = icmp sgt i32 %19, 0
br i1 %230, label %233, label %231
231: ; preds = %233, %229
%232 = icmp sgt i32 %18, 0
br i1 %232, label %238, label %243
233: ; preds = %229, %233
%234 = phi i32 [ %235, %233 ], [ %19, %229 ]
%235 = add nsw i32 %234, -1
%236 = tail call i8* @strcat(i8* %49, i8* dereferenceable(1) %3)
%237 = icmp ugt i32 %234, 1
br i1 %237, label %233, label %231
238: ; preds = %231, %238
%239 = phi i32 [ %240, %238 ], [ %18, %231 ]
%240 = add nsw i32 %239, -1
%241 = tail call i8* @strcat(i8* %49, i8* dereferenceable(1) %4)
%242 = icmp ugt i32 %239, 1
br i1 %242, label %238, label %243
243: ; preds = %238, %231
ret i8* %52
}