// File: /workspace/github_cpp_makefile_star2_O3/gpertea[P]gclib/./GHash.hh
// Function: old::GHash<int>::Remove(char const*)
OBJ* GHash<OBJ>::Remove(const char* ky){
	int p,x,h,n;
	if(!ky){ GError("GHash::remove: NULL key argument.\n"); }
	OBJ* removed=NULL;
	if(0<fCount){
		h=GSTR_HASH(ky);
		GASSERT(0<=h);
		p=HASH1(h,fCapacity);
		GASSERT(0<=p && p<fCapacity);
		x=HASH2(h,fCapacity);
		GASSERT(1<=x && x<fCapacity);
		GASSERT(fCount<fCapacity);
		n=fCapacity;
		while(n && hash[p].hash!=-1){
			if(hash[p].hash==h && strcmp(hash[p].key,ky)==0){
				GTRACE(("GHash::remove: %08x removing: \"%s\"\n",this,ky));
				hash[p].hash=-2;
				if (hash[p].keyalloc) GFREE((hash[p].key));
				if (FREEDATA) (*fFreeProc)(hash[p].data);
				else removed=(OBJ*)hash[p].data;
				hash[p].key=NULL;
				hash[p].data=NULL;
				fCount--;
				if((100*fCount)<=(MIN_LOAD*fCapacity)) Resize(fCount);
				GASSERT(fCount<fCapacity);
				return removed;
			}
			p=(p+x)%fCapacity;
			n--;
		}
	}
	return removed;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rdi, %rbx
movq %rsi, 0x10(%rsp)
testq %rsi, %rsi
jne 0xb147
leaq 0x3725(%rip), %rdi      # 0xe865
xorl %eax, %eax
callq 0x286c
cmpl $0x0, 0x14(%rbx)
jle 0xb28d
movq 0x10(%rsp), %rdi
callq 0x3d9c
movl %eax, %esi
testl %eax, %eax
movq %rsi, (%rsp)
jns 0xb181
leaq 0x3669(%rip), %rdi      # 0xe7d5
leaq 0x3657(%rip), %rsi      # 0xe7ca
movl $0x18c, %edx            # imm = 0x18C
callq 0x282c
movq (%rsp), %rsi
leal (%rsi,%rsi,2), %eax
leal (%rsi,%rax,4), %eax
movl 0x10(%rbx), %edi
xorl %edx, %edx
divl %edi
movl %edx, %ebp
testl %edx, %edx
setns %al
cmpl %edi, %edx
setl %cl
testb %cl, %al
jne 0xb1bd
leaq 0x3635(%rip), %rdi      # 0xe7da
leaq 0x361e(%rip), %rsi      # 0xe7ca
movl $0x18e, %edx            # imm = 0x18E
callq 0x282c
movq (%rsp), %rsi
movl 0x10(%rbx), %edi
movl %esi, %eax
shll $0x4, %eax
addl %esi, %eax
leal -0x1(%rdi), %ecx
xorl %edx, %edx
divl %ecx
movl %edx, %r15d
orl $0x1, %r15d
testl %edx, %edx
setns %al
cmpl %edi, %r15d
setl %cl
testb %cl, %al
jne 0xb200
leaq 0x3606(%rip), %rdi      # 0xe7ee
leaq 0x35db(%rip), %rsi      # 0xe7ca
movl $0x190, %edx            # imm = 0x190
callq 0x282c
movq (%rsp), %rsi
movl 0x10(%rbx), %edi
cmpl %edi, 0x14(%rbx)
jl 0xb224
leaq 0x35ad(%rip), %rdi      # 0xe7b9
leaq 0x35b7(%rip), %rsi      # 0xe7ca
movl $0x191, %edx            # imm = 0x191
callq 0x282c
movq (%rsp), %rsi
movl 0x10(%rbx), %edi
testl %edi, %edi
je 0xb28d
movq %rbx, 0x18(%rsp)
movq 0x8(%rbx), %rcx
movl %edi, %ebx
movl %r15d, 0xc(%rsp)
movq %rdi, 0x20(%rsp)
movslq %ebp, %rax
leaq (%rax,%rax,2), %r14
movl 0xc(%rcx,%r14,8), %eax
cmpl $-0x1, %eax
je 0xb28d
cmpl %esi, %eax
jne 0xb27f
leaq (%rcx,%r14,8), %r12
movq (%r12), %r13
movq %r13, %rdi
movq 0x10(%rsp), %rsi
movq %rcx, %r15
callq 0x2350
movq %r15, %rcx
movq 0x20(%rsp), %rdi
movl 0xc(%rsp), %r15d
movq (%rsp), %rsi
testl %eax, %eax
je 0xb2a2
addl %r15d, %ebp
movl %ebp, %eax
cltd
idivl %edi
movl %edx, %ebp
decl %ebx
jne 0xb23d
xorl %r15d, %r15d
movq %r15, %rax
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0xfffffffe, 0xc(%r12)  # imm = 0xFFFFFFFE
cmpb $0x1, 0x8(%r12)
movq 0x18(%rsp), %rbx
jne 0xb2cd
testq %r13, %r13
je 0xb2c5
movq %r13, %rdi
callq 0x22e0
movq $0x0, (%r12)
movq 0x8(%rbx), %rax
movq 0x28(%rbx), %rcx
movq 0x10(%rax,%r14,8), %r15
testq %rcx, %rcx
je 0xb2eb
movq %r15, %rdi
callq *%rcx
movq 0x8(%rbx), %rax
xorl %r15d, %r15d
xorl %ecx, %ecx
movq %rcx, (%rax,%r14,8)
movq %rcx, 0x10(%rax,%r14,8)
movl 0x10(%rbx), %eax
movl 0x14(%rbx), %esi
decl %esi
movl %esi, 0x14(%rbx)
imull $0x64, %esi, %ecx
leal (%rax,%rax), %edx
leal (%rdx,%rdx,4), %edx
cmpl %edx, %ecx
jg 0xb31c
movq %rbx, %rdi
callq 0xb98a
movl 0x10(%rbx), %eax
movl 0x14(%rbx), %esi
cmpl %eax, %esi
jl 0xb290
leaq 0x348e(%rip), %rdi      # 0xe7b9
leaq 0x3498(%rip), %rsi      # 0xe7ca
movl $0x19e, %edx            # imm = 0x19E
callq 0x282c
jmp 0xb290
nop