// File: ChnMasterOG[P]KmerGO2/kmc_api/mmer.h
// Function: CMmer::insert(char const*)
inline void CMmer::insert(const char* seq)
{
	switch (len)
	{
	case 5: 
		str = (seq[0] << 8) + (seq[1] << 6) + (seq[2] << 4) + (seq[3] << 2) + (seq[4]);
		break;
	case 6:
		str = (seq[0] << 10) + (seq[1] << 8) + (seq[2] << 6) + (seq[3] << 4) + (seq[4] << 2) + (seq[5]);
		break;
	case 7:
		str = (seq[0] << 12) + (seq[1] << 10) + (seq[2] << 8) + (seq[3] << 6) + (seq[4] << 4 ) + (seq[5] << 2) + (seq[6]);
		break;
	case 8:
		str = (seq[0] << 14) + (seq[1] << 12) + (seq[2] << 10) + (seq[3] << 8) + (seq[4] << 6) + (seq[5] << 4) + (seq[6] << 2) + (seq[7]);
		break;
	case 9:
		str = (seq[0] << 16) + (seq[1] << 14) + (seq[2] << 12) + (seq[3] << 10) + (seq[4] << 8) + (seq[5] << 6) + (seq[6] << 4) + (seq[7] << 2) + (seq[8]);
		break;
	case 10:
		str = (seq[0] << 18) + (seq[1] << 16) + (seq[2] << 14) + (seq[3] << 12) + (seq[4] << 10) + (seq[5] << 8) + (seq[6] << 6) + (seq[7] << 4) + (seq[8] << 2) + (seq[9]);
		break;
	case 11:
		str = (seq[0] << 20) + (seq[1] << 18) + (seq[2] << 16) + (seq[3] << 14) + (seq[4] << 12) + (seq[5] << 10) + (seq[6] << 8) + (seq[7] << 6) + (seq[8] << 4) + (seq[9] << 2) + (seq[10]);
		break;
	default:
		break;
	}

	current_val = norm[str];
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x20(%rbp)
movl 0x18(%rax), %eax
addl $-0x5, %eax
movl %eax, %ecx
movq %rcx, -0x18(%rbp)
subl $0x6, %eax
ja 0x428a65
movq -0x18(%rbp), %rax
leaq 0x18e714(%rip), %rcx    # 0x5b6e78
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
movsbl (%rcx), %ecx
shll $0x8, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x1(%rdx), %edx
shll $0x6, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x2(%rdx), %edx
shll $0x4, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x3(%rdx), %edx
shll $0x2, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x4(%rdx), %edx
addl %edx, %ecx
movl %ecx, (%rax)
jmp 0x428a67
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
movsbl (%rcx), %ecx
shll $0xa, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x1(%rdx), %edx
shll $0x8, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x2(%rdx), %edx
shll $0x6, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x3(%rdx), %edx
shll $0x4, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x4(%rdx), %edx
shll $0x2, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x5(%rdx), %edx
addl %edx, %ecx
movl %ecx, (%rax)
jmp 0x428a67
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
movsbl (%rcx), %ecx
shll $0xc, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x1(%rdx), %edx
shll $0xa, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x2(%rdx), %edx
shll $0x8, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x3(%rdx), %edx
shll $0x6, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x4(%rdx), %edx
shll $0x4, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x5(%rdx), %edx
shll $0x2, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x6(%rdx), %edx
addl %edx, %ecx
movl %ecx, (%rax)
jmp 0x428a67
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
movsbl (%rcx), %ecx
shll $0xe, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x1(%rdx), %edx
shll $0xc, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x2(%rdx), %edx
shll $0xa, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x3(%rdx), %edx
shll $0x8, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x4(%rdx), %edx
shll $0x6, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x5(%rdx), %edx
shll $0x4, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x6(%rdx), %edx
shll $0x2, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x7(%rdx), %edx
addl %edx, %ecx
movl %ecx, (%rax)
jmp 0x428a67
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
movsbl (%rcx), %ecx
shll $0x10, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x1(%rdx), %edx
shll $0xe, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x2(%rdx), %edx
shll $0xc, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x3(%rdx), %edx
shll $0xa, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x4(%rdx), %edx
shll $0x8, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x5(%rdx), %edx
shll $0x6, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x6(%rdx), %edx
shll $0x4, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x7(%rdx), %edx
shll $0x2, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x8(%rdx), %edx
addl %edx, %ecx
movl %ecx, (%rax)
jmp 0x428a67
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
movsbl (%rcx), %ecx
shll $0x12, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x1(%rdx), %edx
shll $0x10, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x2(%rdx), %edx
shll $0xe, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x3(%rdx), %edx
shll $0xc, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x4(%rdx), %edx
shll $0xa, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x5(%rdx), %edx
shll $0x8, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x6(%rdx), %edx
shll $0x6, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x7(%rdx), %edx
shll $0x4, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x8(%rdx), %edx
shll $0x2, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x9(%rdx), %edx
addl %edx, %ecx
movl %ecx, (%rax)
jmp 0x428a67
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
movsbl (%rcx), %ecx
shll $0x14, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x1(%rdx), %edx
shll $0x12, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x2(%rdx), %edx
shll $0x10, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x3(%rdx), %edx
shll $0xe, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x4(%rdx), %edx
shll $0xc, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x5(%rdx), %edx
shll $0xa, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x6(%rdx), %edx
shll $0x8, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x7(%rdx), %edx
shll $0x6, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x8(%rdx), %edx
shll $0x4, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0x9(%rdx), %edx
shll $0x2, %edx
addl %edx, %ecx
movq -0x10(%rbp), %rdx
movsbl 0xa(%rdx), %edx
addl %edx, %ecx
movl %ecx, (%rax)
jmp 0x428a67
jmp 0x428a67
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rcx
movl (%rax), %edx
movl (%rcx,%rdx,4), %ecx
movl %ecx, 0x8(%rax)
popq %rbp
retq
nopl (%rax)