public static final Mask TAIL = new Mask("................11...................");
public static final Mask MOVE = new Mask("................01...................");
- public static final Mask TI = new Mask("..................1..................");
- public static final Mask DI = new Mask("...................1.................");
- public static final Mask DC = new Mask("....................1................");
- public static final Mask DO = new Mask(".....................1...............");
- public static final Mask TO = new Mask("......................1..............");
- public static final Mask PATH_IMMEDIATE = new Mask(".......................1vvvvvvvvvvvvv");
- public static final Mask PATH_DATA = new Mask(".......................01............");
- public static final Mask PATH_NOCHANGE = new Mask(".......................00............");
+ public static final Mask TI = new Mask("................011..................");
+ public static final Mask DI = new Mask("................01.1.................");
+ public static final Mask FLUSH = new Mask("................01.01................");
+ public static final Mask DC = new Mask("................01.11................");
+ public static final Mask DO = new Mask("................01...1...............");
+ public static final Mask TO = new Mask("................01....1..............");
+ public static final Mask PATH_IMMEDIATE = new Mask("................01.....1vvvvvvvvvvvvv");
+ public static final Mask PATH_DATA = new Mask("................01.....01............");
+ public static final Mask PATH_NOCHANGE = new Mask("................01.....00............");
public static final Mask SET_OLC_FROM_IMMEDIATE = new Mask("................101000100......vvvvvv");
public static final Mask SET_OLC_FROM_DATA_LATCH = new Mask("................101000010............");
}
}
+ public int getShiftWidth() { return SHIFT.valmaskwidth; }
+ public int getSetWidth() { return SET_IMMEDIATE.valmaskwidth+1; }
+
+ // FIXME: should use BitVector here
public Instruction readInstruction(long inst, Dock dispatchFrom) {
Dock dock = getPathByAddr(dispatchFrom, DISPATCH_PATH.getval(inst)).getDestination().getDock();
if (P_NOT_B.get(inst)) predicate = NotFlagB;
boolean looping = !OS.get(inst);
+ if (FLUSH.get(inst))
+ return new Flush(dock, looping, predicate);
if (SHIFT.get(inst)) return new Shift(dock, looping, predicate, new BitVector(dock.getShip().getFleet().getWordWidth()).set(SHIFT.getval(inst)));
if (SET_IMMEDIATE.get(inst)) {
boolean extend = SET_IMMEDIATE_EXTEND.getval(inst) != 0;
instr = SHIFT.set(instr);
instr = SHIFT.setval(instr, shift.immediate);
+ } else if (d instanceof Flush) {
+ instr = FLUSH.set(instr);
+
} else if (d instanceof Set) {
Set s = (Set)d;
switch(s.dest) {