Annotation of sys/lib/libkern/milieu.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: milieu.h,v 1.1 2002/04/28 20:55:14 pvalchev Exp $ */
2: /* $NetBSD: milieu.h,v 1.1 2001/04/26 03:10:47 ross Exp $ */
3:
4: /* This is a derivative work. */
5:
6: /*-
7: * Copyright (c) 2001 The NetBSD Foundation, Inc.
8: * All rights reserved.
9: *
10: * This code is derived from software contributed to The NetBSD Foundation
11: * by Ross Harvey.
12: *
13: * Redistribution and use in source and binary forms, with or without
14: * modification, are permitted provided that the following conditions
15: * are met:
16: * 1. Redistributions of source code must retain the above copyright
17: * notice, this list of conditions and the following disclaimer.
18: * 2. Redistributions in binary form must reproduce the above copyright
19: * notice, this list of conditions and the following disclaimer in the
20: * documentation and/or other materials provided with the distribution.
21: * 3. All advertising materials mentioning features or use of this software
22: * must display the following acknowledgement:
23: * This product includes software developed by the NetBSD
24: * Foundation, Inc. and its contributors.
25: * 4. Neither the name of The NetBSD Foundation nor the names of its
26: * contributors may be used to endorse or promote products derived
27: * from this software without specific prior written permission.
28: *
29: * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
30: * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
31: * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
32: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
33: * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
34: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
35: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
36: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
37: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
38: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
39: * POSSIBILITY OF SUCH DAMAGE.
40: */
41:
42: /*
43: ===============================================================================
44:
45: This C header file is part of TestFloat, Release 2a, a package of programs
46: for testing the correctness of floating-point arithmetic complying to the
47: IEC/IEEE Standard for Floating-Point.
48:
49: Written by John R. Hauser. More information is available through the Web
50: page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
51:
52: THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable
53: effort has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT
54: WILL AT TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS
55: RESTRICTED TO PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL
56: RESPONSIBILITY FOR ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM
57: THEIR OWN USE OF THE SOFTWARE, AND WHO ALSO EFFECTIVELY INDEMNIFY
58: (possibly via similar legal warning) JOHN HAUSER AND THE INTERNATIONAL
59: COMPUTER SCIENCE INSTITUTE AGAINST ALL LOSSES, COSTS, OR OTHER PROBLEMS
60: ARISING FROM THE USE OF THE SOFTWARE BY THEIR CUSTOMERS AND CLIENTS.
61:
62: Derivative works are acceptable, even for commercial purposes, so long as
63: (1) they include prominent notice that the work is derivative, and (2) they
64: include prominent notice akin to these four paragraphs for those parts of
65: this code that are retained.
66:
67: ===============================================================================
68: */
69:
70: #ifndef NO_IEEE
71:
72: #ifndef MILIEU_H
73: #define MILIEU_H
74:
75: #include <sys/types.h>
76: #include <sys/endian.h>
77:
78: enum {
79: FALSE = 0,
80: TRUE = 1
81: };
82:
83:
84: /*
85: -------------------------------------------------------------------------------
86: One of the macros `BIGENDIAN' or `LITTLEENDIAN' must be defined.
87: -------------------------------------------------------------------------------
88: */
89:
90: #if _BYTE_ORDER == _LITTLE_ENDIAN
91: #define LITTLEENDIAN
92: #else
93: #define BIGENDIAN
94: #endif
95:
96: #define BITS64
97:
98: /*
99: -------------------------------------------------------------------------------
100: Each of the following `typedef's defines the most convenient type that holds
101: integers of at least as many bits as specified. For example, `uint8' should
102: be the most convenient type that can hold unsigned integers of as many as
103: 8 bits. The `flag' type must be able to hold either a 0 or 1. For most
104: implementations of C, `flag', `uint8', and `int8' should all be `typedef'ed
105: to the same as `int'.
106: -------------------------------------------------------------------------------
107: */
108: typedef int flag;
109: typedef unsigned int uint8;
110: typedef signed int int8;
111: typedef unsigned int uint16;
112: typedef int int16;
113: typedef unsigned int uint32;
114: typedef signed int int32;
115: #ifdef BITS64
116: typedef uint64_t uint64;
117: typedef int64_t int64;
118: #endif
119:
120: /*
121: -------------------------------------------------------------------------------
122: Each of the following `typedef's defines a type that holds integers
123: of _exactly_ the number of bits specified. For instance, for most
124: implementation of C, `bits16' and `sbits16' should be `typedef'ed to
125: `unsigned short int' and `signed short int' (or `short int'), respectively.
126: -------------------------------------------------------------------------------
127: */
128: typedef uint8_t bits8;
129: typedef int8_t sbits8;
130: typedef uint16_t bits16;
131: typedef int16_t sbits16;
132: typedef uint32_t bits32;
133: typedef int32_t sbits32;
134: #ifdef BITS64
135: typedef uint64_t bits64;
136: typedef int64_t sbits64;
137: #endif
138:
139: #ifdef BITS64
140: /*
141: -------------------------------------------------------------------------------
142: The `LIT64' macro takes as its argument a textual integer literal and
143: if necessary ``marks'' the literal as having a 64-bit integer type.
144: For example, the GNU C Compiler (`gcc') requires that 64-bit literals be
145: appended with the letters `LL' standing for `long long', which is `gcc's
146: name for the 64-bit integer type. Some compilers may allow `LIT64' to be
147: defined as the identity macro: `#define LIT64( a ) a'.
148: -------------------------------------------------------------------------------
149: */
150: #define LIT64( a ) a##LL
151: #endif
152:
153: /*
154: -------------------------------------------------------------------------------
155: The macro `INLINE' can be used before functions that should be inlined. If
156: a compiler does not support explicit inlining, this macro should be defined
157: to be `static'.
158: -------------------------------------------------------------------------------
159: */
160: #define INLINE static inline
161:
162: #endif
163: #endif /* !NO_IEEE */
CVSweb