xref: /freebsd/sys/arm64/include/ieeefp.h (revision ba3c1f5972d7b90feb6e6da47905ff2757e0fe57)
1 /*-
2  * Based on sys/sparc64/include/ieeefp.h
3  * Public domain.
4  * $FreeBSD$
5  */
6 
7 #ifdef __arm__
8 #include <arm/ieeefp.h>
9 #else /* !__arm__ */
10 
11 #ifndef _MACHINE_IEEEFP_H_
12 #define	_MACHINE_IEEEFP_H_
13 
14 /* Deprecated FPU control interface */
15 
16 /* FP exception codes */
17 #define	FP_EXCEPT_INV	8
18 #define	FP_EXCEPT_DZ	9
19 #define	FP_EXCEPT_OFL	10
20 #define	FP_EXCEPT_UFL	11
21 #define	FP_EXCEPT_IMP	12
22 #define	FP_EXCEPT_DNML	15
23 
24 typedef int fp_except_t;
25 
26 #define	FP_X_INV	(1 << FP_EXCEPT_INV)	/* invalid operation exception */
27 #define	FP_X_DZ		(1 << FP_EXCEPT_DZ)	/* divide-by-zero exception */
28 #define	FP_X_OFL	(1 << FP_EXCEPT_OFL)	/* overflow exception */
29 #define	FP_X_UFL	(1 << FP_EXCEPT_UFL)	/* underflow exception */
30 #define	FP_X_IMP	(1 << FP_EXCEPT_IMP)	/* imprecise (loss of precision) */
31 #define	FP_X_DNML	(1 << FP_EXCEPT_DNML)	/* denormal exception */
32 
33 typedef enum {
34 	FP_RN = (0 << 22),	/* round to nearest representable number */
35 	FP_RP = (1 << 22),	/* round toward positive infinity */
36 	FP_RM = (2 << 22),	/* round toward negative infinity */
37 	FP_RZ = (3 << 22)	/* round to zero (truncate) */
38 } fp_rnd_t;
39 
40 __BEGIN_DECLS
41 extern fp_rnd_t    fpgetround(void);
42 extern fp_rnd_t    fpsetround(fp_rnd_t);
43 extern fp_except_t fpgetmask(void);
44 extern fp_except_t fpsetmask(fp_except_t);
45 __END_DECLS
46 
47 #endif /* _MACHINE_IEEEFP_H_ */
48 
49 #endif /* !__arm__ */
50