#include "basics.h"
+INLINE_BITS\
+(unsigned64)
+LSMASKED64 (unsigned64 word,
+ int start,
+ int stop)
+{
+ word &= LSMASK64 (start, stop);
+ return word;
+}
+
+INLINE_BITS\
+(unsigned64)
+LSEXTRACTED64 (unsigned64 val,
+ int start,
+ int stop)
+{
+ val <<= (64 - 1 - start); /* drop high bits */
+ val >>= (64 - 1 - start) + (stop); /* drop low bits */
+ return val;
+}
+
+INLINE_BITS\
+(unsigned32)
+MASKED32(unsigned32 word,
+ unsigned start,
+ unsigned stop)
+{
+ return (word & MASK32(start, stop));
+}
+
+INLINE_BITS\
+(unsigned64)
+MASKED64(unsigned64 word,
+ unsigned start,
+ unsigned stop)
+{
+ return (word & MASK64(start, stop));
+}
+
+INLINE_BITS\
+(unsigned_word)
+MASKED(unsigned_word word,
+ unsigned start,
+ unsigned stop)
+{
+ return ((word) & MASK(start, stop));
+}
+
+
+
+INLINE_BITS\
+(unsigned_word)
+EXTRACTED(unsigned_word word,
+ unsigned start,
+ unsigned stop)
+{
+ ASSERT(start <= stop);
+#if (WITH_TARGET_WORD_BITSIZE == 64)
+ return _EXTRACTEDn(64, word, start, stop);
+#else
+ if (stop < 32)
+ return 0;
+ else
+ return ((word >> (63 - stop))
+ & MASK(start+(63-stop), 63));
+#endif
+}
+
+
+INLINE_BITS\
+(unsigned_word)
+INSERTED(unsigned_word word,
+ unsigned start,
+ unsigned stop)
+{
+ ASSERT(start <= stop);
+#if (WITH_TARGET_WORD_BITSIZE == 64)
+ return _INSERTEDn(64, word, start, stop);
+#else
+ if (stop < 32)
+ return 0;
+ else
+ return ((word & MASK(start+(63-stop), 63))
+ << (63 - stop));
+#endif
+}
+
+
+INLINE_BITS\
+(unsigned32)
+ROTL32(unsigned32 val,
+ long shift)
+{
+ ASSERT(shift >= 0 && shift <= 32);
+ return _ROTLn(32, val, shift);
+}
+
+
+INLINE_BITS\
+(unsigned64)
+ROTL64(unsigned64 val,
+ long shift)
+{
+ ASSERT(shift >= 0 && shift <= 64);
+ return _ROTLn(64, val, shift);
+}
+
#endif /* _BITS_C_ */