prln("End testFlagZ");
}
+ private void testPredicationOnAB(IsolatedInDock inDock) {
+ prln("Begin testPredicationOnAB");
+ adjustIndent(2);
+
+ List<BitVector> toks;
+
+ prln("Setting OLC=63");
+ inDock.instrIn.fill(new Instruction.Set(DOCK,false,Predicate.IgnoreOLC,SetDest.OuterLoopCounter, 63));
+
+ for(boolean flag_a : new boolean[] { false, true }) {
+ for(boolean flag_b : new boolean[] { false, true }) {
+ prln("Setting flags, a="+flag_a+" b="+flag_b);
+ inDock.instrIn.fill(new Instruction.Set(DOCK,false,Predicate.IgnoreOLC,
+ flag_a ? Instruction.Set.FlagFunction.ONE : Instruction.Set.FlagFunction.ZERO,
+ flag_b ? Instruction.Set.FlagFunction.ONE : Instruction.Set.FlagFunction.ZERO
+ ));
+ getCtrsFlags(inDock);
+
+ adjustIndent(2);
+ for(Predicate predicate : new Predicate[] {
+ Predicate.Default,
+ Predicate.FlagA,
+ Predicate.FlagB,
+ Predicate.NotFlagA,
+ Predicate.NotFlagB,
+ }) {
+
+ prln("Attempting send token with a="+flag_a+", b="+flag_b+", predicate="+predicate.getClass().getName());
+ adjustIndent(2);
+ inDock.instrIn.fill(new Instruction.Set(DOCK,false,Predicate.IgnoreOLC,SetDest.InnerLoopCounter, 1));
+ inDock.instrIn.fill(new Instruction.Move(DOCK,
+ false, /* requeueing */
+ predicate, /* predicate */
+ false, /* torpedoable */
+ null, /* path */
+ false, /* tokenIn */
+ false, /* dataIn */
+ false, /* latchData */
+ false, /* latchPath */
+ false, /* dataOut */
+ true /* tokenOut */
+ ));
+ adjustIndent(-2);
+ toks = inDock.tokOut.drainMany();
+ int expected = predicate.evaluate(flag_a, flag_b, false, false) ? 1 : 0;
+ fatal(toks.size()!=expected, "Expected "+expected+" token to emerge but got: "+
+ toks.size()+" token(s)");
+ }
+ adjustIndent(-2);
+ }
+ }
+ adjustIndent(-2);
+ prln("End testPredicationOnAB");
+ }
+
private void getCtrsFlags(IsolatedInDock inDock) {
int olc = inDock.getOLC();
prln("OLC="+olc);
case 3002: testRequeueStage0((IsolatedInDock)design); break;
case 3003: testRequeueStage0to1((IsolatedInDock)design); break;
case 3004: testFlagZ((IsolatedInDock)design); break;
+ case 3005: testPredicationOnAB((IsolatedInDock)design); break;
default:
fatal(true, "Test number: "+testNum+" doesn't exist.");