void handle_csi(int cmd, int argn, int *args) {
  int a;
  int i, j;
  if (cmd != 'm')
    return;
  for (i = 0; i < argn; i++) {
    switch (a = args[i]) {
    case 0:
      ansi_reset();
      break;
    case 1 ... 9:
      ansi_set(a - 1);
      break;
    case 21 ... 29:
      ansi_clr(a - 21);
      break;
    case 30 ... 37:
      ansi_fg(a - 30);
      break;
    case 39:
      ansi_fg(-2);
      break;
    case 40 ... 47:
      ansi_bg(a - 40);
      break;
    case 49:
      ansi_bg(-2);
      break;
    case 90 ... 99:
      ansi_fg(a - 90 + 8);
      break;
    case 100 ... 109:
      ansi_bg(a - 100 + 8);
      break;
    case 48:
    case 38:
      if ((j = i + 2) >= argn || args[i + 1] != 5)
        break;
      (a == 38 ? ansi_fg : ansi_bg)(args[j]);
      i = j;
    }
  }
}


x86 assembly (clang, -O0):
<handle_csi>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
cmpl   $0x6d,-0x4(%rbp)
je     1161 <handle_csi+0x21>
jmp    12b6 <handle_csi+0x176>
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    12b6 <handle_csi+0x176>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,%ecx
mov    %rcx,-0x28(%rbp)
mov    %ecx,%eax
sub    $0x6d,%rcx
mov    %eax,-0x14(%rbp)
ja     12a3 <handle_csi+0x163>
mov    -0x28(%rbp),%rax
lea    0xe61(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    $0x0,%al
call   1030 <ansi_reset@plt>
jmp    12a3 <handle_csi+0x163>
mov    -0x14(%rbp),%edi
sub    $0x1,%edi
mov    $0x0,%al
call   1040 <ansi_set@plt>
jmp    12a3 <handle_csi+0x163>
mov    -0x14(%rbp),%edi
sub    $0x15,%edi
mov    $0x0,%al
call   1050 <ansi_clr@plt>
jmp    12a3 <handle_csi+0x163>
mov    -0x14(%rbp),%edi
sub    $0x1e,%edi
mov    $0x0,%al
call   1068 <ansi_fg@plt>
jmp    12a3 <handle_csi+0x163>
mov    $0xfffffffe,%edi
mov    $0x0,%al
call   1068 <ansi_fg@plt>
jmp    12a3 <handle_csi+0x163>
mov    -0x14(%rbp),%edi
sub    $0x28,%edi
mov    $0x0,%al
call   1060 <ansi_bg@plt>
jmp    12a3 <handle_csi+0x163>
mov    $0xfffffffe,%edi
mov    $0x0,%al
call   1060 <ansi_bg@plt>
jmp    12a3 <handle_csi+0x163>
mov    -0x14(%rbp),%edi
sub    $0x5a,%edi
add    $0x8,%edi
mov    $0x0,%al
call   1068 <ansi_fg@plt>
jmp    12a3 <handle_csi+0x163>
mov    -0x14(%rbp),%edi
sub    $0x64,%edi
add    $0x8,%edi
mov    $0x0,%al
call   1060 <ansi_bg@plt>
jmp    12a3 <handle_csi+0x163>
mov    -0x18(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x1c(%rbp)
cmp    -0x8(%rbp),%eax
jge    1271 <handle_csi+0x131>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
cmpl   $0x5,(%rax,%rcx,4)
je     1276 <handle_csi+0x136>
jmp    12a3 <handle_csi+0x163>
mov    -0x14(%rbp),%edx
mov    0x2d58(%rip),%rcx
mov    0x2d61(%rip),%rax
cmp    $0x26,%edx
cmove  %rax,%rcx
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rdx
mov    (%rax,%rdx,4),%edi
mov    $0x0,%al
call   *%rcx
mov    -0x1c(%rbp),%eax
mov    %eax,-0x18(%rbp)
jmp    12a8 <handle_csi+0x168>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1168 <handle_csi+0x28>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<handle_csi>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
cmp    $0x6d,%edi
jne    121e <handle_csi+0xde>
mov    %esi,%ebp
test   %esi,%esi
jle    121e <handle_csi+0xde>
mov    %rdx,%r13
lea    0xe98(%rip),%r14
mov    0x2e69(%rip),%r15
xor    %ebx,%ebx
jmp    118b <handle_csi+0x4b>
lea    -0x15(%rax),%edi
xor    %eax,%eax
call   1050 <ansi_clr@plt>
nopl   (%rax)
add    $0x1,%ebx
cmp    %ebp,%ebx
jge    121e <handle_csi+0xde>
movslq %ebx,%rcx
mov    0x0(%r13,%rcx,4),%eax
cmp    $0x6d,%rax
ja     1180 <handle_csi+0x40>
movslq (%r14,%rax,4),%rdx
add    %r14,%rdx
jmp    *%rdx
lea    -0x52(%rax),%edi
jmp    11bb <handle_csi+0x7b>
lea    -0x5c(%rax),%edi
jmp    11c7 <handle_csi+0x87>
lea    -0x1(%rax),%edi
xor    %eax,%eax
call   1040 <ansi_set@plt>
jmp    1180 <handle_csi+0x40>
lea    -0x1e(%rax),%edi
xor    %eax,%eax
call   1068 <ansi_fg@plt>
jmp    1180 <handle_csi+0x40>
lea    -0x28(%rax),%edi
xor    %eax,%eax
call   1060 <ansi_bg@plt>
jmp    1180 <handle_csi+0x40>
lea    0x2(%rbx),%r12d
cmp    %ebp,%r12d
jge    1180 <handle_csi+0x40>
cmpl   $0x5,0x4(%r13,%rcx,4)
jne    1180 <handle_csi+0x40>
mov    %r15,%rcx
cmp    $0x26,%eax
jne    11f0 <handle_csi+0xb0>
mov    0x2df8(%rip),%rcx
movslq %r12d,%rax
mov    0x0(%r13,%rax,4),%edi
xor    %eax,%eax
call   *%rcx
mov    %r12d,%ebx
jmp    1180 <handle_csi+0x40>
xor    %eax,%eax
call   1030 <ansi_reset@plt>
jmp    1180 <handle_csi+0x40>
mov    $0xfffffffe,%edi
jmp    11bb <handle_csi+0x7b>
mov    $0xfffffffe,%edi
jmp    11c7 <handle_csi+0x87>
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @handle_csi(i32 %0, i32 %1, i32* nocapture %2) {
%4 = icmp eq i32 %0, 109
%5 = icmp sgt i32 %1, 0
%6 = and i1 %4, %5
br i1 %6, label %7, label %56
7: ; preds = %3, %52
%8 = phi i32 [ %54, %52 ], [ 0, %3 ]
%9 = sext i32 %8 to i64
%10 = getelementptr inbounds i32, i32* %2, i64 %9
%11 = load i32, i32* %10
switch i32 %11, label %52 [
i32 0, label %12
i32 1, label %14
i32 2, label %14
i32 3, label %14
i32 4, label %14
i32 5, label %14
i32 6, label %14
i32 7, label %14
i32 8, label %14
i32 9, label %14
i32 21, label %17
i32 22, label %17
i32 23, label %17
i32 24, label %17
i32 25, label %17
i32 26, label %17
i32 27, label %17
i32 28, label %17
i32 29, label %17
i32 30, label %20
i32 31, label %20
i32 32, label %20
i32 33, label %20
i32 34, label %20
i32 35, label %20
i32 36, label %20
i32 37, label %20
i32 39, label %23
i32 40, label %25
i32 41, label %25
i32 42, label %25
i32 43, label %25
i32 44, label %25
i32 45, label %25
i32 46, label %25
i32 47, label %25
i32 49, label %28
i32 90, label %30
i32 91, label %30
i32 92, label %30
i32 93, label %30
i32 94, label %30
i32 95, label %30
i32 96, label %30
i32 97, label %30
i32 98, label %30
i32 99, label %30
i32 100, label %33
i32 101, label %33
i32 102, label %33
i32 103, label %33
i32 104, label %33
i32 105, label %33
i32 106, label %33
i32 107, label %33
i32 108, label %33
i32 109, label %33
i32 48, label %36
i32 38, label %36
]
12: ; preds = %7
%13 = tail call i32 (...) @ansi_reset()
br label %52
14: ; preds = %7, %7, %7, %7, %7, %7, %7, %7, %7
%15 = add nsw i32 %11, -1
%16 = tail call i32 (i32, ...) bitcast (i32 (...)* @ansi_set to i32 (i32, ...)*)(i32 %15)
br label %52
17: ; preds = %7, %7, %7, %7, %7, %7, %7, %7, %7
%18 = add nsw i32 %11, -21
%19 = tail call i32 (i32, ...) bitcast (i32 (...)* @ansi_clr to i32 (i32, ...)*)(i32 %18)
br label %52
20: ; preds = %7, %7, %7, %7, %7, %7, %7, %7
%21 = add nsw i32 %11, -30
%22 = tail call i32 (i32, ...) bitcast (i32 (...)* @ansi_fg to i32 (i32, ...)*)(i32 %21)
br label %52
23: ; preds = %7
%24 = tail call i32 (i32, ...) bitcast (i32 (...)* @ansi_fg to i32 (i32, ...)*)(i32 -2)
br label %52
25: ; preds = %7, %7, %7, %7, %7, %7, %7, %7
%26 = add nsw i32 %11, -40
%27 = tail call i32 (i32, ...) bitcast (i32 (...)* @ansi_bg to i32 (i32, ...)*)(i32 %26)
br label %52
28: ; preds = %7
%29 = tail call i32 (i32, ...) bitcast (i32 (...)* @ansi_bg to i32 (i32, ...)*)(i32 -2)
br label %52
30: ; preds = %7, %7, %7, %7, %7, %7, %7, %7, %7, %7
%31 = add nsw i32 %11, -82
%32 = tail call i32 (i32, ...) bitcast (i32 (...)* @ansi_fg to i32 (i32, ...)*)(i32 %31)
br label %52
33: ; preds = %7, %7, %7, %7, %7, %7, %7, %7, %7, %7
%34 = add nsw i32 %11, -92
%35 = tail call i32 (i32, ...) bitcast (i32 (...)* @ansi_bg to i32 (i32, ...)*)(i32 %34)
br label %52
36: ; preds = %7, %7
%37 = add nsw i32 %8, 2
%38 = icmp slt i32 %37, %1
br i1 %38, label %39, label %52
39: ; preds = %36
%40 = add nsw i32 %8, 1
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds i32, i32* %2, i64 %41
%43 = load i32, i32* %42
%44 = icmp eq i32 %43, 5
br i1 %44, label %45, label %52
45: ; preds = %39
%46 = icmp eq i32 %11, 38
%47 = sext i32 %37 to i64
%48 = getelementptr inbounds i32, i32* %2, i64 %47
%49 = load i32, i32* %48
%50 = select i1 %46, i32 (i32, ...)* bitcast (i32 (...)* @ansi_fg to i32 (i32, ...)*), i32 (i32, ...)* bitcast (i32 (...)* @ansi_bg to i32 (i32, ...)*)
%51 = tail call i32 (i32, ...) %50(i32 %49)
br label %52
52: ; preds = %12, %14, %17, %20, %23, %25, %28, %30, %33, %7, %45, %39, %36
%53 = phi i32 [ %8, %7 ], [ %8, %36 ], [ %8, %39 ], [ %37, %45 ], [ %8, %33 ], [ %8, %30 ], [ %8, %28 ], [ %8, %25 ], [ %8, %23 ], [ %8, %20 ], [ %8, %17 ], [ %8, %14 ], [ %8, %12 ]
%54 = add nsw i32 %53, 1
%55 = icmp slt i32 %54, %1
br i1 %55, label %7, label %56
56: ; preds = %52, %3
ret void
}