Implement the getBitsSet function.
authorReid Spencer <rspencer@reidspencer.com>
Sat, 24 Mar 2007 23:27:48 +0000 (23:27 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Sat, 24 Mar 2007 23:27:48 +0000 (23:27 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35310 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/APInt.h

index 31fac9608f833c98a6e56a20a9f7bb34f28a3c28..4ceef2df3cac9e7a8166c1f4effc3c5f2f944c0d 100644 (file)
@@ -340,7 +340,16 @@ public:
   /// @param loBit the index of the lowest bit set.
   /// @returns An APInt value with the requested bits set.
   /// @brief Get a value with a block of bits set.
-  static APInt getBitsSet(uint32_t numBits, uint32_t hiBit, uint32_t loBit = 0);
+  static APInt getBitsSet(uint32_t numBits, uint32_t hiBit, uint32_t loBit = 0){
+    assert(hiBit < numBits && "hiBit out of range");
+    assert(loBit < numBits && "loBit out of range");
+    if (hiBit < loBit)
+      return getLowBitsSet(numBits, hiBit+1) |
+             getHighBitsSet(numBits, numBits-loBit+1);
+    else if (loBit == 0)
+      return getLowBitsSet(numBits, hiBit+1);
+    return getLowBitsSet(numBits, hiBit-loBit+1).shl(loBit);
+  }
 
   /// Constructs an APInt value that has the top hiBitsSet bits set.
   /// @param numBits the bitwidth of the result