// File: /workspace/github_c_makefile_star2_O0/nilyang[P]redis-tdd-annotation/deps/jemalloc/src/prof.c
// Function: prof_lookup
prof_thr_cnt_t *
prof_lookup(prof_bt_t *bt)
{
	union {
		prof_thr_cnt_t	*p;
		void		*v;
	} ret;
	prof_tdata_t *prof_tdata;

	cassert(config_prof);

	prof_tdata = prof_tdata_get();
	if ((uintptr_t)prof_tdata <= (uintptr_t)PROF_TDATA_STATE_MAX)
		return (NULL);

	if (ckh_search(&prof_tdata->bt2cnt, bt, NULL, &ret.v)) {
		union {
			prof_bt_t	*p;
			void		*v;
		} btkey;
		union {
			prof_ctx_t	*p;
			void		*v;
		} ctx;
		bool new_ctx;

		/*
		 * This thread's cache lacks bt.  Look for it in the global
		 * cache.
		 */
		prof_enter(prof_tdata);
		if (ckh_search(&bt2ctx, bt, &btkey.v, &ctx.v)) {
			/* bt has never been seen before.  Insert it. */
			ctx.v = imalloc(sizeof(prof_ctx_t));
			if (ctx.v == NULL) {
				prof_leave(prof_tdata);
				return (NULL);
			}
			btkey.p = bt_dup(bt);
			if (btkey.v == NULL) {
				prof_leave(prof_tdata);
				idalloc(ctx.v);
				return (NULL);
			}
			ctx.p->bt = btkey.p;
			ctx.p->lock = prof_ctx_mutex_choose();
			/*
			 * Set nlimbo to 1, in order to avoid a race condition
			 * with prof_ctx_merge()/prof_ctx_destroy().
			 */
			ctx.p->nlimbo = 1;
			memset(&ctx.p->cnt_merged, 0, sizeof(prof_cnt_t));
			ql_new(&ctx.p->cnts_ql);
			if (ckh_insert(&bt2ctx, btkey.v, ctx.v)) {
				/* OOM. */
				prof_leave(prof_tdata);
				idalloc(btkey.v);
				idalloc(ctx.v);
				return (NULL);
			}
			new_ctx = true;
		} else {
			/*
			 * Increment nlimbo, in order to avoid a race condition
			 * with prof_ctx_merge()/prof_ctx_destroy().
			 */
			malloc_mutex_lock(ctx.p->lock);
			ctx.p->nlimbo++;
			malloc_mutex_unlock(ctx.p->lock);
			new_ctx = false;
		}
		prof_leave(prof_tdata);

		/* Link a prof_thd_cnt_t into ctx for this thread. */
		if (ckh_count(&prof_tdata->bt2cnt) == PROF_TCMAX) {
			assert(ckh_count(&prof_tdata->bt2cnt) > 0);
			/*
			 * Flush the least recently used cnt in order to keep
			 * bt2cnt from becoming too large.
			 */
			ret.p = ql_last(&prof_tdata->lru_ql, lru_link);
			assert(ret.v != NULL);
			if (ckh_remove(&prof_tdata->bt2cnt, ret.p->ctx->bt,
			    NULL, NULL))
				assert(false);
			ql_remove(&prof_tdata->lru_ql, ret.p, lru_link);
			prof_ctx_merge(ret.p->ctx, ret.p);
			/* ret can now be re-used. */
		} else {
			assert(ckh_count(&prof_tdata->bt2cnt) < PROF_TCMAX);
			/* Allocate and partially initialize a new cnt. */
			ret.v = imalloc(sizeof(prof_thr_cnt_t));
			if (ret.p == NULL) {
				if (new_ctx)
					prof_ctx_destroy(ctx.p);
				return (NULL);
			}
			ql_elm_new(ret.p, cnts_link);
			ql_elm_new(ret.p, lru_link);
		}
		/* Finish initializing ret. */
		ret.p->ctx = ctx.p;
		ret.p->epoch = 0;
		memset(&ret.p->cnts, 0, sizeof(prof_cnt_t));
		if (ckh_insert(&prof_tdata->bt2cnt, btkey.v, ret.v)) {
			if (new_ctx)
				prof_ctx_destroy(ctx.p);
			idalloc(ret.v);
			return (NULL);
		}
		ql_head_insert(&prof_tdata->lru_ql, ret.p, lru_link);
		malloc_mutex_lock(ctx.p->lock);
		ql_tail_insert(&ctx.p->cnts_ql, ret.p, cnts_link);
		ctx.p->nlimbo--;
		malloc_mutex_unlock(ctx.p->lock);
	} else {
		/* Move ret to the front of the LRU. */
		ql_remove(&prof_tdata->lru_ql, ret.p, lru_link);
		ql_head_insert(&prof_tdata->lru_ql, ret.p, lru_link);
	}

	return (ret.p);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x10(%rbp)
jmp 0xce00e
jmp 0xce010
jmp 0xce012
callq 0xce560
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
cmpq $0x2, %rax
ja 0xce032
movq $0x0, -0x8(%rbp)
jmp 0xce54d
movq -0x20(%rbp), %rdi
movq -0x10(%rbp), %rsi
xorl %eax, %eax
movl %eax, %edx
leaq -0x18(%rbp), %rcx
callq 0xdbb10
testb $0x1, %al
jne 0xce050
jmp 0xce45e
movq -0x20(%rbp), %rdi
callq 0xce5a0
movq -0x10(%rbp), %rsi
leaq 0x5b384(%rip), %rdi     # 0x1293e8
leaq -0x28(%rbp), %rdx
leaq -0x30(%rbp), %rcx
callq 0xdbb10
testb $0x1, %al
jne 0xce07a
jmp 0xce166
movl $0x60, %edi
callq 0xce5d0
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0xce0a5
movq -0x20(%rbp), %rdi
callq 0xce600
movq $0x0, -0x8(%rbp)
jmp 0xce54d
movq -0x10(%rbp), %rdi
callq 0xce670
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0xce0d8
movq -0x20(%rbp), %rdi
callq 0xce600
movq -0x30(%rbp), %rdi
callq 0xce700
movq $0x0, -0x8(%rbp)
jmp 0xce54d
movq -0x28(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, (%rax)
callq 0xce720
movq %rax, %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x30(%rbp), %rax
movl $0x1, 0x10(%rax)
movq -0x30(%rbp), %rdi
addq $0x38, %rdi
xorl %esi, %esi
movl $0x20, %edx
callq 0x1f110
movq -0x30(%rbp), %rax
movq $0x0, 0x58(%rax)
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
leaq 0x5b2bb(%rip), %rdi     # 0x1293e8
callq 0xdb5d0
testb $0x1, %al
jne 0xce138
jmp 0xce160
movq -0x20(%rbp), %rdi
callq 0xce600
movq -0x28(%rbp), %rdi
callq 0xce700
movq -0x30(%rbp), %rdi
callq 0xce700
movq $0x0, -0x8(%rbp)
jmp 0xce54d
movb $0x1, -0x31(%rbp)
jmp 0xce191
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xce760
movq -0x30(%rbp), %rax
movl 0x10(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x10(%rax)
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xce780
movb $0x0, -0x31(%rbp)
movq -0x20(%rbp), %rdi
callq 0xce600
movq -0x20(%rbp), %rdi
callq 0xdb4d0
cmpq $0x400, %rax            # imm = 0x400
jne 0xce2a0
jmp 0xce1b1
jmp 0xce1b3
movq -0x20(%rbp), %rax
cmpq $0x0, 0x30(%rax)
je 0xce1d0
movq -0x20(%rbp), %rax
movq 0x30(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x40(%rbp)
jmp 0xce1d8
xorl %eax, %eax
movq %rax, -0x40(%rbp)
jmp 0xce1d8
movq -0x40(%rbp), %rax
movq %rax, -0x18(%rbp)
jmp 0xce1e2
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movq (%rax), %rsi
xorl %eax, %eax
movl %eax, %ecx
movq %rcx, %rdx
callq 0xdb840
testb $0x1, %al
jne 0xce203
jmp 0xce209
jmp 0xce205
jmp 0xce207
jmp 0xce209
jmp 0xce20b
movq -0x20(%rbp), %rax
movq 0x30(%rax), %rax
cmpq -0x18(%rbp), %rax
jne 0xce22d
movq -0x20(%rbp), %rax
movq 0x30(%rax), %rax
movq 0x10(%rax), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x20(%rbp), %rax
movq 0x30(%rax), %rax
cmpq -0x18(%rbp), %rax
je 0xce27f
jmp 0xce23d
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rcx
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x18(%rax)
movq -0x18(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x18(%rax)
jmp 0xce28b
movq -0x20(%rbp), %rax
movq $0x0, 0x30(%rax)
jmp 0xce28d
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rdi
movq -0x18(%rbp), %rsi
callq 0xce7a0
jmp 0xce30a
jmp 0xce2a2
jmp 0xce2a4
movl $0x50, %edi
callq 0xce5d0
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
jne 0xce2d5
testb $0x1, -0x31(%rbp)
je 0xce2c8
movq -0x30(%rbp), %rdi
callq 0xce900
movq $0x0, -0x8(%rbp)
jmp 0xce54d
jmp 0xce2d7
movq -0x18(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movq -0x18(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0xce2f0
movq -0x18(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x18(%rax)
jmp 0xce30a
movq -0x30(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x18(%rbp), %rax
movl $0x0, 0x28(%rax)
movq -0x18(%rbp), %rdi
addq $0x30, %rdi
xorl %esi, %esi
movl $0x20, %edx
callq 0x1f110
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0xdb5d0
testb $0x1, %al
jne 0xce34c
jmp 0xce371
testb $0x1, -0x31(%rbp)
je 0xce35b
movq -0x30(%rbp), %rdi
callq 0xce900
movq -0x18(%rbp), %rdi
callq 0xce700
movq $0x0, -0x8(%rbp)
jmp 0xce54d
jmp 0xce373
movq -0x20(%rbp), %rax
cmpq $0x0, 0x30(%rax)
je 0xce3c6
jmp 0xce380
movq -0x20(%rbp), %rax
movq 0x30(%rax), %rax
movq 0x18(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x20(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rcx
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rax
movq 0x30(%rax), %rax
movq %rcx, 0x18(%rax)
jmp 0xce3c6
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xce760
movq -0x30(%rbp), %rax
cmpq $0x0, 0x58(%rax)
je 0xce430
jmp 0xce3ec
movq -0x30(%rbp), %rax
movq 0x58(%rax), %rax
movq 0x8(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x30(%rbp), %rax
movq 0x58(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movq -0x18(%rbp), %rcx
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq %rcx, (%rax)
movq -0x18(%rbp), %rcx
movq -0x30(%rbp), %rax
movq 0x58(%rax), %rax
movq %rcx, 0x8(%rax)
jmp 0xce430
movq -0x18(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x58(%rax)
movq -0x30(%rbp), %rax
movl 0x10(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x10(%rax)
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xce780
jmp 0xce545
jmp 0xce460
movq -0x20(%rbp), %rax
movq 0x30(%rax), %rax
cmpq -0x18(%rbp), %rax
jne 0xce482
movq -0x20(%rbp), %rax
movq 0x30(%rax), %rax
movq 0x10(%rax), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x20(%rbp), %rax
movq 0x30(%rax), %rax
cmpq -0x18(%rbp), %rax
je 0xce4d4
jmp 0xce492
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rcx
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x18(%rax)
movq -0x18(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x18(%rax)
jmp 0xce4e0
movq -0x20(%rbp), %rax
movq $0x0, 0x30(%rax)
jmp 0xce4e2
jmp 0xce4e4
movq -0x20(%rbp), %rax
cmpq $0x0, 0x30(%rax)
je 0xce537
jmp 0xce4f1
movq -0x20(%rbp), %rax
movq 0x30(%rax), %rax
movq 0x18(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x20(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rcx
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rax
movq 0x30(%rax), %rax
movq %rcx, 0x18(%rax)
jmp 0xce537
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0xce545
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x40, %rsp
popq %rbp
retq
nopw (%rax,%rax)