add test 3005
authorAdam Megacz <adam.megacz@sun.com>
Mon, 10 Nov 2008 22:56:29 +0000 (22:56 +0000)
committerAdam Megacz <adam.megacz@sun.com>
Mon, 10 Nov 2008 22:56:29 +0000 (22:56 +0000)
testCode/com/sun/vlsi/chips/marina/test/MarinaTest.java

index 0a1d43f..da418e1 100644 (file)
@@ -453,6 +453,61 @@ public class MarinaTest {
        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);
@@ -742,6 +797,7 @@ public class MarinaTest {
                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.");