more changes for rangePrefetch
authoradash <adash>
Tue, 6 Jan 2009 18:58:21 +0000 (18:58 +0000)
committeradash <adash>
Tue, 6 Jan 2009 18:58:21 +0000 (18:58 +0000)
Robust/src/ClassLibrary/System.java
Robust/src/IR/Flat/BuildFlat.java
Robust/src/Runtime/runtime.c
Robust/src/buildscript

index 711769e05f5889fc8100d5639095835a7a242d42..7dadfe2e8d880c23f03a6c586ef302c7d10b3857 100644 (file)
@@ -18,6 +18,6 @@ public class System {
 
   public static native void clearPrefetchCache();
 
-  public static native void rangePrefetch(Object o, short numoffset,  short[] offsets); //TODO Complete this definition
+  public static native void rangePrefetch(Object o, short[] offsets);
 
 }
index d7201101610f2e3800e1dd2d4c7dbae7ab9d5e1d..243f6a88d1b3aa6c262dff902284ccdbef1c2fae 100644 (file)
@@ -400,7 +400,7 @@ public class BuildFlat {
     FlatNode first=null;
     FlatNode last=null;
     TempDescriptor src_tmp = src_tmp=an.getSrc()==null ? TempDescriptor.tempFactory("srctmp",an.getDest().getType()) : TempDescriptor.tempFactory("srctmp",an.getSrc().getType());
-    
+
     //Get src value
     if (an.getSrc()!=null) {
       NodePair np_src=flattenExpressionNode(an.getSrc(),src_tmp);
@@ -662,7 +662,7 @@ public class BuildFlat {
            fon.addNext(fon2);
            last=fon2;
          }
-      return new NodePair(first, last);
+         return new NodePair(first, last);
        } //end of else
       }
     }
index ae9dbe15482426713088f00130eaf12bfd411eaf..52036b4ea54095a88526652a2853d779106e8f62 100644 (file)
@@ -108,16 +108,22 @@ void CALL00(___System______clearPrefetchCache____) {
   prehashClear();
 }
 
-void CALL12(___System______rangePrefetch____L___Object____S__AR_S, struct ___Object___ * ___o___, short ___numoffset___, struct ArrayObject * ___offsets___) {
+void CALL02(___System______rangePrefetch____L___Object_____AR_S, struct ___Object___ * ___o___, struct ArrayObject * ___offsets___) {
   /* Manual Prefetches to be inserted */
-  unsigned int oid;
-  oid = ((int *) VAR(___o___))[0];
+  //printf("DEBUG-> %s() ___Object___ * ___o___ = %x\n", __func__, VAR(___o___));
+  //printf("DEBUG-> %s() ArrayObject * = %x\n", __func__, VAR(___offsets___));
   int numoffset=VAR(___offsets___)->___length___;
   int i;
   short offArry[numoffset];
   for(i = 0; i<numoffset; i++) {
     offArry[i] = *((short *)(((char *)&VAR(___offsets___)->___length___) + sizeof(int) + i * sizeof(short)));
-    //printf("Testing-> offArry[%d] = %d\n", i, offArry[i]);
+    //printf("DEBUG-> offArry[%d] = %d\n", i, offArry[i]);
+  }
+  unsigned int oid;
+  if(((unsigned int)(VAR(___o___)) & 1) != 0) { //odd
+    oid =  (unsigned int) VAR(___o___); //outside transaction therefore just an oid
+  } else { //even
+    oid = (unsigned int) COMPOID(VAR(___o___)); //inside transaction therefore a pointer to oid
   }
   rangePrefetch(oid, (short)numoffset, offArry);
 }
index 05830c54b4525dd45fa7035ac282d774295925ce..b9a22578c18539634abee3b99873994258337d88 100755 (executable)
@@ -218,6 +218,9 @@ EXTRAOPTIONS="$EXTRAOPTIONS -DDEBUG"
 elif [[ $1 = '-dsmcaching' ]]
 then
 EXTRAOPTIONS="$EXTRAOPTIONS -DCACHE"
+elif [[ $1 = '-rangeprefetch' ]]
+then
+EXTRAOPTIONS="$EXTRAOPTIONS -DRANGEPREFETCH"
 elif [[ $1 = '-nooptimize' ]]
 then
 EXTRAOPTIONS="$EXTRAOPTIONS -O0"