make build system for benchmarks a little nicer
authorbdemsky <bdemsky>
Tue, 13 Oct 2009 23:58:58 +0000 (23:58 +0000)
committerbdemsky <bdemsky>
Tue, 13 Oct 2009 23:58:58 +0000 (23:58 +0000)
working toward word-based STM for arrays

Robust/src/Runtime/STM/tm.h
Robust/src/Runtime/garbage.c
Robust/src/Runtime/runtime.c

index 2384b30cc8fd53465fc640da96a4b37673b40d4e..faa297c54781a8950410b9dc8d7177240d330d07 100644 (file)
@@ -189,7 +189,11 @@ void objstrReset();
 void objstrDelete(objstr_t *store);
 objstr_t *objstrCreate(unsigned int size);
 void transStart();
+#ifdef STMARRAY
+objheader_t *transCreateObj(void * ptr, unsigned int size, int bytelength);
+#else
 objheader_t *transCreateObj(void * ptr, unsigned int size);
+#endif
 unsigned int getNewOID(void);
 void *objstrAlloc(unsigned int size);
 __attribute__((pure)) void *transRead(void *, void *);
index ddd77783ae045601008496fff5fd54ae6dc05694..72ed9e02b7fa8620ada36401a47642bed2f4c970 100644 (file)
@@ -859,10 +859,18 @@ int gc_createcopy(void * orig, void ** copy_ptr) {
       int elementsize=classsize[type];
       int length=ao->___length___;
 #ifdef STM
+#ifdef STAMARRAY
+      int versionspace=sizeof(int)*(length>>DBLINDEXSHIFT);
+      int size=sizeof(struct ArrayObject)+length*elementsize+sizeof(objheader_t)+versionspace;
+      void *newobj=tomalloc(size);
+      memcpy(newobj, ((char*)orig)-sizeof(objheader_t)-versionspace, size);
+      newobj=((char *)newobj)+sizeof(objheader_t)+versionspace;
+#else
       int size=sizeof(struct ArrayObject)+length*elementsize+sizeof(objheader_t);
       void *newobj=tomalloc(size);
       memcpy(newobj, ((char*)orig)-sizeof(objheader_t), size);
       newobj=((char *)newobj)+sizeof(objheader_t);
+#endif
 #else
       int size=sizeof(struct ArrayObject)+length*elementsize;
       void *newobj=tomalloc(size);
index b8240d22ef7d44db277961c944d2c6d604e0dd9b..1fa8f0a3cfad7f465c6e6a8a2abbe63b2a803820 100644 (file)
@@ -461,7 +461,11 @@ __attribute__((malloc)) struct ArrayObject * allocate_newarrayglobal(int type, i
 
 /* Object allocation function */
 __attribute__((malloc)) void * allocate_newtrans(void * ptr, int type) {
+#ifdef STMARRAY
+  struct ___Object___ * v=(struct ___Object___ *) transCreateObj(ptr, classsize[type], 0);
+#else
   struct ___Object___ * v=(struct ___Object___ *) transCreateObj(ptr, classsize[type]);
+#endif
   v->type=type;
   v->___objlocation___=v;
   return v;