mirror of
https://github.com/PDP-10/klh10.git
synced 2026-02-06 00:15:26 +00:00
60 lines
1.8 KiB
C
60 lines
1.8 KiB
C
/* KLH10 Macro Miscellany
|
|
*/
|
|
/* $Id: kn10mac.h,v 2.3 2001/11/10 21:28:59 klh Exp $
|
|
*/
|
|
/* Copyright © 1992, 1993, 2001 Kenneth L. Harrenstien
|
|
** All Rights Reserved
|
|
**
|
|
** This file is part of the KLH10 Distribution. Use, modification, and
|
|
** re-distribution is permitted subject to the terms in the file
|
|
** named "LICENSE", which contains the full text of the legal notices
|
|
** and should always accompany this Distribution.
|
|
**
|
|
** This software is provided "AS IS" with NO WARRANTY OF ANY KIND.
|
|
**
|
|
** This notice (including the copyright and warranty disclaimer)
|
|
** must be included in all copies or derivations of this software.
|
|
*/
|
|
/*
|
|
* $Log: kn10mac.h,v $
|
|
* Revision 2.3 2001/11/10 21:28:59 klh
|
|
* Final 2.0 distribution checkin
|
|
*
|
|
*/
|
|
|
|
/* Miscellaneous macro stuff that's sometimes useful */
|
|
|
|
#ifndef KN10MAC_INCLUDED
|
|
#define KN10MAC_INCLUDED 1
|
|
|
|
#ifdef RCSID
|
|
RCSID(kn10mac_h,"$Id: kn10mac.h,v 2.3 2001/11/10 21:28:59 klh Exp $")
|
|
#endif
|
|
|
|
/* These field-hacking macros rely on twos-complement arithmetic
|
|
** properties such that given a value M, the expression (M & -M) will
|
|
** isolate the rightmost ones-bit of M, which will be a simple power
|
|
** of 2. This still isn't log2, but if M is a constant then
|
|
** a decent compiler should turn multiply and divide of this power-of-2
|
|
** into logical shifts.
|
|
*/
|
|
|
|
/* FLD(uval,mask)
|
|
** Make integer field value from right-justified unsigned value
|
|
** (same as MACSYM's FLD(v,m) macro)
|
|
*/
|
|
#define FLD(uval,mask) (((uval)*((mask)&(-(mask))))&(mask))
|
|
|
|
/* FLDGET(ui,mask)
|
|
** Get right-justified value from field in unsigned integer
|
|
*/
|
|
#define FLDGET(ui,mask) (((ui)&(mask))/((mask)&(-(mask))))
|
|
|
|
/* FLDPUT(ui,mask,uval)
|
|
** Put right-justified unsigned value into field in integer
|
|
*/
|
|
#define FLDPUT(ui,mask,uval) (((ui)&(~(mask)))|FLD(uval,mask))
|
|
|
|
|
|
#endif /* ifndef KN10MAC_INCLUDED */
|