// File: /workspace/github_cpp_makefile_star2_O2/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 $0x18, %rsp
movq %rdi, %rbx
movq %rsi, 0x8(%rsp)
testq %rsi, %rsi
jne 0x9fb3
leaq 0x2869(%rip), %rdi      # 0xc815
xorl %eax, %eax
callq 0x25ca
cmpl $0x0, 0x14(%rbx)
jle 0xa0df
movq 0x8(%rsp), %rdi
callq 0x3a8c
movl %eax, %esi
testl %eax, %eax
movl %eax, (%rsp)
jns 0x9feb
leaq 0x27ae(%rip), %rdi      # 0xc785
leaq 0x279c(%rip), %rsi      # 0xc77a
movl $0x18c, %edx            # imm = 0x18C
callq 0x258c
movl (%rsp), %esi
imull $0xd, %esi, %eax
movl 0x10(%rbx), %r15d
xorl %edx, %edx
divl %r15d
movl %edx, %r12d
testl %edx, %edx
setns %al
cmpl %r15d, %edx
setl %cl
testb %cl, %al
jne 0xa028
leaq 0x277a(%rip), %rdi      # 0xc78a
leaq 0x2763(%rip), %rsi      # 0xc77a
movl $0x18e, %edx            # imm = 0x18E
callq 0x258c
movl (%rsp), %esi
movl 0x10(%rbx), %r15d
imull $0x11, %esi, %eax
leal -0x1(%r15), %ecx
xorl %edx, %edx
divl %ecx
movl %edx, %ecx
orl $0x1, %ecx
testl %edx, %edx
setns %al
movl %ecx, 0x4(%rsp)
cmpl %r15d, %ecx
setl %cl
testb %cl, %al
jne 0xa06a
leaq 0x274c(%rip), %rdi      # 0xc79e
leaq 0x2721(%rip), %rsi      # 0xc77a
movl $0x190, %edx            # imm = 0x190
callq 0x258c
movl (%rsp), %esi
movl 0x10(%rbx), %r15d
cmpl %r15d, 0x14(%rbx)
jl 0xa08f
leaq 0x26f2(%rip), %rdi      # 0xc769
leaq 0x26fc(%rip), %rsi      # 0xc77a
movl $0x191, %edx            # imm = 0x191
callq 0x258c
movl (%rsp), %esi
movl 0x10(%rbx), %r15d
movq %rbx, 0x10(%rsp)
movq 0x8(%rbx), %rbp
movl %r15d, %ebx
subl $0x1, %ebx
jb 0xa0df
movslq %r12d, %rax
imulq $0x18, %rax, %r14
movl 0xc(%rbp,%r14), %eax
cmpl $-0x1, %eax
je 0xa0df
cmpl %esi, %eax
jne 0xa0ce
leaq (%r14,%rbp), %r13
movq (%r13), %rdi
movq 0x8(%rsp), %rsi
callq 0x2350
movl (%rsp), %esi
testl %eax, %eax
je 0xa0f4
addl 0x4(%rsp), %r12d
movl %r12d, %eax
cltd
idivl %r15d
movl %edx, %r12d
jmp 0xa09b
xorl %r15d, %r15d
movq %r15, %rax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0xfffffffe, 0xc(%r13)  # imm = 0xFFFFFFFE
cmpb $0x1, 0x8(%r13)
jne 0xa10b
movq %r13, %rdi
callq 0x420d
movq 0x10(%rsp), %rbx
movq 0x8(%rbx), %rax
movq 0x28(%rbx), %rcx
movq 0x10(%rax,%r14), %r15
testq %rcx, %rcx
je 0xa12e
movq %r15, %rdi
callq *%rcx
movq 0x8(%rbx), %rax
xorl %r15d, %r15d
andq $0x0, (%rax,%r14)
andq $0x0, 0x10(%rax,%r14)
movl 0x10(%rbx), %eax
movl 0x14(%rbx), %esi
decl %esi
movl %esi, 0x14(%rbx)
imull $0x64, %esi, %ecx
imull $0xa, %eax, %edx
cmpl %edx, %ecx
jg 0xa15c
movq %rbx, %rdi
callq 0xa6fc
movl 0x10(%rbx), %eax
movl 0x14(%rbx), %esi
cmpl %eax, %esi
jl 0xa0e2
leaq 0x2602(%rip), %rdi      # 0xc769
leaq 0x260c(%rip), %rsi      # 0xc77a
movl $0x19e, %edx            # imm = 0x19E
callq 0x258c
jmp 0xa0e2
nop