binutils/
[external/binutils.git] / sim / ppc / bits.c
index 2424e85..4a3d9c6 100644 (file)
 
 #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_ */