Причём для того-же x86-го (у которого есть в архитектуре кольцевой сдвиг) GCC это распознаёт
unsigned int rotate(unsigned int x, int n)
{
return x>>n | x<<(sizeof(x)*8-n);
}
.file "rol.c"
.text
.align 2
.p2align 4,,15
.globl _rotate
.def _rotate; .scl 2; .type 32; .endef
_rotate:
movl 4(%esp), %eax
movl 8(%esp), %ecx
rorl %cl, %eax
ret