mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	1. "unsigned" -> "uint32_t" to gaurantee its bit width on all platforms.
Size matters in this case. 2. Remove the unused whichByte private function, which was also broken. 3. Remove the non-const overload of the getWord function, getWord() is never used as an lvalue. 4. Rename some local variables for clarity (e.g. API -> Result). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34390 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
		| @@ -59,7 +59,8 @@ namespace APIntOps { | |||||||
| /// | /// | ||||||
| /// @brief Class for arbitrary precision integers. | /// @brief Class for arbitrary precision integers. | ||||||
| class APInt { | class APInt { | ||||||
|   unsigned BitWidth;      ///< The number of bits in this APInt. | public: | ||||||
|  |   uint32_t BitWidth;      ///< The number of bits in this APInt. | ||||||
|  |  | ||||||
|   /// This union is used to store the integer value. When the |   /// This union is used to store the integer value. When the | ||||||
|   /// integer bit-width <= 64, it uses VAL;  |   /// integer bit-width <= 64, it uses VAL;  | ||||||
| @@ -77,7 +78,7 @@ class APInt { | |||||||
|   /// Here one word's bitwidth equals to that of uint64_t. |   /// Here one word's bitwidth equals to that of uint64_t. | ||||||
|   /// @returns the number of words to hold the integer value of this APInt. |   /// @returns the number of words to hold the integer value of this APInt. | ||||||
|   /// @brief Get the number of words. |   /// @brief Get the number of words. | ||||||
|   inline unsigned getNumWords() const { |   inline uint32_t getNumWords() const { | ||||||
|     return (BitWidth + APINT_BITS_PER_WORD - 1) / APINT_BITS_PER_WORD; |     return (BitWidth + APINT_BITS_PER_WORD - 1) / APINT_BITS_PER_WORD; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -88,24 +89,19 @@ class APInt { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /// @returns the word position for the specified bit position. |   /// @returns the word position for the specified bit position. | ||||||
|   static inline unsigned whichWord(unsigned bitPosition) {  |   static inline uint32_t whichWord(uint32_t bitPosition) {  | ||||||
|     return bitPosition / APINT_BITS_PER_WORD;  |     return bitPosition / APINT_BITS_PER_WORD;  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /// @returns the byte position for the specified bit position. |  | ||||||
|   static inline unsigned whichByte(unsigned bitPosition) {  |  | ||||||
|     return (bitPosition % APINT_BITS_PER_WORD) / 8;  |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   /// @returns the bit position in a word for the specified bit position  |   /// @returns the bit position in a word for the specified bit position  | ||||||
|   /// in APInt. |   /// in APInt. | ||||||
|   static inline unsigned whichBit(unsigned bitPosition) {  |   static inline uint32_t whichBit(uint32_t bitPosition) {  | ||||||
|     return bitPosition % APINT_BITS_PER_WORD;  |     return bitPosition % APINT_BITS_PER_WORD;  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /// @returns a uint64_t type integer with just bit position at |   /// @returns a uint64_t type integer with just bit position at | ||||||
|   /// "whichBit(bitPosition)" setting, others zero. |   /// "whichBit(bitPosition)" setting, others zero. | ||||||
|   static inline uint64_t maskBit(unsigned bitPosition) {  |   static inline uint64_t maskBit(uint32_t bitPosition) {  | ||||||
|     return (static_cast<uint64_t>(1)) << whichBit(bitPosition);  |     return (static_cast<uint64_t>(1)) << whichBit(bitPosition);  | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -121,36 +117,31 @@ class APInt { | |||||||
|         (APINT_BITS_PER_WORD - (whichBit(BitWidth - 1) + 1)); |         (APINT_BITS_PER_WORD - (whichBit(BitWidth - 1) + 1)); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /// @returns the corresponding word for the specified bit position. |  | ||||||
|   inline uint64_t& getWord(unsigned bitPosition) {  |  | ||||||
|     return isSingleWord() ? VAL : pVal[whichWord(bitPosition)];  |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   /// @returns the corresponding word for the specified bit position. |   /// @returns the corresponding word for the specified bit position. | ||||||
|   /// This is a constant version. |   /// This is a constant version. | ||||||
|   inline uint64_t getWord(unsigned bitPosition) const {  |   inline uint64_t getWord(uint32_t bitPosition) const {  | ||||||
|     return isSingleWord() ? VAL : pVal[whichWord(bitPosition)];  |     return isSingleWord() ? VAL : pVal[whichWord(bitPosition)];  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /// @brief Converts a char array into an integer. |   /// @brief Converts a char array into an integer. | ||||||
|   void fromString(unsigned numBits, const char *StrStart, unsigned slen,  |   void fromString(uint32_t numBits, const char *StrStart, uint32_t slen,  | ||||||
|                   uint8_t radix); |                   uint8_t radix); | ||||||
|  |  | ||||||
| public: | public: | ||||||
|   /// @brief Create a new APInt of numBits bit-width, and initialized as val. |   /// @brief Create a new APInt of numBits bit-width, and initialized as val. | ||||||
|   APInt(unsigned numBits, uint64_t val); |   APInt(uint32_t numBits, uint64_t val); | ||||||
|  |  | ||||||
|   /// @brief Create a new APInt of numBits bit-width, and initialized as  |   /// @brief Create a new APInt of numBits bit-width, and initialized as  | ||||||
|   /// bigVal[]. |   /// bigVal[]. | ||||||
|   APInt(unsigned numBits, unsigned numWords, uint64_t bigVal[]); |   APInt(uint32_t numBits, uint32_t numWords, uint64_t bigVal[]); | ||||||
|  |  | ||||||
|   /// @brief Create a new APInt by translating the string represented  |   /// @brief Create a new APInt by translating the string represented  | ||||||
|   /// integer value. |   /// integer value. | ||||||
|   APInt(unsigned numBits, const std::string& Val, uint8_t radix); |   APInt(uint32_t numBits, const std::string& Val, uint8_t radix); | ||||||
|  |  | ||||||
|   /// @brief Create a new APInt by translating the char array represented |   /// @brief Create a new APInt by translating the char array represented | ||||||
|   /// integer value. |   /// integer value. | ||||||
|   APInt(unsigned numBits, const char StrStart[], unsigned slen, uint8_t radix); |   APInt(uint32_t numBits, const char StrStart[], uint32_t slen, uint8_t radix); | ||||||
|  |  | ||||||
|   /// @brief Copy Constructor. |   /// @brief Copy Constructor. | ||||||
|   APInt(const APInt& API); |   APInt(const APInt& API); | ||||||
| @@ -258,7 +249,7 @@ public: | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /// @brief Array-indexing support. |   /// @brief Array-indexing support. | ||||||
|   bool operator[](unsigned bitPosition) const; |   bool operator[](uint32_t bitPosition) const; | ||||||
|  |  | ||||||
|   /// Compare this APInt with the given APInt& RHS  |   /// Compare this APInt with the given APInt& RHS  | ||||||
|   /// for the validity of the equality relationship. |   /// for the validity of the equality relationship. | ||||||
| @@ -332,24 +323,24 @@ public: | |||||||
|  |  | ||||||
|   /// Arithmetic right-shift this APInt by shiftAmt. |   /// Arithmetic right-shift this APInt by shiftAmt. | ||||||
|   /// @brief Arithmetic right-shift function. |   /// @brief Arithmetic right-shift function. | ||||||
|   APInt ashr(unsigned shiftAmt) const; |   APInt ashr(uint32_t shiftAmt) const; | ||||||
|  |  | ||||||
|   /// Logical right-shift this APInt by shiftAmt. |   /// Logical right-shift this APInt by shiftAmt. | ||||||
|   /// @brief Logical right-shift function. |   /// @brief Logical right-shift function. | ||||||
|   APInt lshr(unsigned shiftAmt) const; |   APInt lshr(uint32_t shiftAmt) const; | ||||||
|  |  | ||||||
|   /// Left-shift this APInt by shiftAmt. |   /// Left-shift this APInt by shiftAmt. | ||||||
|   /// @brief Left-shift function. |   /// @brief Left-shift function. | ||||||
|   APInt shl(unsigned shiftAmt) const; |   APInt shl(uint32_t shiftAmt) const; | ||||||
|  |  | ||||||
|   /// Signed divide this APInt by APInt RHS. |   /// Signed divide this APInt by APInt RHS. | ||||||
|   /// @brief Signed division function for APInt. |   /// @brief Signed division function for APInt. | ||||||
|   inline APInt sdiv(const APInt& RHS) const { |   inline APInt sdiv(const APInt& RHS) const { | ||||||
|     bool isNegativeLHS = (*this)[BitWidth - 1]; |     bool isNegativeLHS = (*this)[BitWidth - 1]; | ||||||
|     bool isNegativeRHS = RHS[RHS.BitWidth - 1]; |     bool isNegativeRHS = RHS[RHS.BitWidth - 1]; | ||||||
|     APInt API = APIntOps::udiv( |     APInt Result = APIntOps::udiv( | ||||||
|         isNegativeLHS ? -(*this) : (*this), isNegativeRHS ? -RHS : RHS); |         isNegativeLHS ? -(*this) : (*this), isNegativeRHS ? -RHS : RHS); | ||||||
|     return isNegativeLHS != isNegativeRHS ? -API : API;; |     return isNegativeLHS != isNegativeRHS ? -Result : Result; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /// Unsigned divide this APInt by APInt RHS. |   /// Unsigned divide this APInt by APInt RHS. | ||||||
| @@ -361,9 +352,9 @@ public: | |||||||
|   inline APInt srem(const APInt& RHS) const { |   inline APInt srem(const APInt& RHS) const { | ||||||
|     bool isNegativeLHS = (*this)[BitWidth - 1]; |     bool isNegativeLHS = (*this)[BitWidth - 1]; | ||||||
|     bool isNegativeRHS = RHS[RHS.BitWidth - 1]; |     bool isNegativeRHS = RHS[RHS.BitWidth - 1]; | ||||||
|     APInt API = APIntOps::urem( |     APInt Result = APIntOps::urem( | ||||||
|         isNegativeLHS ? -(*this) : (*this), isNegativeRHS ? -RHS : RHS); |         isNegativeLHS ? -(*this) : (*this), isNegativeRHS ? -RHS : RHS); | ||||||
|     return isNegativeLHS ? -API : API; |     return isNegativeLHS ? -Result : Result; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /// Unsigned remainder operation on APInt. |   /// Unsigned remainder operation on APInt. | ||||||
| @@ -373,34 +364,34 @@ public: | |||||||
|   /// Truncate the APInt to a specified width. It is an error to specify a width |   /// Truncate the APInt to a specified width. It is an error to specify a width | ||||||
|   /// that is greater than or equal to the current width.  |   /// that is greater than or equal to the current width.  | ||||||
|   /// @brief Truncate to new width. |   /// @brief Truncate to new width. | ||||||
|   void trunc(unsigned width); |   void trunc(uint32_t width); | ||||||
|  |  | ||||||
|   /// This operation sign extends the APInt to a new width. If the high order |   /// This operation sign extends the APInt to a new width. If the high order | ||||||
|   /// bit is set, the fill on the left will be done with 1 bits, otherwise zero. |   /// bit is set, the fill on the left will be done with 1 bits, otherwise zero. | ||||||
|   /// It is an error to specify a width that is less than or equal to the  |   /// It is an error to specify a width that is less than or equal to the  | ||||||
|   /// current width. |   /// current width. | ||||||
|   /// @brief Sign extend to a new width. |   /// @brief Sign extend to a new width. | ||||||
|   void sext(unsigned width); |   void sext(uint32_t width); | ||||||
|  |  | ||||||
|   /// This operation zero extends the APInt to a new width. Thie high order bits |   /// This operation zero extends the APInt to a new width. Thie high order bits | ||||||
|   /// are filled with 0 bits.  It is an error to specify a width that is less  |   /// are filled with 0 bits.  It is an error to specify a width that is less  | ||||||
|   /// than or equal to the current width. |   /// than or equal to the current width. | ||||||
|   /// @brief Zero extend to a new width. |   /// @brief Zero extend to a new width. | ||||||
|   void zext(unsigned width); |   void zext(uint32_t width); | ||||||
|  |  | ||||||
|   /// @brief Set every bit to 1. |   /// @brief Set every bit to 1. | ||||||
|   APInt& set(); |   APInt& set(); | ||||||
|  |  | ||||||
|   /// Set the given bit to 1 whose position is given as "bitPosition". |   /// Set the given bit to 1 whose position is given as "bitPosition". | ||||||
|   /// @brief Set a given bit to 1. |   /// @brief Set a given bit to 1. | ||||||
|   APInt& set(unsigned bitPosition); |   APInt& set(uint32_t bitPosition); | ||||||
|  |  | ||||||
|   /// @brief Set every bit to 0. |   /// @brief Set every bit to 0. | ||||||
|   APInt& clear(); |   APInt& clear(); | ||||||
|  |  | ||||||
|   /// Set the given bit to 0 whose position is given as "bitPosition". |   /// Set the given bit to 0 whose position is given as "bitPosition". | ||||||
|   /// @brief Set a given bit to 0. |   /// @brief Set a given bit to 0. | ||||||
|   APInt& clear(unsigned bitPosition); |   APInt& clear(uint32_t bitPosition); | ||||||
|  |  | ||||||
|   /// @brief Toggle every bit to its opposite value. |   /// @brief Toggle every bit to its opposite value. | ||||||
|   APInt& flip(); |   APInt& flip(); | ||||||
| @@ -408,13 +399,13 @@ public: | |||||||
|   /// Toggle a given bit to its opposite value whose position is given  |   /// Toggle a given bit to its opposite value whose position is given  | ||||||
|   /// as "bitPosition". |   /// as "bitPosition". | ||||||
|   /// @brief Toggles a given bit to its opposite value. |   /// @brief Toggles a given bit to its opposite value. | ||||||
|   APInt& flip(unsigned bitPosition); |   APInt& flip(uint32_t bitPosition); | ||||||
|  |  | ||||||
|   /// This function returns the number of active bits which is defined as the |   /// This function returns the number of active bits which is defined as the | ||||||
|   /// bit width minus the number of leading zeros. This is used in several |   /// bit width minus the number of leading zeros. This is used in several | ||||||
|   /// computations to see how "wide" the value is. |   /// computations to see how "wide" the value is. | ||||||
|   /// @brief Compute the number of active bits in the value |   /// @brief Compute the number of active bits in the value | ||||||
|   inline unsigned getActiveBits() const { |   inline uint32_t getActiveBits() const { | ||||||
|     return getNumWords() * APINT_BITS_PER_WORD - countLeadingZeros(); |     return getNumWords() * APINT_BITS_PER_WORD - countLeadingZeros(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -424,7 +415,7 @@ public: | |||||||
|     if (isSingleWord()) |     if (isSingleWord()) | ||||||
|       return isSigned ? int64_t(VAL << (64 - BitWidth)) >>  |       return isSigned ? int64_t(VAL << (64 - BitWidth)) >>  | ||||||
|                                        (64 - BitWidth) : VAL; |                                        (64 - BitWidth) : VAL; | ||||||
|     unsigned n = getActiveBits(); |     uint32_t n = getActiveBits(); | ||||||
|     if (n <= 64) |     if (n <= 64) | ||||||
|       return pVal[0]; |       return pVal[0]; | ||||||
|     assert(0 && "This APInt's bitwidth > 64"); |     assert(0 && "This APInt's bitwidth > 64"); | ||||||
| @@ -434,20 +425,20 @@ public: | |||||||
|   /// if isSign == true, it should be largest signed value, otherwise largest |   /// if isSign == true, it should be largest signed value, otherwise largest | ||||||
|   /// unsigned value. |   /// unsigned value. | ||||||
|   /// @brief Gets max value of the APInt with bitwidth <= 64. |   /// @brief Gets max value of the APInt with bitwidth <= 64. | ||||||
|   static APInt getMaxValue(unsigned numBits, bool isSign); |   static APInt getMaxValue(uint32_t numBits, bool isSign); | ||||||
|  |  | ||||||
|   /// @returns the smallest value for an APInt of the given bit-width and |   /// @returns the smallest value for an APInt of the given bit-width and | ||||||
|   /// if isSign == true, it should be smallest signed value, otherwise zero. |   /// if isSign == true, it should be smallest signed value, otherwise zero. | ||||||
|   /// @brief Gets min value of the APInt with bitwidth <= 64. |   /// @brief Gets min value of the APInt with bitwidth <= 64. | ||||||
|   static APInt getMinValue(unsigned numBits, bool isSign); |   static APInt getMinValue(uint32_t numBits, bool isSign); | ||||||
|  |  | ||||||
|   /// @returns the all-ones value for an APInt of the specified bit-width. |   /// @returns the all-ones value for an APInt of the specified bit-width. | ||||||
|   /// @brief Get the all-ones value. |   /// @brief Get the all-ones value. | ||||||
|   static APInt getAllOnesValue(unsigned numBits); |   static APInt getAllOnesValue(uint32_t numBits); | ||||||
|  |  | ||||||
|   /// @returns the '0' value for an APInt of the specified bit-width. |   /// @returns the '0' value for an APInt of the specified bit-width. | ||||||
|   /// @brief Get the '0' value. |   /// @brief Get the '0' value. | ||||||
|   static APInt getNullValue(unsigned numBits); |   static APInt getNullValue(uint32_t numBits); | ||||||
|  |  | ||||||
|   /// This converts the APInt to a boolean valy as a test against zero. |   /// This converts the APInt to a boolean valy as a test against zero. | ||||||
|   /// @brief Boolean conversion function.  |   /// @brief Boolean conversion function.  | ||||||
| @@ -461,34 +452,34 @@ public: | |||||||
|   /// Get an APInt with the same BitWidth as this APInt, just zero mask |   /// Get an APInt with the same BitWidth as this APInt, just zero mask | ||||||
|   /// the low bits and right shift to the least significant bit. |   /// the low bits and right shift to the least significant bit. | ||||||
|   /// @returns the high "numBits" bits of this APInt. |   /// @returns the high "numBits" bits of this APInt. | ||||||
|   APInt getHiBits(unsigned numBits) const; |   APInt getHiBits(uint32_t numBits) const; | ||||||
|  |  | ||||||
|   /// Get an APInt with the same BitWidth as this APInt, just zero mask |   /// Get an APInt with the same BitWidth as this APInt, just zero mask | ||||||
|   /// the high bits. |   /// the high bits. | ||||||
|   /// @returns the low "numBits" bits of this APInt. |   /// @returns the low "numBits" bits of this APInt. | ||||||
|   APInt getLoBits(unsigned numBits) const; |   APInt getLoBits(uint32_t numBits) const; | ||||||
|  |  | ||||||
|   /// @returns true if the argument APInt value is a power of two > 0. |   /// @returns true if the argument APInt value is a power of two > 0. | ||||||
|   bool isPowerOf2() const;  |   bool isPowerOf2() const;  | ||||||
|  |  | ||||||
|   /// @returns the number of zeros from the most significant bit to the first |   /// @returns the number of zeros from the most significant bit to the first | ||||||
|   /// one bits. |   /// one bits. | ||||||
|   unsigned countLeadingZeros() const; |   uint32_t countLeadingZeros() const; | ||||||
|  |  | ||||||
|   /// @returns the number of zeros from the least significant bit to the first |   /// @returns the number of zeros from the least significant bit to the first | ||||||
|   /// one bit. |   /// one bit. | ||||||
|   unsigned countTrailingZeros() const; |   uint32_t countTrailingZeros() const; | ||||||
|  |  | ||||||
|   /// @returns the number of set bits. |   /// @returns the number of set bits. | ||||||
|   unsigned countPopulation() const;  |   uint32_t countPopulation() const;  | ||||||
|  |  | ||||||
|   /// @returns the total number of bits. |   /// @returns the total number of bits. | ||||||
|   inline unsigned getBitWidth() const {  |   inline uint32_t getBitWidth() const {  | ||||||
|     return BitWidth;  |     return BitWidth;  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /// @brief Check if this APInt has a N-bits integer value. |   /// @brief Check if this APInt has a N-bits integer value. | ||||||
|   inline bool isIntN(unsigned N) const { |   inline bool isIntN(uint32_t N) const { | ||||||
|     assert(N && "N == 0 ???"); |     assert(N && "N == 0 ???"); | ||||||
|     if (isSingleWord()) { |     if (isSingleWord()) { | ||||||
|       return VAL == (VAL & (~0ULL >> (64 - N))); |       return VAL == (VAL & (~0ULL >> (64 - N))); | ||||||
| @@ -502,7 +493,7 @@ public: | |||||||
|   APInt byteSwap() const; |   APInt byteSwap() const; | ||||||
|  |  | ||||||
|   /// @returns the floor log base 2 of this APInt. |   /// @returns the floor log base 2 of this APInt. | ||||||
|   inline unsigned logBase2() const { |   inline uint32_t logBase2() const { | ||||||
|     return getNumWords() * APINT_BITS_PER_WORD - 1 - countLeadingZeros(); |     return getNumWords() * APINT_BITS_PER_WORD - 1 - countLeadingZeros(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -514,19 +505,19 @@ public: | |||||||
| namespace APIntOps { | namespace APIntOps { | ||||||
|  |  | ||||||
| /// @brief Check if the specified APInt has a N-bits integer value. | /// @brief Check if the specified APInt has a N-bits integer value. | ||||||
| inline bool isIntN(unsigned N, const APInt& APIVal) { | inline bool isIntN(uint32_t N, const APInt& APIVal) { | ||||||
|   return APIVal.isIntN(N); |   return APIVal.isIntN(N); | ||||||
| } | } | ||||||
|  |  | ||||||
| /// @returns true if the argument APInt value is a sequence of ones | /// @returns true if the argument APInt value is a sequence of ones | ||||||
| /// starting at the least significant bit with the remainder zero. | /// starting at the least significant bit with the remainder zero. | ||||||
| inline const bool isMask(unsigned numBits, const APInt& APIVal) { | inline const bool isMask(uint32_t numBits, const APInt& APIVal) { | ||||||
|   return APIVal.getBoolValue() && ((APIVal + APInt(numBits,1)) & APIVal) == 0; |   return APIVal.getBoolValue() && ((APIVal + APInt(numBits,1)) & APIVal) == 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| /// @returns true if the argument APInt value contains a sequence of ones | /// @returns true if the argument APInt value contains a sequence of ones | ||||||
| /// with the remainder zero. | /// with the remainder zero. | ||||||
| inline const bool isShiftedMask(unsigned numBits, const APInt& APIVal) { | inline const bool isShiftedMask(uint32_t numBits, const APInt& APIVal) { | ||||||
|   return isMask(numBits, (APIVal - APInt(numBits,1)) | APIVal); |   return isMask(numBits, (APIVal - APInt(numBits,1)) | APIVal); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -536,7 +527,7 @@ inline APInt byteSwap(const APInt& APIVal) { | |||||||
| } | } | ||||||
|  |  | ||||||
| /// @returns the floor log base 2 of the specified APInt value. | /// @returns the floor log base 2 of the specified APInt value. | ||||||
| inline unsigned logBase2(const APInt& APIVal) { | inline uint32_t logBase2(const APInt& APIVal) { | ||||||
|   return APIVal.logBase2();  |   return APIVal.logBase2();  | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -564,19 +555,19 @@ inline APInt RoundFloatToAPInt(float Float) { | |||||||
|  |  | ||||||
| /// Arithmetic right-shift the APInt by shiftAmt. | /// Arithmetic right-shift the APInt by shiftAmt. | ||||||
| /// @brief Arithmetic right-shift function. | /// @brief Arithmetic right-shift function. | ||||||
| inline APInt ashr(const APInt& LHS, unsigned shiftAmt) { | inline APInt ashr(const APInt& LHS, uint32_t shiftAmt) { | ||||||
|   return LHS.ashr(shiftAmt); |   return LHS.ashr(shiftAmt); | ||||||
| } | } | ||||||
|  |  | ||||||
| /// Logical right-shift the APInt by shiftAmt. | /// Logical right-shift the APInt by shiftAmt. | ||||||
| /// @brief Logical right-shift function. | /// @brief Logical right-shift function. | ||||||
| inline APInt lshr(const APInt& LHS, unsigned shiftAmt) { | inline APInt lshr(const APInt& LHS, uint32_t shiftAmt) { | ||||||
|   return LHS.lshr(shiftAmt); |   return LHS.lshr(shiftAmt); | ||||||
| } | } | ||||||
|  |  | ||||||
| /// Left-shift the APInt by shiftAmt. | /// Left-shift the APInt by shiftAmt. | ||||||
| /// @brief Left-shift function. | /// @brief Left-shift function. | ||||||
| inline APInt shl(const APInt& LHS, unsigned shiftAmt) { | inline APInt shl(const APInt& LHS, uint32_t shiftAmt) { | ||||||
|   return LHS.shl(shiftAmt); |   return LHS.shl(shiftAmt); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user