KennyTM~ wrote:
On Dec 7, 09 03:41, Don wrote:
dsimcha wrote:
== Quote from bearophile ([email protected])'s article
Andrei Alexandrescu:
Should we yank operator>>>?
We can change it purpose and add the other one:
<<< rotate left
rotate right
Bye,
bearophile

This is a good idea, although rotate may be seldom enough used not to
warrant its
own (possibly overloadable) operator. std.intrinsic might be a better
place for
rotate. On the other hand, rotate is a single ASM instruction, at
least on x86.
In a close to the metal language, there needs to be a straightforward,
efficient
way to access it.

I think DMD should just do what gcc does: recognize that
(x << 32-n | x>>n) is ror n
(x << n | x>> 32-n) is rol n

where x is int. Ugly, but doesn't require an intrinsic.


It's still better to provide a std.???.rol(T)(T x) and ror because that (least) ugly code only works if you already know x is a uint. That ror code won't work if x is signed (int: cast into uint first) or is 64-bit (ulong: replace 32 with (8*x.sizeof)).

That's why I said 'where x is uint'. I was trying to keep the example simple. There is no way anyone should EVER be doing a rotation on a signed type -- that's insane.

Reply via email to