anchor.diff:  
   module [Module] mkDotProd#(PipeOut#(Vector#(n,Float)) xpipe, PipeOut#(Vector#(n,Float)) ypipe, UInt#(nwidth) numElts)(PipeOut#(Float))
      provisos (
  -      Add#(1,a__,n)
  +      Add#(1,a__,n),
  +      ReducePipe#(n,Float)
         );
   
      Bool verbose = True;
  
positive.code: 	 if (c < numElts) begin
  	    accumFifo[i].enq(tagged Valid tpl_1(resp));
  	 end
  	 else begin
  	    // FIXME need to fold the values together, but we're only compiling for n == 1
  	    $display("resultFifo.enq %h", tpl_1(resp));
  	    if (i == 0) begin
  	       resultFifo.enq(tpl_1(resp));
  	    end
  	 end
        end
        if (c == numElts)
  	 c = 0;
        countOutReg <= c;
        if (verbose) $display(fshow("countOutReg=")+fshow(countOutReg)+fshow(" numElts=")+fshow(numElts)+fshow(" mul=") + fshow(vs));
     endrule
  
     PipeOut#(Float) dotpipe = toPipeOut(resultFifo);
     return dotpipe;
  endmodule
  
  
negative.code:    endrule
  
     rule macout;
        Vector#(n,Float) vs = unpack(0);
        let c = countOutReg + 1;
        for (Integer i = 0; i < valueOf(n); i = i + 1) begin
  	 let resp <- macs[i].response.get();
  