// File: /workspace/github_cpp_makefile_star2_O1/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 $0x38, %rsp
movq %r8, 0x20(%rsp)
movq %rcx, 0x30(%rsp)
movq %rdx, 0x28(%rsp)
movq %rdi, %r14
pcmpeqd %xmm0, %xmm0
movdqu %xmm0, 0x44(%rdi)
movdqu %xmm0, 0x34(%rdi)
movq 0x64ff(%rip), %rax      # 0xcf98
movl (%rax), %r13d
movl %r13d, 0x28(%rdi)
movl $0x1, %eax
movl %r9d, %ecx
shll %cl, %eax
movl %r9d, 0x30(%rdi)
movq %rax, 0x10(%rdi)
movq 0x64ef(%rip), %rax      # 0xcfa8
movq (%rax), %rbx
shrq %cl, %rbx
movq %rsi, 0x18(%rsp)
movq 0x64a5(%rip), %r12      # 0xcf70
movl (%r12), %eax
cmpl %ebx, %r13d
movl %eax, 0x14(%rsp)
jbe 0x6c40
callq 0x41e0
movq %rax, %r12
callq 0x4250
movq %rax, %rbp
leaq 0x2f54(%rip), %rdx      # 0x9a47
leaq 0x2a80(%rip), %r15      # 0x957a
movl $0x1000, %esi           # imm = 0x1000
movq %r12, %rdi
movq %rax, %rcx
movq %r15, %r8
movl $0x176, %r9d            # imm = 0x176
xorl %eax, %eax
callq 0x4490
callq 0x41e0
movq %rax, %r12
callq 0x41e0
movq %rax, %rdi
callq 0x4120
movl $0x2, %edi
movq %r12, %rsi
movq %rax, %rdx
callq 0x40f0
callq 0x41e0
movq 0x10(%r14), %rcx
movq %rcx, (%rsp)
leaq 0x2f50(%rip), %rdx      # 0x9a9e
movl $0x1000, %esi           # imm = 0x1000
movq %rax, %rdi
movq %rbp, %rcx
movq %r15, %r8
movl $0x177, %r9d            # imm = 0x177
xorl %eax, %eax
callq 0x4490
callq 0x41e0
movq %rax, %r12
callq 0x41e0
movq %rax, %rdi
callq 0x4120
movl $0x2, %edi
movq %r12, %rsi
movq %rax, %rdx
callq 0x40f0
callq 0x41e0
movl %ebx, (%rsp)
leaq 0x2f41(%rip), %rdx      # 0x9ade
movl $0x1000, %esi           # imm = 0x1000
movq %rax, %rdi
movq %rbp, %rcx
movq %r15, %r8
movl $0x178, %r9d            # imm = 0x178
xorl %eax, %eax
callq 0x4490
callq 0x41e0
movq %rax, %r12
callq 0x41e0
movq %rax, %rdi
callq 0x4120
movl $0x2, %edi
movq %r12, %rsi
movq 0x6394(%rip), %r12      # 0xcf70
movq %rax, %rdx
callq 0x40f0
callq 0x41e0
movq 0x63a8(%rip), %rcx      # 0xcf98
movl (%rcx), %ecx
movl %ecx, (%rsp)
leaq 0x2f21(%rip), %rdx      # 0x9b1d
movl $0x1000, %esi           # imm = 0x1000
movq %rax, %rdi
movq %rbp, %rcx
movq %r15, %r8
movl $0x179, %r9d            # imm = 0x179
xorl %eax, %eax
callq 0x4490
callq 0x41e0
movq %rax, %r15
callq 0x41e0
movq %rax, %rdi
callq 0x4120
movl $0x2, %edi
movq %r15, %rsi
movq %rax, %rdx
callq 0x40f0
movl 0x14(%rsp), %eax
cmpl %ebx, %eax
jbe 0x6da7
callq 0x41e0
movq %rax, %r12
callq 0x4250
movq %rax, %rbp
leaq 0x2efd(%rip), %rdx      # 0x9b5c
leaq 0x2914(%rip), %r15      # 0x957a
movl $0x1000, %esi           # imm = 0x1000
movq %r12, %rdi
movq %rax, %rcx
movq %r15, %r8
movl $0x17c, %r9d            # imm = 0x17C
xorl %eax, %eax
callq 0x4490
callq 0x41e0
movq %rax, %r12
callq 0x41e0
movq %rax, %rdi
callq 0x4120
movl $0x2, %edi
movq %r12, %rsi
movq %rax, %rdx
callq 0x40f0
callq 0x41e0
movq 0x10(%r14), %rcx
movq %rcx, (%rsp)
leaq 0x2de4(%rip), %rdx      # 0x9a9e
movl $0x1000, %esi           # imm = 0x1000
movq %rax, %rdi
movq %rbp, %rcx
movq %r15, %r8
movl $0x17d, %r9d            # imm = 0x17D
xorl %eax, %eax
callq 0x4490
callq 0x41e0
movq %rax, %r12
callq 0x41e0
movq %rax, %rdi
callq 0x4120
movl $0x2, %edi
movq %r12, %rsi
movq %rax, %rdx
callq 0x40f0
callq 0x41e0
movl %ebx, (%rsp)
leaq 0x2dd5(%rip), %rdx      # 0x9ade
movl $0x1000, %esi           # imm = 0x1000
movq %rax, %rdi
movq %rbp, %rcx
movq %r15, %r8
movl $0x17e, %r9d            # imm = 0x17E
xorl %eax, %eax
callq 0x4490
callq 0x41e0
movq %rax, %r12
callq 0x41e0
movq %rax, %rdi
callq 0x4120
movl $0x2, %edi
movq %r12, %rsi
movq 0x6228(%rip), %r12      # 0xcf70
movq %rax, %rdx
callq 0x40f0
callq 0x41e0
movl (%r12), %ecx
movl %ecx, (%rsp)
leaq 0x2e49(%rip), %rdx      # 0x9bac
movl $0x1000, %esi           # imm = 0x1000
movq %rax, %rdi
movq %rbp, %rcx
movq %r15, %r8
movl $0x17f, %r9d            # imm = 0x17F
xorl %eax, %eax
callq 0x4490
callq 0x41e0
movq %rax, %r15
callq 0x41e0
movq %rax, %rdi
callq 0x4120
movl $0x2, %edi
movq %r15, %rsi
movq %rax, %rdx
callq 0x40f0
movl 0x14(%rsp), %eax
cmpl %ebx, %r13d
ja 0x6df7
cmpl %ebx, %eax
ja 0x6df7
movq 0x20(%rsp), %rax
movq %rax, 0x8(%r14)
movl $0x0, 0x2c(%r14)
movq 0x18(%rsp), %rax
movq %rax, 0x20(%r14)
movq 0x28(%rsp), %rax
movq %rax, 0x18(%r14)
movq 0x30(%rsp), %rcx
movq %rcx, 0x58(%r14)
movl (%r12), %eax
leaq (%rcx,%rax,8), %rax
movq %rax, 0x60(%r14)
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x1, %edi
callq 0x4370
nop