Use fast and simple ROTR algorithm implementation.

This commit is contained in:
Andrey Akhmichin 2023-11-01 01:31:10 +05:00
parent 984986f998
commit 7581cacd6f
1 changed files with 3 additions and 18 deletions

View File

@ -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