[Issue 6829] Unsigned rotate standard function in Phobos

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed Jul 10 06:45:06 PDT 2013


http://d.puremagic.com/issues/show_bug.cgi?id=6829



--- Comment #12 from bearophile_hugs at eml.cc 2013-07-10 06:45:05 PDT ---
A bit better, with a pre-condition to catch some bugs:


T rol(T)(in T x, in uint n) @safe pure nothrow
if (isIntegral!T && isUnsigned!T)
in {
    assert(n < (T.sizeof * 8));
} body {
    return cast(T)((x << n) | (x >> ((T.sizeof * 8) - n)));
}

T ror(T)(in T x, in uint n) @safe pure nothrow
if (isIntegral!T && isUnsigned!T)
in {
    assert(n < (T.sizeof * 8));
} body {
    return cast(T)((x >> n) | (x << ((T.sizeof * 8) - n)));
}

--------------

(In reply to comment #11)

> gdc > (ldc && dmd);
> 
> It has no problem detecting all those cases.  :o)

But is that asm generated by gdc actually faster than this asm generated by
ldc2?

One of the main points of adding those two templated functions to core.bitop is
to have a single common standard pair of rotations that all present and future
D compilers can recognize and optimize well.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list