What about my edited version:

import std.stdio;

uint rotl_d(uint value,ubyte rotation){
    return (value<<rotation) | (value>>(value.sizeof*8 - rotation));
}

uint rotl_asm(uint value,ubyte rotation){
    asm{
        mov EAX, value;   // get first argument
        mov CL , rotation; // how many bits to move
        rol EAX, CL;
    }// return with result in EAX
}

void bin_writeln(string info,uint value, bool nl){
    writefln("%1s: %02$32b%3$s",info,value,nl?"\n":"");
}

int main(string[] argv){
    uint a=0xc0def00d;
    bin_writeln("value a",a           ,false);
    bin_writeln("value b",rotl_d(a,1),true);
    //
    bin_writeln("value a",a             ,false);
    bin_writeln("value b",rotl_asm(a,1),true);
        
        uint b;
        ubyte c = 0;
        while ( 1 == 1 ) { // Press Ctrl + C to quit
                b = rotl_asm(0xc0def00d, c);
                foreach (rst; 0 .. 5_000 )
                        writef("%032b %2d\r",b, c );
                c = cast(ubyte)( c + 1 == 32 ? 0 : c + 1 );
                
        }
    return 0;
}

Reply via email to