// File: yangwanyuan[P]HLKVDS/./src/include/SLRUMap.h
// Function: dslab::SLRUMap<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>::Put(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, bool)
bool SLRUMap<K,D>::Put(K key , D data, K& ukey, D& udata, bool same){
	D ldata;
	if( Get(key, ldata) ){//key exists, it should be now in protect segment, the segments should have been renewed
		return protect.Put(key, data, ukey, udata, same);//always false, no kv poped
	}else{// key does not exist
		return probation.Put(key, data, ukey, udata, same);//poped out or not is determined by probation segment
	}
}

// Assembly:
subq $0x158, %rsp            # imm = 0x158
movq %rdx, 0x30(%rsp)
movq %rsi, 0x40(%rsp)
movb %r9b, %al
movq %rdi, 0x148(%rsp)
movq %rsi, 0x140(%rsp)
movq %rdx, 0x138(%rsp)
movq %rcx, 0x130(%rsp)
movq %r8, 0x128(%rsp)
andb $0x1, %al
movb %al, 0x127(%rsp)
movq 0x148(%rsp), %rax
movq %rax, 0x38(%rsp)
leaq 0x100(%rsp), %rdi
callq 0x86a0
movq 0x40(%rsp), %rsi
leaq 0xe0(%rsp), %rdi
callq 0x81a0
jmp 0x3cf03
movq 0x38(%rsp), %rdi
movq (%rdi), %rax
movq 0x18(%rax), %rax
leaq 0xe0(%rsp), %rsi
leaq 0x100(%rsp), %rdx
callq *%rax
movb %al, 0x2f(%rsp)
jmp 0x3cf27
leaq 0xe0(%rsp), %rdi
callq 0x8928
movb 0x2f(%rsp), %al
testb $0x1, %al
jne 0x3cf41
jmp 0x3d073
movq 0x40(%rsp), %rsi
movq 0x38(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x20(%rsp)
leaq 0xb0(%rsp), %rdi
callq 0x81a0
jmp 0x3cf63
movq 0x30(%rsp), %rsi
leaq 0x90(%rsp), %rdi
callq 0x81a0
jmp 0x3cf77
movq 0x20(%rsp), %rdi
movq 0x130(%rsp), %rcx
movq 0x128(%rsp), %r8
movzbl 0x127(%rsp), %r9d
andl $0x1, %r9d
leaq 0xb0(%rsp), %rsi
leaq 0x90(%rsp), %rdx
callq 0x3a110
movb %al, 0x1f(%rsp)
jmp 0x3cfb4
movb 0x1f(%rsp), %al
andb $0x1, %al
movb %al, 0x157(%rsp)
leaq 0x90(%rsp), %rdi
callq 0x8928
leaq 0xb0(%rsp), %rdi
callq 0x8928
movl $0x1, 0x8c(%rsp)
jmp 0x3d148
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xd8(%rsp)
movl %eax, 0xd4(%rsp)
jmp 0x3d166
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xd8(%rsp)
movl %eax, 0xd4(%rsp)
leaq 0xe0(%rsp), %rdi
callq 0x8928
jmp 0x3d166
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xd8(%rsp)
movl %eax, 0xd4(%rsp)
jmp 0x3d061
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xd8(%rsp)
movl %eax, 0xd4(%rsp)
leaq 0x90(%rsp), %rdi
callq 0x8928
leaq 0xb0(%rsp), %rdi
callq 0x8928
jmp 0x3d166
movq 0x40(%rsp), %rsi
movq 0x38(%rsp), %rax
addq $0x78, %rax
movq %rax, 0x10(%rsp)
leaq 0x68(%rsp), %rdi
callq 0x81a0
jmp 0x3d092
movq 0x30(%rsp), %rsi
leaq 0x48(%rsp), %rdi
callq 0x81a0
jmp 0x3d0a3
movq 0x10(%rsp), %rdi
movq 0x130(%rsp), %rcx
movq 0x128(%rsp), %r8
movzbl 0x127(%rsp), %r9d
andl $0x1, %r9d
leaq 0x68(%rsp), %rsi
leaq 0x48(%rsp), %rdx
callq 0x3a110
movb %al, 0xf(%rsp)
jmp 0x3d0da
movb 0xf(%rsp), %al
andb $0x1, %al
movb %al, 0x157(%rsp)
leaq 0x48(%rsp), %rdi
callq 0x8928
leaq 0x68(%rsp), %rdi
callq 0x8928
movl $0x1, 0x8c(%rsp)
jmp 0x3d148
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xd8(%rsp)
movl %eax, 0xd4(%rsp)
jmp 0x3d13c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xd8(%rsp)
movl %eax, 0xd4(%rsp)
leaq 0x48(%rsp), %rdi
callq 0x8928
leaq 0x68(%rsp), %rdi
callq 0x8928
jmp 0x3d166
leaq 0x100(%rsp), %rdi
callq 0x8928
movb 0x157(%rsp), %al
andb $0x1, %al
addq $0x158, %rsp            # imm = 0x158
retq
leaq 0x100(%rsp), %rdi
callq 0x8928
movq 0xd8(%rsp), %rdi
callq 0x8820