Coverage Report

Created: 2023-02-13 06:21

/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,2023 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
   requires (ROT > 0 && ROT < 8*sizeof(T))
23
38.8M
   {
24
38.8M
   return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT)));
25
38.8M
   }
Unexecuted instantiation: unsigned int Botan::rotl<3ul, unsigned int>(unsigned int)
unsigned int Botan::rotl<7ul, unsigned int>(unsigned int)
Line
Count
Source
23
11.0k
   {
24
11.0k
   return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT)));
25
11.0k
   }
unsigned int Botan::rotl<11ul, unsigned int>(unsigned int)
Line
Count
Source
23
11.0k
   {
24
11.0k
   return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT)));
25
11.0k
   }
Unexecuted instantiation: unsigned int Botan::rotl<19ul, unsigned int>(unsigned int)
unsigned int Botan::rotl<5ul, unsigned int>(unsigned int)
Line
Count
Source
23
19.3M
   {
24
19.3M
   return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT)));
25
19.3M
   }
unsigned int Botan::rotl<9ul, unsigned int>(unsigned int)
Line
Count
Source
23
15.6k
   {
24
15.6k
   return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT)));
25
15.6k
   }
Unexecuted instantiation: unsigned int Botan::rotl<13ul, unsigned int>(unsigned int)
unsigned int Botan::rotl<15ul, unsigned int>(unsigned int)
Line
Count
Source
23
11.0k
   {
24
11.0k
   return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT)));
25
11.0k
   }
unsigned int Botan::rotl<12ul, unsigned int>(unsigned int)
Line
Count
Source
23
11.0k
   {
24
11.0k
   return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT)));
25
11.0k
   }
unsigned int Botan::rotl<17ul, unsigned int>(unsigned int)
Line
Count
Source
23
11.0k
   {
24
11.0k
   return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT)));
25
11.0k
   }
unsigned int Botan::rotl<22ul, unsigned int>(unsigned int)
Line
Count
Source
23
11.0k
   {
24
11.0k
   return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT)));
25
11.0k
   }
unsigned int Botan::rotl<14ul, unsigned int>(unsigned int)
Line
Count
Source
23
11.0k
   {
24
11.0k
   return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT)));
25
11.0k
   }
unsigned int Botan::rotl<20ul, unsigned int>(unsigned int)
Line
Count
Source
23
15.6k
   {
24
15.6k
   return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT)));
25
15.6k
   }
unsigned int Botan::rotl<4ul, unsigned int>(unsigned int)
Line
Count
Source
23
15.6k
   {
24
15.6k
   return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT)));
25
15.6k
   }
unsigned int Botan::rotl<16ul, unsigned int>(unsigned int)
Line
Count
Source
23
11.0k
   {
24
11.0k
   return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT)));
25
11.0k
   }
unsigned int Botan::rotl<23ul, unsigned int>(unsigned int)
Line
Count
Source
23
11.0k
   {
24
11.0k
   return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT)));
25
11.0k
   }
unsigned int Botan::rotl<6ul, unsigned int>(unsigned int)
Line
Count
Source
23
15.6k
   {
24
15.6k
   return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT)));
25
15.6k
   }
unsigned int Botan::rotl<10ul, unsigned int>(unsigned int)
Line
Count
Source
23
11.0k
   {
24
11.0k
   return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT)));
25
11.0k
   }
unsigned int Botan::rotl<21ul, unsigned int>(unsigned int)
Line
Count
Source
23
11.0k
   {
24
11.0k
   return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT)));
25
11.0k
   }
Unexecuted instantiation: unsigned int Botan::rotl<8ul, unsigned int>(unsigned int)
unsigned int Botan::rotl<1ul, unsigned int>(unsigned int)
Line
Count
Source
23
21.5k
   {
24
21.5k
   return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT)));
25
21.5k
   }
unsigned int Botan::rotl<30ul, unsigned int>(unsigned int)
Line
Count
Source
23
19.2M
   {
24
19.2M
   return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT)));
25
19.2M
   }
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 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 int Botan::rotl<27ul, unsigned int>(unsigned int)
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
23
4.58k
   {
24
4.58k
   return static_cast<T>((input << ROT) | (input >> (8*sizeof(T) - ROT)));
25
4.58k
   }
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
   requires (ROT > 0 && ROT < 8*sizeof(T))
35
812M
   {
36
812M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
812M
   }
unsigned int Botan::rotr<2ul, unsigned int>(unsigned int)
Line
Count
Source
35
74.3M
   {
36
74.3M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
74.3M
   }
unsigned int Botan::rotr<13ul, unsigned int>(unsigned int)
Line
Count
Source
35
74.3M
   {
36
74.3M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
74.3M
   }
unsigned int Botan::rotr<22ul, unsigned int>(unsigned int)
Line
Count
Source
35
74.3M
   {
36
74.3M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
74.3M
   }
unsigned int Botan::rotr<6ul, unsigned int>(unsigned int)
Line
Count
Source
35
74.3M
   {
36
74.3M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
74.3M
   }
unsigned int Botan::rotr<11ul, unsigned int>(unsigned int)
Line
Count
Source
35
74.3M
   {
36
74.3M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
74.3M
   }
unsigned int Botan::rotr<25ul, unsigned int>(unsigned int)
Line
Count
Source
35
74.3M
   {
36
74.3M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
74.3M
   }
unsigned int Botan::rotr<17ul, unsigned int>(unsigned int)
Line
Count
Source
35
74.3M
   {
36
74.3M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
74.3M
   }
unsigned int Botan::rotr<19ul, unsigned int>(unsigned int)
Line
Count
Source
35
74.3M
   {
36
74.3M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
74.3M
   }
unsigned int Botan::rotr<7ul, unsigned int>(unsigned int)
Line
Count
Source
35
74.3M
   {
36
74.3M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
74.3M
   }
unsigned int Botan::rotr<18ul, unsigned int>(unsigned int)
Line
Count
Source
35
74.3M
   {
36
74.3M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
74.3M
   }
unsigned long Botan::rotr<14ul, unsigned long>(unsigned long)
Line
Count
Source
35
6.87M
   {
36
6.87M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
6.87M
   }
unsigned long Botan::rotr<18ul, unsigned long>(unsigned long)
Line
Count
Source
35
6.87M
   {
36
6.87M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
6.87M
   }
unsigned long Botan::rotr<41ul, unsigned long>(unsigned long)
Line
Count
Source
35
6.87M
   {
36
6.87M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
6.87M
   }
unsigned long Botan::rotr<28ul, unsigned long>(unsigned long)
Line
Count
Source
35
6.87M
   {
36
6.87M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
6.87M
   }
unsigned long Botan::rotr<34ul, unsigned long>(unsigned long)
Line
Count
Source
35
6.87M
   {
36
6.87M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
6.87M
   }
unsigned long Botan::rotr<39ul, unsigned long>(unsigned long)
Line
Count
Source
35
6.87M
   {
36
6.87M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
6.87M
   }
unsigned long Botan::rotr<19ul, unsigned long>(unsigned long)
Line
Count
Source
35
6.87M
   {
36
6.87M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
6.87M
   }
unsigned long Botan::rotr<61ul, unsigned long>(unsigned long)
Line
Count
Source
35
6.87M
   {
36
6.87M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
6.87M
   }
unsigned long Botan::rotr<1ul, unsigned long>(unsigned long)
Line
Count
Source
35
6.87M
   {
36
6.87M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
6.87M
   }
unsigned long Botan::rotr<8ul, unsigned long>(unsigned long)
Line
Count
Source
35
6.87M
   {
36
6.87M
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
6.87M
   }
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
35
4.58k
   {
36
4.58k
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
4.58k
   }
unsigned int Botan::rotr<4ul, unsigned int>(unsigned int)
Line
Count
Source
35
224k
   {
36
224k
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
224k
   }
unsigned int Botan::rotr<1ul, unsigned int>(unsigned int)
Line
Count
Source
35
4.58k
   {
36
4.58k
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
4.58k
   }
unsigned int Botan::rotr<9ul, unsigned int>(unsigned int)
Line
Count
Source
35
4.58k
   {
36
4.58k
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
4.58k
   }
unsigned int Botan::rotr<8ul, unsigned int>(unsigned int)
Line
Count
Source
35
3.25k
   {
36
3.25k
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
3.25k
   }
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
35
26.4k
   {
36
26.4k
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
26.4k
   }
unsigned int Botan::rotr<24ul, unsigned int>(unsigned int)
Line
Count
Source
35
3.25k
   {
36
3.25k
   return static_cast<T>((input >> ROT) | (input << (8*sizeof(T) - ROT)));
37
3.25k
   }
38
39
/**
40
* SHA-2 Sigma style function
41
*/
42
template<size_t R1, size_t R2, size_t S, typename T>
43
inline constexpr T sigma(T x)
44
162M
   {
45
162M
   return rotr<R1>(x) ^ rotr<R2>(x) ^ (x >> S);
46
162M
   }
unsigned int Botan::sigma<17ul, 19ul, 10ul, unsigned int>(unsigned int)
Line
Count
Source
44
74.3M
   {
45
74.3M
   return rotr<R1>(x) ^ rotr<R2>(x) ^ (x >> S);
46
74.3M
   }
unsigned int Botan::sigma<7ul, 18ul, 3ul, unsigned int>(unsigned int)
Line
Count
Source
44
74.3M
   {
45
74.3M
   return rotr<R1>(x) ^ rotr<R2>(x) ^ (x >> S);
46
74.3M
   }
unsigned long Botan::sigma<19ul, 61ul, 6ul, unsigned long>(unsigned long)
Line
Count
Source
44
6.87M
   {
45
6.87M
   return rotr<R1>(x) ^ rotr<R2>(x) ^ (x >> S);
46
6.87M
   }
unsigned long Botan::sigma<1ul, 8ul, 7ul, unsigned long>(unsigned long)
Line
Count
Source
44
6.87M
   {
45
6.87M
   return rotr<R1>(x) ^ rotr<R2>(x) ^ (x >> S);
46
6.87M
   }
47
48
/**
49
* SHA-2 Sigma style function
50
*/
51
template<size_t R1, size_t R2, size_t R3, typename T>
52
inline constexpr T rho(T x)
53
162M
   {
54
162M
   return rotr<R1>(x) ^ rotr<R2>(x) ^ rotr<R3>(x);
55
162M
   }
unsigned int Botan::rho<2ul, 13ul, 22ul, unsigned int>(unsigned int)
Line
Count
Source
53
74.3M
   {
54
74.3M
   return rotr<R1>(x) ^ rotr<R2>(x) ^ rotr<R3>(x);
55
74.3M
   }
unsigned int Botan::rho<6ul, 11ul, 25ul, unsigned int>(unsigned int)
Line
Count
Source
53
74.3M
   {
54
74.3M
   return rotr<R1>(x) ^ rotr<R2>(x) ^ rotr<R3>(x);
55
74.3M
   }
unsigned long Botan::rho<14ul, 18ul, 41ul, unsigned long>(unsigned long)
Line
Count
Source
53
6.87M
   {
54
6.87M
   return rotr<R1>(x) ^ rotr<R2>(x) ^ rotr<R3>(x);
55
6.87M
   }
unsigned long Botan::rho<28ul, 34ul, 39ul, unsigned long>(unsigned long)
Line
Count
Source
53
6.87M
   {
54
6.87M
   return rotr<R1>(x) ^ rotr<R2>(x) ^ rotr<R3>(x);
55
6.87M
   }
56
57
/**
58
* Bit rotation left, variable rotation amount
59
* @param input the input word
60
* @param rot the number of bits to rotate, must be between 0 and sizeof(T)*8-1
61
* @return input rotated left by rot bits
62
*/
63
template<typename T>
64
inline constexpr T rotl_var(T input, size_t rot)
65
   {
66
   return rot ? static_cast<T>((input << rot) | (input >> (sizeof(T)*8 - rot))) : input;
67
   }
68
69
/**
70
* Bit rotation right, variable rotation amount
71
* @param input the input word
72
* @param rot the number of bits to rotate, must be between 0 and sizeof(T)*8-1
73
* @return input rotated right by rot bits
74
*/
75
template<typename T>
76
inline constexpr T rotr_var(T input, size_t rot)
77
   {
78
   return rot ? static_cast<T>((input >> rot) | (input << (sizeof(T)*8 - rot))) : input;
79
   }
80
81
#if defined(BOTAN_USE_GCC_INLINE_ASM)
82
83
#if defined(BOTAN_TARGET_ARCH_IS_X86_64) || defined(BOTAN_TARGET_ARCH_IS_X86_32)
84
85
template<>
86
inline uint32_t rotl_var(uint32_t input, size_t rot)
87
0
   {
88
0
   asm("roll %1,%0"
89
0
       : "+r" (input)
90
0
       : "c" (static_cast<uint8_t>(rot))
91
0
       : "cc");
92
0
   return input;
93
0
   }
94
95
template<>
96
inline uint32_t rotr_var(uint32_t input, size_t rot)
97
0
   {
98
0
   asm("rorl %1,%0"
99
0
       : "+r" (input)
100
0
       : "c" (static_cast<uint8_t>(rot))
101
0
       : "cc");
102
0
   return input;
103
0
   }
104
105
#endif
106
107
#endif
108
109
}
110
111
#endif