// File: tedsharpe[P]ORFCall/ORFCall.cc
// Function: (anonymous namespace)::AlignmentScorer::operator()(unsigned char, unsigned char, unsigned char)
void operator()( Call wtCall, Call call, Qual qual )
    {
        if ( mRefPos == mNextExon.mEnd )
            mNextExon = *++mExonItr;
        if ( mRefPos++ < mNextExon.mBegin )
        {
            if ( wtCall != call && qual >= mMinQ )
                mNMismatches += 1;
        }
        else
        {
            if ( qual >= mMinQ )
            {
                mNHiQCalls += 1;
                if ( wtCall != call )
                {
                    mNMismatches += 1;
                    mNCodonMismatches += 1;
                }
            }
            mCodon = (mCodon << 2) | call;
            if ( ++mPhase == 3 )
            {
                if ( mCodon != *mWTItr &&
                     ((1ul << mCodon) & *mPlannedItr) &&
                     mNHiQCalls == 3 )
                {
                    if ( mVariations.empty() )
                        mNMismatches -= mNCodonMismatches;
                    mVariations.push_back(
                        Variation{VariationType::ALTERNATE_CODON,
                                   Offset(mWTItr-mWTBeg),
                                   mCodon} );
                }
                mCodon = 0;
                mPhase = 0;
                mNCodonMismatches = 0;
                mNHiQCalls = 0;
                ++mWTItr;
                ++mPlannedItr;
            }
        }
    }

// Assembly:
subq $0x48, %rsp
movb %cl, %al
movb %dl, %cl
movb %sil, %dl
movq %rdi, 0x40(%rsp)
movb %dl, 0x3f(%rsp)
movb %cl, 0x3e(%rsp)
movb %al, 0x3d(%rsp)
movq 0x40(%rsp), %rcx
movq %rcx, 0x18(%rsp)
movq (%rcx), %rax
cmpq 0x18(%rcx), %rax
jne 0xf2ec
movq 0x18(%rsp), %rdi
addq $0x8, %rdi
callq 0xc070
movq %rax, %rdi
callq 0xf570
movq %rax, %rcx
movq 0x18(%rsp), %rax
movq (%rcx), %rdx
movq %rdx, 0x10(%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x18(%rax)
movq 0x18(%rsp), %rcx
movq (%rcx), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, (%rcx)
cmpq 0x10(%rcx), %rax
jae 0xf33a
movzbl 0x3f(%rsp), %eax
movzbl 0x3e(%rsp), %ecx
cmpl %ecx, %eax
je 0xf335
movq 0x18(%rsp), %rcx
movzbl 0x3d(%rsp), %eax
movzbl 0x38(%rcx), %ecx
cmpl %ecx, %eax
jl 0xf335
movq 0x18(%rsp), %rax
movq 0x58(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x58(%rax)
jmp 0xf4b8
movq 0x18(%rsp), %rcx
movzbl 0x3d(%rsp), %eax
movzbl 0x38(%rcx), %ecx
cmpl %ecx, %eax
jl 0xf384
movq 0x18(%rsp), %rax
movl 0x48(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x48(%rax)
movzbl 0x3f(%rsp), %eax
movzbl 0x3e(%rsp), %ecx
cmpl %ecx, %eax
je 0xf382
movq 0x18(%rsp), %rax
movq 0x58(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x58(%rax)
movl 0x44(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x44(%rax)
jmp 0xf384
movq 0x18(%rsp), %rcx
movl 0x3c(%rcx), %eax
shll $0x2, %eax
movzbl 0x3e(%rsp), %edx
orl %edx, %eax
movl %eax, 0x3c(%rcx)
movl 0x40(%rcx), %eax
addl $0x1, %eax
movl %eax, 0x40(%rcx)
cmpl $0x3, %eax
jne 0xf4b6
movq 0x18(%rsp), %rdi
movl 0x3c(%rdi), %eax
movl %eax, 0x14(%rsp)
addq $0x28, %rdi
callq 0x1e4e0
movq %rax, %rcx
movl 0x14(%rsp), %eax
cmpl (%rcx), %eax
je 0xf47e
movq 0x18(%rsp), %rdi
movl 0x3c(%rdi), %eax
movl %eax, %ecx
movl $0x1, %eax
shlq %cl, %rax
movq %rax, 0x8(%rsp)
addq $0x30, %rdi
callq 0x1e530
movq %rax, %rcx
movq 0x8(%rsp), %rax
andq (%rcx), %rax
cmpq $0x0, %rax
je 0xf47e
movq 0x18(%rsp), %rax
cmpl $0x3, 0x48(%rax)
jne 0xf47e
movq 0x18(%rsp), %rdi
addq $0x60, %rdi
callq 0xf7f0
testb $0x1, %al
jne 0xf41f
jmp 0xf434
movq 0x18(%rsp), %rax
movl 0x44(%rax), %ecx
movl %ecx, %edx
movq 0x58(%rax), %rcx
subq %rdx, %rcx
movq %rcx, 0x58(%rax)
movq 0x18(%rsp), %rsi
movq %rsi, %rax
addq $0x60, %rax
movq %rax, (%rsp)
movl $0x0, 0x20(%rsp)
movq %rsi, %rdi
addq $0x28, %rdi
addq $0x20, %rsi
callq 0x1e540
movq (%rsp), %rdi
movq %rax, %rcx
movq 0x18(%rsp), %rax
movq %rcx, 0x28(%rsp)
movl 0x3c(%rax), %eax
movl %eax, 0x30(%rsp)
leaq 0x20(%rsp), %rsi
callq 0xf840
movq 0x18(%rsp), %rdi
movl $0x0, 0x3c(%rdi)
movl $0x0, 0x40(%rdi)
movl $0x0, 0x44(%rdi)
movl $0x0, 0x48(%rdi)
addq $0x28, %rdi
callq 0x1e580
movq 0x18(%rsp), %rdi
addq $0x30, %rdi
callq 0x1e5a0
jmp 0xf4b8
addq $0x48, %rsp
retq
nopl (%rax)