PACKET_SIGNAL = new Mask("......................................v...........");
PACKET_DEST = new Mask(".......................................vvvvvvvvvvv");
- CBD_SIZE = new Mask("...............................vvvvvv");
- CBD_OFFSET = new Mask("vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv......");
+ CBD_SIZE = new Mask("............................vvvvvvvvv");
+ CBD_OFFSET = new Mask("vvvvvvvvvvvvvvvvvvvvvvvvvvvv.........");
WHOLE_WORD = new Mask("vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv");
DISPATCH_PATH = new Mask("v....................................");
DISPATCH_INSTR = new Mask(".vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv");
P = new Mask(".vvvvvv..............................");
- P_NOT_A = new Mask(".100001..............................");
- P_A = new Mask(".100010..............................");
- P_NOT_B = new Mask(".100100..............................");
- P_B = new Mask(".101000..............................");
+ P_NOT_A = new Mask(".010001..............................");
+ P_A = new Mask(".010010..............................");
+ P_NOT_B = new Mask(".010100..............................");
+ P_B = new Mask(".011000..............................");
P_UNUSED = new Mask(".111111..............................");
- P_OLC_ZERO = new Mask(".010000..............................");
- P_OLC_NONZERO = new Mask(".100000..............................");
+ P_OLC_ZERO = new Mask(".100000..............................");
+ 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"
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");
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();