⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbl_float.h

📁 linux-2.6.15.6
💻 H
📖 第 1 页 / 共 3 页
字号:
    Dextallp4(leftp4)  = Dextallp4(leftp4) XOR Dextallp4(rightp4)#define Dblext_setone_lowmantissap4(dbl_value) Deposit_dextlowp4(dbl_value,1)/* The high bit is always zero so arithmetic or logical shifts will work. */#define Dblext_right_align(srcdstA,srcdstB,srcdstC,srcdstD,shift) \  {int shiftamt, sticky;						\    shiftamt = shift % 32;						\    sticky = 0;								\    switch (shift/32) {							\     case 0: if (shiftamt > 0) {					\	        sticky = Dextallp4(srcdstD) << 32 - (shiftamt); 	\                Variable_shift_double(Dextallp3(srcdstC),		\		 Dextallp4(srcdstD),shiftamt,Dextallp4(srcdstD));	\                Variable_shift_double(Dextallp2(srcdstB),		\		 Dextallp3(srcdstC),shiftamt,Dextallp3(srcdstC));	\                Variable_shift_double(Dextallp1(srcdstA),		\		 Dextallp2(srcdstB),shiftamt,Dextallp2(srcdstB));	\	        Dextallp1(srcdstA) >>= shiftamt;			\	     }								\	     break;							\     case 1: if (shiftamt > 0) {					\                sticky = (Dextallp3(srcdstC) << 31 - shiftamt) |	\			 Dextallp4(srcdstD);				\                Variable_shift_double(Dextallp2(srcdstB),		\		 Dextallp3(srcdstC),shiftamt,Dextallp4(srcdstD));	\                Variable_shift_double(Dextallp1(srcdstA),		\		 Dextallp2(srcdstB),shiftamt,Dextallp3(srcdstC));	\	     }								\	     else {							\		sticky = Dextallp4(srcdstD);				\		Dextallp4(srcdstD) = Dextallp3(srcdstC);		\		Dextallp3(srcdstC) = Dextallp2(srcdstB);		\	     }								\	     Dextallp2(srcdstB) = Dextallp1(srcdstA) >> shiftamt;	\	     Dextallp1(srcdstA) = 0;					\	     break;							\     case 2: if (shiftamt > 0) {					\                sticky = (Dextallp2(srcdstB) << 31 - shiftamt) |	\			 Dextallp3(srcdstC) | Dextallp4(srcdstD);	\                Variable_shift_double(Dextallp1(srcdstA),		\		 Dextallp2(srcdstB),shiftamt,Dextallp4(srcdstD));	\	     }								\	     else {							\		sticky = Dextallp3(srcdstC) | Dextallp4(srcdstD);	\		Dextallp4(srcdstD) = Dextallp2(srcdstB);		\	     }								\	     Dextallp3(srcdstC) = Dextallp1(srcdstA) >> shiftamt;	\	     Dextallp1(srcdstA) = Dextallp2(srcdstB) = 0;		\	     break;							\     case 3: if (shiftamt > 0) {					\                sticky = (Dextallp1(srcdstA) << 31 - shiftamt) |	\			 Dextallp2(srcdstB) | Dextallp3(srcdstC) |	\			 Dextallp4(srcdstD);				\	     }								\	     else {							\		sticky = Dextallp2(srcdstB) | Dextallp3(srcdstC) |	\		    Dextallp4(srcdstD);					\	     }								\	     Dextallp4(srcdstD) = Dextallp1(srcdstA) >> shiftamt;	\	     Dextallp1(srcdstA) = Dextallp2(srcdstB) = 0;		\	     Dextallp3(srcdstC) = 0;					\	     break;							\    }									\    if (sticky) Dblext_setone_lowmantissap4(srcdstD);			\  }/* The left argument is never smaller than the right argument */#define Dblext_subtract(lefta,leftb,leftc,leftd,righta,rightb,rightc,rightd,resulta,resultb,resultc,resultd) \    if( Dextallp4(rightd) > Dextallp4(leftd) ) 			\	if( (Dextallp3(leftc)--) == 0)				\	    if( (Dextallp2(leftb)--) == 0) Dextallp1(lefta)--;	\    Dextallp4(resultd) = Dextallp4(leftd) - Dextallp4(rightd);	\    if( Dextallp3(rightc) > Dextallp3(leftc) ) 			\        if( (Dextallp2(leftb)--) == 0) Dextallp1(lefta)--;	\    Dextallp3(resultc) = Dextallp3(leftc) - Dextallp3(rightc);	\    if( Dextallp2(rightb) > Dextallp2(leftb) ) Dextallp1(lefta)--; \    Dextallp2(resultb) = Dextallp2(leftb) - Dextallp2(rightb);	\    Dextallp1(resulta) = Dextallp1(lefta) - Dextallp1(righta)#define Dblext_addition(lefta,leftb,leftc,leftd,righta,rightb,rightc,rightd,resulta,resultb,resultc,resultd) \    /* If the sum of the low words is less than either source, then \     * an overflow into the next word occurred. */ \    if ((Dextallp4(resultd) = Dextallp4(leftd)+Dextallp4(rightd)) < \	Dextallp4(rightd)) \	if((Dextallp3(resultc) = Dextallp3(leftc)+Dextallp3(rightc)+1) <= \	    Dextallp3(rightc)) \	    if((Dextallp2(resultb) = Dextallp2(leftb)+Dextallp2(rightb)+1) \	        <= Dextallp2(rightb))  \		    Dextallp1(resulta) = Dextallp1(lefta)+Dextallp1(righta)+1; \	    else Dextallp1(resulta) = Dextallp1(lefta)+Dextallp1(righta); \	else \	    if ((Dextallp2(resultb) = Dextallp2(leftb)+Dextallp2(rightb)) < \	        Dextallp2(rightb)) \		    Dextallp1(resulta) = Dextallp1(lefta)+Dextallp1(righta)+1; \	    else Dextallp1(resulta) = Dextallp1(lefta)+Dextallp1(righta); \    else \	if ((Dextallp3(resultc) = Dextallp3(leftc)+Dextallp3(rightc)) < \	    Dextallp3(rightc))  \	    if ((Dextallp2(resultb) = Dextallp2(leftb)+Dextallp2(rightb)+1) \	        <= Dextallp2(rightb)) \		    Dextallp1(resulta) = Dextallp1(lefta)+Dextallp1(righta)+1; \	    else Dextallp1(resulta) = Dextallp1(lefta)+Dextallp1(righta); \	else \	    if ((Dextallp2(resultb) = Dextallp2(leftb)+Dextallp2(rightb)) < \	        Dextallp2(rightb)) \		    Dextallp1(resulta) = Dextallp1(lefta)+Dextallp1(righta)+1; \	    else Dextallp1(resulta) = Dextallp1(lefta)+Dextallp1(righta)#define Dblext_arithrightshiftby1(srcdstA,srcdstB,srcdstC,srcdstD)	\    Shiftdouble(Dextallp3(srcdstC),Dextallp4(srcdstD),1,Dextallp4(srcdstD)); \    Shiftdouble(Dextallp2(srcdstB),Dextallp3(srcdstC),1,Dextallp3(srcdstC)); \    Shiftdouble(Dextallp1(srcdstA),Dextallp2(srcdstB),1,Dextallp2(srcdstB)); \    Dextallp1(srcdstA) = (int)Dextallp1(srcdstA) >> 1   #define Dblext_leftshiftby8(valA,valB,valC,valD) \    Shiftdouble(Dextallp1(valA),Dextallp2(valB),24,Dextallp1(valA)); \    Shiftdouble(Dextallp2(valB),Dextallp3(valC),24,Dextallp2(valB)); \    Shiftdouble(Dextallp3(valC),Dextallp4(valD),24,Dextallp3(valC)); \    Dextallp4(valD) <<= 8#define Dblext_leftshiftby4(valA,valB,valC,valD) \    Shiftdouble(Dextallp1(valA),Dextallp2(valB),28,Dextallp1(valA)); \    Shiftdouble(Dextallp2(valB),Dextallp3(valC),28,Dextallp2(valB)); \    Shiftdouble(Dextallp3(valC),Dextallp4(valD),28,Dextallp3(valC)); \    Dextallp4(valD) <<= 4#define Dblext_leftshiftby3(valA,valB,valC,valD) \    Shiftdouble(Dextallp1(valA),Dextallp2(valB),29,Dextallp1(valA)); \    Shiftdouble(Dextallp2(valB),Dextallp3(valC),29,Dextallp2(valB)); \    Shiftdouble(Dextallp3(valC),Dextallp4(valD),29,Dextallp3(valC)); \    Dextallp4(valD) <<= 3#define Dblext_leftshiftby2(valA,valB,valC,valD) \    Shiftdouble(Dextallp1(valA),Dextallp2(valB),30,Dextallp1(valA)); \    Shiftdouble(Dextallp2(valB),Dextallp3(valC),30,Dextallp2(valB)); \    Shiftdouble(Dextallp3(valC),Dextallp4(valD),30,Dextallp3(valC)); \    Dextallp4(valD) <<= 2#define Dblext_leftshiftby1(valA,valB,valC,valD) \    Shiftdouble(Dextallp1(valA),Dextallp2(valB),31,Dextallp1(valA)); \    Shiftdouble(Dextallp2(valB),Dextallp3(valC),31,Dextallp2(valB)); \    Shiftdouble(Dextallp3(valC),Dextallp4(valD),31,Dextallp3(valC)); \    Dextallp4(valD) <<= 1#define Dblext_rightshiftby4(valueA,valueB,valueC,valueD) \    Shiftdouble(Dextallp3(valueC),Dextallp4(valueD),4,Dextallp4(valueD)); \    Shiftdouble(Dextallp2(valueB),Dextallp3(valueC),4,Dextallp3(valueC)); \    Shiftdouble(Dextallp1(valueA),Dextallp2(valueB),4,Dextallp2(valueB)); \    Dextallp1(valueA) >>= 4#define Dblext_rightshiftby1(valueA,valueB,valueC,valueD) \    Shiftdouble(Dextallp3(valueC),Dextallp4(valueD),1,Dextallp4(valueD)); \    Shiftdouble(Dextallp2(valueB),Dextallp3(valueC),1,Dextallp3(valueC)); \    Shiftdouble(Dextallp1(valueA),Dextallp2(valueB),1,Dextallp2(valueB)); \    Dextallp1(valueA) >>= 1#define Dblext_xortointp1(left,right,result) Dbl_xortointp1(left,right,result)#define Dblext_xorfromintp1(left,right,result) \	Dbl_xorfromintp1(left,right,result)#define Dblext_copytoint_exponentmantissap1(src,dest) \	Dbl_copytoint_exponentmantissap1(src,dest)#define Dblext_ismagnitudeless(leftB,rightB,signlessleft,signlessright) \	Dbl_ismagnitudeless(leftB,rightB,signlessleft,signlessright)#define Dbl_copyto_dblext(src1,src2,dest1,dest2,dest3,dest4) \	Dextallp1(dest1) = Dallp1(src1); Dextallp2(dest2) = Dallp2(src2); \	Dextallp3(dest3) = 0; Dextallp4(dest4) = 0#define Dblext_set_sign(dbl_value,sign)  Dbl_set_sign(dbl_value,sign)  #define Dblext_clear_signexponent_set_hidden(srcdst) \	Dbl_clear_signexponent_set_hidden(srcdst) #define Dblext_clear_signexponent(srcdst) Dbl_clear_signexponent(srcdst) #define Dblext_clear_sign(srcdst) Dbl_clear_sign(srcdst) #define Dblext_isone_hidden(dbl_value) Dbl_isone_hidden(dbl_value) /* * The Fourword_add() macro assumes that integers are 4 bytes in size. * It will break if this is not the case. */#define Fourword_add(src1dstA,src1dstB,src1dstC,src1dstD,src2A,src2B,src2C,src2D) \	/* 								\	 * want this macro to generate:					\	 *	ADD	src1dstD,src2D,src1dstD;			\	 *	ADDC	src1dstC,src2C,src1dstC;			\	 *	ADDC	src1dstB,src2B,src1dstB;			\	 *	ADDC	src1dstA,src2A,src1dstA;			\	 */								\	if ((unsigned int)(src1dstD += (src2D)) < (unsigned int)(src2D)) { \	   if ((unsigned int)(src1dstC += (src2C) + 1) <=		\	       (unsigned int)(src2C)) {					\	     if ((unsigned int)(src1dstB += (src2B) + 1) <=		\		 (unsigned int)(src2B)) src1dstA++;			\	   }								\	   else if ((unsigned int)(src1dstB += (src2B)) < 		\		    (unsigned int)(src2B)) src1dstA++;			\	}								\	else {								\	   if ((unsigned int)(src1dstC += (src2C)) <			\	       (unsigned int)(src2C)) {					\	      if ((unsigned int)(src1dstB += (src2B) + 1) <=		\		  (unsigned int)(src2B)) src1dstA++;			\	   }								\	   else if ((unsigned int)(src1dstB += (src2B)) <		\		    (unsigned int)(src2B)) src1dstA++;			\	}								\	src1dstA += (src2A)#define Dblext_denormalize(opndp1,opndp2,opndp3,opndp4,exponent,is_tiny) \  {int shiftamt, sticky;						\    is_tiny = TRUE;							\    if (exponent == 0 && (Dextallp3(opndp3) || Dextallp4(opndp4))) {	\	switch (Rounding_mode()) {					\	case ROUNDPLUS:							\		if (Dbl_iszero_sign(opndp1)) {				\			Dbl_increment(opndp1,opndp2);			\			if (Dbl_isone_hiddenoverflow(opndp1))		\				is_tiny = FALSE;			\			Dbl_decrement(opndp1,opndp2);			\		}							\		break;							\	case ROUNDMINUS:						\		if (Dbl_isone_sign(opndp1)) {				\			Dbl_increment(opndp1,opndp2);			\			if (Dbl_isone_hiddenoverflow(opndp1))		\				is_tiny = FALSE;			\			Dbl_decrement(opndp1,opndp2);			\		}							\		break;							\	case ROUNDNEAREST:						\		if (Dblext_isone_highp3(opndp3) &&			\		    (Dblext_isone_lowp2(opndp2) || 			\		     Dblext_isnotzero_low31p3(opndp3)))	{		\			Dbl_increment(opndp1,opndp2);			\			if (Dbl_isone_hiddenoverflow(opndp1))		\				is_tiny = FALSE;			\			Dbl_decrement(opndp1,opndp2);			\		}							\		break;							\	}								\    }									\    Dblext_clear_signexponent_set_hidden(opndp1);			\    if (exponent >= (1-QUAD_P)) {					\	shiftamt = (1-exponent) % 32;					\	switch((1-exponent)/32) {					\	  case 0: sticky = Dextallp4(opndp4) << 32-(shiftamt);		\		  Variableshiftdouble(opndp3,opndp4,shiftamt,opndp4);	\		  Variableshiftdouble(opndp2,opndp3,shiftamt,opndp3);	\		  Variableshiftdouble(opndp1,opndp2,shiftamt,opndp2);	\		  Dextallp1(opndp1) >>= shiftamt;			\		  break;						\	  case 1: sticky = (Dextallp3(opndp3) << 32-(shiftamt)) | 	\			   Dextallp4(opndp4);				\		  Variableshiftdouble(opndp2,opndp3,shiftamt,opndp4);	\		  Variableshiftdouble(opndp1,opndp2,shiftamt,opndp3);	\		  Dextallp2(opndp2) = Dextallp1(opndp1) >> shiftamt;	\		  Dextallp1(opndp1) = 0;				\		  break;						\	  case 2: sticky = (Dextallp2(opndp2) << 32-(shiftamt)) |	\			    Dextallp3(opndp3) | Dextallp4(opndp4);	\		  Variableshiftdouble(opndp1,opndp2,shiftamt,opndp4);	\		  Dextallp3(opndp3) = Dextallp1(opndp1) >> shiftamt;	\		  Dextallp1(opndp1) = Dextallp2(opndp2) = 0;		\		  break;						\	  case 3: sticky = (Dextallp1(opndp1) << 32-(shiftamt)) |	\		  	Dextallp2(opndp2) | Dextallp3(opndp3) | 	\			Dextallp4(opndp4);				\		  Dextallp4(opndp4) = Dextallp1(opndp1) >> shiftamt;	\		  Dextallp1(opndp1) = Dextallp2(opndp2) = 0;		\		  Dextallp3(opndp3) = 0;				\		  break;						\	}								\    }									\    else {								\	sticky = Dextallp1(opndp1) | Dextallp2(opndp2) |		\		 Dextallp3(opndp3) | Dextallp4(opndp4);			\	Dblext_setzero(opndp1,opndp2,opndp3,opndp4);			\    }									\    if (sticky) Dblext_setone_lowmantissap4(opndp4);			\    exponent = 0;							\  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -