Thanks Andy,

With the change suggested, the tests do succeed.

-----Original Message-----
From: Andy Polyakov via RT [mailto:[email protected]] 
Sent: Tuesday, September 23, 2014 14:01
To: Gilles Khouzam
Cc: [email protected]
Subject: Re: [openssl.org #3541] [PATCH] BN_nist_mod_521 fails on Windows ARM

>> When compiling OpenSSL optimized on ARM using the Microsoft compiler, 
>> the wrong code is being emitted for BN_nist_mod_521 (in bn_nist.c).
>> The compiler seems to think that val and temp represent the same item 
>> when they are clearly one index apart. I've coded a fix that simply 
>> avoid using temporary variables and uses the indices into the t_d 
>> array directly. The code is simply a refactor of the existing code 
>> and does generate very effective neon instructions for the loop.
>>
>> ectest test which was always failing before in ARM on Windows is now 
>> succeeding (as well as all the other tests).
> 
> I recall looking at code generated at x86 and not liking the result 
> with code similar to what you suggest. Which is why those temporary 
> values were added. I wonder if you could test following loop.
> 
>         for (val=t_d[0],i=0; i<BN_NIST_521_TOP-1; i++)
>                 {
>                 t_d[i] = (val>>BN_NIST_521_RSHIFT |
>                           (val=t_d[i+1])<<BN_NIST_521_LSHIFT) & BN_MASK2;
>                 }
>         t_d[i] = val>>BN_NIST_521_RSHIFT;

Other compilers issue warnings, so try this instead

        for (val=t_d[0],i=0; i<BN_NIST_521_TOP-1; i++)
                {
                t_d[i] = (val>>BN_NIST_521_RSHIFT |
                          (tmp=t_d[i+1])<<BN_NIST_521_LSHIFT) & BN_MASK2;
                val=tmp;
                }
        t_d[i] = val>>BN_NIST_521_RSHIFT;

If it doesn't work, then we'll go for removing temporary values.



______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       [email protected]
Automated List Manager                           [email protected]

Reply via email to