public static final Mask P_A = new Mask(".............001.....................");
public static final Mask P_NOT_B = new Mask(".............010.....................");
public static final Mask P_B = new Mask(".............011.....................");
- public static final Mask P_NOT_C = new Mask(".............100.....................");
- public static final Mask P_C = new Mask(".............101.....................");
- public static final Mask P_OLC = new Mask(".............110.....................");
+ public static final Mask P_UNUSED = new Mask(".............100.....................");
+ public static final Mask P_OLC_ZERO = new Mask(".............101.....................");
+ public static final Mask P_OLC_NONZERO = new Mask(".............110.....................");
public static final Mask P_ALWAYS = new Mask(".............111.....................");
public static final Mask SHIFT = new Mask("................00vvvvvvvvvvvvvvvvvvv");
public static final Mask PATH_DATA = new Mask(".......................01............");
public static final Mask PATH_NOCHANGE = new Mask(".......................00............");
- public static final Mask SET = new Mask("................10...................");
+ 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 static final Mask SET_OLC_FROM_OLC_MINUS_ONE = new Mask("................101000001............");
- public static final Mask SET_OLC_FROM_IMMEDIATE = new Mask("................1010000100.....vvvvvv");
- public static final Mask SET_OLC_FROM_DATA_LATCH = new Mask("................1010000010...........");
- public static final Mask SET_OLC_FROM_OLC_MINUS_ONE = new Mask("................1010000001...........");
+ public static final Mask SET_ILC_FROM_IMMEDIATE = new Mask("................10010010......0vvvvvv");
+ public static final Mask SET_ILC_FROM_INFINITY = new Mask("................10010010......1......");
+ public static final Mask SET_ILC_FROM_DATA_LATCH = new Mask("................10010001.............");
- public static final Mask SET_ILC_FROM_IMMEDIATE = new Mask("................1001000100.....vvvvvv");
- public static final Mask SET_ILC_FROM_INFINITY = new Mask("................1001000010...........");
- public static final Mask SET_ILC_FROM_DATA_LATCH = new Mask("................1001000001...........");
+ public static final Mask SET_IMMEDIATE = new Mask("................100010.vvvvvvvvvvvvvv");
+ public static final Mask SET_IMMEDIATE_EXTEND = new Mask("................100010v..............");
- public static final Mask SET_IMMEDIATE = new Mask("................1000100.vvvvvvvvvvvvv");
- public static final Mask SET_IMMEDIATE_EXTEND = new Mask("................1000100v.............");
-
- public static final Mask SET_FLAGS = new Mask("................1000010..............");
- public static final Mask SET_FLAGS_A = new Mask("................1000010..vvvvvv......");
- public static final Mask SET_FLAGS_B = new Mask("................1000010........vvvvvv");
+ public static final Mask SET_FLAGS = new Mask("................100001...............");
+ public static final Mask SET_FLAGS_A = new Mask("................100001...vvvvvv......");
+ public static final Mask SET_FLAGS_B = new Mask("................100001.........vvvvvv");
public static final Mask SET_FLAGS_VALUE_A = new Mask("1.....");
public static final Mask SET_FLAGS_VALUE_NOT_A = new Mask(".1....");
public static final Mask SET_FLAGS_VALUE_B = new Mask("..1...");
Predicate predicate = Default;
if (P_ALWAYS.get(inst)) predicate = IgnoreOLC;
- if (P_OLC.get(inst)) predicate = Default;
+ if (P_OLC_ZERO.get(inst)) throw new RuntimeException("not yet supported");
+ if (P_OLC_NONZERO.get(inst)) predicate = Default;
if (P_A.get(inst)) predicate = FlagA;
if (P_B.get(inst)) predicate = FlagB;
- if (P_C.get(inst)) predicate = FlagC;
if (P_NOT_A.get(inst)) predicate = NotFlagA;
if (P_NOT_B.get(inst)) predicate = NotFlagB;
- if (P_NOT_C.get(inst)) predicate = NotFlagC;
boolean looping = !OS.get(inst);
if (SHIFT.get(inst)) return new Shift(dock, looping, predicate, new BitVector(dock.getShip().getFleet().getWordWidth()).set(SHIFT.getval(inst)));
if (!pi.looping) instr = OS.set(instr);
switch(pi.predicate) {
case IgnoreOLC: instr = P_ALWAYS.set(instr); break;
- case Default: instr = P_OLC.set(instr); break;
+ case Default: instr = P_OLC_NONZERO.set(instr); break;
case FlagA: instr = P_A.set(instr); break;
case FlagB: instr = P_B.set(instr); break;
- case FlagC: instr = P_C.set(instr); break;
case NotFlagA: instr = P_NOT_A.set(instr); break;
case NotFlagB: instr = P_NOT_B.set(instr); break;
- case NotFlagC: instr = P_NOT_C.set(instr); break;
}
if (d instanceof Tail) {