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]); }
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--; } } }
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)); } }
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]); }