mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-10-27 12:11:41 +01:00 
			
		
		
		
	
		
			
	
	
		
			257 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			257 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | #ifndef _IEEE_FP_H_
 | ||
|  | #define _IEEE_FP_H_
 | ||
|  | 
 | ||
|  | #include "_ansi.h"
 | ||
|  | 
 | ||
|  | #include <machine/ieeefp.h>
 | ||
|  | 
 | ||
|  | _BEGIN_STD_C | ||
|  | 
 | ||
|  | /* FIXME FIXME FIXME:
 | ||
|  |    Neither of __ieee_{float,double}_shape_tape seem to be used anywhere | ||
|  |    except in libm/test.  If that is the case, please delete these from here. | ||
|  |    If that is not the case, please insert documentation here describing why | ||
|  |    they're needed.  */ | ||
|  | 
 | ||
|  | #ifdef __IEEE_BIG_ENDIAN
 | ||
|  | 
 | ||
|  | typedef union  | ||
|  | { | ||
|  |   double value; | ||
|  |   struct  | ||
|  |   { | ||
|  |     unsigned int sign : 1; | ||
|  |     unsigned int exponent: 11; | ||
|  |     unsigned int fraction0:4; | ||
|  |     unsigned int fraction1:16; | ||
|  |     unsigned int fraction2:16; | ||
|  |     unsigned int fraction3:16; | ||
|  |      | ||
|  |   } number; | ||
|  |   struct  | ||
|  |   { | ||
|  |     unsigned int sign : 1; | ||
|  |     unsigned int exponent: 11; | ||
|  |     unsigned int quiet:1; | ||
|  |     unsigned int function0:3; | ||
|  |     unsigned int function1:16; | ||
|  |     unsigned int function2:16; | ||
|  |     unsigned int function3:16; | ||
|  |   } nan; | ||
|  |   struct  | ||
|  |   { | ||
|  |     unsigned long msw; | ||
|  |     unsigned long lsw; | ||
|  |   } parts; | ||
|  |     long aslong[2]; | ||
|  | } __ieee_double_shape_type; | ||
|  | 
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #ifdef __IEEE_LITTLE_ENDIAN
 | ||
|  | 
 | ||
|  | typedef union  | ||
|  | { | ||
|  |   double value; | ||
|  |   struct  | ||
|  |   { | ||
|  | #ifdef __SMALL_BITFIELDS
 | ||
|  |     unsigned int fraction3:16; | ||
|  |     unsigned int fraction2:16; | ||
|  |     unsigned int fraction1:16; | ||
|  |     unsigned int fraction0: 4; | ||
|  | #else
 | ||
|  |     unsigned int fraction1:32; | ||
|  |     unsigned int fraction0:20; | ||
|  | #endif
 | ||
|  |     unsigned int exponent :11; | ||
|  |     unsigned int sign     : 1; | ||
|  |   } number; | ||
|  |   struct  | ||
|  |   { | ||
|  | #ifdef __SMALL_BITFIELDS
 | ||
|  |     unsigned int function3:16; | ||
|  |     unsigned int function2:16; | ||
|  |     unsigned int function1:16; | ||
|  |     unsigned int function0:3; | ||
|  | #else
 | ||
|  |     unsigned int function1:32; | ||
|  |     unsigned int function0:19; | ||
|  | #endif
 | ||
|  |     unsigned int quiet:1; | ||
|  |     unsigned int exponent: 11; | ||
|  |     unsigned int sign : 1; | ||
|  |   } nan; | ||
|  |   struct  | ||
|  |   { | ||
|  |     unsigned long lsw; | ||
|  |     unsigned long msw; | ||
|  |   } parts; | ||
|  | 
 | ||
|  |   long aslong[2]; | ||
|  | 
 | ||
|  | } __ieee_double_shape_type; | ||
|  | 
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #ifdef __IEEE_BIG_ENDIAN
 | ||
|  | 
 | ||
|  | typedef union | ||
|  | { | ||
|  |   float value; | ||
|  |   struct  | ||
|  |   { | ||
|  |     unsigned int sign : 1; | ||
|  |     unsigned int exponent: 8; | ||
|  |     unsigned int fraction0: 7; | ||
|  |     unsigned int fraction1: 16; | ||
|  |   } number; | ||
|  |   struct  | ||
|  |   { | ||
|  |     unsigned int sign:1; | ||
|  |     unsigned int exponent:8; | ||
|  |     unsigned int quiet:1; | ||
|  |     unsigned int function0:6; | ||
|  |     unsigned int function1:16; | ||
|  |   } nan; | ||
|  |   long p1; | ||
|  |    | ||
|  | } __ieee_float_shape_type; | ||
|  | 
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #ifdef __IEEE_LITTLE_ENDIAN
 | ||
|  | 
 | ||
|  | typedef union | ||
|  | { | ||
|  |   float value; | ||
|  |   struct  | ||
|  |   { | ||
|  |     unsigned int fraction0: 7; | ||
|  |     unsigned int fraction1: 16; | ||
|  |     unsigned int exponent: 8; | ||
|  |     unsigned int sign : 1; | ||
|  |   } number; | ||
|  |   struct  | ||
|  |   { | ||
|  |     unsigned int function1:16; | ||
|  |     unsigned int function0:6; | ||
|  |     unsigned int quiet:1; | ||
|  |     unsigned int exponent:8; | ||
|  |     unsigned int sign:1; | ||
|  |   } nan; | ||
|  |   long p1; | ||
|  |    | ||
|  | } __ieee_float_shape_type; | ||
|  | 
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /* FLOATING ROUNDING */ | ||
|  | 
 | ||
|  | typedef int fp_rnd; | ||
|  | #define FP_RN 0 	/* Round to nearest 		*/
 | ||
|  | #define FP_RM 1		/* Round down 			*/
 | ||
|  | #define FP_RP 2		/* Round up 			*/
 | ||
|  | #define FP_RZ 3		/* Round to zero (trunate) 	*/
 | ||
|  | 
 | ||
|  | fp_rnd _EXFUN(fpgetround,(void)); | ||
|  | fp_rnd _EXFUN(fpsetround, (fp_rnd)); | ||
|  | 
 | ||
|  | /* EXCEPTIONS */ | ||
|  | 
 | ||
|  | typedef int fp_except; | ||
|  | #define FP_X_INV 0x10	/* Invalid operation 		*/
 | ||
|  | #define FP_X_DX  0x80	/* Divide by zero		*/
 | ||
|  | #define FP_X_OFL 0x04	/* Overflow exception		*/
 | ||
|  | #define FP_X_UFL 0x02	/* Underflow exception		*/
 | ||
|  | #define FP_X_IMP 0x01	/* imprecise exception		*/
 | ||
|  | 
 | ||
|  | fp_except _EXFUN(fpgetmask,(void)); | ||
|  | fp_except _EXFUN(fpsetmask,(fp_except)); | ||
|  | fp_except _EXFUN(fpgetsticky,(void)); | ||
|  | fp_except _EXFUN(fpsetsticky, (fp_except)); | ||
|  | 
 | ||
|  | /* INTEGER ROUNDING */ | ||
|  | 
 | ||
|  | typedef int fp_rdi; | ||
|  | #define FP_RDI_TOZ 0	/* Round to Zero 		*/
 | ||
|  | #define FP_RDI_RD  1	/* Follow float mode		*/
 | ||
|  | 
 | ||
|  | fp_rdi _EXFUN(fpgetroundtoi,(void)); | ||
|  | fp_rdi _EXFUN(fpsetroundtoi,(fp_rdi)); | ||
|  | 
 | ||
|  | #undef isnan
 | ||
|  | #undef isinf
 | ||
|  | 
 | ||
|  | int _EXFUN(isnan, (double)); | ||
|  | int _EXFUN(isinf, (double)); | ||
|  | int _EXFUN(finite, (double)); | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | int _EXFUN(isnanf, (float)); | ||
|  | int _EXFUN(isinff, (float)); | ||
|  | int _EXFUN(finitef, (float)); | ||
|  | 
 | ||
|  | #define __IEEE_DBL_EXPBIAS 1023
 | ||
|  | #define __IEEE_FLT_EXPBIAS 127
 | ||
|  | 
 | ||
|  | #define __IEEE_DBL_EXPLEN 11
 | ||
|  | #define __IEEE_FLT_EXPLEN 8
 | ||
|  | 
 | ||
|  | 
 | ||
|  | #define __IEEE_DBL_FRACLEN (64 - (__IEEE_DBL_EXPLEN + 1))
 | ||
|  | #define __IEEE_FLT_FRACLEN (32 - (__IEEE_FLT_EXPLEN + 1))
 | ||
|  | 
 | ||
|  | #define __IEEE_DBL_MAXPOWTWO	((double)(1L << 32 - 2) * (1L << (32-11) - 32 + 1))
 | ||
|  | #define __IEEE_FLT_MAXPOWTWO	((float)(1L << (32-8) - 1))
 | ||
|  | 
 | ||
|  | #define __IEEE_DBL_NAN_EXP 0x7ff
 | ||
|  | #define __IEEE_FLT_NAN_EXP 0xff
 | ||
|  | 
 | ||
|  | #ifndef __ieeefp_isnanf
 | ||
|  | #define __ieeefp_isnanf(x) (((*(long *)&(x) & 0x7f800000L)==0x7f800000L) && \
 | ||
|  | 			    ((*(long *)&(x) & 0x007fffffL)!=0000000000L)) | ||
|  | #endif
 | ||
|  | #define isnanf(x)	__ieeefp_isnanf(x)
 | ||
|  | 
 | ||
|  | #ifndef __ieeefp_isinff
 | ||
|  | #define __ieeefp_isinff(x) (((*(long *)&(x) & 0x7f800000L)==0x7f800000L) && \
 | ||
|  | 			    ((*(long *)&(x) & 0x007fffffL)==0000000000L)) | ||
|  | #endif
 | ||
|  | #define isinff(x)	__ieeefp_isinff(x)
 | ||
|  | 
 | ||
|  | #ifndef __ieeefp_finitef
 | ||
|  | #define __ieeefp_finitef(x) (((*(long *)&(x) & 0x7f800000L)!=0x7f800000L))
 | ||
|  | #endif
 | ||
|  | #define finitef(x)	__ieeefp_finitef(x)
 | ||
|  | 
 | ||
|  | #ifdef _DOUBLE_IS_32BITS
 | ||
|  | #undef __IEEE_DBL_EXPBIAS
 | ||
|  | #define __IEEE_DBL_EXPBIAS __IEEE_FLT_EXPBIAS
 | ||
|  | 
 | ||
|  | #undef __IEEE_DBL_EXPLEN
 | ||
|  | #define __IEEE_DBL_EXPLEN __IEEE_FLT_EXPLEN
 | ||
|  | 
 | ||
|  | #undef __IEEE_DBL_FRACLEN
 | ||
|  | #define __IEEE_DBL_FRACLEN __IEEE_FLT_FRACLEN
 | ||
|  | 
 | ||
|  | #undef __IEEE_DBL_MAXPOWTWO
 | ||
|  | #define __IEEE_DBL_MAXPOWTWO __IEEE_FLT_MAXPOWTWO
 | ||
|  | 
 | ||
|  | #undef __IEEE_DBL_NAN_EXP
 | ||
|  | #define __IEEE_DBL_NAN_EXP __IEEE_FLT_NAN_EXP
 | ||
|  | 
 | ||
|  | #undef __ieee_double_shape_type
 | ||
|  | #define __ieee_double_shape_type __ieee_float_shape_type
 | ||
|  | 
 | ||
|  | #endif /* _DOUBLE_IS_32BITS */
 | ||
|  | 
 | ||
|  | _END_STD_C | ||
|  | 
 | ||
|  | #endif /* _IEEE_FP_H_ */
 |