Example #1
0
/*
 * divide_freeNode - make
 *  |FREE| ->  |empty(newsize)|FREE|.
 *  
 *  empty spaces will be used for malloc.
 *
 */
void divide_freeNode(FREE target, size_t newsize)
{
	size_t oldsize = FSIZE(target);
	if(newsize >= oldsize) return;
	void* newtarget = (char*)target + newsize;
	delete_free(target);
	insert_free(target,newsize);
	insert_free(newtarget,oldsize-newsize);
	return;
}
Example #2
0
/*
 * merge_free - merging two nodes
 *  delete two nodes and re-insert left.
 *
 */
void merge_free(FREE left, FREE right)
{
	if(left == right) return;
	delete_free(left);
	delete_free(right);
	insert_free(left, FSIZE(left) + FSIZE(right));
	return;
}
Example #3
0
/*
 * mm_free - Freeing a block inserts new free chunks to explicit list/tree
 * and tries merging free chunks.
 */
void mm_free(void *ptr)
{
	MALLOC toFree = P_TO_M(ptr);
	insert_free(toFree,MSIZE(toFree));
	merge_freeChunks(toFree);
	//mm_check();
	return;
}
Example #4
0
/*
 * divide_malloc - 
 *  if size > newsize, make
 *   |MALLOC(size)| -> |MALLOC(newsize)|FREE|.
 *
 *
 */
void divide_malloc(MALLOC target, size_t newsize)
{
	size_t oldsize = MSIZE(target);
	if(newsize >= oldsize) return;
	void* newtarget = (char*)target + newsize;
	setAllocatedBlockSize(target,newsize);
	insert_free(newtarget, oldsize-newsize);
	return;
}
Example #5
0
void FpuStackAllocator::clear_fpu_stack(LIR_Opr preserve) {
  int result_stack_size = (preserve->is_fpu_register() && !preserve->is_xmm_register() ? 1 : 0);
  while (sim()->stack_size() > result_stack_size) {
    assert(!sim()->slot_is_empty(0), "not allowed");

    if (result_stack_size == 0 || sim()->get_slot(0) != fpu_num(preserve)) {
      insert_free(0);
    } else {
      // move "preserve" to bottom of stack so that all other stack slots can be popped
      insert_exchange(sim()->stack_size() - 1);
    }
  }
}
Example #6
0
void FpuStackAllocator::insert_free_if_dead(LIR_Opr opr, LIR_Opr ignore) {
  if (fpu_num(opr) != fpu_num(ignore) && sim()->contains(fpu_num(opr))) {
    int res_slot = tos_offset(opr);
    insert_free(res_slot);
  }
}