xref: /freebsd-src/sys/arm64/include/ieeefp.h (revision 2ff63af9b88c7413b7d71715b5532625752a248e)
1412042e2SAndrew Turner /*-
2412042e2SAndrew Turner  * Based on sys/sparc64/include/ieeefp.h
3412042e2SAndrew Turner  * Public domain.
4412042e2SAndrew Turner  */
5412042e2SAndrew Turner 
6*d5d97bedSMike Karels #ifdef __arm__
7*d5d97bedSMike Karels #include <arm/ieeefp.h>
8*d5d97bedSMike Karels #else /* !__arm__ */
9*d5d97bedSMike Karels 
10412042e2SAndrew Turner #ifndef _MACHINE_IEEEFP_H_
11412042e2SAndrew Turner #define	_MACHINE_IEEEFP_H_
12412042e2SAndrew Turner 
13412042e2SAndrew Turner /* Deprecated FPU control interface */
14412042e2SAndrew Turner 
15412042e2SAndrew Turner /* FP exception codes */
16e2def8eaSAndrew Turner #define	FP_EXCEPT_INV	8
17e2def8eaSAndrew Turner #define	FP_EXCEPT_DZ	9
18e2def8eaSAndrew Turner #define	FP_EXCEPT_OFL	10
19e2def8eaSAndrew Turner #define	FP_EXCEPT_UFL	11
20e2def8eaSAndrew Turner #define	FP_EXCEPT_IMP	12
21e2def8eaSAndrew Turner #define	FP_EXCEPT_DNML	15
22412042e2SAndrew Turner 
23412042e2SAndrew Turner typedef int fp_except_t;
24412042e2SAndrew Turner 
25412042e2SAndrew Turner #define	FP_X_INV	(1 << FP_EXCEPT_INV)	/* invalid operation exception */
26412042e2SAndrew Turner #define	FP_X_DZ		(1 << FP_EXCEPT_DZ)	/* divide-by-zero exception */
27412042e2SAndrew Turner #define	FP_X_OFL	(1 << FP_EXCEPT_OFL)	/* overflow exception */
28412042e2SAndrew Turner #define	FP_X_UFL	(1 << FP_EXCEPT_UFL)	/* underflow exception */
29412042e2SAndrew Turner #define	FP_X_IMP	(1 << FP_EXCEPT_IMP)	/* imprecise (loss of precision) */
30412042e2SAndrew Turner #define	FP_X_DNML	(1 << FP_EXCEPT_DNML)	/* denormal exception */
31412042e2SAndrew Turner 
32412042e2SAndrew Turner typedef enum {
33412042e2SAndrew Turner 	FP_RN = (0 << 22),	/* round to nearest representable number */
34412042e2SAndrew Turner 	FP_RP = (1 << 22),	/* round toward positive infinity */
35412042e2SAndrew Turner 	FP_RM = (2 << 22),	/* round toward negative infinity */
36412042e2SAndrew Turner 	FP_RZ = (3 << 22)	/* round to zero (truncate) */
37412042e2SAndrew Turner } fp_rnd_t;
38412042e2SAndrew Turner 
39412042e2SAndrew Turner __BEGIN_DECLS
40412042e2SAndrew Turner extern fp_rnd_t    fpgetround(void);
41412042e2SAndrew Turner extern fp_rnd_t    fpsetround(fp_rnd_t);
42412042e2SAndrew Turner extern fp_except_t fpgetmask(void);
43412042e2SAndrew Turner extern fp_except_t fpsetmask(fp_except_t);
44412042e2SAndrew Turner __END_DECLS
45412042e2SAndrew Turner 
46412042e2SAndrew Turner #endif /* _MACHINE_IEEEFP_H_ */
47*d5d97bedSMike Karels 
48*d5d97bedSMike Karels #endif /* !__arm__ */
49