diff --git a/misc.h b/misc.h index fc47403f..ff868058 100644 --- a/misc.h +++ b/misc.h @@ -1352,6 +1352,7 @@ CRYPTOPP_DLL void CRYPTOPP_API UnalignedDeallocate(void *ptr); //! than a rotate REG. Immediate rotates can be up to three times faster than their register //! counterparts. //! \sa rotlConstant, rotrConstant, rotlFixed, rotrFixed, rotlVariable, rotrVariable +//! \since Crypto++ 6.0 template inline T rotlConstant(T x) { // Portable rotate that reduces to single instruction... @@ -1401,6 +1402,7 @@ template inline T rotrConstant(T x) //! than a rotate REG. Immediate rotates can be up to three times faster than their register //! counterparts. //! \sa rotlConstant, rotrConstant, rotlFixed, rotrFixed, rotlVariable, rotrVariable +//! \since Crypto++ 6.0 template inline T rotlFixed(T x, unsigned int y) { // Portable rotate that reduces to single instruction... @@ -1424,6 +1426,7 @@ template inline T rotlFixed(T x, unsigned int y) //! than a rotate REG. Immediate rotates can be up to three times faster than their register //! counterparts. //! \sa rotlConstant, rotrConstant, rotlFixed, rotrFixed, rotlVariable, rotrVariable +//! \since Crypto++ 3.0 template inline T rotrFixed(T x, unsigned int y) { // Portable rotate that reduces to single instruction... @@ -1447,6 +1450,7 @@ template inline T rotrFixed(T x, unsigned int y) //! than a rotate REG. Immediate rotates can be up to three times faster than their register //! counterparts. //! \sa rotlConstant, rotrConstant, rotlFixed, rotrFixed, rotlVariable, rotrVariable +//! \since Crypto++ 3.0 template inline T rotlVariable(T x, unsigned int y) { static const unsigned int THIS_SIZE = sizeof(T)*8; @@ -1466,6 +1470,7 @@ template inline T rotlVariable(T x, unsigned int y) //! than a rotate REG. Immediate rotates can be up to three times faster than their register //! counterparts. //! \sa rotlConstant, rotrConstant, rotlFixed, rotrFixed, rotlVariable, rotrVariable +//! \since Crypto++ 3.0 template inline T rotrVariable(T x, unsigned int y) { static const unsigned int THIS_SIZE = sizeof(T)*8; @@ -1482,6 +1487,7 @@ template inline T rotrVariable(T x, unsigned int y) //! \details y is reduced to the range [0, sizeof(T)*8 - 1] to avoid undefined behavior. //! \note rotrVariable will use either rotate IMM or rotate REG. //! \sa rotlConstant, rotrConstant, rotlFixed, rotrFixed, rotlVariable, rotrVariable +//! \since Crypto++ 3.0 template inline T rotlMod(T x, unsigned int y) { static const unsigned int THIS_SIZE = sizeof(T)*8; @@ -1497,6 +1503,7 @@ template inline T rotlMod(T x, unsigned int y) //! \details y is reduced to the range [0, sizeof(T)*8 - 1] to avoid undefined behavior. //! \note rotrVariable will use either rotate IMM or rotate REG. //! \sa rotlConstant, rotrConstant, rotlFixed, rotrFixed, rotlVariable, rotrVariable +//! \since Crypto++ 3.0 template inline T rotrMod(T x, unsigned int y) { static const unsigned int THIS_SIZE = sizeof(T)*8; @@ -1514,6 +1521,7 @@ template inline T rotrMod(T x, unsigned int y) //! . The value x to be rotated is 32-bits. y must be in the range //! [0, sizeof(T)*8 - 1] to avoid undefined behavior. //! \note rotlFixed will assert in Debug builds if is outside the allowed range. +//! \since Crypto++ 3.0 template<> inline word32 rotlFixed(word32 x, unsigned int y) { // Uses Microsoft call, bound to C/C++ language rules. @@ -1529,6 +1537,7 @@ template<> inline word32 rotlFixed(word32 x, unsigned int y) //! . The value x to be rotated is 32-bits. y must be in the range //! [0, sizeof(T)*8 - 1] to avoid undefined behavior. //! \note rotrFixed will assert in Debug builds if is outside the allowed range. +//! \since Crypto++ 3.0 template<> inline word32 rotrFixed(word32 x, unsigned int y) { // Uses Microsoft call, bound to C/C++ language rules. @@ -1544,6 +1553,7 @@ template<> inline word32 rotrFixed(word32 x, unsigned int y) //! . The value x to be rotated is 32-bits. y must be in the range //! [0, sizeof(T)*8 - 1] to avoid undefined behavior. //! \note rotlVariable will assert in Debug builds if is outside the allowed range. +//! \since Crypto++ 3.0 template<> inline word32 rotlVariable(word32 x, unsigned int y) { CRYPTOPP_ASSERT(y < 8*sizeof(x)); @@ -1558,6 +1568,7 @@ template<> inline word32 rotlVariable(word32 x, unsigned int y) //! . The value x to be rotated is 32-bits. y must be in the range //! [0, sizeof(T)*8 - 1] to avoid undefined behavior. //! \note rotrVariable will assert in Debug builds if is outside the allowed range. +//! \since Crypto++ 3.0 template<> inline word32 rotrVariable(word32 x, unsigned int y) { CRYPTOPP_ASSERT(y < 8*sizeof(x)); @@ -1571,6 +1582,7 @@ template<> inline word32 rotrVariable(word32 x, unsigned int y) //! \details This is a Microsoft specific implementation using _lrotl provided by //! . The value x to be rotated is 32-bits. y must be in the range //! [0, sizeof(T)*8 - 1] to avoid undefined behavior. +//! \since Crypto++ 3.0 template<> inline word32 rotlMod(word32 x, unsigned int y) { y %= 8*sizeof(x); @@ -1584,6 +1596,7 @@ template<> inline word32 rotlMod(word32 x, unsigned int y) //! \details This is a Microsoft specific implementation using _lrotr provided by //! . The value x to be rotated is 32-bits. y must be in the range //! [0, sizeof(T)*8 - 1] to avoid undefined behavior. +//! \since Crypto++ 3.0 template<> inline word32 rotrMod(word32 x, unsigned int y) { y %= 8*sizeof(x); @@ -1603,6 +1616,7 @@ template<> inline word32 rotrMod(word32 x, unsigned int y) //! . The value x to be rotated is 64-bits. y must be in the range //! [0, sizeof(T)*8 - 1] to avoid undefined behavior. //! \note rotrFixed will assert in Debug builds if is outside the allowed range. +//! \since Crypto++ 3.0 template<> inline word64 rotlFixed(word64 x, unsigned int y) { // Uses Microsoft call, bound to C/C++ language rules. @@ -1618,6 +1632,7 @@ template<> inline word64 rotlFixed(word64 x, unsigned int y) //! . The value x to be rotated is 64-bits. y must be in the range //! [0, sizeof(T)*8 - 1] to avoid undefined behavior. //! \note rotrFixed will assert in Debug builds if is outside the allowed range. +//! \since Crypto++ 3.0 template<> inline word64 rotrFixed(word64 x, unsigned int y) { // Uses Microsoft call, bound to C/C++ language rules. @@ -1633,6 +1648,7 @@ template<> inline word64 rotrFixed(word64 x, unsigned int y) //! . The value x to be rotated is 64-bits. y must be in the range //! [0, sizeof(T)*8 - 1] to avoid undefined behavior. //! \note rotlVariable will assert in Debug builds if is outside the allowed range. +//! \since Crypto++ 3.0 template<> inline word64 rotlVariable(word64 x, unsigned int y) { CRYPTOPP_ASSERT(y < 8*sizeof(x)); @@ -1647,6 +1663,7 @@ template<> inline word64 rotlVariable(word64 x, unsigned int y) //! . The value x to be rotated is 64-bits. y must be in the range //! [0, sizeof(T)*8 - 1] to avoid undefined behavior. //! \note rotrVariable will assert in Debug builds if is outside the allowed range. +//! \since Crypto++ 3.0 template<> inline word64 rotrVariable(word64 x, unsigned int y) { CRYPTOPP_ASSERT(y < 8*sizeof(x)); @@ -1660,6 +1677,7 @@ template<> inline word64 rotrVariable(word64 x, unsigned int y) //! \details This is a Microsoft specific implementation using _lrotl provided by //! . The value x to be rotated is 64-bits. y must be in the range //! [0, sizeof(T)*8 - 1] to avoid undefined behavior. +//! \since Crypto++ 3.0 template<> inline word64 rotlMod(word64 x, unsigned int y) { CRYPTOPP_ASSERT(y < 8*sizeof(x)); @@ -1673,6 +1691,7 @@ template<> inline word64 rotlMod(word64 x, unsigned int y) //! \details This is a Microsoft specific implementation using _lrotr provided by //! . The value x to be rotated is 64-bits. y must be in the range //! [0, sizeof(T)*8 - 1] to avoid undefined behavior. +//! \since Crypto++ 3.0 template<> inline word64 rotrMod(word64 x, unsigned int y) { CRYPTOPP_ASSERT(y < 8*sizeof(x)); @@ -1683,7 +1702,6 @@ template<> inline word64 rotrMod(word64 x, unsigned int y) #if _MSC_VER >= 1400 && !defined(__INTEL_COMPILER) // Intel C++ Compiler 10.0 gives undefined externals with these - template<> inline word16 rotlFixed(word16 x, unsigned int y) { // Intrinsic, not bound to C/C++ language rules.