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;
      if (outlen == 0) {
        outlen = len + 40;
        new = (char *)xmalloc(outlen);
        outend += 40;
        bcopy(outstring, new, op - outstring);
      } else {
        outend += outlen;
        outlen *= 2;
        new = (char *)xrealloc(outstring, outlen);
      }
      op += new - outstring;
      outend += new - outstring;
      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;
      }
    } 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     126a <tparam1+0x11a>
cmpl   $0x0,-0x54(%rbp)
jne    120e <tparam1+0xbe>
mov    -0x14(%rbp),%eax
add    $0x28,%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%edi
mov    $0x0,%al
call   1050 <xmalloc@plt>
cltq
mov    %rax,-0x70(%rbp)
mov    -0x50(%rbp),%rax
add    $0x28,%rax
mov    %rax,-0x50(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x70(%rbp),%rsi
mov    -0x48(%rbp),%rdx
mov    -0x10(%rbp),%rax
sub    %rax,%rdx
mov    $0x0,%al
call   1060 <bcopy@plt>
jmp    123c <tparam1+0xec>
mov    -0x54(%rbp),%ecx
mov    -0x50(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
mov    -0x54(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x54(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x54(%rbp),%esi
mov    $0x0,%al
call   1040 <xrealloc@plt>
cltq
mov    %rax,-0x70(%rbp)
mov    -0x70(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x70(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    -0x50(%rbp),%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    128e <tparam1+0x13e>
jmp    1737 <tparam1+0x5e7>
cmpl   $0x25,-0x34(%rbp)
jne    1717 <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,-0x78(%rbp)
sub    $0x4d,%eax
ja     1712 <tparam1+0x5c2>
mov    -0x78(%rbp),%rax
lea    0xd2a(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
cmpl   $0xa,-0x58(%rbp)
jge    12ee <tparam1+0x19e>
jmp    1393 <tparam1+0x243>
cmpl   $0x64,-0x58(%rbp)
jge    12fd <tparam1+0x1ad>
jmp    1364 <tparam1+0x214>
jmp    1302 <tparam1+0x1b2>
cmpl   $0x3e7,-0x58(%rbp)
jle    133e <tparam1+0x1ee>
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    1364 <tparam1+0x214>
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    1712 <tparam1+0x5c2>
cmpl   $0x60,-0x58(%rbp)
jl     13fb <tparam1+0x2ab>
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    1400 <tparam1+0x2b0>
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     14d0 <tparam1+0x380>
jmp    1428 <tparam1+0x2d8>
mov    $0x1,%al
cmpl   $0x0,-0x58(%rbp)
mov    %al,-0x79(%rbp)
je     1450 <tparam1+0x300>
mov    $0x1,%al
cmpl   $0xa,-0x58(%rbp)
mov    %al,-0x79(%rbp)
je     1450 <tparam1+0x300>
cmpl   $0x9,-0x58(%rbp)
sete   %al
mov    %al,-0x79(%rbp)
mov    -0x79(%rbp),%al
test   $0x1,%al
jne    1460 <tparam1+0x310>
jmp    14cb <tparam1+0x37b>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x60(%rbp),%rax
jne    14a1 <tparam1+0x351>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
mov    -0x20(%rbp),%rdi
call   1030 <strlen@plt>
mov    %rax,%rdx
mov    -0x50(%rbp),%rax
xor    %ecx,%ecx
sub    %rdx,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
jmp    14c6 <tparam1+0x376>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
mov    -0x28(%rbp),%rdi
call   1030 <strlen@plt>
mov    %rax,%rdx
mov    -0x50(%rbp),%rax
xor    %ecx,%ecx
sub    %rdx,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
jmp    1428 <tparam1+0x2d8>
jmp    14d0 <tparam1+0x380>
cmpl   $0x0,-0x58(%rbp)
je     14e5 <tparam1+0x395>
mov    -0x58(%rbp),%eax
mov    %eax,-0x80(%rbp)
jmp    14f2 <tparam1+0x3a2>
mov    $0x80,%eax
mov    %eax,-0x80(%rbp)
jmp    14f2 <tparam1+0x3a2>
mov    -0x80(%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    1712 <tparam1+0x5c2>
mov    -0x30(%rbp),%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,-0x30(%rbp)
jmp    1712 <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    1712 <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    1581 <tparam1+0x431>
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    1712 <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    15c4 <tparam1+0x474>
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    15e6 <tparam1+0x496>
mov    -0x58(%rbp),%edx
mov    -0x30(%rbp),%rax
mov    (%rax),%ecx
sub    %edx,%ecx
mov    %ecx,(%rax)
jmp    1672 <tparam1+0x522>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
jne    1606 <tparam1+0x4b6>
mov    -0x58(%rbp),%ecx
mov    -0x30(%rbp),%rax
add    (%rax),%ecx
mov    %ecx,(%rax)
jmp    166d <tparam1+0x51d>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
jne    1627 <tparam1+0x4d7>
mov    -0x58(%rbp),%ecx
mov    -0x30(%rbp),%rax
imul   (%rax),%ecx
mov    %ecx,(%rax)
jmp    1668 <tparam1+0x518>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    165a <tparam1+0x50a>
mov    -0x58(%rbp),%ecx
mov    -0x30(%rbp),%rax
mov    %rax,-0x88(%rbp)
mov    (%rax),%eax
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x88(%rbp),%rax
mov    %ecx,(%rax)
jmp    1663 <tparam1+0x513>
mov    -0x58(%rbp),%ecx
mov    -0x30(%rbp),%rax
mov    %ecx,(%rax)
jmp    1668 <tparam1+0x518>
jmp    166d <tparam1+0x51d>
jmp    1672 <tparam1+0x522>
mov    -0x40(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x40(%rbp)
jmp    1712 <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    1712 <tparam1+0x5c2>
jmp    171c <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    1712 <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    1712 <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    1712 <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    1732 <tparam1+0x5e2>
jmp    171c <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    11ae <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    1764 <tparam1+0x614>
mov    -0x48(%rbp),%rdi
mov    -0x20(%rbp),%rsi
call   1070 <strcat@plt>
jmp    173e <tparam1+0x5ee>
jmp    1769 <tparam1+0x619>
mov    -0x64(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x64(%rbp)
cmp    $0x0,%eax
jle    178f <tparam1+0x63f>
mov    -0x48(%rbp),%rdi
mov    -0x28(%rbp),%rsi
call   1070 <strcat@plt>
jmp    1769 <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    $0x38,%rsp
mov    %r8,0x18(%rsp)
mov    %rcx,0x28(%rsp)
mov    %rsi,%r8
movslq %edx,%rax
lea    (%rsi,%rax,1),%r15
add    $0x28,%eax
mov    %rax,0x20(%rsp)
mov    %rsi,%rbx
movl   $0x0,0x8(%rsp)
mov    %r9,(%rsp)
mov    %r9,0x30(%rsp)
xor    %r14d,%r14d
movl   $0x0,0xc(%rsp)
jmp    11c0 <tparam1+0x70>
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    (%rsp),%rax
mov    %ebp,(%rax)
cs nopw 0x0(%rax,%rax,1)
mov    %rdi,%r13
lea    0x5(%rbx),%rax
cmp    %r15,%rax
jb     1245 <tparam1+0xf5>
mov    0x8(%rsp),%esi
test   %esi,%esi
je     11f2 <tparam1+0xa2>
movslq %esi,%r12
add    %esi,%esi
mov    %r8,%rdi
mov    %esi,0x8(%rsp)
xor    %eax,%eax
mov    %r8,%rbp
call   1040 <xrealloc@plt>
mov    %rbp,%rcx
movslq %eax,%r8
jmp    1236 <tparam1+0xe6>
mov    %r14d,0x10(%rsp)
mov    0x20(%rsp),%rdi
xor    %eax,%eax
mov    %r8,%r14
call   1050 <xmalloc@plt>
movslq %eax,%rbp
mov    %rbx,%rdx
sub    %r14,%rdx
mov    %r14,%rdi
mov    %rbp,%rsi
xor    %eax,%eax
call   1060 <bcopy@plt>
mov    $0x28,%r12d
mov    %r14,%rcx
mov    0x20(%rsp),%rax
mov    %eax,0x8(%rsp)
mov    0x10(%rsp),%r14d
mov    %rbp,%r8
add    %r12,%r15
mov    %r8,%rax
sub    %rcx,%rax
add    %rax,%rbx
add    %rax,%r15
mov    0x0(%r13),%al
cmp    $0x25,%al
je     1270 <tparam1+0x120>
test   %al,%al
je     1505 <tparam1+0x3b5>
add    $0x1,%r13
mov    %r13,%rdi
mov    %al,(%rbx)
add    $0x1,%rbx
jmp    11c0 <tparam1+0x70>
nopw   0x0(%rax,%rax,1)
lea    0x2(%r13),%rdi
movsbl 0x1(%r13),%ecx
add    $0xffffffdb,%ecx
cmp    $0x4d,%ecx
ja     11c0 <tparam1+0x70>
mov    (%rsp),%rdx
mov    (%rdx),%ebp
lea    0xd6e(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
movsbl (%rdi),%eax
cmp    %eax,%ebp
jle    12af <tparam1+0x15f>
movsbl 0x3(%r13),%eax
add    %eax,%ebp
mov    (%rsp),%rax
mov    %ebp,(%rax)
add    $0x4,%r13
mov    %r13,%rdi
jmp    11c0 <tparam1+0x70>
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    (%rsp),%rcx
mov    %eax,(%rcx)
jmp    11c0 <tparam1+0x70>
addq   $0xfffffffffffffffc,(%rsp)
jmp    11c0 <tparam1+0x70>
cmp    $0xa,%ebp
jl     137b <tparam1+0x22b>
cmp    $0x64,%ebp
jb     1341 <tparam1+0x1f1>
cmp    $0x3e8,%ebp
jl     1322 <tparam1+0x1d2>
mov    %ebp,%eax
imul   $0x10624dd3,%rax,%rax
shr    $0x26,%rax
lea    0x30(%rax),%ecx
mov    %cl,(%rbx)
add    $0x1,%rbx
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,(%rbx)
add    $0x1,%rbx
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,(%rbx)
add    $0x1,%rbx
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,(%rbx)
add    $0x1,%rbx
addq   $0x4,(%rsp)
jmp    11c0 <tparam1+0x70>
add    $0x1,%ebp
mov    (%rsp),%rax
mov    %ebp,(%rax)
addl   $0x1,0x4(%rax)
jmp    11c0 <tparam1+0x70>
xor    $0x7f,%ebp
mov    (%rsp),%rax
mov    %ebp,(%rax)
xorb   $0x7f,0x4(%rax)
jmp    11c0 <tparam1+0x70>
xor    $0x60,%ebp
mov    (%rsp),%rax
mov    %ebp,(%rax)
xorb   $0x60,0x4(%rax)
jmp    11c0 <tparam1+0x70>
mov    (%rsp),%rcx
mov    0x4(%rcx),%eax
mov    %eax,(%rcx)
mov    %ebp,0x4(%rcx)
addq   $0x4,0x30(%rsp)
jmp    11c0 <tparam1+0x70>
cmp    $0x60,%ebp
jl     141a <tparam1+0x2ca>
mov    %ebp,%eax
mov    $0xaaaaaaab,%ecx
imul   %rcx,%rax
shr    $0x26,%rax
mov    %al,(%rbx)
add    $0x1,%rbx
shl    $0x5,%eax
lea    (%rax,%rax,2),%eax
sub    %eax,%ebp
movsbl 0x2(%r13),%eax
add    $0x3,%r13
add    %ebp,%eax
mov    %r13,%rdi
mov    %eax,%ebp
mov    %rdi,0x10(%rsp)
mov    %rbx,%r13
mov    %r8,%r12
mov    0x18(%rsp),%rbx
test   %rbx,%rbx
jne    1482 <tparam1+0x332>
test   %ebp,%ebp
mov    $0x80,%eax
cmove  %eax,%ebp
mov    %r13,%rbx
mov    %bpl,0x0(%r13)
add    $0x1,%rbx
mov    %r12,%r8
mov    0x10(%rsp),%rdi
addq   $0x4,(%rsp)
jmp    11c0 <tparam1+0x70>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%r14d
mov    %rbx,%rdi
call   1030 <strlen@plt>
sub    %rax,%r15
add    $0x1,%ebp
cmp    $0xa,%ebp
ja     143f <tparam1+0x2ef>
mov    $0x601,%eax
bt     %ebp,%eax
jae    143f <tparam1+0x2ef>
mov    0x30(%rsp),%rax
cmp    %rax,(%rsp)
jne    1470 <tparam1+0x320>
addl   $0x1,0xc(%rsp)
mov    0x28(%rsp),%rdi
jmp    1477 <tparam1+0x327>
movzbl 0x4(%r13),%ecx
and    $0x7f,%ecx
cmpb   $0x70,0x3(%r13)
jne    14c2 <tparam1+0x372>
mov    (%rsp),%rax
mov    -0x100(%rax,%rcx,4),%ecx
mov    (%rdi),%al
add    $0xd6,%al
cmp    $0x5,%al
ja     14f3 <tparam1+0x3a3>
movzbl %al,%eax
lea    0xc64(%rip),%rdx
movslq (%rdx,%rax,4),%rax
add    %rdx,%rax
jmp    *%rax
imul   %ebp,%ecx
jmp    14f3 <tparam1+0x3a3>
add    %ebp,%ecx
jmp    14f3 <tparam1+0x3a3>
sub    %ecx,%ebp
mov    %ebp,%ecx
jmp    14f3 <tparam1+0x3a3>
mov    %ebp,%eax
cltd
idiv   %ecx
mov    %eax,%ecx
mov    (%rsp),%rax
mov    %ecx,(%rax)
add    $0x5,%r13
mov    %r13,%rdi
jmp    11c0 <tparam1+0x70>
mov    %r8,%r15
movb   $0x0,(%rbx)
mov    0xc(%rsp),%ebp
test   %ebp,%ebp
mov    0x28(%rsp),%r12
jle    1533 <tparam1+0x3e3>
add    $0x1,%ebp
nopl   0x0(%rax,%rax,1)
mov    %rbx,%rdi
mov    %r12,%rsi
call   1070 <strcat@plt>
add    $0xffffffff,%ebp
cmp    $0x1,%ebp
ja     1520 <tparam1+0x3d0>
test   %r14d,%r14d
mov    0x18(%rsp),%rbp
jle    1565 <tparam1+0x415>
add    $0x1,%r14d
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %rbx,%rdi
mov    %rbp,%rsi
call   1070 <strcat@plt>
add    $0xffffffff,%r14d
cmp    $0x1,%r14d
ja     1550 <tparam1+0x400>
mov    %r15,%rax
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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