anchor.diff:  
   	       s.exc.overflow = True;
   	       s.exc.inexact = True;
  -	    end
  -	    else if (expBC < (fromInteger(minexp_subnormal(bc))-2)) begin
  +	 end
  +	 //else if (expBC < (fromInteger(minexp_subnormal(bc))-2)) begin
  +	 else if (underflow) begin
   	       bc.sign = sgnBC;
   	       bc.exp = 0;
   	       bc.sfd = 0;
  
positive.code:       Int#(ebits))) rState_S3 <- mkReg(unpack(0));
     Reg#(Bool) rValid_S3 <- mkReg(False);
     Reg#(UInt#(mmbits)) rProd_S3 <- mkReg(0);
  
     Reg#(Tuple5#(CommonState#(e,m),
  		 Bool,
  		 FloatingPoint#(e,m),
  		 FloatingPoint#(e,m),
  		 Bit#(2))) rState_S4 <- mkReg(unpack(0));
     Reg#(Bool) rValid_S4 <- mkReg(False);
  
     Reg#(Tuple8#(CommonState#(e,m),
  
negative.code: 			     sgnBC,
  			     expBC);
  	 rValid_S3 <= valid;
  
  
  	 Bool overflow = False;
  	 Bool underflow = False;
  	 Bool inbounds = False;
  	 Bool denorm = False;
  	 let shift = 0;
  	 FloatingPoint#(e,m) bc = defaultValue;
  	 if (s.res matches tagged Invalid) begin
  	    if (expBC > fromInteger(maxexp(bc))) begin
  	       overflow = True;
  	    end
  	    else if (expBC < (fromInteger(minexp_subnormal(bc))-2)) begin
  	       underflow = True;
  	    end
  	    else begin
  	       inbounds = True;
  	       shift = fromInteger(minexp(bc)) - expBC;
  	       if (shift > 0) begin
  		  denorm = True;
  	       end
  	    end
  	 end
  	 rConditions_S3 <= tuple4(overflow, underflow, inbounds, denorm);
        end
     //endrule
  
     // normalize multiplication result
        //rule s4_stage if (fResult_S9.notFull());
        begin
  	 match { .s, .acc, .opA, .sgnBC, .expBC } = rState_S3;
  	 match { .overflow, .underflow, .inbounds, .denorm } = rConditions_S3;
  	 let valid = rValid_S3;
  
  	 let sfdBC = pack(rProd_S3);
  
  	 FloatingPoint#(e,m) bc = defaultValue;
  	 Bit#(2) guardBC = ?;
  
  	 //if (s.res matches tagged Invalid) begin
  	 //if (expBC > fromInteger(maxexp(bc))) begin
  	 if (overflow) begin
  	       bc.sign = sgnBC;
  	       bc.exp = maxBound - 1;
  	       bc.sfd = maxBound;
  