const char *EquString(int EquVal) {
  int bFrom = EquVal & (0x0001 | 0x0002 | 0x0004 | 0x0008);
  int bType = EquVal & (0x0010 | 0x0020);
  int bEq2 = EquVal & (0x0040 | 0x0080 | 0x0100);
  const char *r = "";
  switch (bFrom) {
  case 0x0001:
    switch (bType) {
    case 0x0010:
      switch (bEq2) {
      case 0:
        r = "m";
        break;
      default:
        r = "??";
        break;
      }
      break;
    case 0x0020:
      switch (bEq2) {
      case 0:
        r = "m";
        break;
      default:
        r = "??";
        break;
      }
      break;
    case (0x0020 | 0x0010):
      switch (bEq2) {
      case 0:
        r = "m";
        break;
      case 0x0080:
        r = "M";
        break;
      case 0x0040:
        r = "n";
        break;
      default:
        r = "??";
        break;
      }
      break;
    default:
      r = "??";
      break;
    }
    break;
  case 0x0002:
    if (bEq2 & 0x0100) {
      bEq2 &= ~0x0100;
      switch (bType) {
      case 0:
        switch (bEq2) {
        case 0:
          r = "im";
          break;
        case 0x0080:
          r = "iM";
          break;
        case 0x0040:
          r = "in";
          break;
        case (0x0040 | 0x0080):
          r = "iN";
          break;
        default:
          r = "??";
          break;
        }
        break;
      case 0x0010:
        switch (bEq2) {
        case 0:
          r = "im";
          break;
        case 0x0080:
          r = "iM";
          break;
        case 0x0040:
          r = "in";
          break;
        case (0x0040 | 0x0080):
          r = "iN";
          break;
        default:
          r = "??";
          break;
        }
        break;
      case 0x0020:
        switch (bEq2) {
        case 0:
          r = "im";
          break;
        case 0x0080:
          r = "iM";
          break;
        case 0x0040:
          r = "in";
          break;
        case (0x0040 | 0x0080):
          r = "iN";
          break;
        default:
          r = "??";
          break;
        }
        break;
      case (0x0020 | 0x0010):
        switch (bEq2) {
        case 0:
          r = "im";
          break;
        case 0x0080:
          r = "iM";
          break;
        case 0x0040:
          r = "in";
          break;
        case (0x0040 | 0x0080):
          r = "iN";
          break;
        default:
          r = "??";
        }
        break;
      default:
        r = "??";
        break;
      }
    } else {
      switch (bType) {
      case 0x0010:
        switch (bEq2) {
        case 0:
          r = "m";
          break;
        default:
          r = "??";
          break;
        }
        break;
      case 0x0020:
        switch (bEq2) {
        case 0:
          r = "m";
          break;
        default:
          r = "??";
          break;
        }
        break;
      case (0x0020 | 0x0010):
        switch (bEq2) {
        case 0:
          r = "m";
          break;
        case 0x0080:
          r = "M";
          break;
        case 0x0040:
          r = "n";
          break;
        default:
          r = "??";
          break;
        }
        break;
      default:
        r = "??";
        break;
      }
    }
    break;
  case (0x0004 | 0x0002):
    switch (bType) {
    case 0:
      switch (bEq2) {
      case 0:
        r = "m";
        break;
      default:
        r = "??";
        break;
      }
      break;
    case 0x0010:
      switch (bEq2) {
      case 0:
        r = "m";
        break;
      case 0x0100:
        r = "im";
        break;
      case 0x0080:
        r = "M";
        break;
      default:
        r = "??";
        break;
      }
      break;
    case 0x0020:
      switch (bEq2) {
      case 0:
        r = "m";
        break;
      case 0x0040:
        r = "n";
        break;
      case 0x0100:
        r = "im";
        break;
      default:
        r = "??";
        break;
      }
      break;
    case (0x0020 | 0x0010):
      switch (bEq2) {
      case 0:
        r = "m";
        break;
      case 0x0080:
        r = "M";
        break;
      case (0x0080 | 0x0100):
        r = "iM";
        break;
      case 0x0040:
        r = "n";
        break;
      case (0x0040 | 0x0080):
        r = "N";
        break;
      case 0x0100:
        r = "im";
        break;
      case (0x0040 | 0x0100):
        r = "in";
        break;
      default:
        r = "??";
        break;
      }
      break;
    default:
      r = "??";
      break;
    }
    break;
  case 0x0004:
    switch (bType) {
    case 0:
      r = "??";
      break;
    case 0x0010:
      switch (bEq2) {
      case 0:
        r = "m";
        break;
      default:
        r = "??";
      }
      break;
    case 0x0020:
      switch (bEq2) {
      case 0:
        r = "m";
        break;
      default:
        r = "??";
      }
      break;
    case (0x0020 | 0x0010):
      switch (bEq2) {
      case 0:
        r = "m";
        break;
      case 0x0080:
        r = "M";
        break;
      case 0x0040:
        r = "n";
        break;
      default:
        r = "??";
        break;
      }
      break;
    default:
      r = "??";
      break;
    }
    break;
  case 0x0008:
    switch (bType) {
    case 0:
      r = "??";
      break;
    case 0x0010:
      switch (bEq2) {
      case 0:
        r = "m";
        break;
      default:
        r = "??";
        break;
      }
      break;
    case 0x0020:
      switch (bEq2) {
      case 0:
        r = "m";
        break;
      default:
        r = "??";
        break;
      }
      break;
    case (0x0020 | 0x0010):
      switch (bEq2) {
      case 0:
        r = "m";
        break;
      case 0x0080:
        r = "M";
        break;
      case 0x0040:
        r = "n";
        break;
      default:
        r = "??";
        break;
      }
      break;
    default:
      r = "??";
      break;
    }
    break;
  default:
    r = "??";
    break;
  }
  return r;
}


x86 assembly (clang, -O0):
<EquString>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    -0x4(%rbp),%eax
and    $0xf,%eax
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%eax
and    $0x30,%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
and    $0x1c0,%eax
mov    %eax,-0x10(%rbp)
lea    0xef7(%rip),%rax
mov    %rax,-0x18(%rbp)
mov    -0x8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x20(%rbp)
sub    $0x7,%eax
ja     1b61 <EquString+0xa61>
mov    -0x20(%rbp),%rax
lea    0xeb1(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0xc(%rbp),%eax
mov    %eax,-0x24(%rbp)
sub    $0x10,%eax
je     118e <EquString+0x8e>
jmp    116c <EquString+0x6c>
mov    -0x24(%rbp),%eax
sub    $0x20,%eax
je     11be <EquString+0xbe>
jmp    117d <EquString+0x7d>
mov    -0x24(%rbp),%eax
sub    $0x30,%eax
je     11ee <EquString+0xee>
jmp    1265 <EquString+0x165>
mov    -0x10(%rbp),%eax
test   %eax,%eax
jne    11ae <EquString+0xae>
jmp    119e <EquString+0x9e>
lea    0xe7f(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    11b9 <EquString+0xb9>
lea    0xe6b(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1270 <EquString+0x170>
mov    -0x10(%rbp),%eax
test   %eax,%eax
jne    11de <EquString+0xde>
jmp    11ce <EquString+0xce>
lea    0xe4f(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    11e9 <EquString+0xe9>
lea    0xe3b(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1270 <EquString+0x170>
mov    -0x10(%rbp),%eax
mov    %eax,-0x28(%rbp)
test   %eax,%eax
je     1225 <EquString+0x125>
jmp    1201 <EquString+0x101>
mov    -0x28(%rbp),%eax
sub    $0x40,%eax
je     1245 <EquString+0x145>
jmp    1212 <EquString+0x112>
mov    -0x28(%rbp),%eax
sub    $0x80,%eax
je     1235 <EquString+0x135>
jmp    1255 <EquString+0x155>
lea    0xdf8(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1260 <EquString+0x160>
lea    0xdeb(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1260 <EquString+0x160>
lea    0xdde(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1260 <EquString+0x160>
lea    0xdc4(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1270 <EquString+0x170>
lea    0xdb4(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1b6c <EquString+0xa6c>
mov    -0x10(%rbp),%eax
and    $0x100,%eax
cmp    $0x0,%eax
je     154c <EquString+0x44c>
mov    -0xf(%rbp),%al
and    $0xfe,%al
mov    %al,-0xf(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x2c(%rbp)
test   %eax,%eax
je     12d4 <EquString+0x1d4>
jmp    12a1 <EquString+0x1a1>
mov    -0x2c(%rbp),%eax
sub    $0x10,%eax
je     136e <EquString+0x26e>
jmp    12b2 <EquString+0x1b2>
mov    -0x2c(%rbp),%eax
sub    $0x20,%eax
je     1408 <EquString+0x308>
jmp    12c3 <EquString+0x1c3>
mov    -0x2c(%rbp),%eax
sub    $0x30,%eax
je     14a2 <EquString+0x3a2>
jmp    153c <EquString+0x43c>
mov    -0x10(%rbp),%eax
mov    %eax,-0x30(%rbp)
test   %eax,%eax
je     131e <EquString+0x21e>
jmp    12e7 <EquString+0x1e7>
mov    -0x30(%rbp),%eax
sub    $0x40,%eax
je     133e <EquString+0x23e>
jmp    12f8 <EquString+0x1f8>
mov    -0x30(%rbp),%eax
sub    $0x80,%eax
je     132e <EquString+0x22e>
jmp    130b <EquString+0x20b>
mov    -0x30(%rbp),%eax
sub    $0xc0,%eax
je     134e <EquString+0x24e>
jmp    135e <EquString+0x25e>
lea    0xcfe(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1369 <EquString+0x269>
lea    0xcf1(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1369 <EquString+0x269>
lea    0xce4(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1369 <EquString+0x269>
lea    0xcd7(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1369 <EquString+0x269>
lea    0xcbb(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1547 <EquString+0x447>
mov    -0x10(%rbp),%eax
mov    %eax,-0x34(%rbp)
test   %eax,%eax
je     13b8 <EquString+0x2b8>
jmp    1381 <EquString+0x281>
mov    -0x34(%rbp),%eax
sub    $0x40,%eax
je     13d8 <EquString+0x2d8>
jmp    1392 <EquString+0x292>
mov    -0x34(%rbp),%eax
sub    $0x80,%eax
je     13c8 <EquString+0x2c8>
jmp    13a5 <EquString+0x2a5>
mov    -0x34(%rbp),%eax
sub    $0xc0,%eax
je     13e8 <EquString+0x2e8>
jmp    13f8 <EquString+0x2f8>
lea    0xc64(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1403 <EquString+0x303>
lea    0xc57(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1403 <EquString+0x303>
lea    0xc4a(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1403 <EquString+0x303>
lea    0xc3d(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1403 <EquString+0x303>
lea    0xc21(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1547 <EquString+0x447>
mov    -0x10(%rbp),%eax
mov    %eax,-0x38(%rbp)
test   %eax,%eax
je     1452 <EquString+0x352>
jmp    141b <EquString+0x31b>
mov    -0x38(%rbp),%eax
sub    $0x40,%eax
je     1472 <EquString+0x372>
jmp    142c <EquString+0x32c>
mov    -0x38(%rbp),%eax
sub    $0x80,%eax
je     1462 <EquString+0x362>
jmp    143f <EquString+0x33f>
mov    -0x38(%rbp),%eax
sub    $0xc0,%eax
je     1482 <EquString+0x382>
jmp    1492 <EquString+0x392>
lea    0xbca(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    149d <EquString+0x39d>
lea    0xbbd(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    149d <EquString+0x39d>
lea    0xbb0(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    149d <EquString+0x39d>
lea    0xba3(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    149d <EquString+0x39d>
lea    0xb87(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1547 <EquString+0x447>
mov    -0x10(%rbp),%eax
mov    %eax,-0x3c(%rbp)
test   %eax,%eax
je     14ec <EquString+0x3ec>
jmp    14b5 <EquString+0x3b5>
mov    -0x3c(%rbp),%eax
sub    $0x40,%eax
je     150c <EquString+0x40c>
jmp    14c6 <EquString+0x3c6>
mov    -0x3c(%rbp),%eax
sub    $0x80,%eax
je     14fc <EquString+0x3fc>
jmp    14d9 <EquString+0x3d9>
mov    -0x3c(%rbp),%eax
sub    $0xc0,%eax
je     151c <EquString+0x41c>
jmp    152c <EquString+0x42c>
lea    0xb30(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1537 <EquString+0x437>
lea    0xb23(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1537 <EquString+0x437>
lea    0xb16(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1537 <EquString+0x437>
lea    0xb09(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1537 <EquString+0x437>
lea    0xaed(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1547 <EquString+0x447>
lea    0xadd(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1669 <EquString+0x569>
mov    -0xc(%rbp),%eax
mov    %eax,-0x40(%rbp)
sub    $0x10,%eax
je     1582 <EquString+0x482>
jmp    1560 <EquString+0x460>
mov    -0x40(%rbp),%eax
sub    $0x20,%eax
je     15b2 <EquString+0x4b2>
jmp    1571 <EquString+0x471>
mov    -0x40(%rbp),%eax
sub    $0x30,%eax
je     15e2 <EquString+0x4e2>
jmp    1659 <EquString+0x559>
mov    -0x10(%rbp),%eax
test   %eax,%eax
jne    15a2 <EquString+0x4a2>
jmp    1592 <EquString+0x492>
lea    0xa8b(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    15ad <EquString+0x4ad>
lea    0xa77(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1664 <EquString+0x564>
mov    -0x10(%rbp),%eax
test   %eax,%eax
jne    15d2 <EquString+0x4d2>
jmp    15c2 <EquString+0x4c2>
lea    0xa5b(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    15dd <EquString+0x4dd>
lea    0xa47(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1664 <EquString+0x564>
mov    -0x10(%rbp),%eax
mov    %eax,-0x44(%rbp)
test   %eax,%eax
je     1619 <EquString+0x519>
jmp    15f5 <EquString+0x4f5>
mov    -0x44(%rbp),%eax
sub    $0x40,%eax
je     1639 <EquString+0x539>
jmp    1606 <EquString+0x506>
mov    -0x44(%rbp),%eax
sub    $0x80,%eax
je     1629 <EquString+0x529>
jmp    1649 <EquString+0x549>
lea    0xa04(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1654 <EquString+0x554>
lea    0x9f7(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1654 <EquString+0x554>
lea    0x9ea(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1654 <EquString+0x554>
lea    0x9d0(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1664 <EquString+0x564>
lea    0x9c0(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1669 <EquString+0x569>
jmp    1b6c <EquString+0xa6c>
mov    -0xc(%rbp),%eax
mov    %eax,-0x48(%rbp)
test   %eax,%eax
je     16b4 <EquString+0x5b4>
jmp    1681 <EquString+0x581>
mov    -0x48(%rbp),%eax
sub    $0x10,%eax
je     16e4 <EquString+0x5e4>
jmp    1692 <EquString+0x592>
mov    -0x48(%rbp),%eax
sub    $0x20,%eax
je     175d <EquString+0x65d>
jmp    16a3 <EquString+0x5a3>
mov    -0x48(%rbp),%eax
sub    $0x30,%eax
je     17d4 <EquString+0x6d4>
jmp    18d7 <EquString+0x7d7>
mov    -0x10(%rbp),%eax
test   %eax,%eax
jne    16d4 <EquString+0x5d4>
jmp    16c4 <EquString+0x5c4>
lea    0x959(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    16df <EquString+0x5df>
lea    0x945(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    18e2 <EquString+0x7e2>
mov    -0x10(%rbp),%eax
mov    %eax,-0x4c(%rbp)
test   %eax,%eax
je     171d <EquString+0x61d>
jmp    16f7 <EquString+0x5f7>
mov    -0x4c(%rbp),%eax
sub    $0x80,%eax
je     173d <EquString+0x63d>
jmp    170a <EquString+0x60a>
mov    -0x4c(%rbp),%eax
sub    $0x100,%eax
je     172d <EquString+0x62d>
jmp    174d <EquString+0x64d>
lea    0x900(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1758 <EquString+0x658>
lea    0x8ef(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1758 <EquString+0x658>
lea    0x8e3(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1758 <EquString+0x658>
lea    0x8cc(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    18e2 <EquString+0x7e2>
mov    -0x10(%rbp),%eax
mov    %eax,-0x50(%rbp)
test   %eax,%eax
je     1794 <EquString+0x694>
jmp    1770 <EquString+0x670>
mov    -0x50(%rbp),%eax
sub    $0x40,%eax
je     17a4 <EquString+0x6a4>
jmp    1781 <EquString+0x681>
mov    -0x50(%rbp),%eax
sub    $0x100,%eax
je     17b4 <EquString+0x6b4>
jmp    17c4 <EquString+0x6c4>
lea    0x889(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    17cf <EquString+0x6cf>
lea    0x87f(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    17cf <EquString+0x6cf>
lea    0x868(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    17cf <EquString+0x6cf>
lea    0x855(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    18e2 <EquString+0x7e2>
mov    -0x10(%rbp),%eax
mov    %eax,-0x54(%rbp)
test   %eax,%eax
je     1857 <EquString+0x757>
jmp    17e7 <EquString+0x6e7>
mov    -0x54(%rbp),%eax
sub    $0x40,%eax
je     1887 <EquString+0x787>
jmp    17f8 <EquString+0x6f8>
mov    -0x54(%rbp),%eax
sub    $0x80,%eax
je     1867 <EquString+0x767>
jmp    180b <EquString+0x70b>
mov    -0x54(%rbp),%eax
sub    $0xc0,%eax
je     1897 <EquString+0x797>
jmp    181e <EquString+0x71e>
mov    -0x54(%rbp),%eax
sub    $0x100,%eax
je     18a7 <EquString+0x7a7>
jmp    1831 <EquString+0x731>
mov    -0x54(%rbp),%eax
sub    $0x140,%eax
je     18b7 <EquString+0x7b7>
jmp    1844 <EquString+0x744>
mov    -0x54(%rbp),%eax
sub    $0x180,%eax
je     1877 <EquString+0x777>
jmp    18c7 <EquString+0x7c7>
lea    0x7c6(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    18d2 <EquString+0x7d2>
lea    0x7b9(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    18d2 <EquString+0x7d2>
lea    0x7a8(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    18d2 <EquString+0x7d2>
lea    0x79c(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    18d2 <EquString+0x7d2>
lea    0x78f(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    18d2 <EquString+0x7d2>
lea    0x775(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    18d2 <EquString+0x7d2>
lea    0x76b(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    18d2 <EquString+0x7d2>
lea    0x752(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    18e2 <EquString+0x7e2>
lea    0x742(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1b6c <EquString+0xa6c>
mov    -0xc(%rbp),%eax
mov    %eax,-0x58(%rbp)
test   %eax,%eax
je     192d <EquString+0x82d>
jmp    18fa <EquString+0x7fa>
mov    -0x58(%rbp),%eax
sub    $0x10,%eax
je     193d <EquString+0x83d>
jmp    190b <EquString+0x80b>
mov    -0x58(%rbp),%eax
sub    $0x20,%eax
je     196d <EquString+0x86d>
jmp    191c <EquString+0x81c>
mov    -0x58(%rbp),%eax
sub    $0x30,%eax
je     199d <EquString+0x89d>
jmp    1a14 <EquString+0x914>
lea    0x6ec(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1a1f <EquString+0x91f>
mov    -0x10(%rbp),%eax
test   %eax,%eax
jne    195d <EquString+0x85d>
jmp    194d <EquString+0x84d>
lea    0x6d0(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1968 <EquString+0x868>
lea    0x6bc(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1a1f <EquString+0x91f>
mov    -0x10(%rbp),%eax
test   %eax,%eax
jne    198d <EquString+0x88d>
jmp    197d <EquString+0x87d>
lea    0x6a0(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1998 <EquString+0x898>
lea    0x68c(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1a1f <EquString+0x91f>
mov    -0x10(%rbp),%eax
mov    %eax,-0x5c(%rbp)
test   %eax,%eax
je     19d4 <EquString+0x8d4>
jmp    19b0 <EquString+0x8b0>
mov    -0x5c(%rbp),%eax
sub    $0x40,%eax
je     19f4 <EquString+0x8f4>
jmp    19c1 <EquString+0x8c1>
mov    -0x5c(%rbp),%eax
sub    $0x80,%eax
je     19e4 <EquString+0x8e4>
jmp    1a04 <EquString+0x904>
lea    0x649(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1a0f <EquString+0x90f>
lea    0x63c(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1a0f <EquString+0x90f>
lea    0x62f(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1a0f <EquString+0x90f>
lea    0x615(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1a1f <EquString+0x91f>
lea    0x605(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1b6c <EquString+0xa6c>
mov    -0xc(%rbp),%eax
mov    %eax,-0x60(%rbp)
test   %eax,%eax
je     1a6a <EquString+0x96a>
jmp    1a37 <EquString+0x937>
mov    -0x60(%rbp),%eax
sub    $0x10,%eax
je     1a7a <EquString+0x97a>
jmp    1a48 <EquString+0x948>
mov    -0x60(%rbp),%eax
sub    $0x20,%eax
je     1aaa <EquString+0x9aa>
jmp    1a59 <EquString+0x959>
mov    -0x60(%rbp),%eax
sub    $0x30,%eax
je     1ada <EquString+0x9da>
jmp    1b51 <EquString+0xa51>
lea    0x5af(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1b5c <EquString+0xa5c>
mov    -0x10(%rbp),%eax
test   %eax,%eax
jne    1a9a <EquString+0x99a>
jmp    1a8a <EquString+0x98a>
lea    0x593(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1aa5 <EquString+0x9a5>
lea    0x57f(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1b5c <EquString+0xa5c>
mov    -0x10(%rbp),%eax
test   %eax,%eax
jne    1aca <EquString+0x9ca>
jmp    1aba <EquString+0x9ba>
lea    0x563(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1ad5 <EquString+0x9d5>
lea    0x54f(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1b5c <EquString+0xa5c>
mov    -0x10(%rbp),%eax
mov    %eax,-0x64(%rbp)
test   %eax,%eax
je     1b11 <EquString+0xa11>
jmp    1aed <EquString+0x9ed>
mov    -0x64(%rbp),%eax
sub    $0x40,%eax
je     1b31 <EquString+0xa31>
jmp    1afe <EquString+0x9fe>
mov    -0x64(%rbp),%eax
sub    $0x80,%eax
je     1b21 <EquString+0xa21>
jmp    1b41 <EquString+0xa41>
lea    0x50c(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1b4c <EquString+0xa4c>
lea    0x4ff(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1b4c <EquString+0xa4c>
lea    0x4f2(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1b4c <EquString+0xa4c>
lea    0x4d8(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1b5c <EquString+0xa5c>
lea    0x4c8(%rip),%rax
mov    %rax,-0x18(%rbp)
jmp    1b6c <EquString+0xa6c>
lea    0x4b8(%rip),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<EquString>:
mov    %edi,%esi
and    $0xf,%esi
lea    0xf70(%rip),%rax
add    $0xffffffff,%esi
cmp    $0x7,%esi
ja     123f <EquString+0x13f>
mov    %edi,%edx
and    $0x30,%edx
mov    %edi,%r8d
and    $0x1c0,%r8d
lea    0xed2(%rip),%rcx
movslq (%rcx,%rsi,4),%rsi
add    %rcx,%rsi
jmp    *%rsi
test   $0x100,%edi
jne    11ea <EquString+0xea>
cmp    $0x30,%edx
je     11ce <EquString+0xce>
cmp    $0x20,%edx
je     11b8 <EquString+0xb8>
cmp    $0x10,%edx
je     11b8 <EquString+0xb8>
jmp    123f <EquString+0x13f>
shr    $0x4,%edx
lea    0xecb(%rip),%rcx
movslq (%rcx,%rdx,4),%rdx
add    %rcx,%rdx
jmp    *%rdx
shr    $0x4,%edx
lea    0xec8(%rip),%rcx
movslq (%rcx,%rdx,4),%rdx
add    %rcx,%rdx
jmp    *%rdx
test   %r8d,%r8d
je     122e <EquString+0x12e>
cmp    $0x80,%r8d
je     11e2 <EquString+0xe2>
cmp    $0x100,%r8d
jne    123f <EquString+0x13f>
jmp    1240 <EquString+0x140>
shr    $0x4,%edx
lea    0xe71(%rip),%rcx
movslq (%rcx,%rdx,4),%rdx
add    %rcx,%rdx
jmp    *%rdx
test   %r8d,%r8d
lea    0xebe(%rip),%rcx
lea    0xeb3(%rip),%rax
cmove  %rcx,%rax
ret
test   %r8d,%r8d
je     122e <EquString+0x12e>
cmp    $0x40,%r8d
je     1226 <EquString+0x126>
cmp    $0x80,%r8d
jne    123f <EquString+0x13f>
lea    0xe9a(%rip),%rax
ret
and    $0xc0,%edi
shr    $0x4,%edx
lea    0xe56(%rip),%rax
movslq (%rax,%rdx,4),%rcx
add    %rax,%rcx
jmp    *%rcx
shr    $0x6,%edi
lea    0x2c23(%rip),%rax
mov    (%rax,%rdi,8),%rax
ret
test   %r8d,%r8d
je     122e <EquString+0x12e>
cmp    $0x100,%r8d
je     1240 <EquString+0x140>
cmp    $0x40,%r8d
jne    123f <EquString+0x13f>
lea    0xe59(%rip),%rax
ret
lea    0xe4b(%rip),%rax
ret
cmp    $0x1c0,%r8d
jne    1248 <EquString+0x148>
ret
lea    0xe38(%rip),%rax
ret
shr    $0x6,%r8d
lea    0xe0d(%rip),%rcx
movslq (%rcx,%r8,4),%rax
add    %rcx,%rax
ret

LLVM IR (-O0):
@.str = [1 x i8] zeroinitializer
@.str.1 = [2 x i8] c"m\00"
@.str.2 = [3 x i8] c"??\00"
@.str.3 = [2 x i8] c"M\00"
@.str.4 = [2 x i8] c"n\00"
@.str.5 = [3 x i8] c"im\00"
@.str.6 = [3 x i8] c"iM\00"
@.str.7 = [3 x i8] c"in\00"
@.str.8 = [3 x i8] c"iN\00"
@.str.9 = [2 x i8] c"N\00"
define i8* @EquString(i32 %0) {
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i8*
store i32 %0, i32* %2
%7 = load i32, i32* %2
%8 = and i32 %7, 15
store i32 %8, i32* %3
%9 = load i32, i32* %2
%10 = and i32 %9, 48
store i32 %10, i32* %4
%11 = load i32, i32* %2
%12 = and i32 %11, 448
store i32 %12, i32* %5
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i8** %6
%13 = load i32, i32* %3
switch i32 %13, label %177 [
i32 1, label %14
i32 2, label %35
i32 6, label %99
i32 4, label %133
i32 8, label %155
]
14: ; preds = %1
%15 = load i32, i32* %4
switch i32 %15, label %33 [
i32 16, label %16
i32 32, label %21
i32 48, label %26
]
16: ; preds = %14
%17 = load i32, i32* %5
switch i32 %17, label %19 [
i32 0, label %18
]
18: ; preds = %16
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8** %6
br label %20
19: ; preds = %16
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %20
20: ; preds = %19, %18
br label %34
21: ; preds = %14
%22 = load i32, i32* %5
switch i32 %22, label %24 [
i32 0, label %23
]
23: ; preds = %21
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8** %6
br label %25
24: ; preds = %21
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %25
25: ; preds = %24, %23
br label %34
26: ; preds = %14
%27 = load i32, i32* %5
switch i32 %27, label %31 [
i32 0, label %28
i32 128, label %29
i32 64, label %30
]
28: ; preds = %26
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8** %6
br label %32
29: ; preds = %26
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), i8** %6
br label %32
30: ; preds = %26
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), i8** %6
br label %32
31: ; preds = %26
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %32
32: ; preds = %31, %30, %29, %28
br label %34
33: ; preds = %14
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %34
34: ; preds = %33, %32, %25, %20
br label %178
35: ; preds = %1
%36 = load i32, i32* %5
%37 = and i32 %36, 256
%38 = icmp ne i32 %37, 0
br i1 %38, label %39, label %77
39: ; preds = %35
%40 = load i32, i32* %5
%41 = and i32 %40, -257
store i32 %41, i32* %5
%42 = load i32, i32* %4
switch i32 %42, label %75 [
i32 0, label %43
i32 16, label %51
i32 32, label %59
i32 48, label %67
]
43: ; preds = %39
%44 = load i32, i32* %5
switch i32 %44, label %49 [
i32 0, label %45
i32 128, label %46
i32 64, label %47
i32 192, label %48
]
45: ; preds = %43
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.5, i64 0, i64 0), i8** %6
br label %50
46: ; preds = %43
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i8** %6
br label %50
47: ; preds = %43
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), i8** %6
br label %50
48: ; preds = %43
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.8, i64 0, i64 0), i8** %6
br label %50
49: ; preds = %43
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %50
50: ; preds = %49, %48, %47, %46, %45
br label %76
51: ; preds = %39
%52 = load i32, i32* %5
switch i32 %52, label %57 [
i32 0, label %53
i32 128, label %54
i32 64, label %55
i32 192, label %56
]
53: ; preds = %51
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.5, i64 0, i64 0), i8** %6
br label %58
54: ; preds = %51
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i8** %6
br label %58
55: ; preds = %51
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), i8** %6
br label %58
56: ; preds = %51
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.8, i64 0, i64 0), i8** %6
br label %58
57: ; preds = %51
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %58
58: ; preds = %57, %56, %55, %54, %53
br label %76
59: ; preds = %39
%60 = load i32, i32* %5
switch i32 %60, label %65 [
i32 0, label %61
i32 128, label %62
i32 64, label %63
i32 192, label %64
]
61: ; preds = %59
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.5, i64 0, i64 0), i8** %6
br label %66
62: ; preds = %59
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i8** %6
br label %66
63: ; preds = %59
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), i8** %6
br label %66
64: ; preds = %59
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.8, i64 0, i64 0), i8** %6
br label %66
65: ; preds = %59
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %66
66: ; preds = %65, %64, %63, %62, %61
br label %76
67: ; preds = %39
%68 = load i32, i32* %5
switch i32 %68, label %73 [
i32 0, label %69
i32 128, label %70
i32 64, label %71
i32 192, label %72
]
69: ; preds = %67
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.5, i64 0, i64 0), i8** %6
br label %74
70: ; preds = %67
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i8** %6
br label %74
71: ; preds = %67
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), i8** %6
br label %74
72: ; preds = %67
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.8, i64 0, i64 0), i8** %6
br label %74
73: ; preds = %67
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %74
74: ; preds = %73, %72, %71, %70, %69
br label %76
75: ; preds = %39
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %76
76: ; preds = %75, %74, %66, %58, %50
br label %98
77: ; preds = %35
%78 = load i32, i32* %4
switch i32 %78, label %96 [
i32 16, label %79
i32 32, label %84
i32 48, label %89
]
79: ; preds = %77
%80 = load i32, i32* %5
switch i32 %80, label %82 [
i32 0, label %81
]
81: ; preds = %79
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8** %6
br label %83
82: ; preds = %79
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %83
83: ; preds = %82, %81
br label %97
84: ; preds = %77
%85 = load i32, i32* %5
switch i32 %85, label %87 [
i32 0, label %86
]
86: ; preds = %84
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8** %6
br label %88
87: ; preds = %84
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %88
88: ; preds = %87, %86
br label %97
89: ; preds = %77
%90 = load i32, i32* %5
switch i32 %90, label %94 [
i32 0, label %91
i32 128, label %92
i32 64, label %93
]
91: ; preds = %89
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8** %6
br label %95
92: ; preds = %89
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), i8** %6
br label %95
93: ; preds = %89
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), i8** %6
br label %95
94: ; preds = %89
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %95
95: ; preds = %94, %93, %92, %91
br label %97
96: ; preds = %77
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %97
97: ; preds = %96, %95, %88, %83
br label %98
98: ; preds = %97, %76
br label %178
99: ; preds = %1
%100 = load i32, i32* %4
switch i32 %100, label %131 [
i32 0, label %101
i32 16, label %106
i32 32, label %113
i32 48, label %120
]
101: ; preds = %99
%102 = load i32, i32* %5
switch i32 %102, label %104 [
i32 0, label %103
]
103: ; preds = %101
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8** %6
br label %105
104: ; preds = %101
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %105
105: ; preds = %104, %103
br label %132
106: ; preds = %99
%107 = load i32, i32* %5
switch i32 %107, label %111 [
i32 0, label %108
i32 256, label %109
i32 128, label %110
]
108: ; preds = %106
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8** %6
br label %112
109: ; preds = %106
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.5, i64 0, i64 0), i8** %6
br label %112
110: ; preds = %106
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), i8** %6
br label %112
111: ; preds = %106
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %112
112: ; preds = %111, %110, %109, %108
br label %132
113: ; preds = %99
%114 = load i32, i32* %5
switch i32 %114, label %118 [
i32 0, label %115
i32 64, label %116
i32 256, label %117
]
115: ; preds = %113
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8** %6
br label %119
116: ; preds = %113
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), i8** %6
br label %119
117: ; preds = %113
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.5, i64 0, i64 0), i8** %6
br label %119
118: ; preds = %113
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %119
119: ; preds = %118, %117, %116, %115
br label %132
120: ; preds = %99
%121 = load i32, i32* %5
switch i32 %121, label %129 [
i32 0, label %122
i32 128, label %123
i32 384, label %124
i32 64, label %125
i32 192, label %126
i32 256, label %127
i32 320, label %128
]
122: ; preds = %120
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8** %6
br label %130
123: ; preds = %120
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), i8** %6
br label %130
124: ; preds = %120
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i8** %6
br label %130
125: ; preds = %120
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), i8** %6
br label %130
126: ; preds = %120
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.9, i64 0, i64 0), i8** %6
br label %130
127: ; preds = %120
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.5, i64 0, i64 0), i8** %6
br label %130
128: ; preds = %120
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), i8** %6
br label %130
129: ; preds = %120
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %130
130: ; preds = %129, %128, %127, %126, %125, %124, %123, %122
br label %132
131: ; preds = %99
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %132
132: ; preds = %131, %130, %119, %112, %105
br label %178
133: ; preds = %1
%134 = load i32, i32* %4
switch i32 %134, label %153 [
i32 0, label %135
i32 16, label %136
i32 32, label %141
i32 48, label %146
]
135: ; preds = %133
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %154
136: ; preds = %133
%137 = load i32, i32* %5
switch i32 %137, label %139 [
i32 0, label %138
]
138: ; preds = %136
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8** %6
br label %140
139: ; preds = %136
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %140
140: ; preds = %139, %138
br label %154
141: ; preds = %133
%142 = load i32, i32* %5
switch i32 %142, label %144 [
i32 0, label %143
]
143: ; preds = %141
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8** %6
br label %145
144: ; preds = %141
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %145
145: ; preds = %144, %143
br label %154
146: ; preds = %133
%147 = load i32, i32* %5
switch i32 %147, label %151 [
i32 0, label %148
i32 128, label %149
i32 64, label %150
]
148: ; preds = %146
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8** %6
br label %152
149: ; preds = %146
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), i8** %6
br label %152
150: ; preds = %146
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), i8** %6
br label %152
151: ; preds = %146
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %152
152: ; preds = %151, %150, %149, %148
br label %154
153: ; preds = %133
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %154
154: ; preds = %153, %152, %145, %140, %135
br label %178
155: ; preds = %1
%156 = load i32, i32* %4
switch i32 %156, label %175 [
i32 0, label %157
i32 16, label %158
i32 32, label %163
i32 48, label %168
]
157: ; preds = %155
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %176
158: ; preds = %155
%159 = load i32, i32* %5
switch i32 %159, label %161 [
i32 0, label %160
]
160: ; preds = %158
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8** %6
br label %162
161: ; preds = %158
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %162
162: ; preds = %161, %160
br label %176
163: ; preds = %155
%164 = load i32, i32* %5
switch i32 %164, label %166 [
i32 0, label %165
]
165: ; preds = %163
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8** %6
br label %167
166: ; preds = %163
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %167
167: ; preds = %166, %165
br label %176
168: ; preds = %155
%169 = load i32, i32* %5
switch i32 %169, label %173 [
i32 0, label %170
i32 128, label %171
i32 64, label %172
]
170: ; preds = %168
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8** %6
br label %174
171: ; preds = %168
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), i8** %6
br label %174
172: ; preds = %168
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), i8** %6
br label %174
173: ; preds = %168
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %174
174: ; preds = %173, %172, %171, %170
br label %176
175: ; preds = %155
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %176
176: ; preds = %175, %174, %167, %162, %157
br label %178
177: ; preds = %1
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %6
br label %178
178: ; preds = %177, %176, %154, %132, %98, %34
%179 = load i8*, i8** %6
ret i8* %179
}

LLVM IR (-O2):
@.str.1 = [2 x i8] c"m\00"
@.str.2 = [3 x i8] c"??\00"
@.str.3 = [2 x i8] c"M\00"
@.str.4 = [2 x i8] c"n\00"
@.str.5 = [3 x i8] c"im\00"
@.str.6 = [3 x i8] c"iM\00"
@.str.7 = [3 x i8] c"in\00"
@.str.8 = [3 x i8] c"iN\00"
@.str.9 = [2 x i8] c"N\00"
@switch.table.EquString.12 = [4 x i8*] [i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.5, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.8, i64 0, i64 0)]
@reltable.EquString = [7 x i32] [i32 trunc (i64 sub (i64 ptrtoint ([2 x i8]* @.str.1 to i64), i64 ptrtoint ([7 x i32]* @reltable.EquString to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([2 x i8]* @.str.4 to i64), i64 ptrtoint ([7 x i32]* @reltable.EquString to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([2 x i8]* @.str.3 to i64), i64 ptrtoint ([7 x i32]* @reltable.EquString to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([2 x i8]* @.str.9 to i64), i64 ptrtoint ([7 x i32]* @reltable.EquString to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([3 x i8]* @.str.5 to i64), i64 ptrtoint ([7 x i32]* @reltable.EquString to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([3 x i8]* @.str.7 to i64), i64 ptrtoint ([7 x i32]* @reltable.EquString to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([3 x i8]* @.str.6 to i64), i64 ptrtoint ([7 x i32]* @reltable.EquString to i64)) to i32)]
define i8* @EquString(i32 %0) {
%2 = and i32 %0, 15
%3 = and i32 %0, 48
%4 = and i32 %0, 448
switch i32 %2, label %101 [
i32 1, label %5
i32 2, label %16
i32 6, label %54
i32 4, label %70
i32 8, label %83
]
5: ; preds = %1
switch i32 %3, label %101 [
i32 16, label %6
i32 32, label %9
i32 48, label %12
]
6: ; preds = %5
%7 = icmp eq i32 %4, 0
%8 = select i1 %7, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0)
br label %101
9: ; preds = %5
%10 = icmp eq i32 %4, 0
%11 = select i1 %10, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0)
br label %101
12: ; preds = %5
switch i32 %4, label %15 [
i32 0, label %101
i32 128, label %13
i32 64, label %14
]
13: ; preds = %12
br label %101
14: ; preds = %12
br label %101
15: ; preds = %12
br label %101
16: ; preds = %1
%17 = and i32 %0, 256
%18 = icmp eq i32 %17, 0
br i1 %18, label %43, label %19
19: ; preds = %16
%20 = and i32 %0, 192
%21 = lshr exact i32 %3, 4
switch i32 %21, label %42 [
i32 0, label %22
i32 1, label %27
i32 2, label %32
i32 3, label %37
]
22: ; preds = %19
%23 = lshr exact i32 %20, 6
%24 = zext i32 %23 to i64
%25 = getelementptr inbounds [4 x i8*], [4 x i8*]* @switch.table.EquString.12, i64 0, i64 %24
%26 = load i8*, i8** %25
br label %101
27: ; preds = %19
%28 = lshr exact i32 %20, 6
%29 = zext i32 %28 to i64
%30 = getelementptr inbounds [4 x i8*], [4 x i8*]* @switch.table.EquString.12, i64 0, i64 %29
%31 = load i8*, i8** %30
br label %101
32: ; preds = %19
%33 = lshr exact i32 %20, 6
%34 = zext i32 %33 to i64
%35 = getelementptr inbounds [4 x i8*], [4 x i8*]* @switch.table.EquString.12, i64 0, i64 %34
%36 = load i8*, i8** %35
br label %101
37: ; preds = %19
%38 = lshr exact i32 %20, 6
%39 = zext i32 %38 to i64
%40 = getelementptr inbounds [4 x i8*], [4 x i8*]* @switch.table.EquString.12, i64 0, i64 %39
%41 = load i8*, i8** %40
br label %101
42: ; preds = %19
unreachable
43: ; preds = %16
switch i32 %3, label %101 [
i32 16, label %44
i32 32, label %47
i32 48, label %50
]
44: ; preds = %43
%45 = icmp eq i32 %4, 0
%46 = select i1 %45, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0)
br label %101
47: ; preds = %43
%48 = icmp eq i32 %4, 0
%49 = select i1 %48, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0)
br label %101
50: ; preds = %43
switch i32 %4, label %53 [
i32 0, label %101
i32 128, label %51
i32 64, label %52
]
51: ; preds = %50
br label %101
52: ; preds = %50
br label %101
53: ; preds = %50
br label %101
54: ; preds = %1
%55 = lshr exact i32 %3, 4
switch i32 %55, label %69 [
i32 0, label %56
i32 1, label %59
i32 2, label %63
i32 3, label %67
]
56: ; preds = %54
%57 = icmp eq i32 %4, 0
%58 = select i1 %57, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0)
br label %101
59: ; preds = %54
switch i32 %4, label %62 [
i32 0, label %101
i32 256, label %60
i32 128, label %61
]
60: ; preds = %59
br label %101
61: ; preds = %59
br label %101
62: ; preds = %59
br label %101
63: ; preds = %54
switch i32 %4, label %66 [
i32 0, label %101
i32 64, label %64
i32 256, label %65
]
64: ; preds = %63
br label %101
65: ; preds = %63
br label %101
66: ; preds = %63
br label %101
67: ; preds = %54
%68 = icmp eq i32 %4, 448
br i1 %68, label %101, label %96
69: ; preds = %54
unreachable
70: ; preds = %1
%71 = lshr exact i32 %3, 4
switch i32 %71, label %82 [
i32 0, label %101
i32 1, label %72
i32 2, label %75
i32 3, label %78
]
72: ; preds = %70
%73 = icmp eq i32 %4, 0
%74 = select i1 %73, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0)
br label %101
75: ; preds = %70
%76 = icmp eq i32 %4, 0
%77 = select i1 %76, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0)
br label %101
78: ; preds = %70
switch i32 %4, label %81 [
i32 0, label %101
i32 128, label %79
i32 64, label %80
]
79: ; preds = %78
br label %101
80: ; preds = %78
br label %101
81: ; preds = %78
br label %101
82: ; preds = %70
unreachable
83: ; preds = %1
%84 = lshr exact i32 %3, 4
switch i32 %84, label %95 [
i32 0, label %101
i32 1, label %85
i32 2, label %88
i32 3, label %91
]
85: ; preds = %83
%86 = icmp eq i32 %4, 0
%87 = select i1 %86, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0)
br label %101
88: ; preds = %83
%89 = icmp eq i32 %4, 0
%90 = select i1 %89, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0)
br label %101
91: ; preds = %83
switch i32 %4, label %94 [
i32 0, label %101
i32 128, label %92
i32 64, label %93
]
92: ; preds = %91
br label %101
93: ; preds = %91
br label %101
94: ; preds = %91
br label %101
95: ; preds = %83
unreachable
96: ; preds = %67
%97 = lshr exact i32 %4, 6
%98 = zext i32 %97 to i64
%99 = shl i64 %98, 2
%100 = call i8* @llvm.load.relative.i64(i8* bitcast ([7 x i32]* @reltable.EquString to i8*), i64 %99)
br label %101
101: ; preds = %67, %96, %37, %32, %27, %22, %1, %91, %88, %85, %83, %78, %75, %72, %70, %63, %59, %56, %43, %50, %47, %44, %5, %12, %9, %6, %94, %93, %92, %81, %80, %79, %62, %61, %60, %66, %65, %64, %51, %52, %53, %15, %14, %13
%102 = phi i8* [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), %94 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), %93 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), %92 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), %81 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), %80 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), %79 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), %66 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.5, i64 0, i64 0), %65 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), %64 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), %62 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), %61 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.5, i64 0, i64 0), %60 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), %53 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), %52 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), %51 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), %15 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), %14 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), %13 ], [ %8, %6 ], [ %11, %9 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), %12 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), %5 ], [ %46, %44 ], [ %49, %47 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), %50 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), %43 ], [ %58, %56 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), %59 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), %63 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), %70 ], [ %74, %72 ], [ %77, %75 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), %78 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), %83 ], [ %87, %85 ], [ %90, %88 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), %91 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), %1 ], [ %26, %22 ], [ %31, %27 ], [ %36, %32 ], [ %41, %37 ], [ %100, %96 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), %67 ]
ret i8* %102
}