/* -*-c-*-
*
- * $Id: bits.h,v 1.10 2004/04/08 01:36:11 mdw Exp $
+ * $Id$
*
* Portable bit-level manipulation macros
*
#define MASK8 0xffu
#define MASK16 0xffffu
+#define MASK16_L 0xffffu
+#define MASK16_B 0xffffu
#define MASK24 0xffffffu
+#define MASK24_L 0xffffffu
+#define MASK24_B 0xffffffu
#define MASK32 0xffffffffu
+#define MASK32_L 0xffffffffu
+#define MASK32_B 0xffffffffu
#ifdef HAVE_UINT64
# define MASK64 MLIB_BITS_EXTENSION 0xffffffffffffffffu
#endif
+/* --- Sizes --- */
+
+#define SZ_8 1
+#define SZ_16 2
+#define SZ_16_L 2
+#define SZ_16_B 2
+#define SZ_24 3
+#define SZ_24_L 3
+#define SZ_24_B 3
+#define SZ_32 4
+#define SZ_32_L 4
+#define SZ_32_B 4
+
/* --- Type coercions --- */
#define U8(x) ((octet)((x) & MASK8))
unsigned _s = (s) & 63u; \
uint32 _l = (v).lo, _h = (v).hi; \
kludge64 *_d = &(d); \
- if (_s >= 32) { \
+ if (_s > 32) { \
_d->hi = LSL32(_l, _s - 32u) | LSR32(_h, 64u - _s); \
_d->lo = LSL32(_h, _s - 32u) | LSR32(_l, 64u - _s); \
} else if (!_s) { \
_d->lo = _l; \
_d->hi = _h; \
+ } else if (_s == 32) { \
+ _d->lo = _h; \
+ _d->hi = _l; \
} else { \
_d->hi = LSL32(_h, _s) | LSR32(_l, 32u - _s); \
_d->lo = LSL32(_l, _s) | LSR32(_h, 32u - _s); \
unsigned _s = (s) & 63u; \
uint32 _l = (v).lo, _h = (v).hi; \
kludge64 *_d = &(d); \
- if (_s >= 32) { \
+ if (_s > 32) { \
_d->hi = LSR32(_l, _s - 32u) | LSL32(_h, 64u - _s); \
_d->lo = LSR32(_h, _s - 32u) | LSL32(_l, 64u - _s); \
} else if (!_s) { \
_d->lo = _l; \
_d->hi = _h; \
+ } else if (_s == 32) { \
+ _d->lo = _h; \
+ _d->hi = _l; \
} else { \
_d->hi = LSR32(_h, _s) | LSL32(_l, 32u - _s); \
_d->lo = LSR32(_l, _s) | LSL32(_h, 32u - _s); \