David Brazdil | 0f672f6 | 2019-12-10 10:32:29 +0000 | [diff] [blame^] | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
Andrew Scull | b4b6d4a | 2019-01-02 15:54:55 +0000 | [diff] [blame] | 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> |
Andrew Scull | b4b6d4a | 2019-01-02 15:54:55 +0000 | [diff] [blame] | 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)) |