anchor.diff:  
      // normalize multiplication result
      rule s4_stage;
  -      match { .s, .acc, .opA, .sgnBC, .expBC } <- toGet(fState_S3).get;
  -      let sfdBC <- toGet(fProd_S3).get;
  -
  +      //match { .s, .acc, .opA, .sgnBC, .expBC } <- toGet(fState_S3).get;
  +
  +      //let sfdBC <- toGet(fProd_S3).get;
  +      Tuple2#(UInt#(mmbits),Tuple5#(CommonState#(e,m),Bool,FloatingPoint#(e,m),Bool,Int#(ebits)))  foo <- pipe_mul.get;
  +      Tuple5#(CommonState#(e,m),Bool,FloatingPoint#(e,m),Bool,Int#(ebits)) bar = tpl_2(foo);
  +      match { .s, .acc, .opA, .sgnBC, .expBC } = bar;
  +      Bit#(mmbits) sfdBC = pack(tpl_1(foo));
  +      
         FloatingPoint#(e,m) bc = defaultValue;
         Bit#(2) guardBC = ?;
   
  
positive.code: 			   sfdC));
     endrule
  
     FIFO#(Tuple5#(CommonState#(e,m),
  		 Bool,
  		 FloatingPoint#(e,m),
  		 Bool,
  		 Int#(ebits))) fState_S2 <- mkLFIFO;
     FIFO#(Bit#(mmbits)) fProd_S2 <- mkLFIFO;
  
     // start multiply
     rule s2_stage;
        match { .s, .acc, .opA, .sgnBC, .expBC, .sfdB, .sfdC } <- toGet(fState_S1).get;
  
        let sfdBC = primMul(sfdB, sfdC);
  
        fProd_S2.enq(sfdBC);
  
        fState_S2.enq(tuple5(s,
  			   acc,
  			   opA,
  			   sgnBC,
  			   expBC));
     endrule
  
     FIFO#(Tuple5#(CommonState#(e,m),
  		 Bool,
  		 FloatingPoint#(e,m),
  		 Bool,
  		 Int#(ebits))) fState_S3 <- mkLFIFO;
     FIFO#(Bit#(mmbits)) fProd_S3 <- mkLFIFO;
  
     // passthrough stage for multiply register retiming
     rule s3_stage;
        match { .s, .acc, .opA, .sgnBC, .expBC } <- toGet(fState_S2).get;
        let sfdBC <- toGet(fProd_S2).get;
  
        fProd_S3.enq(sfdBC);
  
        fState_S3.enq(tuple5(s,
  			   acc,
  			   opA,
  			   sgnBC,
  			   expBC));
     endrule
  
     FIFO#(Tuple5#(CommonState#(e,m),
  		 Bool,
  
negative.code: import Pipe::*;
  import FIFO::*;
  import BUtils::*;
  import PipeMul::*;
  
  
  ////////////////////////////////////////////////////////////////////////////////
  