char bioseq_dna_codon_protein(char a, char b, char c) {
  a = (a & 0xdf);
  b = (b & 0xdf);
  c = (c & 0xdf);
  if (!(a == 'A' || a == 'C' || a == 'G' || a == 'T' || a == 'U') ||
      !(b == 'A' || b == 'C' || b == 'G' || b == 'T' || b == 'U') ||
      !(c == 'A' || c == 'C' || c == 'G' || c == 'T' || c == 'U'))
    return '?';
  switch (a) {
  case 'U':
  case 'T':
    switch (b) {
    case 'U':
    case 'T':
      switch (c) {
      case 'U':
      case 'T':
      case 'C':
        return 'F';
      case 'A':
      case 'G':
        return 'L';
      default:
        return '?';
      }
    case 'C':
      return 'S';
    case 'A':
      switch (c) {
      case 'A':
      case 'G':
        return 'X';
      case 'T':
      case 'U':
      case 'C':
        return 'Y';
      default:
        return '?';
      }
    case 'G':
      switch (c) {
      case 'U':
      case 'T':
      case 'C':
        return 'C';
      case 'A':
        return 'X';
      case 'G':
        return 'W';
      default:
        return '?';
      }
    default:
      return '?';
    }
  case 'C':
    switch (b) {
    case 'U':
    case 'T':
      return 'L';
    case 'C':
      return 'P';
    case 'A':
      switch (c) {
      case 'A':
      case 'G':
        return 'Q';
      case 'U':
      case 'T':
      case 'C':
        return 'H';
      default:
        return '?';
      }
    case 'G':
      return 'R';
    default:
      return '?';
    }
  case 'A':
    switch (b) {
    case 'U':
    case 'T':
      if (c == 'G') {
        return 'M';
      } else if (c == 'A' || c == 'C' || c == 'T' || c == 'U') {
        return 'I';
      } else {
        return '?';
      }
    case 'C':
      if ((b == 'A' || b == 'C' || b == 'G' || b == 'T' || b == 'U')) {
        return 'T';
      } else {
        return '?';
      }
    case 'A':
      switch (c) {
      case 'A':
      case 'G':
        return 'K';
      case 'T':
      case 'U':
      case 'C':
        return 'N';
      default:
        return '?';
      }
    case 'G':
      switch (c) {
      case 'A':
      case 'G':
        return 'R';
      case 'C':
      case 'T':
      case 'U':
        return 'S';
      default:
        return '?';
      }
    default:
      return '?';
    }
  case 'G':
    switch (b) {
    case 'U':
    case 'T':
      return 'V';
    case 'C':
      return 'A';
    case 'A':
      switch (c) {
      case 'A':
      case 'G':
        return 'E';
      case 'C':
      case 'T':
      case 'U':
        return 'D';
      }
    case 'G':
      if ((c == 'A' || c == 'C' || c == 'G' || c == 'T' || c == 'U'))
        return 'G';
      else
        return '?';
    default:
      return '?';
    }
  default:
    return '?';
  }
  return '?';
}


x86 assembly (clang, -O0):
<bioseq_dna_codon_protein>:
push   %rbp
mov    %rsp,%rbp
mov    %dl,%al
mov    %sil,%cl
mov    %dil,%dl
mov    %dl,-0x2(%rbp)
mov    %cl,-0x3(%rbp)
mov    %al,-0x4(%rbp)
movsbl -0x2(%rbp),%eax
and    $0xdf,%eax
mov    %al,-0x2(%rbp)
movsbl -0x3(%rbp),%eax
and    $0xdf,%eax
mov    %al,-0x3(%rbp)
movsbl -0x4(%rbp),%eax
and    $0xdf,%eax
mov    %al,-0x4(%rbp)
movsbl -0x2(%rbp),%eax
cmp    $0x41,%eax
je     117a <bioseq_dna_codon_protein+0x7a>
movsbl -0x2(%rbp),%eax
cmp    $0x43,%eax
je     117a <bioseq_dna_codon_protein+0x7a>
movsbl -0x2(%rbp),%eax
cmp    $0x47,%eax
je     117a <bioseq_dna_codon_protein+0x7a>
movsbl -0x2(%rbp),%eax
cmp    $0x54,%eax
je     117a <bioseq_dna_codon_protein+0x7a>
movsbl -0x2(%rbp),%eax
cmp    $0x55,%eax
jne    11fc <bioseq_dna_codon_protein+0xfc>
movsbl -0x3(%rbp),%eax
cmp    $0x41,%eax
je     11bb <bioseq_dna_codon_protein+0xbb>
movsbl -0x3(%rbp),%eax
cmp    $0x43,%eax
je     11bb <bioseq_dna_codon_protein+0xbb>
movsbl -0x3(%rbp),%eax
cmp    $0x47,%eax
je     11bb <bioseq_dna_codon_protein+0xbb>
movsbl -0x3(%rbp),%eax
cmp    $0x54,%eax
je     11bb <bioseq_dna_codon_protein+0xbb>
movsbl -0x3(%rbp),%eax
cmp    $0x55,%eax
jne    11fc <bioseq_dna_codon_protein+0xfc>
movsbl -0x4(%rbp),%eax
cmp    $0x41,%eax
je     1205 <bioseq_dna_codon_protein+0x105>
movsbl -0x4(%rbp),%eax
cmp    $0x43,%eax
je     1205 <bioseq_dna_codon_protein+0x105>
movsbl -0x4(%rbp),%eax
cmp    $0x47,%eax
je     1205 <bioseq_dna_codon_protein+0x105>
movsbl -0x4(%rbp),%eax
cmp    $0x54,%eax
je     1205 <bioseq_dna_codon_protein+0x105>
movsbl -0x4(%rbp),%eax
cmp    $0x55,%eax
je     1205 <bioseq_dna_codon_protein+0x105>
movb   $0x3f,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movsbl -0x2(%rbp),%eax
add    $0xffffffbf,%eax
mov    %eax,%ecx
mov    %rcx,-0x10(%rbp)
sub    $0x14,%eax
ja     16e1 <bioseq_dna_codon_protein+0x5e1>
mov    -0x10(%rbp),%rax
lea    0xdda(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movsbl -0x3(%rbp),%eax
add    $0xffffffbf,%eax
mov    %eax,%ecx
mov    %rcx,-0x18(%rbp)
sub    $0x14,%eax
ja     137c <bioseq_dna_codon_protein+0x27c>
mov    -0x18(%rbp),%rax
lea    0xf00(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movsbl -0x4(%rbp),%eax
mov    %eax,-0x1c(%rbp)
sub    $0x41,%eax
je     12ad <bioseq_dna_codon_protein+0x1ad>
jmp    126e <bioseq_dna_codon_protein+0x16e>
mov    -0x1c(%rbp),%eax
sub    $0x43,%eax
je     12a4 <bioseq_dna_codon_protein+0x1a4>
jmp    127f <bioseq_dna_codon_protein+0x17f>
mov    -0x1c(%rbp),%eax
sub    $0x47,%eax
je     12ad <bioseq_dna_codon_protein+0x1ad>
jmp    1290 <bioseq_dna_codon_protein+0x190>
mov    -0x1c(%rbp),%eax
add    $0xffffffac,%eax
sub    $0x1,%eax
ja     12b6 <bioseq_dna_codon_protein+0x1b6>
jmp    12a4 <bioseq_dna_codon_protein+0x1a4>
movb   $0x46,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x4c,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x3f,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x53,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movsbl -0x4(%rbp),%eax
mov    %eax,-0x20(%rbp)
sub    $0x41,%eax
je     1313 <bioseq_dna_codon_protein+0x213>
jmp    12dd <bioseq_dna_codon_protein+0x1dd>
mov    -0x20(%rbp),%eax
sub    $0x43,%eax
je     131c <bioseq_dna_codon_protein+0x21c>
jmp    12ee <bioseq_dna_codon_protein+0x1ee>
mov    -0x20(%rbp),%eax
sub    $0x47,%eax
je     1313 <bioseq_dna_codon_protein+0x213>
jmp    12ff <bioseq_dna_codon_protein+0x1ff>
mov    -0x20(%rbp),%eax
add    $0xffffffac,%eax
sub    $0x2,%eax
jb     131c <bioseq_dna_codon_protein+0x21c>
jmp    1325 <bioseq_dna_codon_protein+0x225>
movb   $0x58,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x59,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x3f,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movsbl -0x4(%rbp),%eax
add    $0xffffffbf,%eax
mov    %eax,%ecx
mov    %rcx,-0x28(%rbp)
sub    $0x14,%eax
ja     1373 <bioseq_dna_codon_protein+0x273>
mov    -0x28(%rbp),%rax
lea    0xe55(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movb   $0x43,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x58,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x57,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x3f,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x3f,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movsbl -0x3(%rbp),%eax
add    $0xffffffbf,%eax
mov    %eax,%ecx
mov    %rcx,-0x30(%rbp)
sub    $0x14,%eax
ja     1430 <bioseq_dna_codon_protein+0x330>
mov    -0x30(%rbp),%rax
lea    0xd56(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movb   $0x4c,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x50,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movsbl -0x4(%rbp),%eax
mov    %eax,-0x34(%rbp)
sub    $0x41,%eax
je     140c <bioseq_dna_codon_protein+0x30c>
jmp    13d6 <bioseq_dna_codon_protein+0x2d6>
mov    -0x34(%rbp),%eax
sub    $0x43,%eax
je     1415 <bioseq_dna_codon_protein+0x315>
jmp    13e7 <bioseq_dna_codon_protein+0x2e7>
mov    -0x34(%rbp),%eax
sub    $0x47,%eax
je     140c <bioseq_dna_codon_protein+0x30c>
jmp    13f8 <bioseq_dna_codon_protein+0x2f8>
mov    -0x34(%rbp),%eax
add    $0xffffffac,%eax
sub    $0x2,%eax
jb     1415 <bioseq_dna_codon_protein+0x315>
jmp    141e <bioseq_dna_codon_protein+0x31e>
movb   $0x51,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x48,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x3f,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x52,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x3f,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movsbl -0x3(%rbp),%eax
add    $0xffffffbf,%eax
mov    %eax,%ecx
mov    %rcx,-0x40(%rbp)
sub    $0x14,%eax
ja     15de <bioseq_dna_codon_protein+0x4de>
mov    -0x40(%rbp),%rax
lea    0xc4e(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movsbl -0x4(%rbp),%eax
cmp    $0x47,%eax
jne    1479 <bioseq_dna_codon_protein+0x379>
movb   $0x4d,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movsbl -0x4(%rbp),%eax
cmp    $0x41,%eax
je     14ad <bioseq_dna_codon_protein+0x3ad>
movsbl -0x4(%rbp),%eax
cmp    $0x43,%eax
je     14ad <bioseq_dna_codon_protein+0x3ad>
movsbl -0x4(%rbp),%eax
cmp    $0x54,%eax
je     14ad <bioseq_dna_codon_protein+0x3ad>
movsbl -0x4(%rbp),%eax
cmp    $0x55,%eax
jne    14b6 <bioseq_dna_codon_protein+0x3b6>
movb   $0x49,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x3f,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movsbl -0x3(%rbp),%eax
cmp    $0x41,%eax
je     1500 <bioseq_dna_codon_protein+0x400>
movsbl -0x3(%rbp),%eax
cmp    $0x43,%eax
je     1500 <bioseq_dna_codon_protein+0x400>
movsbl -0x3(%rbp),%eax
cmp    $0x47,%eax
je     1500 <bioseq_dna_codon_protein+0x400>
movsbl -0x3(%rbp),%eax
cmp    $0x54,%eax
je     1500 <bioseq_dna_codon_protein+0x400>
movsbl -0x3(%rbp),%eax
cmp    $0x55,%eax
jne    1509 <bioseq_dna_codon_protein+0x409>
movb   $0x54,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x3f,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movsbl -0x4(%rbp),%eax
mov    %eax,-0x44(%rbp)
sub    $0x41,%eax
je     155d <bioseq_dna_codon_protein+0x45d>
jmp    1527 <bioseq_dna_codon_protein+0x427>
mov    -0x44(%rbp),%eax
sub    $0x43,%eax
je     1566 <bioseq_dna_codon_protein+0x466>
jmp    1538 <bioseq_dna_codon_protein+0x438>
mov    -0x44(%rbp),%eax
sub    $0x47,%eax
je     155d <bioseq_dna_codon_protein+0x45d>
jmp    1549 <bioseq_dna_codon_protein+0x449>
mov    -0x44(%rbp),%eax
add    $0xffffffac,%eax
sub    $0x2,%eax
jb     1566 <bioseq_dna_codon_protein+0x466>
jmp    156f <bioseq_dna_codon_protein+0x46f>
movb   $0x4b,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x4e,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x3f,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movsbl -0x4(%rbp),%eax
mov    %eax,-0x48(%rbp)
sub    $0x41,%eax
je     15c3 <bioseq_dna_codon_protein+0x4c3>
jmp    158d <bioseq_dna_codon_protein+0x48d>
mov    -0x48(%rbp),%eax
sub    $0x43,%eax
je     15cc <bioseq_dna_codon_protein+0x4cc>
jmp    159e <bioseq_dna_codon_protein+0x49e>
mov    -0x48(%rbp),%eax
sub    $0x47,%eax
je     15c3 <bioseq_dna_codon_protein+0x4c3>
jmp    15af <bioseq_dna_codon_protein+0x4af>
mov    -0x48(%rbp),%eax
add    $0xffffffac,%eax
sub    $0x2,%eax
jb     15cc <bioseq_dna_codon_protein+0x4cc>
jmp    15d5 <bioseq_dna_codon_protein+0x4d5>
movb   $0x52,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x53,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x3f,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x3f,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movsbl -0x3(%rbp),%eax
add    $0xffffffbf,%eax
mov    %eax,%ecx
mov    %rcx,-0x50(%rbp)
sub    $0x14,%eax
ja     16d8 <bioseq_dna_codon_protein+0x5d8>
mov    -0x50(%rbp),%rax
lea    0xa4c(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movb   $0x56,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x41,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movsbl -0x4(%rbp),%eax
mov    %eax,-0x54(%rbp)
sub    $0x41,%eax
je     166e <bioseq_dna_codon_protein+0x56e>
jmp    1638 <bioseq_dna_codon_protein+0x538>
mov    -0x54(%rbp),%eax
sub    $0x43,%eax
je     1677 <bioseq_dna_codon_protein+0x577>
jmp    1649 <bioseq_dna_codon_protein+0x549>
mov    -0x54(%rbp),%eax
sub    $0x47,%eax
je     166e <bioseq_dna_codon_protein+0x56e>
jmp    165a <bioseq_dna_codon_protein+0x55a>
mov    -0x54(%rbp),%eax
add    $0xffffffac,%eax
sub    $0x2,%eax
jb     1677 <bioseq_dna_codon_protein+0x577>
jmp    1680 <bioseq_dna_codon_protein+0x580>
movb   $0x45,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x44,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
jmp    1685 <bioseq_dna_codon_protein+0x585>
movsbl -0x4(%rbp),%eax
cmp    $0x41,%eax
je     16c6 <bioseq_dna_codon_protein+0x5c6>
movsbl -0x4(%rbp),%eax
cmp    $0x43,%eax
je     16c6 <bioseq_dna_codon_protein+0x5c6>
movsbl -0x4(%rbp),%eax
cmp    $0x47,%eax
je     16c6 <bioseq_dna_codon_protein+0x5c6>
movsbl -0x4(%rbp),%eax
cmp    $0x54,%eax
je     16c6 <bioseq_dna_codon_protein+0x5c6>
movsbl -0x4(%rbp),%eax
cmp    $0x55,%eax
jne    16cf <bioseq_dna_codon_protein+0x5cf>
movb   $0x47,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x3f,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x3f,-0x1(%rbp)
jmp    16e5 <bioseq_dna_codon_protein+0x5e5>
movb   $0x3f,-0x1(%rbp)
movsbl -0x1(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<bioseq_dna_codon_protein>:
mov    %edi,%r9d
and    $0xdf,%r9b
mov    %edi,%ecx
and    $0xde,%cl
mov    $0x3f,%al
cmp    $0x54,%cl
je     1124 <bioseq_dna_codon_protein+0x24>
and    $0xdd,%dil
cmp    $0x41,%dil
je     1124 <bioseq_dna_codon_protein+0x24>
cmp    $0x47,%r9b
je     1124 <bioseq_dna_codon_protein+0x24>
ret
mov    %esi,%r8d
and    $0xdf,%r8b
mov    %esi,%ecx
and    $0xde,%cl
cmp    $0x54,%cl
je     1145 <bioseq_dna_codon_protein+0x45>
and    $0xdd,%sil
cmp    $0x41,%sil
je     1145 <bioseq_dna_codon_protein+0x45>
cmp    $0x47,%r8b
jne    1123 <bioseq_dna_codon_protein+0x23>
mov    %edx,%edi
and    $0xdf,%dil
mov    %edx,%esi
and    $0xdd,%sil
and    $0xde,%dl
cmp    $0x54,%dl
je     1165 <bioseq_dna_codon_protein+0x65>
cmp    $0x41,%sil
je     1165 <bioseq_dna_codon_protein+0x65>
cmp    $0x47,%dil
jne    1123 <bioseq_dna_codon_protein+0x23>
movsbl %r9b,%ecx
add    $0xffffffbf,%ecx
cmp    $0x14,%ecx
ja     1123 <bioseq_dna_codon_protein+0x23>
movsbl %r8b,%r9d
movsbl %dil,%r8d
lea    0xe80(%rip),%rax
movslq (%rax,%rcx,4),%rcx
add    %rax,%rcx
mov    $0x3f,%al
jmp    *%rcx
add    $0xffffffbf,%r9d
cmp    $0x14,%r9d
ja     1341 <bioseq_dna_codon_protein+0x241>
mov    $0x53,%al
lea    0xfae(%rip),%rcx
movslq (%rcx,%r9,4),%rdx
add    %rcx,%rdx
jmp    *%rdx
add    $0xffffffbf,%r8d
cmp    $0x14,%r8d
ja     1341 <bioseq_dna_codon_protein+0x241>
mov    $0x46,%al
mov    $0x180004,%ecx
bt     %r8d,%ecx
jb     1123 <bioseq_dna_codon_protein+0x23>
mov    $0x41,%eax
bt     %r8d,%eax
jae    1341 <bioseq_dna_codon_protein+0x241>
mov    $0x4c,%al
ret
add    $0xffffffbf,%r9d
cmp    $0x14,%r9d
ja     1341 <bioseq_dna_codon_protein+0x241>
mov    $0x54,%al
lea    0xeb5(%rip),%r10
movslq (%r10,%r9,4),%rcx
add    %r10,%rcx
jmp    *%rcx
mov    $0x4d,%al
cmp    $0x47,%dil
je     1123 <bioseq_dna_codon_protein+0x23>
cmp    $0x41,%sil
mov    $0x49,%ecx
mov    $0x3f,%eax
cmove  %ecx,%eax
cmp    $0x54,%dl
cmove  %ecx,%eax
ret
add    $0xffffffbf,%r9d
cmp    $0x14,%r9d
ja     1341 <bioseq_dna_codon_protein+0x241>
mov    $0x4c,%al
lea    0xec5(%rip),%rcx
movslq (%rcx,%r9,4),%rdx
add    %rcx,%rdx
jmp    *%rdx
add    $0xffffffbf,%r8d
cmp    $0x14,%r8d
ja     1341 <bioseq_dna_codon_protein+0x241>
mov    $0x180004,%eax
bt     %r8d,%eax
jae    1314 <bioseq_dna_codon_protein+0x214>
mov    $0x48,%al
ret
add    $0xffffffbf,%r9d
cmp    $0x14,%r9d
ja     1341 <bioseq_dna_codon_protein+0x241>
mov    $0x56,%al
lea    0xddd(%rip),%rcx
movslq (%rcx,%r9,4),%rdx
add    %rcx,%rdx
jmp    *%rdx
add    $0xffffffbf,%r8d
cmp    $0x14,%r8d
ja     1329 <bioseq_dna_codon_protein+0x229>
mov    $0x180004,%eax
bt     %r8d,%eax
jae    1318 <bioseq_dna_codon_protein+0x218>
mov    $0x44,%al
ret
add    $0xffffffbf,%r8d
cmp    $0x14,%r8d
ja     1341 <bioseq_dna_codon_protein+0x241>
mov    $0x43,%al
lea    0xef1(%rip),%rcx
movslq (%rcx,%r8,4),%rdx
add    %rcx,%rdx
jmp    *%rdx
mov    $0x58,%al
ret
add    $0xffffffbf,%r8d
cmp    $0x14,%r8d
ja     1341 <bioseq_dna_codon_protein+0x241>
mov    $0x180004,%eax
bt     %r8d,%eax
jae    1310 <bioseq_dna_codon_protein+0x210>
mov    $0x59,%al
ret
add    $0xffffffbf,%r8d
cmp    $0x14,%r8d
ja     1341 <bioseq_dna_codon_protein+0x241>
mov    $0x180004,%eax
bt     %r8d,%eax
jae    132c <bioseq_dna_codon_protein+0x22c>
mov    $0x4e,%al
ret
add    $0xffffffbf,%r8d
cmp    $0x14,%r8d
ja     1341 <bioseq_dna_codon_protein+0x241>
mov    $0x180004,%eax
bt     %r8d,%eax
jae    1330 <bioseq_dna_codon_protein+0x230>
mov    $0x53,%al
ret
mov    $0x50,%al
ret
mov    $0x52,%al
ret
mov    $0x41,%al
ret
mov    $0x58,%al
jmp    1332 <bioseq_dna_codon_protein+0x232>
mov    $0x51,%al
jmp    1332 <bioseq_dna_codon_protein+0x232>
mov    $0x45,%al
mov    $0x41,%ecx
bt     %r8d,%ecx
jb     1123 <bioseq_dna_codon_protein+0x23>
mov    $0x47,%al
ret
mov    $0x4b,%al
jmp    1332 <bioseq_dna_codon_protein+0x232>
mov    $0x52,%al
mov    $0x41,%ecx
bt     %r8d,%ecx
jb     1123 <bioseq_dna_codon_protein+0x23>
mov    $0x3f,%al
ret
mov    $0x57,%al
ret

LLVM IR (-O0):
define signext i8 @bioseq_dna_codon_protein(i8 signext %0, i8 signext %1, i8 signext %2) {
%4 = alloca i8
%5 = alloca i8
%6 = alloca i8
%7 = alloca i8
store i8 %0, i8* %5
store i8 %1, i8* %6
store i8 %2, i8* %7
%8 = load i8, i8* %5
%9 = sext i8 %8 to i32
%10 = and i32 %9, 223
%11 = trunc i32 %10 to i8
store i8 %11, i8* %5
%12 = load i8, i8* %6
%13 = sext i8 %12 to i32
%14 = and i32 %13, 223
%15 = trunc i32 %14 to i8
store i8 %15, i8* %6
%16 = load i8, i8* %7
%17 = sext i8 %16 to i32
%18 = and i32 %17, 223
%19 = trunc i32 %18 to i8
store i8 %19, i8* %7
%20 = load i8, i8* %5
%21 = sext i8 %20 to i32
%22 = icmp eq i32 %21, 65
br i1 %22, label %39, label %23
23: ; preds = %3
%24 = load i8, i8* %5
%25 = sext i8 %24 to i32
%26 = icmp eq i32 %25, 67
br i1 %26, label %39, label %27
27: ; preds = %23
%28 = load i8, i8* %5
%29 = sext i8 %28 to i32
%30 = icmp eq i32 %29, 71
br i1 %30, label %39, label %31
31: ; preds = %27
%32 = load i8, i8* %5
%33 = sext i8 %32 to i32
%34 = icmp eq i32 %33, 84
br i1 %34, label %39, label %35
35: ; preds = %31
%36 = load i8, i8* %5
%37 = sext i8 %36 to i32
%38 = icmp eq i32 %37, 85
br i1 %38, label %39, label %79
39: ; preds = %35, %31, %27, %23, %3
%40 = load i8, i8* %6
%41 = sext i8 %40 to i32
%42 = icmp eq i32 %41, 65
br i1 %42, label %59, label %43
43: ; preds = %39
%44 = load i8, i8* %6
%45 = sext i8 %44 to i32
%46 = icmp eq i32 %45, 67
br i1 %46, label %59, label %47
47: ; preds = %43
%48 = load i8, i8* %6
%49 = sext i8 %48 to i32
%50 = icmp eq i32 %49, 71
br i1 %50, label %59, label %51
51: ; preds = %47
%52 = load i8, i8* %6
%53 = sext i8 %52 to i32
%54 = icmp eq i32 %53, 84
br i1 %54, label %59, label %55
55: ; preds = %51
%56 = load i8, i8* %6
%57 = sext i8 %56 to i32
%58 = icmp eq i32 %57, 85
br i1 %58, label %59, label %79
59: ; preds = %55, %51, %47, %43, %39
%60 = load i8, i8* %7
%61 = sext i8 %60 to i32
%62 = icmp eq i32 %61, 65
br i1 %62, label %80, label %63
63: ; preds = %59
%64 = load i8, i8* %7
%65 = sext i8 %64 to i32
%66 = icmp eq i32 %65, 67
br i1 %66, label %80, label %67
67: ; preds = %63
%68 = load i8, i8* %7
%69 = sext i8 %68 to i32
%70 = icmp eq i32 %69, 71
br i1 %70, label %80, label %71
71: ; preds = %67
%72 = load i8, i8* %7
%73 = sext i8 %72 to i32
%74 = icmp eq i32 %73, 84
br i1 %74, label %80, label %75
75: ; preds = %71
%76 = load i8, i8* %7
%77 = sext i8 %76 to i32
%78 = icmp eq i32 %77, 85
br i1 %78, label %80, label %79
79: ; preds = %75, %55, %35
store i8 63, i8* %4
br label %216
80: ; preds = %75, %71, %67, %63, %59
%81 = load i8, i8* %5
%82 = sext i8 %81 to i32
switch i32 %82, label %215 [
i32 85, label %83
i32 84, label %83
i32 67, label %107
i32 65, label %120
i32 71, label %181
]
83: ; preds = %80, %80
%84 = load i8, i8* %6
%85 = sext i8 %84 to i32
switch i32 %85, label %106 [
i32 85, label %86
i32 84, label %86
i32 67, label %92
i32 65, label %93
i32 71, label %99
]
86: ; preds = %83, %83
%87 = load i8, i8* %7
%88 = sext i8 %87 to i32
switch i32 %88, label %91 [
i32 85, label %89
i32 84, label %89
i32 67, label %89
i32 65, label %90
i32 71, label %90
]
89: ; preds = %86, %86, %86
store i8 70, i8* %4
br label %216
90: ; preds = %86, %86
store i8 76, i8* %4
br label %216
91: ; preds = %86
store i8 63, i8* %4
br label %216
92: ; preds = %83
store i8 83, i8* %4
br label %216
93: ; preds = %83
%94 = load i8, i8* %7
%95 = sext i8 %94 to i32
switch i32 %95, label %98 [
i32 65, label %96
i32 71, label %96
i32 84, label %97
i32 85, label %97
i32 67, label %97
]
96: ; preds = %93, %93
store i8 88, i8* %4
br label %216
97: ; preds = %93, %93, %93
store i8 89, i8* %4
br label %216
98: ; preds = %93
store i8 63, i8* %4
br label %216
99: ; preds = %83
%100 = load i8, i8* %7
%101 = sext i8 %100 to i32
switch i32 %101, label %105 [
i32 85, label %102
i32 84, label %102
i32 67, label %102
i32 65, label %103
i32 71, label %104
]
102: ; preds = %99, %99, %99
store i8 67, i8* %4
br label %216
103: ; preds = %99
store i8 88, i8* %4
br label %216
104: ; preds = %99
store i8 87, i8* %4
br label %216
105: ; preds = %99
store i8 63, i8* %4
br label %216
106: ; preds = %83
store i8 63, i8* %4
br label %216
107: ; preds = %80
%108 = load i8, i8* %6
%109 = sext i8 %108 to i32
switch i32 %109, label %119 [
i32 85, label %110
i32 84, label %110
i32 67, label %111
i32 65, label %112
i32 71, label %118
]
110: ; preds = %107, %107
store i8 76, i8* %4
br label %216
111: ; preds = %107
store i8 80, i8* %4
br label %216
112: ; preds = %107
%113 = load i8, i8* %7
%114 = sext i8 %113 to i32
switch i32 %114, label %117 [
i32 65, label %115
i32 71, label %115
i32 85, label %116
i32 84, label %116
i32 67, label %116
]
115: ; preds = %112, %112
store i8 81, i8* %4
br label %216
116: ; preds = %112, %112, %112
store i8 72, i8* %4
br label %216
117: ; preds = %112
store i8 63, i8* %4
br label %216
118: ; preds = %107
store i8 82, i8* %4
br label %216
119: ; preds = %107
store i8 63, i8* %4
br label %216
120: ; preds = %80
%121 = load i8, i8* %6
%122 = sext i8 %121 to i32
switch i32 %122, label %180 [
i32 85, label %123
i32 84, label %123
i32 67, label %146
i32 65, label %168
i32 71, label %174
]
123: ; preds = %120, %120
%124 = load i8, i8* %7
%125 = sext i8 %124 to i32
%126 = icmp eq i32 %125, 71
br i1 %126, label %127, label %128
127: ; preds = %123
store i8 77, i8* %4
br label %216
128: ; preds = %123
%129 = load i8, i8* %7
%130 = sext i8 %129 to i32
%131 = icmp eq i32 %130, 65
br i1 %131, label %144, label %132
132: ; preds = %128
%133 = load i8, i8* %7
%134 = sext i8 %133 to i32
%135 = icmp eq i32 %134, 67
br i1 %135, label %144, label %136
136: ; preds = %132
%137 = load i8, i8* %7
%138 = sext i8 %137 to i32
%139 = icmp eq i32 %138, 84
br i1 %139, label %144, label %140
140: ; preds = %136
%141 = load i8, i8* %7
%142 = sext i8 %141 to i32
%143 = icmp eq i32 %142, 85
br i1 %143, label %144, label %145
144: ; preds = %140, %136, %132, %128
store i8 73, i8* %4
br label %216
145: ; preds = %140
store i8 63, i8* %4
br label %216
146: ; preds = %120
%147 = load i8, i8* %6
%148 = sext i8 %147 to i32
%149 = icmp eq i32 %148, 65
br i1 %149, label %166, label %150
150: ; preds = %146
%151 = load i8, i8* %6
%152 = sext i8 %151 to i32
%153 = icmp eq i32 %152, 67
br i1 %153, label %166, label %154
154: ; preds = %150
%155 = load i8, i8* %6
%156 = sext i8 %155 to i32
%157 = icmp eq i32 %156, 71
br i1 %157, label %166, label %158
158: ; preds = %154
%159 = load i8, i8* %6
%160 = sext i8 %159 to i32
%161 = icmp eq i32 %160, 84
br i1 %161, label %166, label %162
162: ; preds = %158
%163 = load i8, i8* %6
%164 = sext i8 %163 to i32
%165 = icmp eq i32 %164, 85
br i1 %165, label %166, label %167
166: ; preds = %162, %158, %154, %150, %146
store i8 84, i8* %4
br label %216
167: ; preds = %162
store i8 63, i8* %4
br label %216
168: ; preds = %120
%169 = load i8, i8* %7
%170 = sext i8 %169 to i32
switch i32 %170, label %173 [
i32 65, label %171
i32 71, label %171
i32 84, label %172
i32 85, label %172
i32 67, label %172
]
171: ; preds = %168, %168
store i8 75, i8* %4
br label %216
172: ; preds = %168, %168, %168
store i8 78, i8* %4
br label %216
173: ; preds = %168
store i8 63, i8* %4
br label %216
174: ; preds = %120
%175 = load i8, i8* %7
%176 = sext i8 %175 to i32
switch i32 %176, label %179 [
i32 65, label %177
i32 71, label %177
i32 67, label %178
i32 84, label %178
i32 85, label %178
]
177: ; preds = %174, %174
store i8 82, i8* %4
br label %216
178: ; preds = %174, %174, %174
store i8 83, i8* %4
br label %216
179: ; preds = %174
store i8 63, i8* %4
br label %216
180: ; preds = %120
store i8 63, i8* %4
br label %216
181: ; preds = %80
%182 = load i8, i8* %6
%183 = sext i8 %182 to i32
switch i32 %183, label %214 [
i32 85, label %184
i32 84, label %184
i32 67, label %185
i32 65, label %186
i32 71, label %192
]
184: ; preds = %181, %181
store i8 86, i8* %4
br label %216
185: ; preds = %181
store i8 65, i8* %4
br label %216
186: ; preds = %181
%187 = load i8, i8* %7
%188 = sext i8 %187 to i32
switch i32 %188, label %191 [
i32 65, label %189
i32 71, label %189
i32 67, label %190
i32 84, label %190
i32 85, label %190
]
189: ; preds = %186, %186
store i8 69, i8* %4
br label %216
190: ; preds = %186, %186, %186
store i8 68, i8* %4
br label %216
191: ; preds = %186
br label %192
192: ; preds = %181, %191
%193 = load i8, i8* %7
%194 = sext i8 %193 to i32
%195 = icmp eq i32 %194, 65
br i1 %195, label %212, label %196
196: ; preds = %192
%197 = load i8, i8* %7
%198 = sext i8 %197 to i32
%199 = icmp eq i32 %198, 67
br i1 %199, label %212, label %200
200: ; preds = %196
%201 = load i8, i8* %7
%202 = sext i8 %201 to i32
%203 = icmp eq i32 %202, 71
br i1 %203, label %212, label %204
204: ; preds = %200
%205 = load i8, i8* %7
%206 = sext i8 %205 to i32
%207 = icmp eq i32 %206, 84
br i1 %207, label %212, label %208
208: ; preds = %204
%209 = load i8, i8* %7
%210 = sext i8 %209 to i32
%211 = icmp eq i32 %210, 85
br i1 %211, label %212, label %213
212: ; preds = %208, %204, %200, %196, %192
store i8 71, i8* %4
br label %216
213: ; preds = %208
store i8 63, i8* %4
br label %216
214: ; preds = %181
store i8 63, i8* %4
br label %216
215: ; preds = %80
store i8 63, i8* %4
br label %216
216: ; preds = %215, %214, %213, %212, %190, %189, %185, %184, %180, %179, %178, %177, %173, %172, %171, %167, %166, %145, %144, %127, %119, %118, %117, %116, %115, %111, %110, %106, %105, %104, %103, %102, %98, %97, %96, %92, %91, %90, %89, %79
%217 = load i8, i8* %4
ret i8 %217
}

LLVM IR (-O2):
define signext i8 @bioseq_dna_codon_protein(i8 signext %0, i8 signext %1, i8 signext %2) {
%4 = and i8 %0, -33
%5 = and i8 %2, -33
%6 = sext i8 %4 to i32
%7 = and i8 %0, -35
%8 = icmp eq i8 %7, 65
%9 = icmp eq i8 %4, 71
%10 = or i1 %8, %9
%11 = and i8 %0, -34
%12 = icmp eq i8 %11, 84
%13 = or i1 %12, %10
br i1 %13, label %14, label %71
14: ; preds = %3
%15 = and i8 %1, -33
%16 = sext i8 %15 to i32
%17 = and i8 %1, -35
%18 = icmp eq i8 %17, 65
%19 = icmp eq i8 %15, 71
%20 = or i1 %18, %19
%21 = and i8 %1, -34
%22 = icmp eq i8 %21, 84
%23 = or i1 %22, %20
br i1 %23, label %24, label %71
24: ; preds = %14
%25 = sext i8 %5 to i32
%26 = and i8 %2, -35
%27 = icmp eq i8 %26, 65
%28 = icmp eq i8 %5, 71
%29 = or i1 %27, %28
%30 = and i8 %2, -34
%31 = icmp eq i8 %30, 84
%32 = or i1 %31, %29
br i1 %32, label %33, label %71
33: ; preds = %24
switch i32 %6, label %71 [
i32 85, label %34
i32 84, label %34
i32 67, label %46
i32 65, label %53
i32 71, label %65
]
34: ; preds = %33, %33
switch i32 %16, label %45 [
i32 85, label %35
i32 84, label %35
i32 67, label %71
i32 65, label %38
i32 71, label %41
]
35: ; preds = %34, %34
switch i32 %25, label %37 [
i32 85, label %71
i32 84, label %71
i32 67, label %71
i32 65, label %36
i32 71, label %36
]
36: ; preds = %35, %35
br label %71
37: ; preds = %35
br label %71
38: ; preds = %34
switch i32 %25, label %40 [
i32 65, label %71
i32 71, label %71
i32 84, label %39
i32 85, label %39
i32 67, label %39
]
39: ; preds = %38, %38, %38
br label %71
40: ; preds = %38
br label %71
41: ; preds = %34
switch i32 %25, label %44 [
i32 85, label %71
i32 84, label %71
i32 67, label %71
i32 65, label %42
i32 71, label %43
]
42: ; preds = %41
br label %71
43: ; preds = %41
br label %71
44: ; preds = %41
br label %71
45: ; preds = %34
br label %71
46: ; preds = %33
switch i32 %16, label %52 [
i32 85, label %71
i32 84, label %71
i32 67, label %47
i32 65, label %48
i32 71, label %51
]
47: ; preds = %46
br label %71
48: ; preds = %46
switch i32 %25, label %50 [
i32 65, label %71
i32 71, label %71
i32 85, label %49
i32 84, label %49
i32 67, label %49
]
49: ; preds = %48, %48, %48
br label %71
50: ; preds = %48
br label %71
51: ; preds = %46
br label %71
52: ; preds = %46
br label %71
53: ; preds = %33
switch i32 %16, label %64 [
i32 85, label %54
i32 84, label %54
i32 67, label %71
i32 65, label %58
i32 71, label %61
]
54: ; preds = %53, %53
br i1 %28, label %71, label %55
55: ; preds = %54
%56 = or i1 %31, %27
%57 = select i1 %56, i8 73, i8 63
br label %71
58: ; preds = %53
switch i32 %25, label %60 [
i32 65, label %71
i32 71, label %71
i32 84, label %59
i32 85, label %59
i32 67, label %59
]
59: ; preds = %58, %58, %58
br label %71
60: ; preds = %58
br label %71
61: ; preds = %53
switch i32 %25, label %63 [
i32 65, label %71
i32 71, label %71
i32 67, label %62
i32 84, label %62
i32 85, label %62
]
62: ; preds = %61, %61, %61
br label %71
63: ; preds = %61
br label %71
64: ; preds = %53
br label %71
65: ; preds = %33
switch i32 %16, label %70 [
i32 85, label %71
i32 84, label %71
i32 67, label %66
i32 65, label %67
i32 71, label %69
]
66: ; preds = %65
br label %71
67: ; preds = %65
switch i32 %25, label %69 [
i32 65, label %71
i32 71, label %71
i32 67, label %68
i32 84, label %68
i32 85, label %68
]
68: ; preds = %67, %67, %67
br label %71
69: ; preds = %65, %67
br label %71
70: ; preds = %65
br label %71
71: ; preds = %33, %67, %67, %65, %65, %61, %61, %58, %58, %53, %55, %54, %48, %48, %46, %46, %41, %41, %41, %38, %38, %34, %35, %35, %35, %3, %14, %24, %70, %69, %68, %66, %64, %63, %62, %60, %59, %52, %51, %50, %49, %47, %45, %44, %43, %42, %40, %39, %37, %36
%72 = phi i8 [ 63, %70 ], [ 71, %69 ], [ 68, %68 ], [ 65, %66 ], [ 63, %64 ], [ 63, %63 ], [ 83, %62 ], [ 63, %60 ], [ 78, %59 ], [ 63, %52 ], [ 82, %51 ], [ 63, %50 ], [ 72, %49 ], [ 80, %47 ], [ 63, %45 ], [ 63, %44 ], [ 87, %43 ], [ 88, %42 ], [ 63, %40 ], [ 89, %39 ], [ 63, %37 ], [ 76, %36 ], [ 63, %24 ], [ 63, %14 ], [ 63, %3 ], [ 70, %35 ], [ 70, %35 ], [ 70, %35 ], [ 83, %34 ], [ 88, %38 ], [ 88, %38 ], [ 67, %41 ], [ 67, %41 ], [ 67, %41 ], [ 76, %46 ], [ 76, %46 ], [ 81, %48 ], [ 81, %48 ], [ 77, %54 ], [ %57, %55 ], [ 84, %53 ], [ 75, %58 ], [ 75, %58 ], [ 82, %61 ], [ 82, %61 ], [ 86, %65 ], [ 86, %65 ], [ 69, %67 ], [ 69, %67 ], [ 63, %33 ]
ret i8 %72
}