anchor.diff:     //rule s4_stage;
         begin
   	 match {.s, .exp, .sign} = rState_S3;
  +	 match {.sresInvalid, .subnormal, .inbounds, .shift} = rCond_S3;
   	 let sfdres = pack(rsfdres_S3);
   	 let valid = rValid_S3;
   
   	 FloatingPoint#(e,m) result = defaultValue;
   	 Bit#(2) guard = ?;
   
  -	 if (s.res matches tagged Invalid) begin
  +	 //if (s.res matches tagged Invalid) begin
  +	 if (sresInvalid) begin
   	    //$display("sfdres = 'h%x", sfdres);
   
  -	    let shift = fromInteger(minexp(result)) - exp;
  -	    if (shift > 0) begin
  +	    //let shift = fromInteger(minexp(result)) - exp;
  +	    //if (shift > 0) begin
  +	    if (subnormal) begin
   	       // subnormal
   	       Bit#(1) sfdlsb = |(sfdres << (fromInteger(valueOf(TAdd#(TAdd#(m,1),TAdd#(m,1)))) - shift));
   
  
positive.code: 	       result.exp = 0;
  	    end
  	    else begin
  	       result.exp = cExtend(exp + fromInteger(bias(result)));
  	    end
  
  
negative.code:    Reg#(Tuple3#(CommonState#(e,m),
  		Int#(TAdd#(e,2)),
  		Bool)) rState_S2 <- mkReg(unpack(0));
     Reg#(Tuple4#(Bool, Bool, Bool, Int#(TAdd#(e,2)))) rCond_S3 <- mkReg(unpack(0));
     Reg#(UInt#(TAdd#(TAdd#(m,1),TAdd#(m,1)))) rsfdres_S2_lsb <- mkReg(0);
     Reg#(UInt#(TAdd#(TAdd#(m,1),TAdd#(m,1)))) rsfdres_S2_msb <- mkReg(0);
  
  