// File: /workspace/github_c_makefile_star2_O0/ryo[P]shmqueue/shmqueue.c
// Function: shmqueue_keyvalue_delete
int
shmqueue_keyvalue_delete(struct shmqueue *shmq_header, uint8_t *key)
{
	struct shmqueue_header *header;
	struct shmqueue_item *item;
	uint32_t hashidx;

	header = shmq_header->header;
	hashidx = shmq_header->hash_callback(key) % header->sha_hashnum;

	shmqueue_lock(shmq_header);
	for (item = RTAILQ_FIRST(&header->sha_hashlist[hashidx], shmqueue_item);
	    item != NULL;
	    item = RTAILQ_NEXT(item, &header->sha_hashlist[hashidx], shmqueue_item, shi_hashlist)) {

		if (SHMQUEUE_STRCMP(KEYVALUE_KEY(&item->shi_keyvalue), key) == 0) {
			/* found! */

			/* remove from LRU list */
			RTAILQ_REMOVE(&header->sha_lrulist,
			    item, shmqueue_item, shi_list);
			/* remove from HASH list */
			RTAILQ_REMOVE(&header->sha_hashlist[item->shi_hashidx],
			    item, shmqueue_item, shi_hashlist);

			header->sha_item_inuse--;

			/* insert to FREE list */
			RTAILQ_INSERT_HEAD(&header->sha_freelist,
			    item, shmqueue_item, shi_list);

			shmqueue_unlock(shmq_header);
			return 0;
		}
	}
	shmqueue_unlock(shmq_header);

	return -1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x18(%rbp), %rdi
callq *%rax
movq -0x20(%rbp), %rcx
xorl %edx, %edx
divl 0x28(%rcx)
movl %edx, -0x2c(%rbp)
movq -0x10(%rbp), %rdi
callq 0x2350
movq -0x20(%rbp), %rax
addq $0x150, %rax            # imm = 0x150
movl -0x2c(%rbp), %ecx
shlq $0x4, %rcx
addq %rcx, %rax
cmpq $0x0, (%rax)
jne 0x35a0
xorl %eax, %eax
movq %rax, -0x38(%rbp)
jmp 0x35d3
movq -0x20(%rbp), %rax
addq $0x150, %rax            # imm = 0x150
movl -0x2c(%rbp), %ecx
shlq $0x4, %rcx
addq %rcx, %rax
movq (%rax), %rax
movq -0x20(%rbp), %rcx
addq $0x150, %rcx            # imm = 0x150
movl -0x2c(%rbp), %edx
shlq $0x4, %rdx
addq %rdx, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x37bf
movq -0x28(%rbp), %rdi
addq $0x24, %rdi
addq $0x8, %rdi
movq -0x18(%rbp), %rsi
callq 0x1060
cmpl $0x0, %eax
jne 0x3779
jmp 0x3606
movq -0x28(%rbp), %rax
cmpq $0x0, (%rax)
je 0x3630
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq -0x20(%rbp), %rdx
addq $0x10, %rdx
addq %rdx, %rax
movq %rcx, 0x8(%rax)
jmp 0x3640
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x28(%rbp), %rax
movq (%rax), %rcx
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x20(%rbp), %rdx
addq $0x10, %rdx
addq %rdx, %rax
movq %rcx, (%rax)
jmp 0x365f
movq -0x28(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x369c
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rcx
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x20(%rbp), %rdx
addq $0x150, %rdx            # imm = 0x150
movq -0x28(%rbp), %rsi
movl 0x20(%rsi), %esi
shlq $0x4, %rsi
addq %rsi, %rdx
addq %rdx, %rax
movq %rcx, 0x18(%rax)
jmp 0x36c0
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rcx
movq -0x20(%rbp), %rax
addq $0x150, %rax            # imm = 0x150
movq -0x28(%rbp), %rdx
movl 0x20(%rdx), %edx
shlq $0x4, %rdx
addq %rdx, %rax
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x20(%rbp), %rdx
addq $0x150, %rdx            # imm = 0x150
movq -0x28(%rbp), %rsi
movl 0x20(%rsi), %esi
shlq $0x4, %rsi
addq %rsi, %rdx
addq %rdx, %rax
movq %rcx, (%rax)
movq -0x20(%rbp), %rax
movl 0x34(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x34(%rax)
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rcx
movq %rax, (%rcx)
cmpq $0x0, %rax
je 0x372f
movq -0x28(%rbp), %rcx
movq -0x20(%rbp), %rax
subq %rax, %rcx
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq -0x20(%rbp), %rdx
addq %rdx, %rax
movq %rcx, 0x8(%rax)
jmp 0x3742
movq -0x28(%rbp), %rcx
movq -0x20(%rbp), %rax
subq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rcx
movq -0x20(%rbp), %rax
subq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movq -0x20(%rbp), %rcx
movq -0x20(%rbp), %rax
subq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x10(%rbp), %rdi
callq 0x2380
movl $0x0, -0x4(%rbp)
jmp 0x37cf
jmp 0x377b
movq -0x28(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x378e
xorl %eax, %eax
movq %rax, -0x40(%rbp)
jmp 0x37b2
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x20(%rbp), %rcx
addq $0x150, %rcx            # imm = 0x150
movl -0x2c(%rbp), %edx
shlq $0x4, %rdx
addq %rdx, %rcx
addq %rcx, %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x28(%rbp)
jmp 0x35db
movq -0x10(%rbp), %rdi
callq 0x2380
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl -0x4(%rbp), %eax
addq $0x40, %rsp
popq %rbp
retq
nopl (%rax,%rax)