anchor.diff:  	 Vector#(N,Token) rv;
   `ifdef TAGGED_TOKENS
   	 for(Integer i = 0; i < valueOf(N); i=i+1)
  -	    rv[i] = Token{row:tagFifo.first, col:col+fromInteger(i), v:vs.pipe.first[i]};
  +	    rv[i] = Token{row:tagFifo.first, col:col+fromInteger(i), v:vs.pipe.first[i], first:False, last:False};
   `else
   	 for(Integer i = 0; i < valueOf(N); i=i+1)
  -	    rv[i] = Token{v:vs.pipe.first[i]};
  -`endif
  +	    rv[i] = Token{v:vs.pipe.first[i], first:False, last:False};
  +`endif
  +	 if (firstReg)
  +	    rv[0].first = True;
  +	 if (lastReg)
  +	    rv[valueOf(N)-1].last = True;
   	 return rv;
         endmethod
         method Action deq;
  
positive.code:    Reg#(UInt#(32)) row <- mkReg(0);
     FIFOF#(UInt#(32)) tagFifo <- mkFIFOF;
  `endif
     method Action start(ObjectPointer h, Bit#(ObjectOffsetSize) a, Bit#(ObjectOffsetSize) l, UInt#(32) tag);
  `ifdef TAGGED_TOKENS
        tagFifo.enq(tag);
  `endif
        vs.start(h,a,l);
     endmethod
     method ActionValue#(Bool) finish;
  `ifdef TAGGED_TOKENS
  
negative.code: 
     rule mulout;
        let chan <- toGet(chanFifos[0]).get();
        let first <- toGet(firstFifos[chan]).get();
        chanFifos[1].enq(chan);
        if (verbose) $display("%08d label=%d mulout chan=%d first=%d", cycles, label, chan, first);
        match {.resp,.*} <- mul.response.get();
        let acc = unpack(0);
        if (!first)
  	 acc <- toGet(accumFifos[chan]).get();
        //adder.request.put(tuple2(resp,acc));
        adder.request.put(tuple2(resp,acc));
  `ifdef TAGGED_TOKENS
  