// File: BGI-Qingdao[P]metaSLR/./kmer/kmer.h
// Function: Kmer::fastReverseComp(Kmer const&, char)
static Kmer fastReverseComp ( const Kmer &base , char seq_size )
    {
        Kmer seq = base ;
        seq.low ^= 0xAAAAAAAAAAAAAAAALLU;
        seq.low = ( ( seq.low & 0x3333333333333333LLU ) << 2 ) | ( ( seq.low & 0xCCCCCCCCCCCCCCCCLLU ) >> 2 );
        seq.low = ( ( seq.low & 0x0F0F0F0F0F0F0F0FLLU ) << 4 ) | ( ( seq.low & 0xF0F0F0F0F0F0F0F0LLU ) >> 4 );
        seq.low = ( ( seq.low & 0x00FF00FF00FF00FFLLU ) << 8 ) | ( ( seq.low & 0xFF00FF00FF00FF00LLU ) >> 8 );
        seq.low = ( ( seq.low & 0x0000FFFF0000FFFFLLU ) << 16 ) | ( ( seq.low & 0xFFFF0000FFFF0000LLU ) >> 16 );
        seq.low = ( ( seq.low & 0x00000000FFFFFFFFLLU ) << 32 ) | ( ( seq.low & 0xFFFFFFFF00000000LLU ) >> 32 );

        if ( seq_size < 32 )
        {
            seq.low >>= ( 64 - ( seq_size << 1 ) );
            return seq;
        }

        seq.high ^= 0xAAAAAAAAAAAAAAAALLU;
        seq.high = ( ( seq.high & 0x3333333333333333LLU ) << 2 ) | ( ( seq.high & 0xCCCCCCCCCCCCCCCCLLU ) >> 2 );
        seq.high = ( ( seq.high & 0x0F0F0F0F0F0F0F0FLLU ) << 4 ) | ( ( seq.high & 0xF0F0F0F0F0F0F0F0LLU ) >> 4 );
        seq.high = ( ( seq.high & 0x00FF00FF00FF00FFLLU ) << 8 ) | ( ( seq.high & 0xFF00FF00FF00FF00LLU ) >> 8 );
        seq.high = ( ( seq.high & 0x0000FFFF0000FFFFLLU ) << 16 ) | ( ( seq.high & 0xFFFF0000FFFF0000LLU ) >> 16 );
        seq.high = ( ( seq.high & 0x00000000FFFFFFFFLLU ) << 32 ) | ( ( seq.high & 0xFFFFFFFF00000000LLU ) >> 32 );
        ubyte8 temp = seq.high;
        seq.high = seq.low;
        seq.low = temp;
        seq.RightBitMove ( 128 - ( seq_size << 1 ) );
        return seq;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movb %sil, %al
movq %rdi, -0x18(%rbp)
movb %al, -0x19(%rbp)
movq -0x18(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x10(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x8(%rbp)
movabsq $-0x5555555555555556, %rax # imm = 0xAAAAAAAAAAAAAAAA
xorq -0x8(%rbp), %rax
movq %rax, -0x8(%rbp)
movabsq $0x3333333333333333, %rax # imm = 0x3333333333333333
andq -0x8(%rbp), %rax
shlq $0x2, %rax
movabsq $-0x3333333333333334, %rcx # imm = 0xCCCCCCCCCCCCCCCC
andq -0x8(%rbp), %rcx
shrq $0x2, %rcx
orq %rcx, %rax
movq %rax, -0x8(%rbp)
movabsq $0xf0f0f0f0f0f0f0f, %rax # imm = 0xF0F0F0F0F0F0F0F
andq -0x8(%rbp), %rax
shlq $0x4, %rax
movabsq $-0xf0f0f0f0f0f0f10, %rcx # imm = 0xF0F0F0F0F0F0F0F0
andq -0x8(%rbp), %rcx
shrq $0x4, %rcx
orq %rcx, %rax
movq %rax, -0x8(%rbp)
movabsq $0xff00ff00ff00ff, %rax # imm = 0xFF00FF00FF00FF
andq -0x8(%rbp), %rax
shlq $0x8, %rax
movabsq $-0xff00ff00ff0100, %rcx # imm = 0xFF00FF00FF00FF00
andq -0x8(%rbp), %rcx
shrq $0x8, %rcx
orq %rcx, %rax
movq %rax, -0x8(%rbp)
movabsq $0xffff0000ffff, %rax   # imm = 0xFFFF0000FFFF
andq -0x8(%rbp), %rax
shlq $0x10, %rax
movabsq $-0xffff00010000, %rcx  # imm = 0xFFFF0000FFFF0000
andq -0x8(%rbp), %rcx
shrq $0x10, %rcx
orq %rcx, %rax
movq %rax, -0x8(%rbp)
movabsq $0xffffffff, %rax       # imm = 0xFFFFFFFF
andq -0x8(%rbp), %rax
shlq $0x20, %rax
movabsq $-0x100000000, %rcx     # imm = 0xFFFFFFFF00000000
andq -0x8(%rbp), %rcx
shrq $0x20, %rcx
orq %rcx, %rax
movq %rax, -0x8(%rbp)
movsbl -0x19(%rbp), %eax
cmpl $0x20, %eax
jge 0x91d6
movsbl -0x19(%rbp), %eax
shll %eax
movl $0x40, %ecx
subl %eax, %ecx
movq -0x8(%rbp), %rax
movl %ecx, %ecx
shrq %cl, %rax
movq %rax, -0x8(%rbp)
jmp 0x92ed
movabsq $-0x5555555555555556, %rax # imm = 0xAAAAAAAAAAAAAAAA
xorq -0x10(%rbp), %rax
movq %rax, -0x10(%rbp)
movabsq $0x3333333333333333, %rax # imm = 0x3333333333333333
andq -0x10(%rbp), %rax
shlq $0x2, %rax
movabsq $-0x3333333333333334, %rcx # imm = 0xCCCCCCCCCCCCCCCC
andq -0x10(%rbp), %rcx
shrq $0x2, %rcx
orq %rcx, %rax
movq %rax, -0x10(%rbp)
movabsq $0xf0f0f0f0f0f0f0f, %rax # imm = 0xF0F0F0F0F0F0F0F
andq -0x10(%rbp), %rax
shlq $0x4, %rax
movabsq $-0xf0f0f0f0f0f0f10, %rcx # imm = 0xF0F0F0F0F0F0F0F0
andq -0x10(%rbp), %rcx
shrq $0x4, %rcx
orq %rcx, %rax
movq %rax, -0x10(%rbp)
movabsq $0xff00ff00ff00ff, %rax # imm = 0xFF00FF00FF00FF
andq -0x10(%rbp), %rax
shlq $0x8, %rax
movabsq $-0xff00ff00ff0100, %rcx # imm = 0xFF00FF00FF00FF00
andq -0x10(%rbp), %rcx
shrq $0x8, %rcx
orq %rcx, %rax
movq %rax, -0x10(%rbp)
movabsq $0xffff0000ffff, %rax   # imm = 0xFFFF0000FFFF
andq -0x10(%rbp), %rax
shlq $0x10, %rax
movabsq $-0xffff00010000, %rcx  # imm = 0xFFFF0000FFFF0000
andq -0x10(%rbp), %rcx
shrq $0x10, %rcx
orq %rcx, %rax
movq %rax, -0x10(%rbp)
movabsq $0xffffffff, %rax       # imm = 0xFFFFFFFF
andq -0x10(%rbp), %rax
shlq $0x20, %rax
movabsq $-0x100000000, %rcx     # imm = 0xFFFFFFFF00000000
andq -0x10(%rbp), %rcx
shrq $0x20, %rcx
orq %rcx, %rax
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x10(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x8(%rbp)
movsbl -0x19(%rbp), %eax
shll %eax
movl $0x80, %esi
subl %eax, %esi
leaq -0x10(%rbp), %rdi
callq 0x9300
movq -0x10(%rbp), %rax
movq -0x8(%rbp), %rdx
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax,%rax)