/* (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands. See the copyright notice in the ACK home directory, in the file "Copyright". */ /* $Header$ */ /********************************************************/ /* NORMALIZE an EXTENDED FORMAT NUMBER */ /********************************************************/ #include "FP_shift.h" #include "FP_types.h" nrm_ext(e1) EXTEND *e1; { register unsigned long *mant_1; register unsigned long *mant_2; /* local CAST conversion */ mant_1 = (unsigned long *) &e1->m1; mant_2 = (unsigned long *) &e1->m2; /* we assume that the mantissa != 0 */ /* if it is then just return */ /* to let it be a problem elsewhere */ /* THAT IS, The exponent is not set to */ /* zero. If we don't test here an */ /* infinite loop is generated when */ /* mantissa is zero */ if ((*mant_1 | *mant_2) == 0L) return; /* if top word is zero mov low word */ /* to top word, adjust exponent value */ if (*mant_1 == 0L) { *mant_1++ = e1->m2; *mant_1-- = 0L; e1->exp -= 32; } while ((*mant_1 & NORMBIT) == 0) { e1->exp--; *mant_1 <<= 1; if ((*mant_2 & CARRYBIT) == 0) ; /* empty statement */ else { *mant_1 += 1; } *mant_2 <<= 1; } }