From 8f969ee62c3fed26f835a37c41f7c009f99ea3bf Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Sat, 24 Mar 2007 23:27:48 +0000 Subject: [PATCH] Implement the getBitsSet function. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35310 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ADT/APInt.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/include/llvm/ADT/APInt.h b/include/llvm/ADT/APInt.h index 31fac9608f8..4ceef2df3ca 100644 --- a/include/llvm/ADT/APInt.h +++ b/include/llvm/ADT/APInt.h @@ -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