… | |
… | |
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>). There are no restrictions on the value C<count>, i.e. both |
736 | (C<ecb_rotl>). There are no restrictions on the value C<count>, i.e. both |
737 | zero and values equal or larger than the word width work correctly. |
737 | zero and values equal or larger than the word width work correctly. Also, |
|
|
738 | notwithstanding C<count> being unsigned, negative numbers work and shift |
|
|
739 | to the opposite direction. |
738 | |
740 | |
739 | Current GCC/clang versions understand these functions and usually compile |
741 | Current GCC/clang versions understand these functions and usually compile |
740 | them to "optimal" code (e.g. a single C<rol> or a combination of C<shld> |
742 | them to "optimal" code (e.g. a single C<rol> or a combination of C<shld> |
741 | on x86). |
743 | on x86). |
742 | |
744 | |