1 /* 2 * Linux/PA-RISC Project (http://www.parisc-linux.org/) 3 * 4 * Floating-point emulation code 5 * Copyright (C) 2001 Hewlett-Packard (Paul Bame) <bame@debian.org> 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2, or (at your option) 10 * any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 */ 21 22 #ifdef __NO_PA_HDRS 23 PA header file -- do not include this header file for non-PA builds. 24 #endif 25 26 27 /* 28 * These macros are designed to be portable to all machines that have 29 * a wordsize greater than or equal to 32 bits that support the portable 30 * C compiler and the standard C preprocessor. Wordsize (default 32) 31 * and bitfield assignment (default left-to-right, unlike VAX, PDP-11) 32 * should be predefined using the constants HOSTWDSZ and BITFRL and 33 * the C compiler "-D" flag (e.g., -DHOSTWDSZ=36 -DBITFLR for the DEC-20). 34 * Note that the macro arguments assume that the integer being referenced 35 * is a 32-bit integer (right-justified on the 20) and that bit 0 is the 36 * most significant bit. 37 */ 38 39 #ifndef HOSTWDSZ 40 #define HOSTWDSZ 32 41 #endif 42 43 44 /*########################### Macros ######################################*/ 45 46 /*------------------------------------------------------------------------- 47 * NewDeclareBitField_Reference - Declare a structure similar to the simulator 48 * function "DeclBitfR" except its use is restricted to occur within a larger 49 * enclosing structure or union definition. This declaration is an unnamed 50 * structure with the argument, name, as the member name and the argument, 51 * uname, as the element name. 52 *----------------------------------------------------------------------- */ 53 #define Bitfield_extract(start, length, object) \ 54 ((object) >> (HOSTWDSZ - (start) - (length)) & \ 55 ((unsigned)-1 >> (HOSTWDSZ - (length)))) 56 57 #define Bitfield_signed_extract(start, length, object) \ 58 ((int)((object) << start) >> (HOSTWDSZ - (length))) 59 60 #define Bitfield_mask(start, len, object) \ 61 ((object) & (((unsigned)-1 >> (HOSTWDSZ-len)) << (HOSTWDSZ-start-len))) 62 63 #define Bitfield_deposit(value,start,len,object) object = \ 64 ((object) & ~(((unsigned)-1 >> (HOSTWDSZ-len)) << (HOSTWDSZ-start-len))) | \ 65 (((value) & ((unsigned)-1 >> (HOSTWDSZ-len))) << (HOSTWDSZ-start-len)) 66