Revert "Merge pull request #1219 from panzone/los_partial_marking"
[mono.git] / mono / metadata / sgen-scan-object.h
index 3ce147932ebd69e3286bb817c19827de2243ec7b..7cbe57a6c83e82f9c59d6dc7345120d2e2bf7540 100644 (file)
  * collection, not for debugging scans.
  */
 
- /* code using these macros must define a HANDLE_PTR(ptr) macro that does the work */
-#define OBJ_RUN_LEN_FOREACH_PTR(desc,obj)      do {    \
-               if ((desc) & 0xffff0000) {      \
-                       /* there are pointers */        \
-                       void **_objptr_end;     \
-                       void **_objptr = (void**)(obj); \
-                       _objptr += ((desc) >> 16) & 0xff;       \
-                       _objptr_end = _objptr + (((desc) >> 24) & 0xff);        \
-                       HANDLE_PTR (_objptr, (obj)); \
-                       _objptr ++; \
-                       while (_objptr < _objptr_end) { \
-                               HANDLE_PTR (_objptr, (obj));    \
-                               _objptr++;      \
-                       }       \
-               }       \
-       } while (0)
-
-#if defined(__GNUC__)
-#define OBJ_BITMAP_FOREACH_PTR(desc,obj)       do {    \
-               /* there are pointers */        \
-               void **_objptr = (void**)(obj); \
-               gsize _bmap = (desc) >> 16;     \
-               _objptr += OBJECT_HEADER_WORDS; \
-               { \
-                       int _index = GNUC_BUILTIN_CTZ (_bmap);          \
-                       _objptr += _index; \
-                       _bmap >>= (_index + 1);                         \
-                       HANDLE_PTR (_objptr, (obj));            \
-                       _objptr ++;                                                     \
-                       } \
-               while (_bmap) { \
-                       int _index = GNUC_BUILTIN_CTZ (_bmap);          \
-                       _objptr += _index; \
-                       _bmap >>= (_index + 1);                         \
-                       HANDLE_PTR (_objptr, (obj));            \
-                       _objptr ++;                                                     \
-               }                                                                               \
-       } while (0)
-#else
-#define OBJ_BITMAP_FOREACH_PTR(desc,obj)       do {    \
-               /* there are pointers */        \
-               void **_objptr = (void**)(obj); \
-               gsize _bmap = (desc) >> 16;     \
-               _objptr += OBJECT_HEADER_WORDS; \
-               while (_bmap) {                                            \
-                       if ((_bmap & 1)) {                                                                 \
-                               HANDLE_PTR (_objptr, (obj));                               \
-                       }                                                                                                  \
-                       _bmap >>= 1;                                                                       \
-                       ++_objptr;                                                                                 \
-               }                                                                                                          \
-       } while (0)
-#endif
-
-/* a bitmap desc means that there are pointer references or we'd have
- * choosen run-length, instead: add an assert to check.
- */
-#define OBJ_LARGE_BITMAP_FOREACH_PTR(desc,obj) do {    \
-               /* there are pointers */        \
-               void **_objptr = (void**)(obj); \
-               gsize _bmap = (desc) >> LOW_TYPE_BITS;  \
-               _objptr += OBJECT_HEADER_WORDS; \
-               while (_bmap) { \
-                       if ((_bmap & 1)) {      \
-                               HANDLE_PTR (_objptr, (obj));    \
-                       }       \
-                       _bmap >>= 1;    \
-                       ++_objptr;      \
-               }       \
-       } while (0)
-
-#define OBJ_COMPLEX_FOREACH_PTR(vt,obj)        do {    \
-               /* there are pointers */        \
-               void **_objptr = (void**)(obj); \
-               gsize *bitmap_data = sgen_get_complex_descriptor ((desc)); \
-               int bwords = (*bitmap_data) - 1;        \
-               void **start_run = _objptr;     \
-               bitmap_data++;  \
-               if (0) {        \
-                       MonoObject *myobj = (MonoObject*)obj;   \
-                       g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, (obj), (desc), myobj->vtable->klass->name_space, myobj->vtable->klass->name); \
-               }       \
-               while (bwords-- > 0) {  \
-                       gsize _bmap = *bitmap_data++;   \
-                       _objptr = start_run;    \
-                       /*g_print ("bitmap: 0x%x/%d at %p\n", _bmap, bwords, _objptr);*/        \
-                       while (_bmap) { \
-                               if ((_bmap & 1)) {      \
-                                       HANDLE_PTR (_objptr, (obj));    \
-                               }       \
-                               _bmap >>= 1;    \
-                               ++_objptr;      \
-                       }       \
-                       start_run += GC_BITS_PER_WORD;  \
-               }       \
-       } while (0)
-
-/* this one is untested */
-#define OBJ_COMPLEX_ARR_FOREACH_PTR(vt,obj)    do {    \
-               /* there are pointers */        \
-               gsize *mbitmap_data = sgen_get_complex_descriptor ((vt)->desc); \
-               int mbwords = (*mbitmap_data++) - 1;    \
-               int el_size = mono_array_element_size (vt->klass);      \
-               char *e_start = (char*)(obj) +  G_STRUCT_OFFSET (MonoArray, vector);    \
-               char *e_end = e_start + el_size * mono_array_length_fast ((MonoArray*)(obj));   \
-               if (0)                                                  \
-                        g_print ("found %d at %p (0x%zx): %s.%s\n", mbwords, (obj), (vt)->desc, vt->klass->name_space, vt->klass->name); \
-               while (e_start < e_end) {       \
-                       void **_objptr = (void**)e_start;       \
-                       gsize *bitmap_data = mbitmap_data;      \
-                       unsigned int bwords = mbwords;  \
-                       while (bwords-- > 0) {  \
-                               gsize _bmap = *bitmap_data++;   \
-                               void **start_run = _objptr;     \
-                               /*g_print ("bitmap: 0x%x\n", _bmap);*/  \
-                               while (_bmap) { \
-                                       if ((_bmap & 1)) {      \
-                                               HANDLE_PTR (_objptr, (obj));    \
-                                       }       \
-                                       _bmap >>= 1;    \
-                                       ++_objptr;      \
-                               }       \
-                               _objptr = start_run + GC_BITS_PER_WORD; \
-                       }       \
-                       e_start += el_size;     \
-               }       \
-       } while (0)
-
-#ifdef LOS_PARTIAL_SCAN        
-#define VECTOR_OBJECT_START(obj, obj_offset, el_size) (void**)(void**)((char*)(obj) + G_STRUCT_OFFSET (MonoArray, vector) + (obj_offset *el_size))
-#define VECTOR_OBJECT_END(obj, start, obj_offset, el_size) (void**)((char *)start + MIN((SGEN_MAX_PARTIAL_OFFSET)*(el_size) -1, (el_size) *(mono_array_length_fast((MonoArray*)(obj)) - obj_offset)))
-#else
-#define VECTOR_OBJECT_START(obj, obj_offset, el_size) (void**)((char*)(obj) + G_STRUCT_OFFSET (MonoArray, vector))
-#define VECTOR_OBJECT_END(obj, start, obj_offset, el_size) (void**)((char*)(start) + el_size * mono_array_length_fast ((MonoArray*)(obj)))
-#endif
-
-#define OBJ_VECTOR_FOREACH_PTR(desc,obj, obj_offset)   do {    \
-               /* note: 0xffffc000 excludes DESC_TYPE_V_PTRFREE */     \
-               if ((desc) & 0xffffc000) {                              \
-                       int el_size = ((desc) >> 3) & MAX_ELEMENT_SIZE; \
-                       /* there are pointers */        \
-                       int etype = (desc) & 0xc000;                    \
-                       if (etype == (DESC_TYPE_V_REFS << 14)) {        \
-                               void **p = VECTOR_OBJECT_START(obj,obj_offset,el_size); \
-                               void **end_refs = VECTOR_OBJECT_END(obj,p,obj_offset,el_size);  \
-                               /* Note: this code can handle also arrays of struct with only references in them */     \
-                               while (p < end_refs) {  \
-                                       HANDLE_PTR (p, (obj));  \
-                                       ++p;    \
-                               }       \
-                       } else if (etype == DESC_TYPE_V_RUN_LEN << 14) {        \
-                               int offset = ((desc) >> 16) & 0xff;     \
-                               int num_refs = ((desc) >> 24) & 0xff;   \
-                               char *e_start = (char*)(obj) + G_STRUCT_OFFSET (MonoArray, vector);     \
-                               char *e_end = e_start + el_size * mono_array_length_fast ((MonoArray*)(obj));   \
-                               while (e_start < e_end) {       \
-                                       void **p = (void**)e_start;     \
-                                       int i;  \
-                                       p += offset;    \
-                                       for (i = 0; i < num_refs; ++i) {        \
-                                               HANDLE_PTR (p + i, (obj));      \
-                                       }       \
-                                       e_start += el_size;     \
-                               }       \
-                       } else if (etype == DESC_TYPE_V_BITMAP << 14) { \
-                               char *e_start = (char*)(obj) +  G_STRUCT_OFFSET (MonoArray, vector);    \
-                               char *e_end = e_start + el_size * mono_array_length_fast ((MonoArray*)(obj));   \
-                               while (e_start < e_end) {       \
-                                       void **p = (void**)e_start;     \
-                                       gsize _bmap = (desc) >> 16;     \
-                                       /* Note: there is no object header here to skip */      \
-                                       while (_bmap) { \
-                                               if ((_bmap & 1)) {      \
-                                                       HANDLE_PTR (p, (obj));  \
-                                               }       \
-                                               _bmap >>= 1;    \
-                                               ++p;    \
-                                       }       \
-                                       e_start += el_size;     \
-                               }       \
-                       }       \
-               }       \
-       } while (0)
-
 {
 #ifndef SCAN_OBJECT_NOVTABLE
        GCVTable *vt;
 #undef SCAN
                break;
        case DESC_TYPE_VECTOR:
-#define SCAN OBJ_VECTOR_FOREACH_PTR (desc, start, obj_off)
+#define SCAN OBJ_VECTOR_FOREACH_PTR (desc, start)
 #ifndef SCAN_OBJECT_NOSCAN
                SCAN;
 #endif
 #undef SCAN_OBJECT_NOSCAN
 #undef SCAN_OBJECT_NOVTABLE
 #undef SCAN_OBJECT_PROTOCOL
-
-#undef OBJ_RUN_LEN_FOREACH_PTR
-#undef OBJ_BITMAP_FOREACH_PTR
-#undef OBJ_LARGE_BITMAP_FOREACH_PTR
-#undef OBJ_COMPLEX_FOREACH_PTR
-#undef OBJ_COMPLEX_ARR_FOREACH_PTR
-#undef VECTOR_OBJECT_START
-#undef VECTOR_OBJECT_END
-#undef OBJ_VECTOR_FOREACH_PTR
\ No newline at end of file