anchor.diff:     Reg#(Bool) rValid_S2 <- mkReg(False);
      Reg#(UInt#(mmbits)) rProd_S2lsb <- mkReg(0);
      Reg#(UInt#(mmbits)) rProd_S2msb <- mkReg(0);
  -
  -   PipeMul2#(2,mbits,Tuple5#(CommonState#(e,m),Bool,FloatingPoint#(e,m),Bool,Int#(ebits))) pipe_mul <- mkPipeMul2;
  -   
  -   // start multiply
  -   rule s2_stage;
  -      match { .s, .acc, .opA, .sgnBC, .expBC, .sfdB, .sfdC } = rState_S1;
  -      let valid = rValid_S1;
  -
  -      UInt#(mbits) sfdClsb = extend(unpack(sfdC[15:0]));
  -      UInt#(TSub#(mbits,16)) sfdCmsb = unpack(sfdC[valueOf(mbits)-1:16]);
  -      rProd_S2lsb <= extend(unpack(sfdB))*extend(sfdClsb);
  -      rProd_S2msb <= extend(unpack(sfdB))*extend(sfdCmsb);
  -      
  -      rState_S2 <= tuple5(s,
  -			  acc,
  -			  opA,
  -			  sgnBC,
  -			  expBC);
  -      rValid_S2 <= valid;
  -   endrule
   
      Reg#(Tuple5#(CommonState#(e,m),
         Bool,
  
positive.code: 		Bit#(m5bits))) rState_S6 <- mkReg(unpack(0));
     Reg#(Bool) rValid_S6 <- mkReg(False);
  
     // shift second add operand
     rule s6_stage;
        match { .s, .acc, .sub, .sgn, .exp, .shift, .x, .y } = rState_S5;
        let valid = rValid_S5;
  
        if (s.res matches tagged Invalid) begin
  	 if (shift < fromInteger(valueOf(m5bits))) begin
  	    Bit#(m5bits) guard;
  
  	    guard = y << (fromInteger(valueOf(m5bits)) - shift);
  	    y = y >> shift;
  	    y[0] = y[0] | (|guard);
  	 end
  	 else if (|y == 1) begin
  	    y = 1;
  	 end
        end
  
        rState_S6 <= tuple7(s,
  			  acc,
  			  sub,
  			  sgn,
  			  exp,
  			  x,
  			  y);
        rValid_S6 <= valid;
     endrule
  
     Reg#(Tuple7#(CommonState#(e,m),
  		Bool,
  		Bool,
  
negative.code: 		Bit#(m5bits))) rState_S5 <- mkReg(unpack(0));
     Reg#(Bool) rValid_S5 <- mkReg(False);
  
     Reg#(Tuple7#(CommonState#(e,m),
  		Bool,
  		Bool,
  