fpbits.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  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., 675 Mass Ave, Cambridge, MA 02139, USA.
  20.  */
  21. #ifdef __NO_PA_HDRS
  22.     PA header file -- do not include this header file for non-PA builds.
  23. #endif
  24. /*
  25.  *  These macros are designed to be portable to all machines that have
  26.  *  a wordsize greater than or equal to 32 bits that support the portable
  27.  *  C compiler and the standard C preprocessor.  Wordsize (default 32)
  28.  *  and bitfield assignment (default left-to-right,  unlike VAX, PDP-11)
  29.  *  should be predefined using the constants HOSTWDSZ and BITFRL and
  30.  *  the C compiler "-D" flag (e.g., -DHOSTWDSZ=36 -DBITFLR for the DEC-20).
  31.  *  Note that the macro arguments assume that the integer being referenced
  32.  *  is a 32-bit integer (right-justified on the 20) and that bit 0 is the
  33.  *  most significant bit.
  34.  */
  35. #ifndef HOSTWDSZ
  36. #define HOSTWDSZ 32
  37. #endif
  38. /*###########################  Macros  ######################################*/
  39. /*-------------------------------------------------------------------------
  40.  * NewDeclareBitField_Reference - Declare a structure similar to the simulator
  41.  * function "DeclBitfR" except its use is restricted to occur within a larger
  42.  * enclosing structure or union definition.  This declaration is an unnamed
  43.  * structure with the argument, name, as the member name and the argument,
  44.  * uname, as the element name. 
  45.  *----------------------------------------------------------------------- */
  46. #define Bitfield_extract(start, length, object) 
  47.     ((object) >> (HOSTWDSZ - (start) - (length)) & 
  48.     ((unsigned)-1 >> (HOSTWDSZ - (length))))
  49. #define Bitfield_signed_extract(start, length, object) 
  50.     ((int)((object) << start) >> (HOSTWDSZ - (length)))
  51. #define Bitfield_mask(start, len, object)
  52.     ((object) & (((unsigned)-1 >> (HOSTWDSZ-len)) << (HOSTWDSZ-start-len)))
  53. #define Bitfield_deposit(value,start,len,object)  object = 
  54.     ((object) & ~(((unsigned)-1 >> (HOSTWDSZ-len)) << (HOSTWDSZ-start-len))) | 
  55.     (((value) & ((unsigned)-1 >> (HOSTWDSZ-len))) << (HOSTWDSZ-start-len))