A simple way to do compile time loop unrolling

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Fri May 31 07:51:44 PDT 2013


On 5/31/13 10:06 AM, finalpatch wrote:
> Just want to share a new way I just discovered to do loop unrolling.
>
> template Unroll(alias CODE, alias N)
> {
> static if (N == 1)
> enum Unroll = format(CODE, 0);
> else
> enum Unroll = Unroll!(CODE, N-1)~format(CODE, N-1);
> }
>
> after that you can write stuff like
>
> mixin(Unroll!("v[%1$d]"~op~"=rhs.v[%1$d];", 3));
>
> and it gets expanded to
>
> v[0]+=rhs.v[0];v[1]+=rhs.v[1];v[2]+=rhs.v[2];
>
> I find this method simpler than with foreach() and a tuple range, and
> also faster because it's identical to hand unrolling.

Hehe, first shot is always a trip isn't it. Welcome aboard.

We should have something like that in phobos.


Andrei


More information about the Digitalmars-d mailing list