public static final int WIDTH_CODEBAG_SIZE = 6;
public static final int WIDTH_COUNTER_LITERAL = 6;
- public static final Mask FLAGS = new Mask("...............000000................");
- public static final Mask FLAGS_A = new Mask("...............000000vvvvvvvv........");
- public static final Mask FLAGS_B = new Mask("...............000000........vvvvvvvv");
- public static final Mask REPEAT_FROM_DATA = new Mask("...............000001.........0......");
- public static final Mask REPEAT_FROM_LITERAL = new Mask("...............000001.........1vvvvvv");
- public static final Mask LOOP_FROM_DATA = new Mask("...............000010.........0......");
- public static final Mask LOOP_FROM_LITERAL = new Mask("...............000010.........1vvvvvv");
- public static final Mask TAKE_LOOP = new Mask("...............000011................");
- public static final Mask KILL = new Mask("...............000100..........vvvvvv");
- public static final Mask MASSACRE = new Mask("...............000101................");
- public static final Mask CLOG = new Mask("...............000110................");
- public static final Mask UNCLOG = new Mask("...............000111................");
+ public static final Mask FLAGS = new Mask("...............000000................");
+ public static final Mask FLAGS_A = new Mask("...............000000vvvvvvvv........");
+ public static final Mask FLAGS_B = new Mask("...............000000........vvvvvvvv");
+ public static final Mask REPEAT_FROM_DATA = new Mask("...............000001........00......");
+ public static final Mask REPEAT_FROM_LITERAL = new Mask("...............000001........10vvvvvv");
+ public static final Mask REPEAT_FROM_STANDING = new Mask("...............000001........11......");
+ public static final Mask LOOP_FROM_DATA = new Mask("...............000010.........0......");
+ public static final Mask LOOP_FROM_LITERAL = new Mask("...............000010.........1vvvvvv");
+ public static final Mask TAKE_LOOP = new Mask("...............000011................");
+ public static final Mask KILL = new Mask("...............000100..........vvvvvv");
+ public static final Mask MASSACRE = new Mask("...............000101................");
+ public static final Mask CLOG = new Mask("...............000110................");
+ public static final Mask UNCLOG = new Mask("...............000111................");
public static final Mask SK = new Mask("...........1.........................");
public static final Mask DL = new Mask("............1........................");
if (P_B.get(inst)) predicate = Instruction.PredicatedInstruction.P_IF_B;
if (P_Z.get(inst)) predicate = Instruction.PredicatedInstruction.P_IF_Z;
- if (LOOP_FROM_LITERAL.get(inst)) return new Counter(name, predicate, (int)LOOP_FROM_LITERAL.getval(inst), LOOP_COUNTER);
- if (REPEAT_FROM_LITERAL.get(inst)) return new Counter(name, predicate, (int)REPEAT_FROM_LITERAL.getval(inst), REPEAT_COUNTER);
- if (LOOP_FROM_DATA.get(inst)) return new Counter(name, predicate, DATA_LATCH, LOOP_COUNTER);
- if (REPEAT_FROM_DATA.get(inst)) return new Counter(name, predicate, DATA_LATCH, REPEAT_COUNTER);
- if (TAKE_LOOP.get(inst)) return new Counter(name, predicate, LOOP_COUNTER, DATA_LATCH);
+ if (LOOP_FROM_LITERAL.get(inst)) return new Counter(name, predicate, (int)LOOP_FROM_LITERAL.getval(inst), LOOP_COUNTER);
+ if (REPEAT_FROM_LITERAL.get(inst)) return new Counter(name, predicate, (int)REPEAT_FROM_LITERAL.getval(inst), REPEAT_COUNTER);
+ if (LOOP_FROM_DATA.get(inst)) return new Counter(name, predicate, DATA_LATCH, LOOP_COUNTER);
+ if (REPEAT_FROM_DATA.get(inst)) return new Counter(name, predicate, DATA_LATCH, REPEAT_COUNTER);
+ if (REPEAT_FROM_STANDING.get(inst)) return new Counter(name, predicate, STANDING, REPEAT_COUNTER);
+ if (TAKE_LOOP.get(inst)) return new Counter(name, predicate, LOOP_COUNTER, DATA_LATCH);
if (DL.get(inst)) return new Instruction.DecrLoop(name, predicate);
} else if (d instanceof Instruction.Counter) {
Instruction.Counter ic = (Instruction.Counter)d;
if (ic.dest == DATA_LATCH && ic.source == LOOP_COUNTER) instr = TAKE_LOOP.set(instr);
- else if (ic.dest == REPEAT_COUNTER && ic.source == DATA_LATCH) instr = REPEAT_FROM_DATA.set(instr);
else if (ic.dest == LOOP_COUNTER && ic.source == DATA_LATCH) instr = LOOP_FROM_DATA.set(instr);
+ else if (ic.dest == REPEAT_COUNTER && ic.source == DATA_LATCH) instr = REPEAT_FROM_DATA.set(instr);
+ else if (ic.dest == REPEAT_COUNTER && ic.source == STANDING) instr = REPEAT_FROM_STANDING.set(instr);
else if (ic.dest == REPEAT_COUNTER) instr = REPEAT_FROM_LITERAL.setval(REPEAT_FROM_LITERAL.set(instr), ic.source);
else if (ic.dest == LOOP_COUNTER) instr = LOOP_FROM_LITERAL.setval(LOOP_FROM_LITERAL.set(instr), ic.source);
else throw new RuntimeException();