Linux-libre 5.7.5-gnu
[librecmc/linux-libre.git] / arch / parisc / math-emu / fpbits.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * Linux/PA-RISC Project (http://www.parisc-linux.org/)
4  *
5  * Floating-point emulation code
6  *  Copyright (C) 2001 Hewlett-Packard (Paul Bame) <bame@debian.org>
7  */
8
9 #ifdef __NO_PA_HDRS
10     PA header file -- do not include this header file for non-PA builds.
11 #endif
12
13
14 /*
15  *  These macros are designed to be portable to all machines that have
16  *  a wordsize greater than or equal to 32 bits that support the portable
17  *  C compiler and the standard C preprocessor.  Wordsize (default 32)
18  *  and bitfield assignment (default left-to-right,  unlike VAX, PDP-11)
19  *  should be predefined using the constants HOSTWDSZ and BITFRL and
20  *  the C compiler "-D" flag (e.g., -DHOSTWDSZ=36 -DBITFLR for the DEC-20).
21  *  Note that the macro arguments assume that the integer being referenced
22  *  is a 32-bit integer (right-justified on the 20) and that bit 0 is the
23  *  most significant bit.
24  */
25
26 #ifndef HOSTWDSZ
27 #define HOSTWDSZ        32
28 #endif
29
30
31 /*###########################  Macros  ######################################*/
32
33 /*-------------------------------------------------------------------------
34  * NewDeclareBitField_Reference - Declare a structure similar to the simulator
35  * function "DeclBitfR" except its use is restricted to occur within a larger
36  * enclosing structure or union definition.  This declaration is an unnamed
37  * structure with the argument, name, as the member name and the argument,
38  * uname, as the element name. 
39  *----------------------------------------------------------------------- */
40 #define Bitfield_extract(start, length, object)         \
41     ((object) >> (HOSTWDSZ - (start) - (length)) &      \
42     ((unsigned)-1 >> (HOSTWDSZ - (length))))
43
44 #define Bitfield_signed_extract(start, length, object) \
45     ((int)((object) << start) >> (HOSTWDSZ - (length)))
46
47 #define Bitfield_mask(start, len, object)               \
48     ((object) & (((unsigned)-1 >> (HOSTWDSZ-len)) << (HOSTWDSZ-start-len)))
49
50 #define Bitfield_deposit(value,start,len,object)  object = \
51     ((object) & ~(((unsigned)-1 >> (HOSTWDSZ-len)) << (HOSTWDSZ-start-len))) | \
52     (((value) & ((unsigned)-1 >> (HOSTWDSZ-len))) << (HOSTWDSZ-start-len))