1/* $NetBSD: milieu.h,v 1.5 2020/09/02 03:43:22 thorpej Exp $ */ 2 3/* This is a derivative work. */ 4 5/*- 6 * Copyright (c) 2001 The NetBSD Foundation, Inc. 7 * All rights reserved. 8 * 9 * This code is derived from software contributed to The NetBSD Foundation 10 * by Ross Harvey. 11 * 12 * Redistribution and use in source and binary forms, with or without 13 * modification, are permitted provided that the following conditions 14 * are met: 15 * 1. Redistributions of source code must retain the above copyright 16 * notice, this list of conditions and the following disclaimer. 17 * 2. Redistributions in binary form must reproduce the above copyright 18 * notice, this list of conditions and the following disclaimer in the 19 * documentation and/or other materials provided with the distribution. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 22 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 23 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 24 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 25 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31 * POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34/*============================================================================ 35 36This C header file template is part of the Berkeley SoftFloat IEEE Floating- 37Point Arithmetic Package, Release 2c, by John R. Hauser. 38 39THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has 40been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES 41RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS 42AND ORGANIZATIONS WHO CAN AND WILL TOLERATE ALL LOSSES, COSTS, OR OTHER 43PROBLEMS THEY INCUR DUE TO THE SOFTWARE WITHOUT RECOMPENSE FROM JOHN HAUSER OR 44THE INTERNATIONAL COMPUTER SCIENCE INSTITUTE, AND WHO FURTHERMORE EFFECTIVELY 45INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE INSTITUTE 46(possibly via similar legal notice) AGAINST ALL LOSSES, COSTS, OR OTHER 47PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE, OR 48INCURRED BY ANYONE DUE TO A DERIVATIVE WORK THEY CREATE USING ANY PART OF THE 49SOFTWARE. 50 51Derivative works require also that (1) the source code for the derivative work 52includes prominent notice that the work is derivative, and (2) the source code 53includes prominent notice of these three paragraphs for those parts of this 54code that are retained. 55 56=============================================================================*/ 57 58#ifndef MILIEU_H 59#define MILIEU_H 60 61#if !defined(_KERNEL) && !defined(_STANDALONE) 62#include <inttypes.h> 63#else 64#include <sys/inttypes.h> 65#endif 66 67#include <sys/endian.h> 68 69/*---------------------------------------------------------------------------- 70| One of the macros `BIGENDIAN' or `LITTLEENDIAN' must be defined. 71*----------------------------------------------------------------------------*/ 72#if _BYTE_ORDER == _LITTLE_ENDIAN 73#define LITTLEENDIAN 74#else 75#define BIGENDIAN 76#endif 77 78/*---------------------------------------------------------------------------- 79| The macro `BITS64' can be defined to indicate that 64-bit integer types are 80| supported by the compiler. 81*----------------------------------------------------------------------------*/ 82#define BITS64 83 84/*---------------------------------------------------------------------------- 85| Each of the following `typedef's defines the most convenient type that holds 86| integers of at least as many bits as specified. For example, `uint8' should 87| be the most convenient type that can hold unsigned integers of as many as 88| 8 bits. The `flag' type must be able to hold either a 0 or 1. For most 89| implementations of C, `flag', `uint8', and `int8' should all be `typedef'ed 90| to the same as `int'. 91*----------------------------------------------------------------------------*/ 92typedef int flag; 93typedef unsigned int uint8; 94typedef signed int int8; 95typedef unsigned int uint16; 96typedef int int16; 97typedef unsigned int uint32; 98typedef signed int int32; 99#ifdef BITS64 100typedef uint64_t uint64; 101typedef int64_t int64; 102#endif 103 104/*---------------------------------------------------------------------------- 105| Each of the following `typedef's defines a type that holds integers 106| of _exactly_ the number of bits specified. For instance, for most 107| implementation of C, `bits16' and `sbits16' should be `typedef'ed to 108| `unsigned short int' and `signed short int' (or `short int'), respectively. 109*----------------------------------------------------------------------------*/ 110typedef uint8_t bits8; 111typedef int8_t sbits8; 112typedef uint16_t bits16; 113typedef int16_t sbits16; 114typedef uint32_t bits32; 115typedef int32_t sbits32; 116#ifdef BITS64 117typedef uint64_t bits64; 118typedef int64_t sbits64; 119#endif 120 121#ifdef BITS64 122/*---------------------------------------------------------------------------- 123| The `LIT64' macro takes as its argument a textual integer literal and 124| if necessary ``marks'' the literal as having a 64-bit integer type. 125| For example, the GNU C Compiler (`gcc') requires that 64-bit literals be 126| appended with the letters `LL' standing for `long long', which is `gcc's 127| name for the 64-bit integer type. Some compilers may allow `LIT64' to be 128| defined as the identity macro: `#define LIT64( a ) a'. 129*----------------------------------------------------------------------------*/ 130#define LIT64( a ) a##LL 131#endif 132 133/*---------------------------------------------------------------------------- 134| The macro `INLINE' can be used before functions that should be inlined. If 135| a compiler does not support explicit inlining, this macro should be defined 136| to be `static'. 137*----------------------------------------------------------------------------*/ 138#define INLINE static __inline 139 140#endif /* MILIEU_H */ 141