/src/botan/build/include/botan/internal/rotate.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Word Rotation Operations |
3 | | * (C) 1999-2008,2017 Jack Lloyd |
4 | | * |
5 | | * Botan is released under the Simplified BSD License (see license.txt) |
6 | | */ |
7 | | |
8 | | #ifndef BOTAN_WORD_ROTATE_H_ |
9 | | #define BOTAN_WORD_ROTATE_H_ |
10 | | |
11 | | #include <botan/types.h> |
12 | | |
13 | | namespace Botan { |
14 | | |
15 | | /** |
16 | | * Bit rotation left by a compile-time constant amount |
17 | | * @param input the input word |
18 | | * @return input rotated left by ROT bits |
19 | | */ |
20 | | template<size_t ROT, typename T> |
21 | | inline constexpr T rotl(T input) |
22 | 30.1M | { |
23 | 30.1M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); |
24 | 30.1M | return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); |
25 | 30.1M | } Unexecuted instantiation: unsigned int Botan::rotl<3ul, unsigned int>(unsigned int) unsigned int Botan::rotl<7ul, unsigned int>(unsigned int) Line | Count | Source | 22 | 1.91k | { | 23 | 1.91k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 24 | 1.91k | return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); | 25 | 1.91k | } |
unsigned int Botan::rotl<11ul, unsigned int>(unsigned int) Line | Count | Source | 22 | 1.91k | { | 23 | 1.91k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 24 | 1.91k | return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); | 25 | 1.91k | } |
Unexecuted instantiation: unsigned int Botan::rotl<19ul, unsigned int>(unsigned int) unsigned int Botan::rotl<5ul, unsigned int>(unsigned int) Line | Count | Source | 22 | 15.0M | { | 23 | 15.0M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 24 | 15.0M | return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); | 25 | 15.0M | } |
unsigned int Botan::rotl<9ul, unsigned int>(unsigned int) Line | Count | Source | 22 | 6.00k | { | 23 | 6.00k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 24 | 6.00k | return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); | 25 | 6.00k | } |
Unexecuted instantiation: unsigned int Botan::rotl<13ul, unsigned int>(unsigned int) unsigned int Botan::rotl<15ul, unsigned int>(unsigned int) Line | Count | Source | 22 | 1.91k | { | 23 | 1.91k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 24 | 1.91k | return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); | 25 | 1.91k | } |
unsigned int Botan::rotl<12ul, unsigned int>(unsigned int) Line | Count | Source | 22 | 1.91k | { | 23 | 1.91k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 24 | 1.91k | return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); | 25 | 1.91k | } |
unsigned int Botan::rotl<17ul, unsigned int>(unsigned int) Line | Count | Source | 22 | 1.91k | { | 23 | 1.91k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 24 | 1.91k | return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); | 25 | 1.91k | } |
unsigned int Botan::rotl<22ul, unsigned int>(unsigned int) Line | Count | Source | 22 | 1.91k | { | 23 | 1.91k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 24 | 1.91k | return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); | 25 | 1.91k | } |
unsigned int Botan::rotl<14ul, unsigned int>(unsigned int) Line | Count | Source | 22 | 1.91k | { | 23 | 1.91k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 24 | 1.91k | return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); | 25 | 1.91k | } |
unsigned int Botan::rotl<20ul, unsigned int>(unsigned int) Line | Count | Source | 22 | 6.00k | { | 23 | 6.00k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 24 | 6.00k | return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); | 25 | 6.00k | } |
unsigned int Botan::rotl<4ul, unsigned int>(unsigned int) Line | Count | Source | 22 | 6.00k | { | 23 | 6.00k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 24 | 6.00k | return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); | 25 | 6.00k | } |
unsigned int Botan::rotl<16ul, unsigned int>(unsigned int) Line | Count | Source | 22 | 1.91k | { | 23 | 1.91k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 24 | 1.91k | return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); | 25 | 1.91k | } |
unsigned int Botan::rotl<23ul, unsigned int>(unsigned int) Line | Count | Source | 22 | 1.91k | { | 23 | 1.91k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 24 | 1.91k | return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); | 25 | 1.91k | } |
unsigned int Botan::rotl<6ul, unsigned int>(unsigned int) Line | Count | Source | 22 | 6.00k | { | 23 | 6.00k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 24 | 6.00k | return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); | 25 | 6.00k | } |
unsigned int Botan::rotl<10ul, unsigned int>(unsigned int) Line | Count | Source | 22 | 1.91k | { | 23 | 1.91k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 24 | 1.91k | return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); | 25 | 1.91k | } |
unsigned int Botan::rotl<21ul, unsigned int>(unsigned int) Line | Count | Source | 22 | 1.91k | { | 23 | 1.91k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 24 | 1.91k | return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); | 25 | 1.91k | } |
Unexecuted instantiation: unsigned int Botan::rotl<8ul, unsigned int>(unsigned int) unsigned int Botan::rotl<1ul, unsigned int>(unsigned int) Line | Count | Source | 22 | 17.7k | { | 23 | 17.7k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 24 | 17.7k | return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); | 25 | 17.7k | } |
unsigned int Botan::rotl<30ul, unsigned int>(unsigned int) Line | Count | Source | 22 | 15.0M | { | 23 | 15.0M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 24 | 15.0M | return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); | 25 | 15.0M | } |
Unexecuted instantiation: unsigned long Botan::rotl<1ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<44ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<43ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<21ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<14ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<28ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<20ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<3ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<45ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<61ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<6ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<25ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<8ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<18ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<27ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<36ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<10ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<15ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<56ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<62ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<55ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<39ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<41ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<2ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned int Botan::rotl<27ul, unsigned int>(unsigned int) Unexecuted instantiation: unsigned long Botan::rotl<46ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<19ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<37ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<33ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<42ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<17ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<49ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<9ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<54ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<30ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<34ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<24ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<13ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<50ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<29ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<35ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<22ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<16ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotl<32ul, unsigned long>(unsigned long) unsigned int Botan::rotl<18ul, unsigned int>(unsigned int) Line | Count | Source | 22 | 4.08k | { | 23 | 4.08k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 24 | 4.08k | return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT))); | 25 | 4.08k | } |
Unexecuted instantiation: unsigned int Botan::rotl<2ul, unsigned int>(unsigned int) Unexecuted instantiation: unsigned int Botan::rotl<24ul, unsigned int>(unsigned int) |
26 | | |
27 | | /** |
28 | | * Bit rotation right by a compile-time constant amount |
29 | | * @param input the input word |
30 | | * @return input rotated right by ROT bits |
31 | | */ |
32 | | template<size_t ROT, typename T> |
33 | | inline constexpr T rotr(T input) |
34 | 672M | { |
35 | 672M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); |
36 | 672M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); |
37 | 672M | } unsigned int Botan::rotr<2ul, unsigned int>(unsigned int) Line | Count | Source | 34 | 60.1M | { | 35 | 60.1M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 60.1M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 60.1M | } |
unsigned int Botan::rotr<13ul, unsigned int>(unsigned int) Line | Count | Source | 34 | 60.1M | { | 35 | 60.1M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 60.1M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 60.1M | } |
unsigned int Botan::rotr<22ul, unsigned int>(unsigned int) Line | Count | Source | 34 | 60.1M | { | 35 | 60.1M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 60.1M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 60.1M | } |
unsigned int Botan::rotr<6ul, unsigned int>(unsigned int) Line | Count | Source | 34 | 60.1M | { | 35 | 60.1M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 60.1M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 60.1M | } |
unsigned int Botan::rotr<11ul, unsigned int>(unsigned int) Line | Count | Source | 34 | 60.1M | { | 35 | 60.1M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 60.1M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 60.1M | } |
unsigned int Botan::rotr<25ul, unsigned int>(unsigned int) Line | Count | Source | 34 | 60.1M | { | 35 | 60.1M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 60.1M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 60.1M | } |
unsigned int Botan::rotr<17ul, unsigned int>(unsigned int) Line | Count | Source | 34 | 60.1M | { | 35 | 60.1M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 60.1M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 60.1M | } |
unsigned int Botan::rotr<19ul, unsigned int>(unsigned int) Line | Count | Source | 34 | 60.1M | { | 35 | 60.1M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 60.1M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 60.1M | } |
unsigned int Botan::rotr<7ul, unsigned int>(unsigned int) Line | Count | Source | 34 | 60.1M | { | 35 | 60.1M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 60.1M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 60.1M | } |
unsigned int Botan::rotr<18ul, unsigned int>(unsigned int) Line | Count | Source | 34 | 60.1M | { | 35 | 60.1M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 60.1M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 60.1M | } |
unsigned long Botan::rotr<14ul, unsigned long>(unsigned long) Line | Count | Source | 34 | 7.09M | { | 35 | 7.09M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 7.09M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 7.09M | } |
unsigned long Botan::rotr<18ul, unsigned long>(unsigned long) Line | Count | Source | 34 | 7.09M | { | 35 | 7.09M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 7.09M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 7.09M | } |
unsigned long Botan::rotr<41ul, unsigned long>(unsigned long) Line | Count | Source | 34 | 7.09M | { | 35 | 7.09M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 7.09M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 7.09M | } |
unsigned long Botan::rotr<28ul, unsigned long>(unsigned long) Line | Count | Source | 34 | 7.09M | { | 35 | 7.09M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 7.09M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 7.09M | } |
unsigned long Botan::rotr<34ul, unsigned long>(unsigned long) Line | Count | Source | 34 | 7.09M | { | 35 | 7.09M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 7.09M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 7.09M | } |
unsigned long Botan::rotr<39ul, unsigned long>(unsigned long) Line | Count | Source | 34 | 7.09M | { | 35 | 7.09M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 7.09M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 7.09M | } |
unsigned long Botan::rotr<19ul, unsigned long>(unsigned long) Line | Count | Source | 34 | 7.09M | { | 35 | 7.09M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 7.09M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 7.09M | } |
unsigned long Botan::rotr<61ul, unsigned long>(unsigned long) Line | Count | Source | 34 | 7.09M | { | 35 | 7.09M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 7.09M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 7.09M | } |
unsigned long Botan::rotr<1ul, unsigned long>(unsigned long) Line | Count | Source | 34 | 7.09M | { | 35 | 7.09M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 7.09M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 7.09M | } |
unsigned long Botan::rotr<8ul, unsigned long>(unsigned long) Line | Count | Source | 34 | 7.09M | { | 35 | 7.09M | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 7.09M | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 7.09M | } |
Unexecuted instantiation: unsigned long Botan::rotr<16ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<24ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<32ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<40ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<48ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<56ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<35ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<22ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<25ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<29ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<43ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<13ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<50ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<10ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<17ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<30ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<44ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<9ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<54ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<49ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<36ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<33ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<27ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<42ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<46ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<37ul, unsigned long>(unsigned long) Unexecuted instantiation: unsigned long Botan::rotr<63ul, unsigned long>(unsigned long) unsigned int Botan::rotr<20ul, unsigned int>(unsigned int) Line | Count | Source | 34 | 4.08k | { | 35 | 4.08k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 4.08k | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 4.08k | } |
unsigned int Botan::rotr<4ul, unsigned int>(unsigned int) Line | Count | Source | 34 | 200k | { | 35 | 200k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 200k | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 200k | } |
unsigned int Botan::rotr<1ul, unsigned int>(unsigned int) Line | Count | Source | 34 | 4.08k | { | 35 | 4.08k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 4.08k | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 4.08k | } |
unsigned int Botan::rotr<9ul, unsigned int>(unsigned int) Line | Count | Source | 34 | 4.08k | { | 35 | 4.08k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 4.08k | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 4.08k | } |
unsigned int Botan::rotr<8ul, unsigned int>(unsigned int) Line | Count | Source | 34 | 4.12k | { | 35 | 4.12k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 4.12k | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 4.12k | } |
Unexecuted instantiation: unsigned int Botan::rotr<5ul, unsigned int>(unsigned int) Unexecuted instantiation: unsigned int Botan::rotr<3ul, unsigned int>(unsigned int) unsigned int Botan::rotr<16ul, unsigned int>(unsigned int) Line | Count | Source | 34 | 31.4k | { | 35 | 31.4k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 31.4k | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 31.4k | } |
unsigned int Botan::rotr<24ul, unsigned int>(unsigned int) Line | Count | Source | 34 | 4.12k | { | 35 | 4.12k | static_assert(ROT > 0 && ROT < 8*sizeof(T), "Invalid rotation constant"); | 36 | 4.12k | return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT))); | 37 | 4.12k | } |
|
38 | | |
39 | | /** |
40 | | * Bit rotation left, variable rotation amount |
41 | | * @param input the input word |
42 | | * @param rot the number of bits to rotate, must be between 0 and sizeof(T)*8-1 |
43 | | * @return input rotated left by rot bits |
44 | | */ |
45 | | template<typename T> |
46 | | inline constexpr T rotl_var(T input, size_t rot) |
47 | | { |
48 | | return rot ? static_cast<T>((input << rot) | (input >> (sizeof(T)*8 - rot))) : input; |
49 | | } |
50 | | |
51 | | /** |
52 | | * Bit rotation right, variable rotation amount |
53 | | * @param input the input word |
54 | | * @param rot the number of bits to rotate, must be between 0 and sizeof(T)*8-1 |
55 | | * @return input rotated right by rot bits |
56 | | */ |
57 | | template<typename T> |
58 | | inline constexpr T rotr_var(T input, size_t rot) |
59 | | { |
60 | | return rot ? static_cast<T>((input >> rot) | (input << (sizeof(T)*8 - rot))) : input; |
61 | | } |
62 | | |
63 | | #if defined(BOTAN_USE_GCC_INLINE_ASM) |
64 | | |
65 | | #if defined(BOTAN_TARGET_ARCH_IS_X86_64) || defined(BOTAN_TARGET_ARCH_IS_X86_32) |
66 | | |
67 | | template<> |
68 | | inline uint32_t rotl_var(uint32_t input, size_t rot) |
69 | 0 | { |
70 | 0 | asm("roll %1,%0" |
71 | 0 | : "+r" (input) |
72 | 0 | : "c" (static_cast<uint8_t>(rot)) |
73 | 0 | : "cc"); |
74 | 0 | return input; |
75 | 0 | } |
76 | | |
77 | | template<> |
78 | | inline uint32_t rotr_var(uint32_t input, size_t rot) |
79 | 0 | { |
80 | 0 | asm("rorl %1,%0" |
81 | 0 | : "+r" (input) |
82 | 0 | : "c" (static_cast<uint8_t>(rot)) |
83 | 0 | : "cc"); |
84 | 0 | return input; |
85 | 0 | } |
86 | | |
87 | | #endif |
88 | | |
89 | | #endif |
90 | | |
91 | | } |
92 | | |
93 | | #endif |