// File: /workspace/github_cpp_makefile_star2_O2/UTSASRG[P]Guarder/./bibopheap.hh
// Function: BibopHeap::BibopObjCache::initialize(unsigned long, unsigned long, unsigned long*, BibopHeap::BibopFreeCache*, unsigned int)
void initialize(uintptr_t ustartaddr, uintptr_t uendaddr, uintptr_t * objectCache,
							BibopFreeCache * freeCache, unsigned shiftBits) {
					unsigned i;

          // Initialize each of the cache region object
          // counters to indicate an uninitialized object cache
          for(i = 0; i < NUM_CACHE_REGIONS; i++) {
              _regionCounters[i] = UNINITIALIZED_CACHE_REGION;
          }

					// Force the over-provisioning to choose a fresh set of objects
					_nextUp = BibopHeap::_overProvObjBufSize;

					_shiftBits = shiftBits;
					_classSize = (size_t)(1U << _shiftBits);

					// Check whether the current bag size can support the current
					// entropy setting (e.g., if any bag has fewer objects than
					// needed to fill its object cache or over-provisioning buffer,
					// then we cannot support the current entropy setting).
					unsigned numObjectsInBag = _bibopBagSize / _classSize;
					bool overProvFail = (numObjectsInBag < BibopHeap::_overProvObjBufSize);
					bool entropyFail = (numObjectsInBag < BibopHeap::_cacheSize);
					if(overProvFail) {
							PRERR("cannot support the given over-provisioning factor:");
							PRERR("           class size = %zu", _classSize);
							PRERR("   num objects in bag = %u", numObjectsInBag);
							PRERR("   over prov buf size = %u", BibopHeap::_overProvObjBufSize);
					}
					if(entropyFail) {
							PRERR("cannot support the given allocator entropy:");
							PRERR("           class size = %zu", _classSize);
							PRERR("   num objects in bag = %u", numObjectsInBag);
							PRERR("       obj cache size = %u", BibopHeap::_cacheSize);
					}
					if(overProvFail || entropyFail) { exit(EXIT_FAILURE); }

					_freeCache = freeCache;
					_numUsedObjects = 0;
					_heapTop = ustartaddr;		// next available object
					_bagEnd = uendaddr;				// last available object
					_objects = (void **)objectCache;
					_nextObjs = objectCache + BibopHeap::_cacheSize;
			}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rcx, %rax
movq %rdi, %rbx
xorl %ecx, %ecx
cmpq $0x8, %rcx
je 0x6934
orl $-0x1, 0x34(%rbx,%rcx,4)
incq %rcx
jmp 0x6924
movq 0x765d(%rip), %r14      # 0xdf98
movl (%r14), %edi
movl %edi, 0x28(%rbx)
pushq $0x1
popq %r10
movl %r9d, %ecx
shll %cl, %r10d
movl %r9d, 0x30(%rbx)
movq %r10, 0x10(%rbx)
movq 0x764e(%rip), %rcx      # 0xdfa8
movq (%rcx), %r15
movl %r9d, %ecx
shrq %cl, %r15
movq 0x7606(%rip), %r13      # 0xdf70
movl (%r13), %ebp
cmpl %r15d, %edi
ja 0x69ab
cmpl %r15d, %ebp
ja 0x6b16
movq %r8, 0x8(%rbx)
andl $0x0, 0x2c(%rbx)
movq %rsi, 0x20(%rbx)
movq %rdx, 0x18(%rbx)
movq %rax, 0x58(%rbx)
movl (%r13), %ecx
leaq (%rax,%rcx,8), %rax
movq %rax, 0x60(%rbx)
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x4200
movq %rax, %r12
callq 0x4280
movq %rax, 0x8(%rsp)
leaq 0x3083(%rip), %rdx      # 0x9a47
leaq 0x2baf(%rip), %r8       # 0x957a
movl $0x1000, %esi           # imm = 0x1000
movq %r12, %rdi
movq %rax, %rcx
movl $0x176, %r9d            # imm = 0x176
xorl %eax, %eax
callq 0x4560
callq 0x4200
movq %rax, %r12
callq 0x4200
movq %rax, %rdi
callq 0x4130
pushq $0x2
popq %rdi
movq %r12, %rsi
movq %rax, %rdx
callq 0x4100
callq 0x4200
movq 0x10(%rbx), %rcx
movq %rcx, (%rsp)
leaq 0x3084(%rip), %rdx      # 0x9a9e
movl $0x1000, %esi           # imm = 0x1000
movq %rax, %rdi
movq 0x8(%rsp), %r12
movq %r12, %rcx
leaq 0x2b49(%rip), %r8       # 0x957a
movl $0x177, %r9d            # imm = 0x177
xorl %eax, %eax
callq 0x4560
callq 0x4200
movq %rax, 0x10(%rsp)
callq 0x4200
movq %rax, %rdi
callq 0x4130
pushq $0x2
popq %rdi
movq 0x10(%rsp), %rsi
movq %rax, %rdx
callq 0x4100
callq 0x4200
movl %r15d, (%rsp)
leaq 0x3069(%rip), %rdx      # 0x9ade
movl $0x1000, %esi           # imm = 0x1000
movq %rax, %rdi
movq %r12, %rcx
leaq 0x2af3(%rip), %r8       # 0x957a
movl $0x178, %r9d            # imm = 0x178
xorl %eax, %eax
callq 0x4560
callq 0x4200
movq %rax, %r12
callq 0x4200
movq %rax, %rdi
callq 0x4130
pushq $0x2
popq %rdi
movq %r12, %rsi
movq %rax, %rdx
callq 0x4100
callq 0x4200
movl (%r14), %ecx
movl %ecx, (%rsp)
leaq 0x3054(%rip), %rdx      # 0x9b1d
movl $0x1000, %esi           # imm = 0x1000
movq %rax, %rdi
movq 0x8(%rsp), %rcx
leaq 0x2a9d(%rip), %r8       # 0x957a
movl $0x179, %r9d            # imm = 0x179
xorl %eax, %eax
callq 0x4560
callq 0x4200
movq %rax, %r14
callq 0x4200
movq %rax, %rdi
callq 0x4130
pushq $0x2
popq %rdi
movq %r14, %rsi
movq %rax, %rdx
callq 0x4100
cmpl %r15d, %ebp
jbe 0x6c66
callq 0x4200
movq %rax, %r12
callq 0x4280
movq %rax, %r14
leaq 0x302f(%rip), %rdx      # 0x9b5c
leaq 0x2a46(%rip), %r8       # 0x957a
movl $0x1000, %esi           # imm = 0x1000
movq %r12, %rdi
movq %rax, %rcx
movl $0x17c, %r9d            # imm = 0x17C
xorl %eax, %eax
callq 0x4560
callq 0x4200
movq %rax, %r12
callq 0x4200
movq %rax, %rdi
callq 0x4130
pushq $0x2
popq %rbp
movl %ebp, %edi
movq %r12, %rsi
movq %rax, %rdx
callq 0x4100
callq 0x4200
movq 0x10(%rbx), %rcx
movq %rcx, (%rsp)
leaq 0x2f19(%rip), %rdx      # 0x9a9e
movl $0x1000, %esi           # imm = 0x1000
movq %rax, %rdi
movq %r14, %rcx
leaq 0x29e3(%rip), %r12      # 0x957a
movq %r12, %r8
movl $0x17d, %r9d            # imm = 0x17D
xorl %eax, %eax
callq 0x4560
callq 0x4200
movq %rax, %rbx
callq 0x4200
movq %rax, %rdi
callq 0x4130
movl %ebp, %edi
movq %rbx, %rsi
movq %rax, %rdx
callq 0x4100
callq 0x4200
movl %r15d, (%rsp)
leaq 0x2f05(%rip), %rdx      # 0x9ade
movl $0x1000, %esi           # imm = 0x1000
movq %rax, %rdi
movq %r14, %rcx
movq %r12, %r8
movl $0x17e, %r9d            # imm = 0x17E
xorl %eax, %eax
callq 0x4560
callq 0x4200
movq %rax, %rbx
callq 0x4200
movq %rax, %rdi
callq 0x4130
movl %ebp, %edi
movq %rbx, %rsi
movq %rax, %rdx
callq 0x4100
callq 0x4200
movl (%r13), %ecx
movl %ecx, (%rsp)
leaq 0x2f83(%rip), %rdx      # 0x9bac
movl $0x1000, %esi           # imm = 0x1000
movq %rax, %rdi
movq %r14, %rcx
movq %r12, %r8
movl $0x17f, %r9d            # imm = 0x17F
xorl %eax, %eax
callq 0x4560
callq 0x4200
movq %rax, %rbx
callq 0x4200
movq %rax, %rdi
callq 0x4130
movl %ebp, %edi
movq %rbx, %rsi
movq %rax, %rdx
callq 0x4100
pushq $0x1
popq %rdi
callq 0x43e0