// File: /workspace/github_c_makefile_star2_O0/nilyang[P]redis-tdd-annotation/deps/jemalloc/include/jemalloc/internal/hash.h
// Function: hash
JEMALLOC_INLINE uint64_t
hash(const void *key, size_t len, uint64_t seed)
{
	const uint64_t m = UINT64_C(0xc6a4a7935bd1e995);
	const int r = 47;
	uint64_t h = seed ^ (len * m);
	const uint64_t *data = (const uint64_t *)key;
	const uint64_t *end = data + (len/8);
	const unsigned char *data2;

	assert(((uintptr_t)key & 0x7) == 0);

	while(data != end) {
		uint64_t k = *data++;

		k *= m;
		k ^= k >> r;
		k *= m;

		h ^= k;
		h *= m;
	}

	data2 = (const unsigned char *)data;
	switch(len & 7) {
	case 7: h ^= ((uint64_t)(data2[6])) << 48;
	case 6: h ^= ((uint64_t)(data2[5])) << 40;
	case 5: h ^= ((uint64_t)(data2[4])) << 32;
	case 4: h ^= ((uint64_t)(data2[3])) << 24;
	case 3: h ^= ((uint64_t)(data2[2])) << 16;
	case 2: h ^= ((uint64_t)(data2[1])) << 8;
	case 1: h ^= ((uint64_t)(data2[0]));
		h *= m;
	}

	h ^= h >> r;
	h *= m;
	h ^= h >> r;

	return (h);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movabsq $-0x395b586ca42e166b, %rax # imm = 0xC6A4A7935BD1E995
movq %rax, -0x20(%rbp)
movl $0x2f, -0x24(%rbp)
movq -0x18(%rbp), %rax
movabsq $-0x395b586ca42e166b, %rcx # imm = 0xC6A4A7935BD1E995
imulq -0x10(%rbp), %rcx
xorq %rcx, %rax
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq -0x10(%rbp), %rcx
shrq $0x3, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x40(%rbp)
jmp 0xd0ca0
jmp 0xd0ca2
movq -0x38(%rbp), %rax
cmpq -0x40(%rbp), %rax
je 0xd0d19
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x8, %rcx
movq %rcx, -0x38(%rbp)
movq (%rax), %rax
movq %rax, -0x50(%rbp)
movabsq $-0x395b586ca42e166b, %rax # imm = 0xC6A4A7935BD1E995
imulq -0x50(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
shrq $0x2f, %rax
xorq -0x50(%rbp), %rax
movq %rax, -0x50(%rbp)
movabsq $-0x395b586ca42e166b, %rax # imm = 0xC6A4A7935BD1E995
imulq -0x50(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
xorq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movabsq $-0x395b586ca42e166b, %rax # imm = 0xC6A4A7935BD1E995
imulq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
jmp 0xd0ca2
movq -0x38(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x10(%rbp), %rax
andl $0x7, %eax
decq %rax
movq %rax, -0x58(%rbp)
subq $0x6, %rax
ja 0xd0de7
movq -0x58(%rbp), %rax
leaq 0x1cd44(%rip), %rcx     # 0xeda88
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x48(%rbp), %rax
movzbl 0x6(%rax), %eax
shlq $0x30, %rax
xorq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x48(%rbp), %rax
movzbl 0x5(%rax), %eax
shlq $0x28, %rax
xorq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x48(%rbp), %rax
movzbl 0x4(%rax), %eax
shlq $0x20, %rax
xorq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x48(%rbp), %rax
movzbl 0x3(%rax), %eax
shlq $0x18, %rax
xorq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x48(%rbp), %rax
movzbl 0x2(%rax), %eax
shlq $0x10, %rax
xorq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x48(%rbp), %rax
movzbl 0x1(%rax), %eax
shlq $0x8, %rax
xorq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x48(%rbp), %rax
movzbl (%rax), %eax
xorq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movabsq $-0x395b586ca42e166b, %rax # imm = 0xC6A4A7935BD1E995
imulq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
shrq $0x2f, %rax
xorq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movabsq $-0x395b586ca42e166b, %rax # imm = 0xC6A4A7935BD1E995
imulq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
shrq $0x2f, %rax
xorq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
popq %rbp
retq