// File: /workspace/github_cpp_makefile_star2_O3/ncbi[P]amr/seq.cpp
// Function: Seq_sp::SubstMat::char2score(char, char) const
AlignScore SubstMat::char2score (char c1,
                                 char c2) const
{ 
  QC_ASSERT (c1 >= '\0');
  QC_ASSERT (c2 >= '\0');
  
  if (strchr (peptideWildcards, c1))
    c1 = 'X';
  if (strchr (peptideWildcards, c2))
    c2 = 'X';

  const size_t i1 = (size_t) c1;
  const size_t i2 = (size_t) c2;
  QC_ASSERT (i1 < sim_size);
  QC_ASSERT (i2 < sim_size);

  if (   c1 == '-' 
      || c2 == '-'
     )
    return 0;
    
    
  if (! goodIndex (i1))
    throw runtime_error ("Bad amino acid: " + string (1, c1) + " (" + to_string (i1) + ")");
  if (! goodIndex (i2))
    throw runtime_error ("Bad amino acid: " + string (1, c2) + " (" + to_string (i2) + ")");
    
  const AlignScore s = sim [i1] [i2]; 
  ASSERT (s == s);
  return s;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x108, %rsp            # imm = 0x108
movl %edx, %ebp
movl %esi, %ebx
movq %rdi, %r14
callq 0xb070
movl $0x0, (%rax)
testb %bl, %bl
js 0x7639f
testb %bpl, %bpl
js 0x76431
movzbl %bpl, %ebp
movq 0x438fb(%rip), %r12     # 0xb9bf0
movq %r12, %rdi
movl %ebx, %esi
callq 0xb230
testq %rax, %rax
movzbl %bl, %r15d
movl $0x58, %ebx
cmovnel %ebx, %r15d
movq %r12, %rdi
movl %ebp, %esi
callq 0xb230
testq %rax, %rax
cmovel %ebp, %ebx
cmpb $0x2d, %r15b
sete %al
cmpb $0x2d, %bl
sete %cl
orb %al, %cl
xorpd %xmm0, %xmm0
jne 0x7638d
movl $0xff, %eax
andl %eax, %r15d
movl %r15d, %ecx
shll $0xa, %ecx
addq %r14, %rcx
addq $0x8, %rcx
movsd (%rcx,%r15,8), %xmm0
ucomisd %xmm0, %xmm0
jp 0x764c3
andl %eax, %ebx
addq $0x8, %r14
movl %ebx, %eax
shll $0xa, %eax
addq %r14, %rax
movsd (%rax,%rbx,8), %xmm0
ucomisd %xmm0, %xmm0
jp 0x76545
shll $0xa, %r15d
addq %r15, %r14
movsd (%r14,%rbx,8), %xmm0
ucomisd %xmm0, %xmm0
jp 0x765c6
addq $0x108, %rsp            # imm = 0x108
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0xb6b0
testl %eax, %eax
jne 0x76658
leaq 0x58(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x21c96(%rip), %rsi     # 0x98052
leaq 0x21c9f(%rip), %rdx     # 0x98062
leaq 0x48(%rsp), %rdi
callq 0xdc76
leaq 0x68(%rsp), %rdi
movl $0xd04, %esi            # imm = 0xD04
callq 0xe1b2
leaq 0x88(%rsp), %rdi
leaq 0x48(%rsp), %rsi
leaq 0x68(%rsp), %rdx
callq 0xe10a
leaq 0x1cdd7(%rip), %rsi     # 0x931d1
leaq 0x88(%rsp), %rdi
callq 0xbb10
leaq 0x18(%rsp), %r15
movq %r15, -0x10(%r15)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x76771
movupd (%rcx), %xmm0
movupd %xmm0, (%r15)
jmp 0x7677e
callq 0xb6b0
testl %eax, %eax
jne 0x76658
leaq 0x58(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x21c04(%rip), %rsi     # 0x98052
leaq 0x21c0d(%rip), %rdx     # 0x98062
leaq 0x48(%rsp), %rdi
callq 0xdc76
leaq 0x68(%rsp), %rdi
movl $0xd05, %esi            # imm = 0xD05
callq 0xe1b2
leaq 0x88(%rsp), %rdi
leaq 0x48(%rsp), %rsi
leaq 0x68(%rsp), %rdx
callq 0xe10a
leaq 0x1cd45(%rip), %rsi     # 0x931d1
leaq 0x88(%rsp), %rdi
callq 0xbb10
leaq 0x18(%rsp), %r15
movq %r15, -0x10(%r15)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x76800
movupd (%rcx), %xmm0
movupd %xmm0, (%r15)
jmp 0x7680d
movl $0x10, %edi
callq 0xb2d0
movq %rax, %r14
leaq 0x58(%rsp), %r12
movq %r12, -0x10(%r12)
movsbl %r15b, %edx
leaq 0x48(%rsp), %rdi
movl $0x1, %esi
callq 0xb670
leaq 0x22492(%rip), %rsi     # 0x98986
leaq 0x88(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0xeb12
leaq 0x1f225(%rip), %rsi     # 0x95732
leaq 0x88(%rsp), %rdi
callq 0xbb10
leaq 0x18(%rsp), %r13
movq %r13, -0x10(%r13)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x76662
movupd (%rcx), %xmm0
movupd %xmm0, (%r13)
jmp 0x7666f
movl $0x10, %edi
callq 0xb2d0
movq %rax, %r14
leaq 0x58(%rsp), %r15
movq %r15, -0x10(%r15)
movsbl %bl, %edx
leaq 0x48(%rsp), %rdi
movl $0x1, %esi
callq 0xb670
leaq 0x22412(%rip), %rsi     # 0x98986
leaq 0x88(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0xeb12
leaq 0x1f1a5(%rip), %rsi     # 0x95732
leaq 0x88(%rsp), %rdi
callq 0xbb10
leaq 0x18(%rsp), %r12
movq %r12, -0x10(%r12)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x766e9
movupd (%rcx), %xmm0
movupd %xmm0, (%r12)
jmp 0x766f6
callq 0xb6b0
testl %eax, %eax
jne 0x76658
leaq 0x58(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x21a6f(%rip), %rsi     # 0x98052
leaq 0x21a78(%rip), %rdx     # 0x98062
leaq 0x48(%rsp), %rdi
callq 0xdc76
leaq 0x68(%rsp), %rdi
movl $0xd1d, %esi            # imm = 0xD1D
callq 0xe1b2
leaq 0x88(%rsp), %rdi
leaq 0x48(%rsp), %rsi
leaq 0x68(%rsp), %rdx
callq 0xe10a
leaq 0x1cbb0(%rip), %rsi     # 0x931d1
leaq 0x88(%rsp), %rdi
callq 0xbb10
leaq 0x18(%rsp), %r15
movq %r15, -0x10(%r15)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x7688f
movupd (%rcx), %xmm0
movupd %xmm0, (%r15)
jmp 0x7689c
movl $0x1, %edi
callq 0xb6d0
movq %rdx, 0x8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x18(%rsp)
movq 0x8(%rax), %rdx
movq %rdx, 0x10(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x68(%rsp), %rdi
movq %r15, %rsi
callq 0xeb82
leaq 0xa8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0x68(%rsp), %rdx
callq 0xe10a
leaq 0x20a37(%rip), %rsi     # 0x970e9
leaq 0xa8(%rsp), %rdi
callq 0xbb10
leaq 0x38(%rsp), %r15
movq %r15, -0x10(%r15)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x76a22
movupd (%rcx), %xmm0
movupd %xmm0, (%r15)
jmp 0x76a2f
movq %rdx, 0x8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x18(%rsp)
movq 0x8(%rax), %rdx
movq %rdx, 0x10(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x68(%rsp), %rdi
movq %rbx, %rsi
callq 0xeb82
leaq 0xa8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0x68(%rsp), %rdx
callq 0xe10a
leaq 0x209b0(%rip), %rsi     # 0x970e9
leaq 0xa8(%rsp), %rdi
callq 0xbb10
leaq 0x38(%rsp), %r13
movq %r13, -0x10(%r13)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x76a70
movupd (%rcx), %xmm0
movupd %xmm0, (%r13)
jmp 0x76a7d
movq %rdx, 0x8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x18(%rsp)
movq 0x8(%rax), %rdx
movq %rdx, 0x10(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xf8(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x2218c(%rip), %rsi     # 0x98936
leaq 0x221be(%rip), %rdx     # 0x9896f
leaq 0xe8(%rsp), %rdi
callq 0xdc76
leaq 0x1d0ec(%rip), %rsi     # 0x938b1
leaq 0xe8(%rsp), %rdi
callq 0xbb10
leaq 0xd8(%rsp), %r13
movq %r13, -0x10(%r13)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x7691e
movupd (%rcx), %xmm0
movupd %xmm0, (%r13)
jmp 0x76931
movq %rdx, 0x8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x18(%rsp)
movq 0x8(%rax), %rdx
movq %rdx, 0x10(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xf8(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x220fd(%rip), %rsi     # 0x98936
leaq 0x2212f(%rip), %rdx     # 0x9896f
leaq 0xe8(%rsp), %rdi
callq 0xdc76
leaq 0x1d05d(%rip), %rsi     # 0x938b1
leaq 0xe8(%rsp), %rdi
callq 0xbb10
leaq 0xd8(%rsp), %r13
movq %r13, -0x10(%r13)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x769a0
movupd (%rcx), %xmm0
movupd %xmm0, (%r13)
jmp 0x769b3
movq %rdx, 0x8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x18(%rsp)
movq 0x8(%rax), %rdx
movq %rdx, 0x10(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xf8(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x2206e(%rip), %rsi     # 0x98936
leaq 0x220a0(%rip), %rdx     # 0x9896f
leaq 0xe8(%rsp), %rdi
callq 0xdc76
leaq 0x1cfce(%rip), %rsi     # 0x938b1
leaq 0xe8(%rsp), %rdi
callq 0xbb10
leaq 0xd8(%rsp), %r13
movq %r13, -0x10(%r13)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x76abc
movupd (%rcx), %xmm0
movupd %xmm0, (%r13)
jmp 0x76acf
movq %rdx, 0xc8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xd8(%rsp)
movq 0x8(%rax), %rsi
leaq 0xc8(%rsp), %rdx
movq %rsi, 0x8(%rdx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xa8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xe10a
leaq 0x22007(%rip), %rsi     # 0x98970
leaq 0xa8(%rsp), %rdi
callq 0xbb10
leaq 0x38(%rsp), %rbp
movq %rbp, -0x10(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x76b37
movupd (%rcx), %xmm0
movupd %xmm0, (%rbp)
jmp 0x76b44
movq %rdx, 0xc8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xd8(%rsp)
movq 0x8(%rax), %rsi
leaq 0xc8(%rsp), %rdx
movq %rsi, 0x8(%rdx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xa8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xe10a
leaq 0x21f90(%rip), %rsi     # 0x9897b
leaq 0xa8(%rsp), %rdi
callq 0xbb10
leaq 0x38(%rsp), %rbp
movq %rbp, -0x10(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x76b65
movupd (%rcx), %xmm0
movupd %xmm0, (%rbp)
jmp 0x76b72
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
movq 0x8(%rax), %rdx
leaq 0x28(%rsp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movb $0x1, %bpl
movq %r14, %rdi
callq 0xb960
xorl %ebp, %ebp
movq 0x42591(%rip), %rsi     # 0xb8ff0
movq 0x4250a(%rip), %rdx     # 0xb8f70
movq %r14, %rdi
callq 0xba00
jmp 0x76abc
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
movq 0x8(%rax), %rdx
leaq 0x28(%rsp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movb $0x1, %bpl
movq %r14, %rdi
callq 0xb960
xorl %ebp, %ebp
movq 0x42543(%rip), %rsi     # 0xb8ff0
movq 0x424bc(%rip), %rdx     # 0xb8f70
movq %r14, %rdi
callq 0xba00
movq %rdx, 0xc8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xd8(%rsp)
movq 0x8(%rax), %rsi
leaq 0xc8(%rsp), %rdx
movq %rsi, 0x8(%rdx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xa8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xe10a
leaq 0x21e90(%rip), %rsi     # 0x98997
leaq 0xa8(%rsp), %rdi
callq 0xbb10
leaq 0x38(%rsp), %rbp
movq %rbp, -0x10(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x76b93
movupd (%rcx), %xmm0
movupd %xmm0, (%rbp)
jmp 0x76ba0
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
movq 0x8(%rax), %rdx
leaq 0x28(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
callq 0x1155a
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
movq 0x8(%rax), %rdx
leaq 0x28(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
callq 0x1155a
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
movq 0x8(%rax), %rdx
leaq 0x28(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
callq 0x1155a
jmp 0x76bcb
jmp 0x76be7
jmp 0x76c14
jmp 0x76bcb
jmp 0x76be7
movq %rax, %rbx
movq 0x28(%rsp), %rdi
cmpq %rbp, %rdi
je 0x76bea
movq 0x38(%rsp), %rsi
incq %rsi
callq 0xb5a0
jmp 0x76bea
movq %rax, %rbx
leaq 0xb8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x76c17
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0xb5a0
jmp 0x76c17
jmp 0x76cd2
jmp 0x76c14
movq %rax, %rbx
movq 0xc8(%rsp), %rdi
cmpq %r13, %rdi
je 0x76cd5
movq 0xd8(%rsp), %rsi
incq %rsi
callq 0xb5a0
jmp 0x76cd5
jmp 0x76d41
movq %rax, %rbx
movq 0x28(%rsp), %rdi
cmpq %r13, %rdi
je 0x76c64
movq 0x38(%rsp), %rsi
incq %rsi
callq 0xb5a0
jmp 0x76c64
movq %rax, %rbx
movb $0x1, %bpl
leaq 0xb8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x76cff
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0xb5a0
jmp 0x76cff
movq %rax, %rbx
movq 0x28(%rsp), %rdi
cmpq %r15, %rdi
je 0x76cad
movq 0x38(%rsp), %rsi
incq %rsi
callq 0xb5a0
jmp 0x76cad
movq %rax, %rbx
movb $0x1, %bpl
leaq 0xb8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x76d22
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0xb5a0
jmp 0x76d22
jmp 0x76cd2
movq %rax, %rbx
movq 0xe8(%rsp), %rdi
cmpq %r12, %rdi
je 0x76d44
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0xb5a0
jmp 0x76d44
jmp 0x76da2
movq %rax, %rbx
movb $0x1, %bpl
leaq 0x78(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x76d68
movq 0x78(%rsp), %rsi
incq %rsi
callq 0xb5a0
jmp 0x76d68
movq %rax, %rbx
movb $0x1, %bpl
leaq 0x78(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x76d87
movq 0x78(%rsp), %rsi
incq %rsi
callq 0xb5a0
jmp 0x76d87
jmp 0x76d41
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x76da5
movq 0x18(%rsp), %rsi
incq %rsi
callq 0xb5a0
jmp 0x76da5
jmp 0x76e51
movq %rax, %rbx
movb $0x1, %bpl
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x76dda
movq 0x18(%rsp), %rsi
incq %rsi
callq 0xb5a0
jmp 0x76dda
movq %rax, %rbx
movb $0x1, %bpl
movq 0x8(%rsp), %rdi
cmpq %r13, %rdi
je 0x76e0d
movq 0x18(%rsp), %rsi
incq %rsi
callq 0xb5a0
jmp 0x76e0d
jmp 0x76da2
movq %rax, %rbx
leaq 0x98(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x76e54
movq 0x98(%rsp), %rsi
incq %rsi
callq 0xb5a0
jmp 0x76e54
jmp 0x76ea0
movq %rax, %rbx
movb $0x1, %bpl
leaq 0x98(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x76dfb
movq 0x98(%rsp), %rsi
incq %rsi
callq 0xb5a0
movq 0x48(%rsp), %rdi
cmpq %r15, %rdi
jne 0x76e38
jmp 0x76e45
movq %rax, %rbx
movb $0x1, %bpl
leaq 0x98(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x76e2e
movq 0x98(%rsp), %rsi
incq %rsi
callq 0xb5a0
movq 0x48(%rsp), %rdi
cmpq %r12, %rdi
je 0x76e45
movq 0x58(%rsp), %rsi
incq %rsi
callq 0xb5a0
testb %bpl, %bpl
jne 0x76ec1
jmp 0x76ed0
jmp 0x76e51
movq %rax, %rbx
leaq 0x78(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x76ea3
movq 0x78(%rsp), %rsi
incq %rsi
callq 0xb5a0
jmp 0x76ea3
jmp 0x76ecd
movq %rax, %rbx
movq 0x48(%rsp), %rdi
cmpq %r15, %rdi
jne 0x76e8f
jmp 0x76ec1
movq %rax, %rbx
movq 0x48(%rsp), %rdi
cmpq %r12, %rdi
je 0x76ec1
movq 0x58(%rsp), %rsi
incq %rsi
callq 0xb5a0
jmp 0x76ec1
jmp 0x76ea0
movq %rax, %rbx
movq 0x48(%rsp), %rdi
cmpq %r14, %rdi
je 0x76ed0
movq 0x58(%rsp), %rsi
incq %rsi
callq 0xb5a0
jmp 0x76ed0
jmp 0x76ebe
movq %rax, %rbx
movq %r14, %rdi
callq 0xb440
jmp 0x76ed0
jmp 0x76ecd
movq %rax, %rbx
movq %rbx, %rdi
callq 0xba60