|
@@ -743,12 +743,17 @@ do { \
|
|
|
} \
|
|
} \
|
|
|
else \
|
|
else \
|
|
|
{ \
|
|
{ \
|
|
|
|
|
+ int _lz0, _lz1; \
|
|
|
if (X##_e <= -_FP_WORKBITS - 1) \
|
|
if (X##_e <= -_FP_WORKBITS - 1) \
|
|
|
_FP_FRAC_SET_##wc(X, _FP_MINFRAC_##wc); \
|
|
_FP_FRAC_SET_##wc(X, _FP_MINFRAC_##wc); \
|
|
|
else \
|
|
else \
|
|
|
_FP_FRAC_SRS_##wc(X, _FP_FRACBITS_##fs - 1 - X##_e, \
|
|
_FP_FRAC_SRS_##wc(X, _FP_FRACBITS_##fs - 1 - X##_e, \
|
|
|
_FP_WFRACBITS_##fs); \
|
|
_FP_WFRACBITS_##fs); \
|
|
|
|
|
+ _FP_FRAC_CLZ_##wc(_lz0, X); \
|
|
|
_FP_ROUND(wc, 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_SRL_##wc(X, _FP_WORKBITS); \
|
|
|
_FP_FRAC_ASSEMBLE_##wc(r, X, rsize); \
|
|
_FP_FRAC_ASSEMBLE_##wc(r, X, rsize); \
|
|
|
} \
|
|
} \
|