diff options
Diffstat (limited to 'include/math-emu/op-common.h')
| -rw-r--r-- | include/math-emu/op-common.h | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/include/math-emu/op-common.h b/include/math-emu/op-common.h index 9696a5e2c43..6bdf8c61d22 100644 --- a/include/math-emu/op-common.h +++ b/include/math-emu/op-common.h @@ -685,7 +685,7 @@ do {									\  	    else								\  	      {									\  		r = 0;								\ -		if (X##_s)							\ +		if (!X##_s)							\  		  r = ~r;							\  	      }									\  	    FP_SET_EXCEPTION(FP_EX_INVALID);					\ @@ -743,12 +743,17 @@ do {									\  	  }									\  	else									\  	  {									\ +	    int _lz0, _lz1;							\  	    if (X##_e <= -_FP_WORKBITS - 1)					\  	      _FP_FRAC_SET_##wc(X, _FP_MINFRAC_##wc);				\  	    else								\  	      _FP_FRAC_SRS_##wc(X, _FP_FRACBITS_##fs - 1 - X##_e,		\  				_FP_WFRACBITS_##fs);				\ +	    _FP_FRAC_CLZ_##wc(_lz0, X);						\  	    _FP_ROUND(wc, X);							\ +	    _FP_FRAC_CLZ_##wc(_lz1, X);						\ +	    if (_lz1 < _lz0)							\ +	      X##_e++; /* For overflow detection.  */				\  	    _FP_FRAC_SRL_##wc(X, _FP_WORKBITS);					\  	    _FP_FRAC_ASSEMBLE_##wc(r, X, rsize);				\  	  }									\ @@ -762,7 +767,7 @@ do {									\  	    if (!rsigned)							\  	      {									\  		r = 0;								\ -		if (X##_s)							\ +		if (!X##_s)							\  		  r = ~r;							\  	      }									\  	    else if (rsigned != 2)						\  | 
