@@ -17,7 +17,7 @@ MEM_STATIC unsigned ZSTD_countTrailingZeros32_fallback(U32 val)
17
17
{
18
18
assert (val != 0 );
19
19
{
20
- static const int DeBruijnBytePos [32 ] = {0 , 1 , 28 , 2 , 29 , 14 , 24 , 3 ,
20
+ static const U32 DeBruijnBytePos [32 ] = {0 , 1 , 28 , 2 , 29 , 14 , 24 , 3 ,
21
21
30 , 22 , 20 , 15 , 25 , 17 , 4 , 8 ,
22
22
31 , 27 , 13 , 23 , 21 , 19 , 16 , 7 ,
23
23
26 , 12 , 18 , 6 , 11 , 5 , 10 , 9 };
@@ -30,7 +30,7 @@ MEM_STATIC unsigned ZSTD_countTrailingZeros32(U32 val)
30
30
assert (val != 0 );
31
31
# if defined(_MSC_VER )
32
32
# if STATIC_BMI2 == 1
33
- return _tzcnt_u32 (val );
33
+ return ( unsigned ) _tzcnt_u32 (val );
34
34
# else
35
35
if (val != 0 ) {
36
36
unsigned long r ;
@@ -69,7 +69,7 @@ MEM_STATIC unsigned ZSTD_countLeadingZeros32(U32 val)
69
69
assert (val != 0 );
70
70
# if defined(_MSC_VER )
71
71
# if STATIC_BMI2 == 1
72
- return _lzcnt_u32 (val );
72
+ return ( unsigned ) _lzcnt_u32 (val );
73
73
# else
74
74
if (val != 0 ) {
75
75
unsigned long r ;
@@ -92,7 +92,7 @@ MEM_STATIC unsigned ZSTD_countTrailingZeros64(U64 val)
92
92
assert (val != 0 );
93
93
# if defined(_MSC_VER ) && defined(_WIN64 )
94
94
# if STATIC_BMI2 == 1
95
- return _tzcnt_u64 (val );
95
+ return ( unsigned ) _tzcnt_u64 (val );
96
96
# else
97
97
if (val != 0 ) {
98
98
unsigned long r ;
@@ -123,7 +123,7 @@ MEM_STATIC unsigned ZSTD_countLeadingZeros64(U64 val)
123
123
assert (val != 0 );
124
124
# if defined(_MSC_VER ) && defined(_WIN64 )
125
125
# if STATIC_BMI2 == 1
126
- return _lzcnt_u64 (val );
126
+ return ( unsigned ) _lzcnt_u64 (val );
127
127
# else
128
128
if (val != 0 ) {
129
129
unsigned long r ;
@@ -172,4 +172,29 @@ MEM_STATIC unsigned ZSTD_highbit32(U32 val) /* compress, dictBuilder, decodeCo
172
172
return 31 - ZSTD_countLeadingZeros32 (val );
173
173
}
174
174
175
+ /* ZSTD_rotateRight_*():
176
+ * Rotates a bitfield to the right by "count" bits.
177
+ * https://en.wikipedia.org/w/index.php?title=Circular_shift&oldid=991635599#Implementing_circular_shifts
178
+ */
179
+ MEM_STATIC
180
+ U64 ZSTD_rotateRight_U64 (U64 const value , U32 count ) {
181
+ assert (count < 64 );
182
+ count &= 0x3F ; /* for fickle pattern recognition */
183
+ return (value >> count ) | (U64 )(value << ((0U - count ) & 0x3F ));
184
+ }
185
+
186
+ MEM_STATIC
187
+ U32 ZSTD_rotateRight_U32 (U32 const value , U32 count ) {
188
+ assert (count < 32 );
189
+ count &= 0x1F ; /* for fickle pattern recognition */
190
+ return (value >> count ) | (U32 )(value << ((0U - count ) & 0x1F ));
191
+ }
192
+
193
+ MEM_STATIC
194
+ U16 ZSTD_rotateRight_U16 (U16 const value , U32 count ) {
195
+ assert (count < 16 );
196
+ count &= 0x0F ; /* for fickle pattern recognition */
197
+ return (value >> count ) | (U16 )(value << ((0U - count ) & 0x0F ));
198
+ }
199
+
175
200
#endif /* ZSTD_BITS_H */
0 commit comments