anchor.diff:     Bit#(SGListPageShift8) OOrd8;
   } Offset deriving (Eq,Bits,FShow);
   
  -typedef union tagged{
  -   Bit#(TSub#(ObjectOffsetSize,SGListPageShift0)) POrd0;
  -   Bit#(TSub#(ObjectOffsetSize,SGListPageShift4)) POrd4;
  -   Bit#(TSub#(ObjectOffsetSize,SGListPageShift8)) POrd8;
  -} Page deriving (Eq,Bits,FShow);
  +typedef Bit#(TSub#(ObjectOffsetSize,SGListPageShift0)) Page;
   
   typedef struct {
      Bit#(ObjectOffsetSize) barrier;
  
positive.code: 	 dmaIndication.dmaError(extend(pack(DmaErrorBadNumberEntries)), extend(ptr),extend(len), extend(idxReg));
        end
        else begin
  	 Page page = tagged POrd0 0;
  	 if (len == 0) begin
  	    idxReg <= 0;
  	 end
  	 else begin
  	    idxReg <= idxReg+1;
  	    if (extend(len) == ord0) begin
  	       page = tagged POrd0 truncate(paddr); //>>page_shift0);
  	    end
  	    else if (extend(len) == ord4) begin
  	       page = tagged POrd4 truncate(paddr); //>>page_shift4);
  	    end
  	    else if (extend(len) == ord8) begin
  	       page = tagged POrd8 truncate(paddr); //>>page_shift8);
  	    end
  	    else begin
  	       $display("mkSGListMMU::sglist unsupported length %h", len);
  	       dmaIndication.dmaError(extend(pack(DmaErrorBadPageSize)), extend(ptr), extend(len), 0);
  	    end
  	 end
  	 configRespFifo.enq(truncate(ptr));
  	 portsel(pages, 0).request.put(BRAMRequest{write:True, responseOnWrite:False,
               address:{truncate(ptr-1),idxReg}, datain:page});
        end
     endrule
  
  
negative.code: 	 Bit#(ObjectOffsetSize) rv = 0;
  	 case (offset) matches
  	    tagged OOrd0 .o:
  		  rv = {truncate(page),o};
  	    tagged OOrd4 .o:
  		  rv = {truncate(page),o};
  	    tagged OOrd8 .o:
  		  rv = {truncate(page),o};
  	 endcase
  	 pageResponseFifos[i].enq(truncate(rv));
        endrule
  