cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

fpbits.h (2160B)


      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))