|
|
|
@ -45,14 +45,20 @@ |
|
|
|
|
|
|
|
// GCC 4.8 defines all the rotate functions now |
|
|
|
// Small issue with GCC's lrotl/lrotr intrinsics is they are still 32bit while we require 64bit |
|
|
|
#ifndef _rotl |
|
|
|
inline u32 _rotl(u32 x, int shift) { |
|
|
|
#ifdef _rotl |
|
|
|
#define rotl _rotl |
|
|
|
#else |
|
|
|
inline u32 rotl(u32 x, int shift) { |
|
|
|
shift &= 31; |
|
|
|
if (!shift) return x; |
|
|
|
return (x << shift) | (x >> (32 - shift)); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
inline u32 _rotr(u32 x, int shift) { |
|
|
|
#ifdef _rotr |
|
|
|
#define rotr _rotr |
|
|
|
#else |
|
|
|
inline u32 rotr(u32 x, int shift) { |
|
|
|
shift &= 31; |
|
|
|
if (!shift) return x; |
|
|
|
return (x >> shift) | (x << (32 - shift)); |
|
|
|
|