On Wed, Mar 9, 2011 at 7:25 PM, U2 fan <i...@u2fan.com> wrote: > == Quote from bearophile (bearophileh...@lycos.com)'s article >> Tom: >> > What is the most efficient way of implement a rotation of ubyte[4] array? >> > >> > By rotation I mean: rotateRight([1, 2, 3, 4]) -> [4, 1, 2, 3] >> Two versions, I have done no benchmarks so far: >> import std.c.stdio: printf; >> union Four { >> ubyte[4] a; >> uint u; >> } >> void showFour(Four f) { >> printf("f.u: %u\n", f.u); >> printf("f.a: [%d, %d, %d, %d]\n", >> cast(int)f.a[0], cast(int)f.a[1], >> cast(int)f.a[2], cast(int)f.a[3]); >> } >> void main() { >> Four f; >> f.a[] = [1, 2, 3, 4]; >> showFour(f); >> f.u = (f.u << 8) | (f.u >> 24); >> showFour(f); >> printf("\n"); >> // alternative >> f.a[] = [1, 2, 3, 4]; >> uint u2 = f.u; >> showFour(f); >> printf("u2: %u\n", u2); >> asm { >> rol u2, 8; >> } >> f.u = u2; >> showFour(f); >> } >> Bye, >> bearophile > > I am offend! >
Once I figured it out, I lol'd quite a bit.