1*f4f0d8a3Sfredette /* $NetBSD: fpbits.h,v 1.1 2002/06/05 01:04:25 fredette Exp $ */ 2*f4f0d8a3Sfredette 3*f4f0d8a3Sfredette /* $OpenBSD: fpbits.h,v 1.4 2001/03/29 03:58:18 mickey Exp $ */ 4*f4f0d8a3Sfredette 5*f4f0d8a3Sfredette /* 6*f4f0d8a3Sfredette * Copyright 1996 1995 by Open Software Foundation, Inc. 7*f4f0d8a3Sfredette * All Rights Reserved 8*f4f0d8a3Sfredette * 9*f4f0d8a3Sfredette * Permission to use, copy, modify, and distribute this software and 10*f4f0d8a3Sfredette * its documentation for any purpose and without fee is hereby granted, 11*f4f0d8a3Sfredette * provided that the above copyright notice appears in all copies and 12*f4f0d8a3Sfredette * that both the copyright notice and this permission notice appear in 13*f4f0d8a3Sfredette * supporting documentation. 14*f4f0d8a3Sfredette * 15*f4f0d8a3Sfredette * OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE 16*f4f0d8a3Sfredette * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 17*f4f0d8a3Sfredette * FOR A PARTICULAR PURPOSE. 18*f4f0d8a3Sfredette * 19*f4f0d8a3Sfredette * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR 20*f4f0d8a3Sfredette * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 21*f4f0d8a3Sfredette * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT, 22*f4f0d8a3Sfredette * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION 23*f4f0d8a3Sfredette * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 24*f4f0d8a3Sfredette */ 25*f4f0d8a3Sfredette /* 26*f4f0d8a3Sfredette * pmk1.1 27*f4f0d8a3Sfredette */ 28*f4f0d8a3Sfredette /* 29*f4f0d8a3Sfredette * (c) Copyright 1986 HEWLETT-PACKARD COMPANY 30*f4f0d8a3Sfredette * 31*f4f0d8a3Sfredette * To anyone who acknowledges that this file is provided "AS IS" 32*f4f0d8a3Sfredette * without any express or implied warranty: 33*f4f0d8a3Sfredette * permission to use, copy, modify, and distribute this file 34*f4f0d8a3Sfredette * for any purpose is hereby granted without fee, provided that 35*f4f0d8a3Sfredette * the above copyright notice and this notice appears in all 36*f4f0d8a3Sfredette * copies, and that the name of Hewlett-Packard Company not be 37*f4f0d8a3Sfredette * used in advertising or publicity pertaining to distribution 38*f4f0d8a3Sfredette * of the software without specific, written prior permission. 39*f4f0d8a3Sfredette * Hewlett-Packard Company makes no representations about the 40*f4f0d8a3Sfredette * suitability of this software for any purpose. 41*f4f0d8a3Sfredette */ 42*f4f0d8a3Sfredette 43*f4f0d8a3Sfredette /* 44*f4f0d8a3Sfredette * These macros are designed to be portable to all machines that have 45*f4f0d8a3Sfredette * a wordsize greater than or equal to 32 bits that support the portable 46*f4f0d8a3Sfredette * C compiler and the standard C preprocessor. Wordsize (default 32) 47*f4f0d8a3Sfredette * and bitfield assignment (default left-to-right, unlike VAX, PDP-11) 48*f4f0d8a3Sfredette * should be predefined using the constants HOSTWDSZ and BITFRL and 49*f4f0d8a3Sfredette * the C compiler "-D" flag (e.g., -DHOSTWDSZ=36 -DBITFLR for the DEC-20). 50*f4f0d8a3Sfredette * Note that the macro arguments assume that the integer being referenced 51*f4f0d8a3Sfredette * is a 32-bit integer (right-justified on the 20) and that bit 0 is the 52*f4f0d8a3Sfredette * most significant bit. 53*f4f0d8a3Sfredette */ 54*f4f0d8a3Sfredette 55*f4f0d8a3Sfredette #ifndef HOSTWDSZ 56*f4f0d8a3Sfredette #define HOSTWDSZ 32 57*f4f0d8a3Sfredette #endif 58*f4f0d8a3Sfredette 59*f4f0d8a3Sfredette 60*f4f0d8a3Sfredette /*########################### Macros ######################################*/ 61*f4f0d8a3Sfredette 62*f4f0d8a3Sfredette /*------------------------------------------------------------------------- 63*f4f0d8a3Sfredette * NewDeclareBitField_Reference - Declare a structure similar to the simulator 64*f4f0d8a3Sfredette * function "DeclBitfR" except its use is restricted to occur within a larger 65*f4f0d8a3Sfredette * enclosing structure or union definition. This declaration is an unnamed 66*f4f0d8a3Sfredette * structure with the argument, name, as the member name and the argument, 67*f4f0d8a3Sfredette * uname, as the element name. 68*f4f0d8a3Sfredette *----------------------------------------------------------------------- */ 69*f4f0d8a3Sfredette #define Bitfield_extract(start, length, object) \ 70*f4f0d8a3Sfredette ((object) >> (HOSTWDSZ - (start) - (length)) & \ 71*f4f0d8a3Sfredette ((unsigned)-1 >> (HOSTWDSZ - (length)))) 72*f4f0d8a3Sfredette 73*f4f0d8a3Sfredette #define Bitfield_signed_extract(start, length, object) \ 74*f4f0d8a3Sfredette ((int)((object) << start) >> (HOSTWDSZ - (length))) 75*f4f0d8a3Sfredette 76*f4f0d8a3Sfredette #define Bitfield_mask(start, len, object) \ 77*f4f0d8a3Sfredette ((object) & (((unsigned)-1 >> (HOSTWDSZ-len)) << (HOSTWDSZ-start-len))) 78*f4f0d8a3Sfredette 79*f4f0d8a3Sfredette #define Bitfield_deposit(value,start,len,object) object = \ 80*f4f0d8a3Sfredette ((object) & ~(((unsigned)-1 >> (HOSTWDSZ-(len))) << (HOSTWDSZ-(start)-(len)))) | \ 81*f4f0d8a3Sfredette (((value) & ((unsigned)-1 >> (HOSTWDSZ-(len)))) << (HOSTWDSZ-(start)-(len))) 82*f4f0d8a3Sfredette 83