diff --git a/dlls/util.cpp b/dlls/util.cpp index cb651940..6cfebc10 100644 --- a/dlls/util.cpp +++ b/dlls/util.cpp @@ -1730,25 +1730,10 @@ void CSaveRestoreBuffer::BufferRewind( int size ) } #if !XASH_WIN32 && !__WATCOMC__ -extern "C" { -unsigned _rotr( unsigned val, int shift ) +static unsigned _rotr( unsigned val, int shift ) { - unsigned lobit; /* non-zero means lo bit set */ - unsigned num = val; /* number to rotate */ - - shift &= 0x1f; /* modulo 32 -- this will also make - negative shifts work */ - - while( shift-- ) - { - lobit = num & 1; /* get high bit */ - num >>= 1; /* shift right one bit */ - if( lobit ) - num |= 0x80000000; /* set hi bit if lo bit was set */ - } - - return num; -} + // Any modern compiler will generate one single ror instruction for x86, arm and mips here. + return ( val >> shift ) | ( val << ( 32 - shift )); } #endif