Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Visual C++ question

Author: Tony Werten

Date: 22:34:13 05/19/05

Go up one level in this thread


On May 15, 2005 at 06:22:22, Gerd Isenberg wrote:

>On May 14, 2005 at 18:47:38, Tony Werten wrote:
>
>>Hi,
>>
>>when I use the compiler intrinsic __ull_rshift it has the (undocumented) feature
>>of wrapping the shift amount around 32.
>>
>>What do I have to use to shift with more than 32 ?
>>
>>Cheers,
>>
>>Tony
>
>Yes, __ull_rshift seems to be wrong documented.

Microsoft fixed it :) Unfortunately not with by adjusting the compiler but by
adjusting the documentation :(

Tony

>It produces the shortest code, a shrd and a shr instruction with implicit nShift
>mod 32. Performant - but only correct for nShifts < 32.
>Shift right operand works correct on unsigned __int64 for all nShift mod 64 but
>requires a call and some conditional jumps depending on nShift.
>
>extern "C"
>unsigned __int64 __ull_rshift(unsigned __int64 mask, int nBit);
>#pragma intrinsic(__ull_rshift)
>
>void test_Shr()
>{
>  BitBoard b1 = 0x123456789abcdef0;
>  for (int i = 1; i < 64; i++)
>  {
>    BitBoard b2 =  __ull_rshift(b1, i);
>    BitBoard b3 = b1 >> i;
>    if ( b2 != b3 )
>      __debugbreak();
>  }
>}
>
>
>Cheers,
>Gerd



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.