On Tue, Sep 6, 2011 at 4:21 PM, Martin S. Weber <martin.we...@nist.gov> wrote:
> (and many, many, many, many more lines like that). This seems to be because
> of the calls to asm() ... I don't know how to fix that. FYI, after
> preprocessing, the first instruction of line 104 looks like:
>
>  qq[4]+=((qq[1]&(qq[2]^qq[3]))^qq[3])+(block[0] = (({ unsigned
>    int y; asm("rorl" " %1,%0" : "=r" (y) : "I" (8), "0" (block[0]));
>    y; })&0xFF00FF00) |(({ unsigned int y; asm("roll" " %1,%0" :
>    "=r" (y) : "I" (8), "0" (block[0])); y; })&0x00FF00FF))+0x5A827999+({
>    unsigned int y; asm("roll" " %1,%0" : "=r" (y) : "I" (5), "0"
>    (qq[0])); y; });

The asm() calls are being used to invoke the rotate instructions. C
does not have operators for peforming bitwise rotation of an operand
and emulating a rotate using shifts is messy and very ineficient:

unsigned int rotateLeft(unsigned int x, unsigned int n)
{
    unsigned int t;

    t = x >> (SIZEOFINT - n);
    return ((x << n) | t);
}
_______________________________________________
fossil-users mailing list
fossil-users@lists.fossil-scm.org
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users

Reply via email to