add Fleet.getMaxCodeBagSize() and makeCodeBagDescriptor()
[fleet.git] / src / edu / berkeley / fleet / two / FleetTwoFleet.java
index 2f9cb5b..7e3ee4f 100644 (file)
@@ -108,10 +108,8 @@ public abstract class FleetTwoFleet extends Fleet {
             P_OLC_NONZERO              = new Mask(".010000..............................");
             P_ALWAYS                   = new Mask(".000000..............................");
 
-
-            // use these when Marina gets updated to 07-Jan-2009 version of internal encoding
             HEAD                       = new Mask(".......1.............................");
-            ABORT                      = new Mask("........1............................");
+            ABORT                      = new Mask("........1......1.........000100000001");
             TAIL                       = new Mask(".........1...........................");
 
             // actually "is interruptible"
@@ -132,13 +130,13 @@ public abstract class FleetTwoFleet extends Fleet {
             PATH_DATA                  = new Mask("............1..........00............");
             PATH_NOCHANGE              = new Mask("............1..........01............");
 
+            SET_OLC_FROM_OLC_MINUS_ONE = new Mask(".............1..1....................");
+            SET_OLC_FROM_DATA_LATCH    = new Mask("..............1.11...................");
             SET_OLC_FROM_IMMEDIATE     = new Mask("..............1.10.............vvvvvv");
-            SET_OLC_FROM_DATA_LATCH    = new Mask("...............1.11..................");
-            SET_OLC_FROM_OLC_MINUS_ONE = new Mask("...............1.10..................");
 
-            SET_ILC_FROM_IMMEDIATE     = new Mask("...............1.00..........0.vvvvvv");
-            SET_ILC_FROM_INFINITY      = new Mask("...............1.0...........1.......");
-            SET_ILC_FROM_DATA_LATCH    = new Mask("...............1.01..................");
+            SET_ILC_FROM_DATA_LATCH    = new Mask("..............1.01...................");
+            SET_ILC_FROM_IMMEDIATE     = new Mask("..............1.00...........0.vvvvvv");
+            SET_ILC_FROM_INFINITY      = new Mask("..............1.0............1.......");
 
             SET_FLAGS                  = new Mask("...............1.....................");
             SET_FLAGS_A                = new Mask("...............1...............vvvvvv");
@@ -263,6 +261,19 @@ public abstract class FleetTwoFleet extends Fleet {
     public int getShiftWidth() { return SHIFT.valmaskwidth; }
     public int getSetWidth() { return SET_IMMEDIATE.valmaskwidth+1; }
 
+
+    public int getMaxCodeBagSize() {
+        return (1<<CBD_SIZE.valmaskwidth)-1;
+    }
+    public BitVector makeCodeBagDescriptor(long offset, long length) {
+        BitVector descriptor = new BitVector(getWordWidth());
+        CBD_OFFSET.setval(descriptor, offset);
+        CBD_SIZE.setval(descriptor, length);
+        return descriptor;
+    }
+
+
+
     // FIXME: should use BitVector here
     public Instruction readInstruction(long inst, Dock dispatchFrom) {
         Dock dock = getPathByAddr(dispatchFrom, DISPATCH_PATH.getvalAsBitVector(inst)).getDestination().getDock();