char *tgoto(CM, destcol, destline)
char *CM;
int destcol, destline;
{
  static char result[16];
  static char added[10];
  char *cp = CM;
  register char *dp = result;
  register int c;
  int oncol = 0;
  register int which = destline;
  added[0] = 0;
  while ((c = *cp++) != 0) {
    if (c != '%') {
      *dp++ = c;
      continue;
    }
    switch (c = *cp++) {
    case 'd':
      if (which < 10)
        goto one;
      if (which < 100)
        goto two;
    case '3':
      *dp++ = (which / 100) | '0';
      which %= 100;
    case '2':
    two:
      *dp++ = which / 10 | '0';
    one:
      *dp++ = which % 10 | '0';
    swap:
      oncol = 1 - oncol;
    setwhich:
      which = oncol ? destcol : destline;
      continue;
    case '+':
      which += *cp++;
    case '.':
      *dp++ = which;
      goto swap;
    case 'r':
      oncol = 1;
      goto setwhich;
    case 'i':
      destcol++;
      destline++;
      which++;
      continue;
    case '%':
      *dp++ = c;
      continue;
    default:
      return "OOPS";
    }
  }
  strcpy(dp, added);
  return result;
}


x86 assembly (clang, -O0):
<tgoto>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x20(%rbp)
lea    0x2f0f(%rip),%rax
mov    %rax,-0x28(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x34(%rbp)
movb   $0x0,0x2f07(%rip)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x2c(%rbp)
cmp    $0x0,%eax
je     131b <tgoto+0x20b>
cmpl   $0x25,-0x2c(%rbp)
je     118c <tgoto+0x7c>
mov    -0x2c(%rbp),%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
mov    %cl,(%rax)
jmp    1149 <tgoto+0x39>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x2c(%rbp)
add    $0xffffffdb,%eax
mov    %eax,%ecx
mov    %rcx,-0x40(%rbp)
sub    $0x4d,%eax
ja     130b <tgoto+0x1fb>
mov    -0x40(%rbp),%rax
lea    0xe42(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
cmpl   $0xa,-0x34(%rbp)
jge    11d6 <tgoto+0xc6>
jmp    123f <tgoto+0x12f>
cmpl   $0x64,-0x34(%rbp)
jge    11e5 <tgoto+0xd5>
jmp    121e <tgoto+0x10e>
jmp    11ea <tgoto+0xda>
mov    -0x34(%rbp),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
or     $0x30,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
mov    %cl,(%rax)
mov    -0x34(%rbp),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %edx,-0x34(%rbp)
jmp    121e <tgoto+0x10e>
mov    -0x34(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
or     $0x30,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
mov    %cl,(%rax)
mov    -0x34(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
or     $0x30,%edx
mov    %dl,%cl
mov    -0x28(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
mov    %cl,(%rax)
mov    $0x1,%eax
sub    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x0,-0x30(%rbp)
je     1280 <tgoto+0x170>
mov    -0x14(%rbp),%eax
mov    %eax,-0x44(%rbp)
jmp    1286 <tgoto+0x176>
mov    -0x18(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x34(%rbp)
jmp    1149 <tgoto+0x39>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
movsbl (%rax),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
mov    %cl,(%rax)
jmp    1260 <tgoto+0x150>
movl   $0x1,-0x30(%rbp)
jmp    126b <tgoto+0x15b>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1149 <tgoto+0x39>
mov    -0x2c(%rbp),%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
mov    %cl,(%rax)
jmp    1149 <tgoto+0x39>
lea    0xe26(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1336 <tgoto+0x226>
mov    -0x28(%rbp),%rdi
lea    0x2d2a(%rip),%rsi
call   1030 <strcpy@plt>
lea    0x2d0e(%rip),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<tgoto>:
push   %rbx
mov    %rdi,%r11
movb   $0x0,0x2f35(%rip)
xor    %r9d,%r9d
lea    0x2f1b(%rip),%rdi
lea    0xed4(%rip),%r8
mov    %edx,%r10d
mov    %r11,%rax
jmp    1146 <tgoto+0x36>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %bl,(%rdi)
add    $0x1,%rdi
movzbl (%rax),%ebx
cmp    $0x25,%bl
je     1160 <tgoto+0x50>
test   %bl,%bl
je     1270 <tgoto+0x160>
add    $0x1,%rax
jmp    1140 <tgoto+0x30>
nopl   0x0(%rax)
lea    0x2(%rax),%r11
movzbl 0x1(%rax),%ebx
movsbl %bl,%ecx
cmp    $0x25,%ecx
jne    1180 <tgoto+0x70>
mov    %r11,%rax
jmp    1140 <tgoto+0x30>
cs nopw 0x0(%rax,%rax,1)
nop
cmp    $0x63,%ecx
jg     11b0 <tgoto+0xa0>
add    $0xffffffd5,%ecx
cmp    $0x8,%ecx
ja     1285 <tgoto+0x175>
movslq (%r8,%rcx,4),%rcx
add    %r8,%rcx
jmp    *%rcx
movzbl 0x2(%rax),%ecx
add    $0x3,%rax
add    %ecx,%r10d
mov    %rax,%r11
mov    %r10b,(%rdi)
jmp    123d <tgoto+0x12d>
cmp    $0x72,%ecx
je     1253 <tgoto+0x143>
cmp    $0x69,%ecx
je     1261 <tgoto+0x151>
cmp    $0x64,%ecx
jne    1285 <tgoto+0x175>
cmp    $0xa,%r10d
jl     121b <tgoto+0x10b>
cmp    $0x64,%r10d
jb     11fc <tgoto+0xec>
movslq %r10d,%rax
imul   $0x51eb851f,%rax,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
sar    $0x25,%rax
add    %ecx,%eax
imul   $0x64,%eax,%ecx
or     $0x30,%al
mov    %al,(%rdi)
add    $0x1,%rdi
sub    %ecx,%r10d
movslq %r10d,%rax
imul   $0x66666667,%rax,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
shr    $0x22,%rax
add    %ecx,%eax
or     $0x30,%al
mov    %al,(%rdi)
add    $0x1,%rdi
movslq %r10d,%rax
imul   $0x66666667,%rax,%rcx
mov    %rcx,%rbx
shr    $0x3f,%rbx
shr    $0x22,%rcx
add    %ebx,%ecx
add    %ecx,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %ecx,%eax
or     $0x30,%al
mov    %al,(%rdi)
add    $0x1,%rdi
dec    %r9d
mov    %esi,%r10d
cmove  %edx,%r10d
neg    %r9d
jmp    112f <tgoto+0x1f>
mov    $0x1,%r9d
mov    %esi,%r10d
jmp    112f <tgoto+0x1f>
add    $0x1,%esi
add    $0x1,%edx
add    $0x1,%r10d
jmp    112f <tgoto+0x1f>
lea    0x2dd9(%rip),%rsi
call   1030 <strcpy@plt>
lea    0x2dbd(%rip),%rax
pop    %rbx
ret
lea    0xd98(%rip),%rax
pop    %rbx
ret

LLVM IR (-O0):
@tgoto.result = internal global [16 x i8] zeroinitializer
@tgoto.added = internal global [10 x i8] zeroinitializer
@.str = [5 x i8] c"OOPS\00"
define i8* @tgoto(i8* %0, i32 %1, i32 %2) {
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i32
%7 = alloca i32
%8 = alloca i8*
%9 = alloca i8*
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
store i8* %0, i8** %5
store i32 %1, i32* %6
store i32 %2, i32* %7
%13 = load i8*, i8** %5
store i8* %13, i8** %8
store i8* getelementptr inbounds ([16 x i8], [16 x i8]* @tgoto.result, i64 0, i64 0), i8** %9
store i32 0, i32* %11
%14 = load i32, i32* %7
store i32 %14, i32* %12
store i8 0, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @tgoto.added, i64 0, i64 0)
br label %15
15: ; preds = %99, %92, %77, %24, %3
%16 = load i8*, i8** %8
%17 = getelementptr inbounds i8, i8* %16, i32 1
store i8* %17, i8** %8
%18 = load i8, i8* %16
%19 = sext i8 %18 to i32
store i32 %19, i32* %10
%20 = icmp ne i32 %19, 0
br i1 %20, label %21, label %105
21: ; preds = %15
%22 = load i32, i32* %10
%23 = icmp ne i32 %22, 37
br i1 %23, label %24, label %29
24: ; preds = %21
%25 = load i32, i32* %10
%26 = trunc i32 %25 to i8
%27 = load i8*, i8** %9
%28 = getelementptr inbounds i8, i8* %27, i32 1
store i8* %28, i8** %9
store i8 %26, i8* %27
br label %15
29: ; preds = %21
%30 = load i8*, i8** %8
%31 = getelementptr inbounds i8, i8* %30, i32 1
store i8* %31, i8** %8
%32 = load i8, i8* %30
%33 = sext i8 %32 to i32
store i32 %33, i32* %10
switch i32 %33, label %104 [
i32 100, label %34
i32 51, label %43
i32 50, label %52
i32 43, label %79
i32 46, label %86
i32 114, label %91
i32 105, label %92
i32 37, label %99
]
34: ; preds = %29
%35 = load i32, i32* %12
%36 = icmp slt i32 %35, 10
br i1 %36, label %37, label %38
37: ; preds = %34
br label %60
38: ; preds = %34
%39 = load i32, i32* %12
%40 = icmp slt i32 %39, 100
br i1 %40, label %41, label %42
41: ; preds = %38
br label %53
42: ; preds = %38
br label %43
43: ; preds = %29, %42
%44 = load i32, i32* %12
%45 = sdiv i32 %44, 100
%46 = or i32 %45, 48
%47 = trunc i32 %46 to i8
%48 = load i8*, i8** %9
%49 = getelementptr inbounds i8, i8* %48, i32 1
store i8* %49, i8** %9
store i8 %47, i8* %48
%50 = load i32, i32* %12
%51 = srem i32 %50, 100
store i32 %51, i32* %12
br label %52
52: ; preds = %29, %43
br label %53
53: ; preds = %52, %41
%54 = load i32, i32* %12
%55 = sdiv i32 %54, 10
%56 = or i32 %55, 48
%57 = trunc i32 %56 to i8
%58 = load i8*, i8** %9
%59 = getelementptr inbounds i8, i8* %58, i32 1
store i8* %59, i8** %9
store i8 %57, i8* %58
br label %60
60: ; preds = %53, %37
%61 = load i32, i32* %12
%62 = srem i32 %61, 10
%63 = or i32 %62, 48
%64 = trunc i32 %63 to i8
%65 = load i8*, i8** %9
%66 = getelementptr inbounds i8, i8* %65, i32 1
store i8* %66, i8** %9
store i8 %64, i8* %65
br label %67
67: ; preds = %86, %60
%68 = load i32, i32* %11
%69 = sub nsw i32 1, %68
store i32 %69, i32* %11
br label %70
70: ; preds = %91, %67
%71 = load i32, i32* %11
%72 = icmp ne i32 %71, 0
br i1 %72, label %73, label %75
73: ; preds = %70
%74 = load i32, i32* %6
br label %77
75: ; preds = %70
%76 = load i32, i32* %7
br label %77
77: ; preds = %75, %73
%78 = phi i32 [ %74, %73 ], [ %76, %75 ]
store i32 %78, i32* %12
br label %15
79: ; preds = %29
%80 = load i8*, i8** %8
%81 = getelementptr inbounds i8, i8* %80, i32 1
store i8* %81, i8** %8
%82 = load i8, i8* %80
%83 = sext i8 %82 to i32
%84 = load i32, i32* %12
%85 = add nsw i32 %84, %83
store i32 %85, i32* %12
br label %86
86: ; preds = %29, %79
%87 = load i32, i32* %12
%88 = trunc i32 %87 to i8
%89 = load i8*, i8** %9
%90 = getelementptr inbounds i8, i8* %89, i32 1
store i8* %90, i8** %9
store i8 %88, i8* %89
br label %67
91: ; preds = %29
store i32 1, i32* %11
br label %70
92: ; preds = %29
%93 = load i32, i32* %6
%94 = add nsw i32 %93, 1
store i32 %94, i32* %6
%95 = load i32, i32* %7
%96 = add nsw i32 %95, 1
store i32 %96, i32* %7
%97 = load i32, i32* %12
%98 = add nsw i32 %97, 1
store i32 %98, i32* %12
br label %15
99: ; preds = %29
%100 = load i32, i32* %10
%101 = trunc i32 %100 to i8
%102 = load i8*, i8** %9
%103 = getelementptr inbounds i8, i8* %102, i32 1
store i8* %103, i8** %9
store i8 %101, i8* %102
br label %15
104: ; preds = %29
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), i8** %4
br label %108
105: ; preds = %15
%106 = load i8*, i8** %9
%107 = call i8* @strcpy(i8* %106, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @tgoto.added, i64 0, i64 0))
store i8* getelementptr inbounds ([16 x i8], [16 x i8]* @tgoto.result, i64 0, i64 0), i8** %4
br label %108
108: ; preds = %105, %104
%109 = load i8*, i8** %4
ret i8* %109
}

LLVM IR (-O2):
@tgoto.result = internal global [16 x i8] zeroinitializer
@tgoto.added = internal global [10 x i8] zeroinitializer
@.str = [5 x i8] c"OOPS\00"
define i8* @tgoto(i8* nocapture %0, i32 %1, i32 %2) {
store i8 0, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @tgoto.added, i64 0, i64 0)
br label %4
4: ; preds = %73, %3
%5 = phi i32 [ %74, %73 ], [ %1, %3 ]
%6 = phi i32 [ %75, %73 ], [ %2, %3 ]
%7 = phi i8* [ %26, %73 ], [ %0, %3 ]
%8 = phi i8* [ %18, %73 ], [ getelementptr inbounds ([16 x i8], [16 x i8]* @tgoto.result, i64 0, i64 0), %3 ]
%9 = phi i32 [ %14, %73 ], [ 0, %3 ]
%10 = phi i32 [ %76, %73 ], [ %2, %3 ]
br label %11
11: ; preds = %59, %4
%12 = phi i8* [ %7, %4 ], [ %60, %59 ]
%13 = phi i8* [ %8, %4 ], [ %61, %59 ]
%14 = phi i32 [ %9, %4 ], [ %62, %59 ]
%15 = phi i32 [ %10, %4 ], [ %63, %59 ]
br label %16
16: ; preds = %21, %11
%17 = phi i8* [ %12, %11 ], [ %23, %21 ]
%18 = phi i8* [ %13, %11 ], [ %24, %21 ]
%19 = getelementptr inbounds i8, i8* %17, i64 1
%20 = load i8, i8* %17
switch i8 %20, label %21 [
i8 0, label %77
i8 37, label %25
]
21: ; preds = %25, %16
%22 = phi i8 [ %20, %16 ], [ %27, %25 ]
%23 = phi i8* [ %19, %16 ], [ %26, %25 ]
%24 = getelementptr inbounds i8, i8* %18, i64 1
store i8 %22, i8* %18
br label %16
25: ; preds = %16
%26 = getelementptr inbounds i8, i8* %17, i64 2
%27 = load i8, i8* %19
%28 = sext i8 %27 to i32
switch i32 %28, label %79 [
i32 100, label %29
i32 51, label %33
i32 50, label %39
i32 43, label %64
i32 46, label %69
i32 114, label %59
i32 105, label %73
i32 37, label %21
]
29: ; preds = %25
%30 = icmp slt i32 %15, 10
br i1 %30, label %46, label %31
31: ; preds = %29
%32 = icmp ult i32 %15, 100
br i1 %32, label %39, label %33
33: ; preds = %25, %31
%34 = sdiv i32 %15, 100
%35 = trunc i32 %34 to i8
%36 = or i8 %35, 48
%37 = getelementptr inbounds i8, i8* %18, i64 1
store i8 %36, i8* %18
%38 = srem i32 %15, 100
br label %39
39: ; preds = %25, %33, %31
%40 = phi i8* [ %37, %33 ], [ %18, %31 ], [ %18, %25 ]
%41 = phi i32 [ %38, %33 ], [ %15, %31 ], [ %15, %25 ]
%42 = sdiv i32 %41, 10
%43 = trunc i32 %42 to i8
%44 = or i8 %43, 48
%45 = getelementptr inbounds i8, i8* %40, i64 1
store i8 %44, i8* %40
br label %46
46: ; preds = %29, %39
%47 = phi i8* [ %45, %39 ], [ %18, %29 ]
%48 = phi i32 [ %41, %39 ], [ %15, %29 ]
%49 = srem i32 %48, 10
%50 = trunc i32 %49 to i8
%51 = or i8 %50, 48
store i8 %51, i8* %47
br label %52
52: ; preds = %46, %69
%53 = phi i8* [ %70, %69 ], [ %26, %46 ]
%54 = phi i8* [ %18, %69 ], [ %47, %46 ]
%55 = getelementptr inbounds i8, i8* %54, i64 1
%56 = sub i32 1, %14
%57 = icmp eq i32 %14, 1
%58 = select i1 %57, i32 %6, i32 %5
br label %59
59: ; preds = %25, %52
%60 = phi i8* [ %53, %52 ], [ %26, %25 ]
%61 = phi i8* [ %55, %52 ], [ %18, %25 ]
%62 = phi i32 [ %56, %52 ], [ 1, %25 ]
%63 = phi i32 [ %58, %52 ], [ %5, %25 ]
br label %11
64: ; preds = %25
%65 = getelementptr inbounds i8, i8* %17, i64 3
%66 = load i8, i8* %26
%67 = zext i8 %66 to i32
%68 = add i32 %15, %67
br label %69
69: ; preds = %25, %64
%70 = phi i8* [ %65, %64 ], [ %26, %25 ]
%71 = phi i32 [ %68, %64 ], [ %15, %25 ]
%72 = trunc i32 %71 to i8
store i8 %72, i8* %18
br label %52
73: ; preds = %25
%74 = add nsw i32 %5, 1
%75 = add nsw i32 %6, 1
%76 = add nsw i32 %15, 1
br label %4
77: ; preds = %16
%78 = tail call i8* @strcpy(i8* dereferenceable(1) %18, i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @tgoto.added, i64 0, i64 0))
br label %79
79: ; preds = %25, %77
%80 = phi i8* [ getelementptr inbounds ([16 x i8], [16 x i8]* @tgoto.result, i64 0, i64 0), %77 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), %25 ]
ret i8* %80
}