예제 #1
0
파일: dseg.c 프로젝트: jiangxilong/yari
static s4 dseg_add_double_intern(codegendata *cd, double value, u4 flags)
{
	dsegentry *de;
		
	/* Increase data segment size, which is also the displacement into
	   the data segment. */

	cd->dseglen = MEMORY_ALIGN(cd->dseglen + 8, 8);

	/* allocate new entry */

	de = DNEW(dsegentry);

	de->type  = TYPE_DBL;
	de->flags = flags;
	de->disp  = -(cd->dseglen);
	de->val.d = value;
	de->next  = cd->dseg;

	/* insert into the chain */

	cd->dseg = de;

	return de->disp;
}
예제 #2
0
파일: dseg.c 프로젝트: jiangxilong/yari
static s4 dseg_add_address_intern(codegendata *cd, void *value, u4 flags)
{
	dsegentry *de;

	/* Increase data segment size, which is also the displacement into
	   the data segment. */

#if SIZEOF_VOID_P == 8
	cd->dseglen = MEMORY_ALIGN(cd->dseglen + 8, 8);
#else
	cd->dseglen += 4;
#endif

	/* allocate new entry */

	de = DNEW(dsegentry);

	de->type  = TYPE_ADR;
	de->flags = flags;
	de->disp  = -(cd->dseglen);
	de->val.a = value;
	de->next  = cd->dseg;

	/* insert into the chain */

	cd->dseg = de;

	return de->disp;
}
예제 #3
0
파일: nogc.c 프로젝트: jiangxilong/yari
void gc_init(u4 heapmaxsize, u4 heapstartsize)
{
	heapmaxsize = MEMORY_ALIGN(heapmaxsize, ALIGNSIZE);

#if defined(HAVE_MMAP)
	mmapptr = mmap((void *) MMAP_HEAPADDRESS,
				   (size_t) heapmaxsize,
				   PROT_READ | PROT_WRITE,
				   MAP_PRIVATE |
# if defined(MAP_ANONYMOUS)
				   MAP_ANONYMOUS,
# elif defined(MAP_ANON)
				   MAP_ANON,
# else
				   0,
# endif
				   -1,
				   (off_t) 0);

	if (mmapptr == MAP_FAILED)
		vm_abort("gc_init: out of memory");

#else
	mmapptr = malloc(heapmaxsize);
	
	if (!mmapptr)
		vm_abort("heap_allocate: out of memory");
#endif
	
	mmapsize = heapmaxsize;
	mmaptop = (void *) ((ptrint) mmapptr + mmapsize);

}
예제 #4
0
static size_t aligned_datasize(size_t objsize)
{
	if (objsize < MEMORY_POOL_DATA_MIN_SIZE) {
		objsize = MEMORY_POOL_DATA_MIN_SIZE;
	}
	return MEMORY_ALIGN(objsize);
}
예제 #5
0
static void jcode_align_bytecode_index(jcode_t *jc, s4 align) {
	s4 idx, aidx;

	idx = jc->offset + (jc->pos - jc->start);
	aidx = MEMORY_ALIGN(idx, align);

	jc->pos += (aidx - idx);
}
예제 #6
0
파일: headers.c 프로젝트: jiangxilong/yari
static void addoutputsize (int len)
{
	u4 newsize,i;
	if (!dopadding) return;

	newsize = MEMORY_ALIGN(outputsize, len);
	
	for (i = outputsize; i < newsize; i++) fprintf(file, "   u1 pad%d\n", (int) i);
	outputsize = newsize;
}
예제 #7
0
파일: nogc.c 프로젝트: jiangxilong/yari
void *heap_allocate(u4 size, bool references, methodinfo *finalizer)
{
	void *m;

	mmapptr = (void *) MEMORY_ALIGN((ptrint) mmapptr, ALIGNSIZE);
	
	m = mmapptr;
	mmapptr = (void *) ((ptrint) mmapptr + size);

	if (mmapptr > mmaptop)
		vm_abort("heap_allocate: out of memory");

	MSET(m, 0, u1, size);

	return m;
}
예제 #8
0
static size_t aligned_pagesize(size_t objsize, int page_n_obj)
{
	size_t pagesize = MEMORY_POOL_DATA_MIN_SIZE + objsize * page_n_obj;
	return MEMORY_ALIGN(pagesize);
}