fix up a bug in multicore RAW interruption version codes
authorjzhou <jzhou>
Tue, 22 Jul 2008 19:10:04 +0000 (19:10 +0000)
committerjzhou <jzhou>
Tue, 22 Jul 2008 19:10:04 +0000 (19:10 +0000)
Robust/src/Main/Main.java
Robust/src/Makefile.raw.2
Robust/src/Makefile.raw.4
Robust/src/Makefile.raw.i.2
Robust/src/Makefile.raw.i.4
Robust/src/Runtime/multicoretask.c
Robust/src/Runtime/raw_interrupt.s
Robust/src/Runtime/raw_interrupt2.s [new file with mode: 0644]
Robust/src/Runtime/raw_interrupt4.s [new file with mode: 0644]

index 0d214bfd8eab8542cc498615f361c99283835266..33d7620589b781a9a3b3b824136c9b9f5700ee28 100644 (file)
@@ -308,6 +308,7 @@ public class Main {
                                          //int newRate = tint;
                                          //int newRate = (j+1)%2+1;
                                          int newRate = 1;
+                                         //int newRate = 10;
                                          /*do {
                                              tint = r.nextInt()%100;
                                          } while(tint <= 0);
index d063a4130907be52562425a46c5f6233a5c202bd..51996c247d62883dcad5ade3eb47f8b1c5d120be 100644 (file)
@@ -12,7 +12,7 @@ TILE_PATTERN = 4x2
 
 OBJECT_FILES_COMMON = multicoretask.o multicoreruntime.o Queue.o file.o math.o object.o \
                                          GenericHashtable.o SimpleHash.o ObjectHash.o socket.o checkpoint.o\
-                                         taskdefs.o methods.o mem.o raw_dataCache.o raw_interrupt.o
+                                         taskdefs.o methods.o mem.o raw_dataCache.o raw_interrupt2.o
                                          
 # this is for a multi-tile test
 include $(COMMONDIR)/Makefile.all
index 0bf349bbd842a51ea9ef612c4d8ef40e0c719a66..d7b768fafd7041b07f3ec23e991edb8bd7c14c5e 100644 (file)
@@ -12,7 +12,7 @@ TILE_PATTERN = 4x4
 
 OBJECT_FILES_COMMON = multicoretask.o multicoreruntime.o Queue.o file.o math.o object.o \
                                          GenericHashtable.o SimpleHash.o ObjectHash.o socket.o checkpoint.o\
-                                         taskdefs.o methods.o mem.o raw_dataCache.o raw_interrupt.o
+                                         taskdefs.o methods.o mem.o raw_dataCache.o raw_interrupt4.o
                                          
 # this is for a multi-tile test
 include $(COMMONDIR)/Makefile.all
index 4e557a1d1ccbd42182430705aee1bda98570998a..00afada21b051e363307b5fc37d32a2666ed4f28 100644 (file)
@@ -12,7 +12,7 @@ TILE_PATTERN = 4x2
 
 OBJECT_FILES_COMMON = multicoretask.o multicoreruntime.o Queue.o file.o math.o object.o \
                                          GenericHashtable.o SimpleHash.o ObjectHash.o socket.o checkpoint.o\
-                                         taskdefs.o methods.o mem.o raw_dataCache.o raw_interrupt.o
+                                         taskdefs.o methods.o mem.o raw_dataCache.o raw_interrupt2.o
                                          
 # this is for a multi-tile test
 include $(COMMONDIR)/Makefile.all
index a2e5180b81ee0466b94f026ae5b15571b2c2473f..e8f40f88d3d96e9ffac4d7ce6d49cf0b40707b3e 100644 (file)
@@ -12,7 +12,7 @@ TILE_PATTERN = 4x4
 
 OBJECT_FILES_COMMON = multicoretask.o multicoreruntime.o Queue.o file.o math.o object.o \
                                          GenericHashtable.o SimpleHash.o ObjectHash.o socket.o checkpoint.o\
-                                         taskdefs.o methods.o mem.o raw_dataCache.o raw_interrupt.o
+                                         taskdefs.o methods.o mem.o raw_dataCache.o raw_interrupt4.o
                                          
 # this is for a multi-tile test
 include $(COMMONDIR)/Makefile.all
index e00c5e4f03f5f7b9de9728a90474502f292172d2..6be7c0a77816b4f11a97cbdc0dd6043bfd739dff 100644 (file)
@@ -128,13 +128,13 @@ void flushAll(void) {
 
 #ifdef RAW
 void recvMsg() {
-       raw_test_pass(0xefee);
-       raw_user_interrupts_off();
-       raw_test_pass(0xef00);
+       //raw_test_pass(0xefee);
+       //raw_user_interrupts_off();
+       //raw_test_pass(0xef00);
        receiveObject();
-       raw_test_pass(0xefff);
-       raw_user_interrupts_on();
-       raw_test_pass(0xefef);
+       //raw_test_pass(0xefff);
+       //raw_user_interrupts_on();
+       //raw_test_pass(0xefef);
 }
 
 void begin() {
@@ -426,12 +426,13 @@ void run(void* arg) {
 #endif
                  raw_test_pass(0xee0e);
          }
+         raw_test_pass(0xee0f);
          
          if(!tocontinue) {
                  // check if stop
                  if(STARTUPCORE == corenum) {
                          if(isfirst) {
-                                 raw_test_pass(0xee0f);
+                                 raw_test_pass(0xee10);
                                  isfirst = false;
                          }
 #ifdef INTERRUPT
@@ -465,7 +466,7 @@ void run(void* arg) {
                                  }
                                  if(0 == sumsendobj) {
                                          // terminate 
-                                         raw_test_pass(0xee10);
+                                         raw_test_pass(0xee11);
                                          raw_test_done(1);     // All done.
                                  }
                          }
@@ -474,23 +475,23 @@ void run(void* arg) {
 #endif
                  } else {
                          if(!sendStall) {
-                                 raw_test_pass(0xee11);
+                                 raw_test_pass(0xee12);
                                  if(isfirst) {
                                          // wait for some time
                                          int halt = 10000;
-                                         raw_test_pass(0xee12);
+                                         raw_test_pass(0xee13);
                                          while(halt--){}
                                          isfirst = false;
-                                         raw_test_pass(0xee13);
+                                         raw_test_pass(0xee14);
                                  } else {
                                        // send StallMsg to startup core
-                                       raw_test_pass(0xee14);
+                                       raw_test_pass(0xee15);
                                        sendStall = transStallMsg(STARTUPCORE);
                                        isfirst = true;
                                  }
                          } else {
                                  isfirst = true;
-                                 raw_test_pass(0xee15);
+                                 raw_test_pass(0xee16);
                          }
                  }
          }
@@ -1464,6 +1465,7 @@ int receiveObject() {
                }
                return -1;
        }
+msg:
        raw_test_pass(0xcccc);
        while((gdn_input_avail() != 0) && (msgdataindex < msglength)) {
                msgdata[msgdataindex] = gdn_receive();
@@ -1691,6 +1693,9 @@ int receiveObject() {
                //msgdataindex = 0;
                msglength = 30;
                raw_test_pass(0xe886);
+               if(gdn_input_avail() != 0) {
+                       goto msg;
+               }
                return type;
        } else {
                // not a whole msg
@@ -2588,10 +2593,11 @@ void executetasks() {
        // require locks for this parameter
        getwritelock(parameter);
        grount = 0;
+       raw_user_interrupts_off();
        while(!lockflag) {
-#ifndef INTERRUPT
+//#ifndef INTERRUPT
                receiveObject();
-#endif
+//#endif
        }
 #ifndef INTERRUPT
        if(reside) {
@@ -2607,6 +2613,7 @@ void executetasks() {
 #ifndef INTERRUPT
        reside = false;
 #endif
+       raw_user_interrupts_on();
 
        if(grount == 0) {
                raw_test_pass(0xe994);
@@ -2691,6 +2698,11 @@ void executetasks() {
 #ifdef RAW
                  raw_test_pass(0xe995);
 #endif
+               // release grabbed locks
+               for(j = 0; j < i; ++j) {
+                       releasewritelock(taskpointerarray[j+OFFSET]);
+               }
+               releasewritelock(parameter);
            RUNFREE(currtpd->parameterArray);
            RUNFREE(currtpd);
            goto newtask;
@@ -2863,6 +2875,9 @@ void executetasks() {
       }
     }
   }
+#ifdef RAW
+       raw_test_pass(0xe999);
+#endif
 }
  
 /* This function processes an objects tags */
index 1581b4e46b88a0033918ed39c967b6ff248c0e35..2498ff50e66a80c9e6d32f88b5db0d14b627d856 100644 (file)
@@ -1,38 +1,18 @@
 #include <raw_asm.h>
 
-       .text
+.text
        .align  2
        .globl  setup_ints
        .ent    setup_ints
 setup_ints:    
-       # run main program
-       # set up switch
-#      mtsri   SW_FREEZE, 1
-#      la      $8, __sw_main
-#      mtsr    SW_PC, $8
-#      nop
-#      mtsri   SW_FREEZE, 0
-       
        # set up dynamic network
        uintoff
        intoff
 
        # set gdn_cfg
-#   la $8, ((XSIZE-1)<<27)|((YSIZE-1)<<22)|(XOFF<<17)|(YOFF<<12)|(LOG_XSIZE<<9)
        xor $8,$8,$8
-#ifdef Y1
        aui $8,$8,(3<<11)|(0 <<6)|(0 <<1)
        ori $8, (0 <<12)|(2<<9)
-#elif defined Y2
-       aui $8,$8,(3<<11)|(1 <<6)|(0 <<1)
-       ori $8, (0 <<12)|(2<<9)
-#elif defined Y4
-       aui $8,$8,(3<<11)|(3 <<6)|(0 <<1)
-       ori $8, (0 <<12)|(2<<9)
-#else
-       aui $8,$8,(3<<11)|(3 <<6)|(0 <<1)
-       ori $8, (0 <<12)|(2<<9)
-#endif
        mtsr    GDN_CFG,$8
 #      mtsr    PASS,$8
 
@@ -49,10 +29,9 @@ setup_ints:
 
        inton
        uinton
-
+       jr $31
        .end    setup_ints
 
-
 .macro empty_vec fail_code
         mtsri FAIL, \fail_code
 1:      b 1b
@@ -73,10 +52,48 @@ vec_extern:
 vec_timer:
         empty_vec 0x2304
 vec_gdn_avail:
-       sw      $2,-8($sp)
-#      la      $2,gdn_avail_handler
-#      jr      $2
-       jal recvMsg 
+       mtsri PASS, 0xef00
+       uintoff
+
+       addiu   $sp,$sp,-64
+       sw      $31,0x3c($sp)
+       sw      $30,0x38($sp)
+       sw      $23,0x34($sp)
+       sw      $22,0x30($sp)
+       sw      $21,0x2c($sp)
+       sw      $20,0x28($sp)
+       sw      $19,0x24($sp)
+       sw      $18,0x20($sp)
+       sw      $17,0x1c($sp)
+       sw      $16,0x18($sp)
+       sw      $7,0x14($sp)
+       sw      $6,0x10($sp)
+       sw      $5,0xc($sp)
+       sw      $4,0x8($sp)
+       sw      $3,0x4($sp)
+       sw      $2,0x0($sp)
+
+       jal receiveObject
+
+       lw      $31,0x3c($sp)
+       lw      $30,0x38($sp)
+       lw      $23,0x34($sp)
+       lw      $22,0x30($sp)
+       lw      $21,0x2c($sp)
+       lw      $20,0x28($sp)
+       lw      $19,0x24($sp)
+       lw      $18,0x20($sp)
+       lw      $17,0x1c($sp)
+       lw      $16,0x18($sp)
+       lw      $7,0x14($sp)
+       lw      $6,0x10($sp)
+       lw      $5,0xc($sp)
+       lw      $4,0x8($sp)
+       lw      $3,0x4($sp)
+       lw      $2,0x0($sp)
+       addiu   $sp,$sp,64
+
+       mtsri PASS, 0xefff
+       dret
 vec_event_counters:
         empty_vec 0x2306
-
diff --git a/Robust/src/Runtime/raw_interrupt2.s b/Robust/src/Runtime/raw_interrupt2.s
new file mode 100644 (file)
index 0000000..6c8620c
--- /dev/null
@@ -0,0 +1,100 @@
+#include <raw_asm.h>
+
+       .text
+       .align  2
+       .globl  setup_ints
+       .ent    setup_ints
+setup_ints:    
+       # set up dynamic network
+       uintoff
+       intoff
+
+       # set gdn_cfg
+       xor $8,$8,$8
+       aui $8,$8,(3<<11)|(1 <<6)|(0 <<1)
+       ori $8, (0 <<12)|(2<<9)
+       mtsr    GDN_CFG,$8
+#      mtsr    PASS,$8
+
+       # set exception vector
+    la $3, interrupt_table
+#      mtsri PASS, 0xaaa
+#      mtsr PASS, $3
+    mtsr EX_BASE_ADDR, $3
+
+       # set EX_MASK
+       mfsr    $8,EX_MASK
+       ori     $8,$8,0x20          # 1 << kVEC_GDN_AVAIL
+       mtsr    EX_MASK,$8
+
+       inton
+       uinton
+       jr $31
+       .end    setup_ints
+
+.macro empty_vec fail_code
+        mtsri FAIL, \fail_code
+1:      b 1b
+        nop
+        nop
+.endm
+
+interrupt_table:
+
+vec_gdn_refill:
+        empty_vec 0x2300
+vec_gdn_complete:
+        empty_vec 0x2301
+vec_trace:
+        empty_vec 0x2302
+vec_extern:
+        empty_vec 0x2303
+vec_timer:
+        empty_vec 0x2304
+vec_gdn_avail:
+       mtsri PASS, 0xef00
+       uintoff
+
+       addiu   $sp,$sp,-64
+       sw      $31,0x3c($sp)
+       sw      $30,0x38($sp)
+       sw      $23,0x34($sp)
+       sw      $22,0x30($sp)
+       sw      $21,0x2c($sp)
+       sw      $20,0x28($sp)
+       sw      $19,0x24($sp)
+       sw      $18,0x20($sp)
+       sw      $17,0x1c($sp)
+       sw      $16,0x18($sp)
+       sw      $7,0x14($sp)
+       sw      $6,0x10($sp)
+       sw      $5,0xc($sp)
+       sw      $4,0x8($sp)
+       sw      $3,0x4($sp)
+       sw      $2,0x0($sp)
+
+       jal receiveObject
+
+       lw      $31,0x3c($sp)
+       lw      $30,0x38($sp)
+       lw      $23,0x34($sp)
+       lw      $22,0x30($sp)
+       lw      $21,0x2c($sp)
+       lw      $20,0x28($sp)
+       lw      $19,0x24($sp)
+       lw      $18,0x20($sp)
+       lw      $17,0x1c($sp)
+       lw      $16,0x18($sp)
+       lw      $7,0x14($sp)
+       lw      $6,0x10($sp)
+       lw      $5,0xc($sp)
+       lw      $4,0x8($sp)
+       lw      $3,0x4($sp)
+       lw      $2,0x0($sp)
+       addiu   $sp,$sp,64
+
+       mtsri PASS, 0xefff
+       dret
+vec_event_counters:
+        empty_vec 0x2306
+
diff --git a/Robust/src/Runtime/raw_interrupt4.s b/Robust/src/Runtime/raw_interrupt4.s
new file mode 100644 (file)
index 0000000..3c9f697
--- /dev/null
@@ -0,0 +1,100 @@
+#include <raw_asm.h>
+
+       .text
+       .align  2
+       .globl  setup_ints
+       .ent    setup_ints
+setup_ints:    
+       # set up dynamic network
+       uintoff
+       intoff
+
+       # set gdn_cfg
+       xor $8,$8,$8
+       aui $8,$8,(3<<11)|(3 <<6)|(0 <<1)
+       ori $8, (0 <<12)|(2<<9)
+       mtsr    GDN_CFG,$8
+#      mtsr    PASS,$8
+
+       # set exception vector
+    la $3, interrupt_table
+#      mtsri PASS, 0xaaa
+#      mtsr PASS, $3
+    mtsr EX_BASE_ADDR, $3
+
+       # set EX_MASK
+       mfsr    $8,EX_MASK
+       ori     $8,$8,0x20          # 1 << kVEC_GDN_AVAIL
+       mtsr    EX_MASK,$8
+
+       inton
+       uinton
+       jr $31
+       .end    setup_ints
+
+.macro empty_vec fail_code
+        mtsri FAIL, \fail_code
+1:      b 1b
+        nop
+        nop
+.endm
+
+interrupt_table:
+
+vec_gdn_refill:
+        empty_vec 0x2300
+vec_gdn_complete:
+        empty_vec 0x2301
+vec_trace:
+        empty_vec 0x2302
+vec_extern:
+        empty_vec 0x2303
+vec_timer:
+        empty_vec 0x2304
+vec_gdn_avail:
+       mtsri PASS, 0xef00
+       uintoff
+
+       addiu   $sp,$sp,-64
+       sw      $31,0x3c($sp)
+       sw      $30,0x38($sp)
+       sw      $23,0x34($sp)
+       sw      $22,0x30($sp)
+       sw      $21,0x2c($sp)
+       sw      $20,0x28($sp)
+       sw      $19,0x24($sp)
+       sw      $18,0x20($sp)
+       sw      $17,0x1c($sp)
+       sw      $16,0x18($sp)
+       sw      $7,0x14($sp)
+       sw      $6,0x10($sp)
+       sw      $5,0xc($sp)
+       sw      $4,0x8($sp)
+       sw      $3,0x4($sp)
+       sw      $2,0x0($sp)
+
+       jal receiveObject
+
+       lw      $31,0x3c($sp)
+       lw      $30,0x38($sp)
+       lw      $23,0x34($sp)
+       lw      $22,0x30($sp)
+       lw      $21,0x2c($sp)
+       lw      $20,0x28($sp)
+       lw      $19,0x24($sp)
+       lw      $18,0x20($sp)
+       lw      $17,0x1c($sp)
+       lw      $16,0x18($sp)
+       lw      $7,0x14($sp)
+       lw      $6,0x10($sp)
+       lw      $5,0xc($sp)
+       lw      $4,0x8($sp)
+       lw      $3,0x4($sp)
+       lw      $2,0x0($sp)
+       addiu   $sp,$sp,64
+
+       mtsri PASS, 0xefff
+       dret
+vec_event_counters:
+        empty_vec 0x2306
+