Exemple #1
0
void SMLmain() {
	sml_set_verbose(MSG_DEBUG);
	void *dummy_frame[3];
	printf("test %p %p %p\n", dummy_frame[0], dummy_frame[1], dummy_frame[2]);
	FRAME_HEADER(&dummy_frame[1]) = 0;
	printf("set ok %p %p %p\n", dummy_frame[0], dummy_frame[1], dummy_frame[2]);

	sml_control_start(&dummy_frame[1]);

	printf("test %p %p %p\n", dummy_frame[0], dummy_frame[1], dummy_frame[2]);

	void** dt = sml_obj_alloc(OBJTYPE_BOXED_ARRAY, 5000);
	void** data;

	sml_write(NULL, &data, dt);
/*
	dt[0]=sml_obj_alloc(OBJTYPE_BOXED_ARRAY, 8);
	data[0] = sml_obj_alloc(OBJTYPE_BOXED_ARRAY, 9);
	printf("GC start-----------\n");
	sml_objspace_dump();*/
	sml_heap_gc();
	printf("GC end----------- \n");
	sml_objspace_dump();

	sml_control_finish(&dummy_frame[1]);
}
Exemple #2
0
void
sml_copyary(void **src, unsigned int si, void **dst, unsigned int di,
	    unsigned int len)
{
	if (src == dst) {
		/* source array and dstination array may overlap */
		while (len > 0) {
			len--;
			sml_write(dst, dst + di + len, src[si + len]);
		}
	} else {
		while (len > 0) {
			sml_write(dst, dst + di, src[si]);
			di++, si++, len--;
		}
	}
}
Exemple #3
0
void
prim_CopyMemory(void *dst, unsigned int doff,
		const void *src, unsigned int soff,
		unsigned int len, unsigned int tag)
{
	void **writeaddr, **srcaddr;
	unsigned int i;

	ASSERT((tag == TAG_UNBOXED
		&& (OBJ_TYPE(dst) == OBJTYPE_UNBOXED_ARRAY
		    || OBJ_TYPE(dst) == OBJTYPE_UNBOXED_VECTOR))
	       || (tag == TAG_BOXED
		   && (OBJ_TYPE(dst) == OBJTYPE_BOXED_ARRAY
		       || OBJ_TYPE(dst) == OBJTYPE_BOXED_VECTOR)));
	ASSERT((tag == TAG_UNBOXED
		&& (OBJ_TYPE(src) == OBJTYPE_UNBOXED_ARRAY
		    || OBJ_TYPE(src) == OBJTYPE_UNBOXED_VECTOR))
	       || (tag == TAG_BOXED
		   && (OBJ_TYPE(src) == OBJTYPE_BOXED_ARRAY
		       || OBJ_TYPE(src) == OBJTYPE_BOXED_VECTOR)));
	ASSERT(doff + len <= OBJ_SIZE(dst));
	ASSERT(soff + len <= OBJ_SIZE(src));

	if (tag == TAG_UNBOXED) {
		memmove((char*)dst + doff, (char*)src + soff, len);
	} else if (src != dst || doff < soff) {
		writeaddr = (void**)((char*)dst + doff);
		srcaddr = (void**)((char*)src + soff);
		for (i = 0; i < len / sizeof(void*); i++)
			sml_write(dst, writeaddr++, *(srcaddr++));
	} else {
		writeaddr = (void**)((char*)dst + doff + len);
		srcaddr = (void**)((char*)src + soff + len);
		for (i = 0; i < len / sizeof(void*); i++)
			sml_write(dst, --writeaddr, *(--srcaddr));
	}
}
Exemple #4
0
void SMLmain() {
	sml_set_verbose(MSG_DEBUG);
	void *dummy_frame[3];
	printf("test %p %p %p\n", dummy_frame[0], dummy_frame[1], dummy_frame[2]);
	FRAME_HEADER(&dummy_frame[1]) = 0;
	printf("set ok %p %p %p\n", dummy_frame[0], dummy_frame[1], dummy_frame[2]);

	sml_control_start(&dummy_frame[1]);

	printf("test %p %p %p\n", dummy_frame[0], dummy_frame[1], dummy_frame[2]);

	void* data;
	sml_write(NULL, &data, sml_obj_alloc(OBJTYPE_BOXED_ARRAY, 5000));
	printf("frameptr %p\n", sml_load_frame_pointer());
	printf("GC start\n");
	sml_objspace_dump();
	sml_heap_gc();
	printf("GC end \n");
	sml_objspace_dump();

	sml_control_finish(&dummy_frame[1]);
}