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);
        bcopy(outstring, new, 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     125b <tparam1+0xfb>
mov    -0x48(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x74(%rbp)
cmpl   $0x0,-0x54(%rbp)
jne    1218 <tparam1+0xb8>
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    -0x10(%rbp),%rdi
mov    -0x70(%rbp),%rsi
mov    -0x74(%rbp),%edx
mov    $0x0,%al
call   1070 <bcopy@plt>
jmp    1235 <tparam1+0xd5>
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    127f <tparam1+0x11f>
jmp    1747 <tparam1+0x5e7>
cmpl   $0x25,-0x34(%rbp)
jne    1727 <tparam1+0x5c7>
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     171d <tparam1+0x5bd>
mov    -0x80(%rbp),%rax
lea    0xd39(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
cmpl   $0xa,-0x58(%rbp)
jge    12df <tparam1+0x17f>
jmp    1384 <tparam1+0x224>
cmpl   $0x64,-0x58(%rbp)
jge    12ee <tparam1+0x18e>
jmp    1355 <tparam1+0x1f5>
jmp    12f3 <tparam1+0x193>
cmpl   $0x3e7,-0x58(%rbp)
jle    132f <tparam1+0x1cf>
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    1355 <tparam1+0x1f5>
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    1722 <tparam1+0x5c2>
cmpl   $0x60,-0x58(%rbp)
jl     13ec <tparam1+0x28c>
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    13f1 <tparam1+0x291>
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     14cd <tparam1+0x36d>
jmp    1419 <tparam1+0x2b9>
mov    $0x1,%al
cmpl   $0x0,-0x58(%rbp)
mov    %al,-0x81(%rbp)
je     144a <tparam1+0x2ea>
mov    $0x1,%al
cmpl   $0xa,-0x58(%rbp)
mov    %al,-0x81(%rbp)
je     144a <tparam1+0x2ea>
cmpl   $0x9,-0x58(%rbp)
sete   %al
mov    %al,-0x81(%rbp)
mov    -0x81(%rbp),%al
test   $0x1,%al
jne    145d <tparam1+0x2fd>
jmp    14c8 <tparam1+0x368>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x60(%rbp),%rax
jne    149e <tparam1+0x33e>
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    14c3 <tparam1+0x363>
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    1419 <tparam1+0x2b9>
jmp    14cd <tparam1+0x36d>
cmpl   $0x0,-0x58(%rbp)
je     14e5 <tparam1+0x385>
mov    -0x58(%rbp),%eax
mov    %eax,-0x88(%rbp)
jmp    14f5 <tparam1+0x395>
mov    $0x80,%eax
mov    %eax,-0x88(%rbp)
jmp    14f5 <tparam1+0x395>
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    1722 <tparam1+0x5c2>
mov    -0x30(%rbp),%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,-0x30(%rbp)
jmp    1722 <tparam1+0x5c2>
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    1722 <tparam1+0x5c2>
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    1587 <tparam1+0x427>
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    1722 <tparam1+0x5c2>
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    15ca <tparam1+0x46a>
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    15ec <tparam1+0x48c>
mov    -0x58(%rbp),%edx
mov    -0x30(%rbp),%rax
mov    (%rax),%ecx
sub    %edx,%ecx
mov    %ecx,(%rax)
jmp    1678 <tparam1+0x518>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
jne    160c <tparam1+0x4ac>
mov    -0x58(%rbp),%ecx
mov    -0x30(%rbp),%rax
add    (%rax),%ecx
mov    %ecx,(%rax)
jmp    1673 <tparam1+0x513>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
jne    162d <tparam1+0x4cd>
mov    -0x58(%rbp),%ecx
mov    -0x30(%rbp),%rax
imul   (%rax),%ecx
mov    %ecx,(%rax)
jmp    166e <tparam1+0x50e>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1660 <tparam1+0x500>
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    1669 <tparam1+0x509>
mov    -0x58(%rbp),%ecx
mov    -0x30(%rbp),%rax
mov    %ecx,(%rax)
jmp    166e <tparam1+0x50e>
jmp    1673 <tparam1+0x513>
jmp    1678 <tparam1+0x518>
mov    -0x40(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x40(%rbp)
jmp    1722 <tparam1+0x5c2>
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    1722 <tparam1+0x5c2>
jmp    172c <tparam1+0x5cc>
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    1722 <tparam1+0x5c2>
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    1722 <tparam1+0x5c2>
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    1722 <tparam1+0x5c2>
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    1722 <tparam1+0x5c2>
call   1030 <abort@plt>
jmp    1742 <tparam1+0x5e2>
jmp    172c <tparam1+0x5cc>
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    1774 <tparam1+0x614>
mov    -0x48(%rbp),%rdi
mov    -0x20(%rbp),%rsi
call   1080 <strcat@plt>
jmp    174e <tparam1+0x5ee>
jmp    1779 <tparam1+0x619>
mov    -0x64(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x64(%rbp)
cmp    $0x0,%eax
jle    179f <tparam1+0x63f>
mov    -0x48(%rbp),%rdi
mov    -0x28(%rbp),%rsi
call   1080 <strcat@plt>
jmp    1779 <tparam1+0x619>
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     1225 <tparam1+0xc5>
sub    %rdi,%r13
test   %ebx,%ebx
je     11f2 <tparam1+0x92>
add    %ebx,%ebx
mov    %ebx,%esi
xor    %eax,%eax
call   1050 <xrealloc@plt>
movslq %eax,%rdi
jmp    1219 <tparam1+0xb9>
mov    0x40(%rsp),%rbx
mov    %rdi,%r14
mov    %ebx,%edi
xor    %eax,%eax
call   1060 <xmalloc@plt>
movslq %eax,%rbp
mov    %r14,%rdi
mov    %rbp,%rsi
mov    %r13d,%edx
xor    %eax,%eax
call   1070 <bcopy@plt>
mov    %rbp,%rdi
movslq %r13d,%r13
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,%rax,1)
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** %8
%53 = load i8*, i8** %22
%54 = load i32, i32* %23
%55 = call i32 (i8*, i8*, i32, ...) bitcast (i32 (...)* @bcopy to i32 (i8*, i8*, i32, ...)*)(i8* %52, i8* %53, i32 %54)
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 = %94, %6
%12 = phi i32* [ %5, %6 ], [ %95, %94 ]
%13 = phi i8* [ %0, %6 ], [ %96, %94 ]
%14 = phi i8* [ %1, %6 ], [ %97, %94 ]
%15 = phi i8* [ %8, %6 ], [ %98, %94 ]
%16 = phi i32 [ 0, %6 ], [ %50, %94 ]
%17 = phi i32* [ %5, %6 ], [ %99, %94 ]
%18 = phi i32 [ 0, %6 ], [ %100, %94 ]
%19 = phi i32 [ 0, %6 ], [ %101, %94 ]
%20 = phi i8* [ %1, %6 ], [ %51, %94 ]
%21 = getelementptr inbounds i8, i8* %14, i64 5
%22 = icmp ult i8* %21, %15
br i1 %22, label %47, 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 = trunc i64 %26 to i32
%30 = tail call i32 (i32, ...) bitcast (i32 (...)* @xmalloc to i32 (i32, ...)*)(i32 %9)
%31 = sext i32 %30 to i64
%32 = inttoptr i64 %31 to i8*
%33 = tail call i32 (i8*, i8*, i32, ...) bitcast (i32 (...)* @bcopy to i32 (i8*, i8*, i32, ...)*)(i8* %20, i8* %32, i32 %29)
br label %39
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*
br label %39
39: ; preds = %34, %28
%40 = phi i32 [ %9, %28 ], [ %35, %34 ]
%41 = phi i8* [ %32, %28 ], [ %38, %34 ]
%42 = shl i64 %26, 32
%43 = ashr exact i64 %42, 32
%44 = getelementptr inbounds i8, i8* %41, i64 %43
%45 = sext i32 %40 to i64
%46 = getelementptr inbounds i8, i8* %41, i64 %45
br label %47
47: ; preds = %39, %11
%48 = phi i8* [ %44, %39 ], [ %14, %11 ]
%49 = phi i8* [ %46, %39 ], [ %15, %11 ]
%50 = phi i32 [ %40, %39 ], [ %16, %11 ]
%51 = phi i8* [ %41, %39 ], [ %20, %11 ]
%52 = getelementptr inbounds i8, i8* %13, i64 1
%53 = load i8, i8* %13
switch i8 %53, label %225 [
i8 0, label %228
i8 37, label %54
]
54: ; preds = %47
%55 = getelementptr inbounds i8, i8* %13, i64 2
%56 = load i8, i8* %52
%57 = sext i8 %56 to i32
%58 = load i32, i32* %12
switch i32 %57, label %224 [
i32 100, label %59
i32 51, label %63
i32 50, label %78
i32 67, label %102
i32 43, label %109
i32 46, label %116
i32 102, label %150
i32 98, label %157
i32 114, label %159
i32 62, label %163
i32 97, label %174
i32 105, label %201
i32 37, label %225
i32 110, label %206
i32 109, label %211
i32 66, label %216
i32 68, label %220
]
59: ; preds = %54
%60 = icmp slt i32 %58, 10
br i1 %60, label %86, label %61
61: ; preds = %59
%62 = icmp ult i32 %58, 100
br i1 %62, label %78, label %63
63: ; preds = %61, %54
%64 = icmp sgt i32 %58, 999
br i1 %64, label %65, label %71
65: ; preds = %63
%66 = udiv i32 %58, 1000
%67 = trunc i32 %66 to i8
%68 = add i8 %67, 48
%69 = getelementptr inbounds i8, i8* %48, i64 1
store i8 %68, i8* %48
%70 = urem i32 %58, 1000
br label %71
71: ; preds = %65, %63
%72 = phi i8* [ %69, %65 ], [ %48, %63 ]
%73 = phi i32 [ %70, %65 ], [ %58, %63 ]
%74 = sdiv i32 %73, 100
%75 = trunc i32 %74 to i8
%76 = add i8 %75, 48
%77 = getelementptr inbounds i8, i8* %72, i64 1
store i8 %76, i8* %72
br label %78
78: ; preds = %71, %54, %61
%79 = phi i8* [ %48, %54 ], [ %77, %71 ], [ %48, %61 ]
%80 = phi i32 [ %58, %54 ], [ %73, %71 ], [ %58, %61 ]
%81 = srem i32 %80, 100
%82 = trunc i32 %81 to i8
%83 = sdiv i8 %82, 10
%84 = add nsw i8 %83, 48
%85 = getelementptr inbounds i8, i8* %79, i64 1
store i8 %84, i8* %79
br label %86
86: ; preds = %59, %78
%87 = phi i8* [ %85, %78 ], [ %48, %59 ]
%88 = phi i32 [ %81, %78 ], [ %58, %59 ]
%89 = srem i32 %88, 10
%90 = trunc i32 %89 to i8
%91 = add nsw i8 %90, 48
%92 = getelementptr inbounds i8, i8* %87, i64 1
store i8 %91, i8* %87
%93 = getelementptr inbounds i32, i32* %12, i64 1
br label %94
94: ; preds = %86, %150, %157, %159, %172, %198, %201, %206, %211, %216, %220, %225
%95 = phi i32* [ %12, %220 ], [ %12, %216 ], [ %12, %211 ], [ %12, %206 ], [ %12, %225 ], [ %12, %201 ], [ %12, %198 ], [ %12, %172 ], [ %12, %159 ], [ %158, %157 ], [ %156, %150 ], [ %93, %86 ]
%96 = phi i8* [ %55, %220 ], [ %55, %216 ], [ %55, %211 ], [ %55, %206 ], [ %226, %225 ], [ %55, %201 ], [ %200, %198 ], [ %173, %172 ], [ %55, %159 ], [ %55, %157 ], [ %151, %150 ], [ %55, %86 ]
%97 = phi i8* [ %48, %220 ], [ %48, %216 ], [ %48, %211 ], [ %48, %206 ], [ %227, %225 ], [ %48, %201 ], [ %48, %198 ], [ %48, %172 ], [ %48, %159 ], [ %48, %157 ], [ %152, %150 ], [ %92, %86 ]
%98 = phi i8* [ %49, %220 ], [ %49, %216 ], [ %49, %211 ], [ %49, %206 ], [ %49, %225 ], [ %49, %201 ], [ %49, %198 ], [ %49, %172 ], [ %49, %159 ], [ %49, %157 ], [ %153, %150 ], [ %49, %86 ]
%99 = phi i32* [ %17, %220 ], [ %17, %216 ], [ %17, %211 ], [ %17, %206 ], [ %17, %225 ], [ %17, %201 ], [ %17, %198 ], [ %17, %172 ], [ %162, %159 ], [ %17, %157 ], [ %17, %150 ], [ %17, %86 ]
%100 = phi i32 [ %18, %220 ], [ %18, %216 ], [ %18, %211 ], [ %18, %206 ], [ %18, %225 ], [ %18, %201 ], [ %18, %198 ], [ %18, %172 ], [ %18, %159 ], [ %18, %157 ], [ %154, %150 ], [ %18, %86 ]
%101 = phi i32 [ %19, %220 ], [ %19, %216 ], [ %19, %211 ], [ %19, %206 ], [ %19, %225 ], [ %19, %201 ], [ %19, %198 ], [ %19, %172 ], [ %19, %159 ], [ %19, %157 ], [ %155, %150 ], [ %19, %86 ]
br label %11
102: ; preds = %54
%103 = icmp sgt i32 %58, 95
br i1 %103, label %104, label %109
104: ; preds = %102
%105 = udiv i32 %58, 96
%106 = trunc i32 %105 to i8
%107 = getelementptr inbounds i8, i8* %48, i64 1
store i8 %106, i8* %48
%108 = urem i32 %58, 96
br label %109
109: ; preds = %102, %104, %54
%110 = phi i8* [ %48, %54 ], [ %107, %104 ], [ %48, %102 ]
%111 = phi i32 [ %58, %54 ], [ %108, %104 ], [ %58, %102 ]
%112 = getelementptr inbounds i8, i8* %13, i64 3
%113 = load i8, i8* %55
%114 = sext i8 %113 to i32
%115 = add nsw i32 %111, %114
br label %116
116: ; preds = %54, %109
%117 = phi i8* [ %55, %54 ], [ %112, %109 ]
%118 = phi i8* [ %48, %54 ], [ %110, %109 ]
%119 = phi i32 [ %58, %54 ], [ %115, %109 ]
br i1 %10, label %141, label %120
120: ; preds = %116
%121 = icmp eq i32* %12, %17
br label %122
122: ; preds = %120, %135
%123 = phi i8* [ %140, %135 ], [ %49, %120 ]
%124 = phi i32 [ %128, %135 ], [ %119, %120 ]
%125 = phi i32 [ %137, %135 ], [ %18, %120 ]
%126 = phi i32 [ %138, %135 ], [ %19, %120 ]
switch i32 %124, label %141 [
i32 10, label %127
i32 9, label %127
i32 0, label %127
]
127: ; preds = %122, %122, %122
%128 = add nuw nsw i32 %124, 1
br i1 %121, label %129, label %132
129: ; preds = %127
%130 = add nsw i32 %126, 1
%131 = tail call i64 @strlen(i8* dereferenceable(1) %3)
br label %135
132: ; preds = %127
%133 = add nsw i32 %125, 1
%134 = tail call i64 @strlen(i8* %4)
br label %135
135: ; preds = %132, %129
%136 = phi i64 [ %131, %129 ], [ %134, %132 ]
%137 = phi i32 [ %125, %129 ], [ %133, %132 ]
%138 = phi i32 [ %130, %129 ], [ %126, %132 ]
%139 = sub i64 0, %136
%140 = getelementptr inbounds i8, i8* %123, i64 %139
br label %122
141: ; preds = %122, %116
%142 = phi i8* [ %49, %116 ], [ %123, %122 ]
%143 = phi i32 [ %119, %116 ], [ %124, %122 ]
%144 = phi i32 [ %18, %116 ], [ %125, %122 ]
%145 = phi i32 [ %19, %116 ], [ %126, %122 ]
%146 = icmp eq i32 %143, 0
%147 = trunc i32 %143 to i8
%148 = select i1 %146, i8 -128, i8 %147
%149 = getelementptr inbounds i8, i8* %118, i64 1
store i8 %148, i8* %118
br label %150
150: ; preds = %54, %141
%151 = phi i8* [ %55, %54 ], [ %117, %141 ]
%152 = phi i8* [ %48, %54 ], [ %149, %141 ]
%153 = phi i8* [ %49, %54 ], [ %142, %141 ]
%154 = phi i32 [ %18, %54 ], [ %144, %141 ]
%155 = phi i32 [ %19, %54 ], [ %145, %141 ]
%156 = getelementptr inbounds i32, i32* %12, i64 1
br label %94
157: ; preds = %54
%158 = getelementptr inbounds i32, i32* %12, i64 -1
br label %94
159: ; preds = %54
%160 = getelementptr inbounds i32, i32* %12, i64 1
%161 = load i32, i32* %160
store i32 %161, i32* %12
store i32 %58, i32* %160
%162 = getelementptr inbounds i32, i32* %17, i64 1
br label %94
163: ; preds = %54
%164 = load i8, i8* %55
%165 = sext i8 %164 to i32
%166 = icmp sgt i32 %58, %165
br i1 %166, label %167, label %172
167: ; preds = %163
%168 = getelementptr inbounds i8, i8* %13, i64 3
%169 = load i8, i8* %168
%170 = sext i8 %169 to i32
%171 = add nsw i32 %58, %170
store i32 %171, i32* %12
br label %172
172: ; preds = %167, %163
%173 = getelementptr inbounds i8, i8* %13, i64 4
br label %94
174: ; preds = %54
%175 = getelementptr inbounds i8, i8* %13, i64 4
%176 = load i8, i8* %175
%177 = and i8 %176, 127
%178 = zext i8 %177 to i32
%179 = getelementptr inbounds i8, i8* %13, i64 3
%180 = load i8, i8* %179
%181 = icmp eq i8 %180, 112
br i1 %181, label %182, label %187
182: ; preds = %174
%183 = add nsw i32 %178, -64
%184 = sext i32 %183 to i64
%185 = getelementptr inbounds i32, i32* %12, i64 %184
%186 = load i32, i32* %185
br label %187
187: ; preds = %182, %174
%188 = phi i32 [ %186, %182 ], [ %178, %174 ]
%189 = load i8, i8* %55
switch i8 %189, label %198 [
i8 45, label %190
i8 43, label %192
i8 42, label %194
i8 47, label %196
]
190: ; preds = %187
%191 = sub nsw i32 %58, %188
br label %198
192: ; preds = %187
%193 = add nsw i32 %188, %58
br label %198
194: ; preds = %187
%195 = mul nsw i32 %188, %58
br label %198
196: ; preds = %187
%197 = sdiv i32 %58, %188
br label %198
198: ; preds = %187, %192, %196, %194, %190
%199 = phi i32 [ %193, %192 ], [ %197, %196 ], [ %195, %194 ], [ %191, %190 ], [ %188, %187 ]
store i32 %199, i32* %12
%200 = getelementptr inbounds i8, i8* %13, i64 5
br label %94
201: ; preds = %54
%202 = add nsw i32 %58, 1
store i32 %202, i32* %12
%203 = getelementptr inbounds i32, i32* %12, i64 1
%204 = load i32, i32* %203
%205 = add nsw i32 %204, 1
store i32 %205, i32* %203
br label %94
206: ; preds = %54
%207 = xor i32 %58, 96
store i32 %207, i32* %12
%208 = getelementptr inbounds i32, i32* %12, i64 1
%209 = load i32, i32* %208
%210 = xor i32 %209, 96
store i32 %210, i32* %208
br label %94
211: ; preds = %54
%212 = xor i32 %58, 127
store i32 %212, i32* %12
%213 = getelementptr inbounds i32, i32* %12, i64 1
%214 = load i32, i32* %213
%215 = xor i32 %214, 127
store i32 %215, i32* %213
br label %94
216: ; preds = %54
%217 = sdiv i32 %58, 10
%218 = mul nsw i32 %217, 6
%219 = add nsw i32 %218, %58
store i32 %219, i32* %12
br label %94
220: ; preds = %54
%221 = srem i32 %58, 16
%222 = mul nsw i32 %221, -2
%223 = add i32 %222, %58
store i32 %223, i32* %12
br label %94
224: ; preds = %54
tail call void @abort()
unreachable
225: ; preds = %47, %54
%226 = phi i8* [ %55, %54 ], [ %52, %47 ]
%227 = getelementptr inbounds i8, i8* %48, i64 1
store i8 %53, i8* %48
br label %94
228: ; preds = %47
store i8 0, i8* %48
%229 = icmp sgt i32 %19, 0
br i1 %229, label %232, label %230
230: ; preds = %232, %228
%231 = icmp sgt i32 %18, 0
br i1 %231, label %237, label %242
232: ; preds = %228, %232
%233 = phi i32 [ %234, %232 ], [ %19, %228 ]
%234 = add nsw i32 %233, -1
%235 = tail call i8* @strcat(i8* %48, i8* dereferenceable(1) %3)
%236 = icmp ugt i32 %233, 1
br i1 %236, label %232, label %230
237: ; preds = %230, %237
%238 = phi i32 [ %239, %237 ], [ %18, %230 ]
%239 = add nsw i32 %238, -1
%240 = tail call i8* @strcat(i8* %48, i8* dereferenceable(1) %4)
%241 = icmp ugt i32 %238, 1
br i1 %241, label %237, label %242
242: ; preds = %237, %230
ret i8* %51
}