Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) // SPDX-License-Identifier: GPL-2.0-or-later
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * Linux/PA-RISC Project (http://www.parisc-linux.org/)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Floating-point emulation code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  *  Copyright (C) 2001 Hewlett-Packard (Paul Bame) <bame@debian.org>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9)  * BEGIN_DESC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11)  *  Purpose:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12)  *	Single Floating-point Round to Integer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13)  *	Double Floating-point Round to Integer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14)  *	Quad Floating-point Round to Integer (returns unimplemented)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16)  *  External Interfaces:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17)  *	dbl_frnd(srcptr,nullptr,dstptr,status)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18)  *	sgl_frnd(srcptr,nullptr,dstptr,status)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20)  * END_DESC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) #include "float.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #include "sgl_float.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #include "dbl_float.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) #include "cnv_float.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30)  *  Single Floating-point Round to Integer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) /*ARGSUSED*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) int
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) sgl_frnd(sgl_floating_point *srcptr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 	unsigned int *nullptr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 	sgl_floating_point *dstptr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 	unsigned int *status)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 	register unsigned int src, result;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 	register int src_exponent;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	register boolean inexact = FALSE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 	src = *srcptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45)         /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46)          * check source operand for NaN or infinity
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47)          */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48)         if ((src_exponent = Sgl_exponent(src)) == SGL_INFINITY_EXPONENT) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49)                 /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50)                  * is signaling NaN?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51)                  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52)                 if (Sgl_isone_signaling(src)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53)                         /* trap if INVALIDTRAP enabled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54)                         if (Is_invalidtrap_enabled()) return(INVALIDEXCEPTION);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55)                         /* make NaN quiet */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56)                         Set_invalidflag();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57)                         Sgl_set_quiet(src);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58)                 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59)                 /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60)                  * return quiet NaN or infinity
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61)                  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62)                 *dstptr = src;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63)                 return(NOEXCEPTION);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64)         }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	/* 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	 * Need to round?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	if ((src_exponent -= SGL_BIAS) >= SGL_P - 1) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 		*dstptr = src;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 		return(NOEXCEPTION);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	 * Generate result
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	if (src_exponent >= 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 		Sgl_clear_exponent_set_hidden(src);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 		result = src;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 		Sgl_rightshift(result,(SGL_P-1) - (src_exponent));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 		/* check for inexact */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 		if (Sgl_isinexact_to_fix(src,src_exponent)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 			inexact = TRUE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 			/*  round result  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 			switch (Rounding_mode()) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 			case ROUNDPLUS:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 			     if (Sgl_iszero_sign(src)) Sgl_increment(result);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 			     break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 			case ROUNDMINUS:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 			     if (Sgl_isone_sign(src)) Sgl_increment(result);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 			     break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 			case ROUNDNEAREST:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 			     if (Sgl_isone_roundbit(src,src_exponent))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 			        if (Sgl_isone_stickybit(src,src_exponent) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 				|| (Sgl_isone_lowmantissa(result))) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 					Sgl_increment(result);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 			} 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 		Sgl_leftshift(result,(SGL_P-1) - (src_exponent));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 		if (Sgl_isone_hiddenoverflow(result)) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 			Sgl_set_exponent(result,src_exponent + (SGL_BIAS+1));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 		else Sgl_set_exponent(result,src_exponent + SGL_BIAS);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 		result = src;  		/* set sign */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 		Sgl_setzero_exponentmantissa(result);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 		/* check for inexact */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 		if (Sgl_isnotzero_exponentmantissa(src)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 			inexact = TRUE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 			/*  round result  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 			switch (Rounding_mode()) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 			case ROUNDPLUS:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 			     if (Sgl_iszero_sign(src)) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 				Sgl_set_exponent(result,SGL_BIAS);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 			     break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 			case ROUNDMINUS:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 			     if (Sgl_isone_sign(src)) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 				Sgl_set_exponent(result,SGL_BIAS);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 			     break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 			case ROUNDNEAREST:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 			     if (src_exponent == -1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 			        if (Sgl_isnotzero_mantissa(src))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 				   Sgl_set_exponent(result,SGL_BIAS);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 			} 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	*dstptr = result;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	if (inexact) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 		if (Is_inexacttrap_enabled()) return(INEXACTEXCEPTION);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 		else Set_inexactflag();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 	return(NOEXCEPTION);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) } 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134)  *  Double Floating-point Round to Integer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) /*ARGSUSED*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) int
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) dbl_frnd(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 	dbl_floating_point *srcptr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 	unsigned int *nullptr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	dbl_floating_point *dstptr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	unsigned int *status)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 	register unsigned int srcp1, srcp2, resultp1, resultp2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 	register int src_exponent;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 	register boolean inexact = FALSE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	Dbl_copyfromptr(srcptr,srcp1,srcp2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150)         /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151)          * check source operand for NaN or infinity
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)          */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153)         if ((src_exponent = Dbl_exponent(srcp1)) == DBL_INFINITY_EXPONENT) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)                 /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155)                  * is signaling NaN?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156)                  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157)                 if (Dbl_isone_signaling(srcp1)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)                         /* trap if INVALIDTRAP enabled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159)                         if (Is_invalidtrap_enabled()) return(INVALIDEXCEPTION);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160)                         /* make NaN quiet */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161)                         Set_invalidflag();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162)                         Dbl_set_quiet(srcp1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163)                 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164)                 /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165)                  * return quiet NaN or infinity
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166)                  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167)                 Dbl_copytoptr(srcp1,srcp2,dstptr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168)                 return(NOEXCEPTION);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169)         }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 	/* 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 	 * Need to round?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 	if ((src_exponent -= DBL_BIAS) >= DBL_P - 1) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 		Dbl_copytoptr(srcp1,srcp2,dstptr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 		return(NOEXCEPTION);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 	 * Generate result
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 	if (src_exponent >= 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 		Dbl_clear_exponent_set_hidden(srcp1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 		resultp1 = srcp1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 		resultp2 = srcp2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 		Dbl_rightshift(resultp1,resultp2,(DBL_P-1) - (src_exponent));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 		/* check for inexact */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 		if (Dbl_isinexact_to_fix(srcp1,srcp2,src_exponent)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 			inexact = TRUE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 			/*  round result  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 			switch (Rounding_mode()) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 			case ROUNDPLUS:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 			     if (Dbl_iszero_sign(srcp1)) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 				Dbl_increment(resultp1,resultp2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 			     break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 			case ROUNDMINUS:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 			     if (Dbl_isone_sign(srcp1)) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 				Dbl_increment(resultp1,resultp2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 			     break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 			case ROUNDNEAREST:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 			     if (Dbl_isone_roundbit(srcp1,srcp2,src_exponent))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 			      if (Dbl_isone_stickybit(srcp1,srcp2,src_exponent) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 				  || (Dbl_isone_lowmantissap2(resultp2))) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 					Dbl_increment(resultp1,resultp2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 			} 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 		Dbl_leftshift(resultp1,resultp2,(DBL_P-1) - (src_exponent));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 		if (Dbl_isone_hiddenoverflow(resultp1))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 			Dbl_set_exponent(resultp1,src_exponent + (DBL_BIAS+1));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 		else Dbl_set_exponent(resultp1,src_exponent + DBL_BIAS);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 	else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 		resultp1 = srcp1;  /* set sign */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 		Dbl_setzero_exponentmantissa(resultp1,resultp2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 		/* check for inexact */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 		if (Dbl_isnotzero_exponentmantissa(srcp1,srcp2)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 			inexact = TRUE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 			/*  round result  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 			switch (Rounding_mode()) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 			case ROUNDPLUS:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 			     if (Dbl_iszero_sign(srcp1)) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 				Dbl_set_exponent(resultp1,DBL_BIAS);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 			     break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 			case ROUNDMINUS:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 			     if (Dbl_isone_sign(srcp1)) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 				Dbl_set_exponent(resultp1,DBL_BIAS);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 			     break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 			case ROUNDNEAREST:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 			     if (src_exponent == -1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 			        if (Dbl_isnotzero_mantissa(srcp1,srcp2))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 				   Dbl_set_exponent(resultp1,DBL_BIAS);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 			} 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 	Dbl_copytoptr(resultp1,resultp2,dstptr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) 	if (inexact) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 		if (Is_inexacttrap_enabled()) return(INEXACTEXCEPTION);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 		else Set_inexactflag();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) 	return(NOEXCEPTION);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) }