… | |
… | |
731 | |
731 | |
732 | =item uint64_t ecb_rotr64 (uint64_t x, unsigned int count) |
732 | =item uint64_t ecb_rotr64 (uint64_t x, unsigned int count) |
733 | |
733 | |
734 | These two families of functions return the value of C<x> after rotating |
734 | These two families of functions return the value of C<x> after rotating |
735 | all the bits by C<count> positions to the right (C<ecb_rotr>) or left |
735 | all the bits by C<count> positions to the right (C<ecb_rotr>) or left |
736 | (C<ecb_rotl>). |
736 | (C<ecb_rotl>). There are no restrictions on the value C<count>, i.e. both |
737 | |
737 | zero and values equal or larger than the word width work correctly. |
738 | The valid range for C<count> is C<1> to the number of bits in the |
|
|
739 | underlying datatype minus one (7/15/31/63). If you need a rotate count |
|
|
740 | of zero you need to add an extra check before calling these functions |
|
|
741 | currently. |
|
|
742 | |
738 | |
743 | Current GCC/clang versions understand these functions and usually compile |
739 | Current GCC/clang versions understand these functions and usually compile |
744 | them to "optimal" code (e.g. a single C<rol> or a combination of C<shld> |
740 | them to "optimal" code (e.g. a single C<rol> or a combination of C<shld> |
745 | on x86). |
741 | on x86). |
746 | |
742 | |