xref: /illumos-gate/usr/src/lib/libm/common/m9x/fma.h (revision 25c28e83)
1*25c28e83SPiotr Jasiukajtis /*
2*25c28e83SPiotr Jasiukajtis  * CDDL HEADER START
3*25c28e83SPiotr Jasiukajtis  *
4*25c28e83SPiotr Jasiukajtis  * The contents of this file are subject to the terms of the
5*25c28e83SPiotr Jasiukajtis  * Common Development and Distribution License (the "License").
6*25c28e83SPiotr Jasiukajtis  * You may not use this file except in compliance with the License.
7*25c28e83SPiotr Jasiukajtis  *
8*25c28e83SPiotr Jasiukajtis  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*25c28e83SPiotr Jasiukajtis  * or http://www.opensolaris.org/os/licensing.
10*25c28e83SPiotr Jasiukajtis  * See the License for the specific language governing permissions
11*25c28e83SPiotr Jasiukajtis  * and limitations under the License.
12*25c28e83SPiotr Jasiukajtis  *
13*25c28e83SPiotr Jasiukajtis  * When distributing Covered Code, include this CDDL HEADER in each
14*25c28e83SPiotr Jasiukajtis  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*25c28e83SPiotr Jasiukajtis  * If applicable, add the following below this CDDL HEADER, with the
16*25c28e83SPiotr Jasiukajtis  * fields enclosed by brackets "[]" replaced with your own identifying
17*25c28e83SPiotr Jasiukajtis  * information: Portions Copyright [yyyy] [name of copyright owner]
18*25c28e83SPiotr Jasiukajtis  *
19*25c28e83SPiotr Jasiukajtis  * CDDL HEADER END
20*25c28e83SPiotr Jasiukajtis  */
21*25c28e83SPiotr Jasiukajtis 
22*25c28e83SPiotr Jasiukajtis /*
23*25c28e83SPiotr Jasiukajtis  * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
24*25c28e83SPiotr Jasiukajtis  */
25*25c28e83SPiotr Jasiukajtis /*
26*25c28e83SPiotr Jasiukajtis  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
27*25c28e83SPiotr Jasiukajtis  * Use is subject to license terms.
28*25c28e83SPiotr Jasiukajtis  */
29*25c28e83SPiotr Jasiukajtis 
30*25c28e83SPiotr Jasiukajtis #ifndef _FMA_H
31*25c28e83SPiotr Jasiukajtis #define	_FMA_H
32*25c28e83SPiotr Jasiukajtis 
33*25c28e83SPiotr Jasiukajtis #ifdef __cplusplus
34*25c28e83SPiotr Jasiukajtis extern "C" {
35*25c28e83SPiotr Jasiukajtis #endif
36*25c28e83SPiotr Jasiukajtis 
37*25c28e83SPiotr Jasiukajtis #ifdef __sparc
38*25c28e83SPiotr Jasiukajtis 
39*25c28e83SPiotr Jasiukajtis /*
40*25c28e83SPiotr Jasiukajtis  * Common definitions for fma routines (SPARC)
41*25c28e83SPiotr Jasiukajtis  */
42*25c28e83SPiotr Jasiukajtis 
43*25c28e83SPiotr Jasiukajtis /* fsr fields */
44*25c28e83SPiotr Jasiukajtis 
45*25c28e83SPiotr Jasiukajtis /* current exception bits */
46*25c28e83SPiotr Jasiukajtis #define	FSR_NXC		0x1
47*25c28e83SPiotr Jasiukajtis #define	FSR_DZC		0x2
48*25c28e83SPiotr Jasiukajtis #define	FSR_UFC		0x4
49*25c28e83SPiotr Jasiukajtis #define	FSR_OFC		0x8
50*25c28e83SPiotr Jasiukajtis #define	FSR_NVC		0x10
51*25c28e83SPiotr Jasiukajtis #define	FSR_CEXC	0x1f	/* mask for all cexc bits */
52*25c28e83SPiotr Jasiukajtis 
53*25c28e83SPiotr Jasiukajtis /* accrued exception bits */
54*25c28e83SPiotr Jasiukajtis #define	FSR_NXA		0x20
55*25c28e83SPiotr Jasiukajtis #define	FSR_DZA		0x40
56*25c28e83SPiotr Jasiukajtis #define	FSR_UFA		0x80
57*25c28e83SPiotr Jasiukajtis #define	FSR_OFA		0x100
58*25c28e83SPiotr Jasiukajtis #define	FSR_NVA		0x200
59*25c28e83SPiotr Jasiukajtis 
60*25c28e83SPiotr Jasiukajtis /* trap enable bits */
61*25c28e83SPiotr Jasiukajtis #define	FSR_NXM		0x00800000
62*25c28e83SPiotr Jasiukajtis #define	FSR_DZM		0x01000000
63*25c28e83SPiotr Jasiukajtis #define	FSR_UFM		0x02000000
64*25c28e83SPiotr Jasiukajtis #define	FSR_OFM		0x04000000
65*25c28e83SPiotr Jasiukajtis #define	FSR_NVM		0x08000000
66*25c28e83SPiotr Jasiukajtis 
67*25c28e83SPiotr Jasiukajtis /* rounding directions (right-adjusted) */
68*25c28e83SPiotr Jasiukajtis #define	FSR_RN		0
69*25c28e83SPiotr Jasiukajtis #define	FSR_RZ		1
70*25c28e83SPiotr Jasiukajtis #define	FSR_RP		2
71*25c28e83SPiotr Jasiukajtis #define	FSR_RM		3
72*25c28e83SPiotr Jasiukajtis 
73*25c28e83SPiotr Jasiukajtis /* inline templates */
74*25c28e83SPiotr Jasiukajtis extern void __fenv_getfsr32(unsigned int *);
75*25c28e83SPiotr Jasiukajtis extern void __fenv_setfsr32(const unsigned int *);
76*25c28e83SPiotr Jasiukajtis 
77*25c28e83SPiotr Jasiukajtis #endif /* __sparc */
78*25c28e83SPiotr Jasiukajtis 
79*25c28e83SPiotr Jasiukajtis 
80*25c28e83SPiotr Jasiukajtis #if defined(__x86)
81*25c28e83SPiotr Jasiukajtis 
82*25c28e83SPiotr Jasiukajtis /*
83*25c28e83SPiotr Jasiukajtis  * Common definitions for fma routines (x86)
84*25c28e83SPiotr Jasiukajtis  */
85*25c28e83SPiotr Jasiukajtis 
86*25c28e83SPiotr Jasiukajtis /* control and status word fields */
87*25c28e83SPiotr Jasiukajtis 
88*25c28e83SPiotr Jasiukajtis /* exception flags */
89*25c28e83SPiotr Jasiukajtis #define	FSW_NV		0x1
90*25c28e83SPiotr Jasiukajtis #define	FSW_DN		0x2
91*25c28e83SPiotr Jasiukajtis #define	FSW_DZ		0x4
92*25c28e83SPiotr Jasiukajtis #define	FSW_OF		0x8
93*25c28e83SPiotr Jasiukajtis #define	FSW_UF		0x10
94*25c28e83SPiotr Jasiukajtis #define	FSW_NX		0x20
95*25c28e83SPiotr Jasiukajtis 
96*25c28e83SPiotr Jasiukajtis /* exception masks */
97*25c28e83SPiotr Jasiukajtis #define	FCW_NVM		0x00010000
98*25c28e83SPiotr Jasiukajtis #define	FCW_DNM		0x00020000
99*25c28e83SPiotr Jasiukajtis #define	FCW_DZM		0x00040000
100*25c28e83SPiotr Jasiukajtis #define	FCW_OFM		0x00080000
101*25c28e83SPiotr Jasiukajtis #define	FCW_UFM		0x00100000
102*25c28e83SPiotr Jasiukajtis #define	FCW_NXM		0x00200000
103*25c28e83SPiotr Jasiukajtis #define FCW_ALLM	0x003f0000
104*25c28e83SPiotr Jasiukajtis 
105*25c28e83SPiotr Jasiukajtis /* rounding directions */
106*25c28e83SPiotr Jasiukajtis #define	FCW_RN		0x00000000
107*25c28e83SPiotr Jasiukajtis #define	FCW_RM		0x04000000
108*25c28e83SPiotr Jasiukajtis #define	FCW_RP		0x08000000
109*25c28e83SPiotr Jasiukajtis #define	FCW_RZ		0x0c000000
110*25c28e83SPiotr Jasiukajtis 
111*25c28e83SPiotr Jasiukajtis /* rounding precisions */
112*25c28e83SPiotr Jasiukajtis #define FCW_P24		0x00000000
113*25c28e83SPiotr Jasiukajtis #define FCW_P53		0x02000000
114*25c28e83SPiotr Jasiukajtis #define FCW_P64		0x03000000
115*25c28e83SPiotr Jasiukajtis 
116*25c28e83SPiotr Jasiukajtis /* inline templates */
117*25c28e83SPiotr Jasiukajtis extern void __fenv_getcwsw(unsigned int *);
118*25c28e83SPiotr Jasiukajtis extern void __fenv_setcwsw(const unsigned int *);
119*25c28e83SPiotr Jasiukajtis 
120*25c28e83SPiotr Jasiukajtis #endif /* __x86 */
121*25c28e83SPiotr Jasiukajtis 
122*25c28e83SPiotr Jasiukajtis #ifdef __cplusplus
123*25c28e83SPiotr Jasiukajtis }
124*25c28e83SPiotr Jasiukajtis #endif
125*25c28e83SPiotr Jasiukajtis 
126*25c28e83SPiotr Jasiukajtis #endif	/* _FMA_H */
127