struct pointerblock *next;
};
+//Need to check if pointers are transaction pointers
+//this also catches the special flag value of 1 for local copies
+#ifdef DSTM
+#define ENQUEUE(orig, dst) \
+ if ((!(((unsigned int)orig)&0x1))) { \
+ if (orig>=curr_heapbase&&orig<curr_heaptop) { \
+ void *copy; \
+ if (gc_createcopy(orig,©)) \
+ enqueue(copy);\
+ dst=copy; \
+ } \
+ }
+#elif defined(STM)
+#define ENQUEUE(orig, dst) \
+ if (orig>=curr_heapbase&&orig<curr_heaptop) { \
+ void *copy; \
+ if (gc_createcopy(orig,©)) \
+ enqueue(copy);\
+ dst=copy; \
+ }
+#define SENQUEUE(orig, dst) \
+ { \
+ void *copy; \
+ if (gc_createcopy(orig,©)) \
+ enqueue(copy);\
+ dst=copy; \
+ }
+#elif defined(FASTCHECK)
+#define ENQUEUE(orig, dst) \
+ if (((unsigned int)orig)!=1) { \
+ void *copy; \
+ if (gc_createcopy(orig,©)) \
+ enqueue(copy);\
+ dst=copy; }
+#else
+#define ENQUEUE(orig, dst) \
+ if (orig!=NULL) { \
+ void *copy; \
+ if (gc_createcopy(orig,©)) \
+ enqueue(copy); \
+ dst=copy; \
+ }
+#endif
struct garbagelist {
int size;