Author: Dann Corbit
Date: 15:29:09 01/21/03
Go up one level in this thread
On January 21, 2003 at 17:48:29, Sander de Zoete wrote:
>Dan,
>
>Thanks for the code, I found the following algorithm on the internet to
>reverse the board. My P3-laptop does not support SSE, so I have to walk right
>over to my P4: Meanwhile, here is what I'm working on.
>
>BITBOARD RevBoard(BITBOARD bb) // MMX
>{
> static const __int64 C55 = 0x5555555555555555;
> static const __int64 C33 = 0x3333333333333333;
> static const __int64 C0F = 0x0F0F0F0F0F0F0F0F;
> asm {
> // Load Bitboard into MMX
> movq mm0, qword ptr bb
> // 1. x = [(x shl 1) and C55] or [(x and C55) shr 1]
> movq mm1, mm0
> psllq mm0, 1
> pand mm0, C55
> pand mm1, C55
> psrlq mm1, 1
> por mm0, mm1
> // 2. x = [(x shl 2) and C33] or [(x and C33) shr 2]
> movq mm1, mm0
> psllq mm0, 2
> pand mm0, C33
> pand mm1, C33
> psrlq mm1, 2
> por mm0, mm1
> // 3. x = [(x shl 4) and C0F] or [(x and C0F) shr 4]
> movq mm1, mm0
> psllq mm0, 4
> pand mm0, C0F
> pand mm1, C0F
> psrlq mm1, 4
> por mm0, mm1
> // 4. x = (x shlw 8) or (x shrw 8) 0123456789ABCDEF
> movq mm1, mm0
> psllq mm0, 8
> pand mm0, C0F
> pand mm1, C0F
> psrlq mm1, 8
> por mm0, mm1
> // 5. x = x pshufw 00011011b (not supported on P3)
> pshufw mm0, 00011011b
>
> // Unload bitboard from MMX
> movq mm1, mm0
> psrlq mm1, 32
> movd eax, mm0
> movd edx, mm1
> }
>}
>
>pshufw, is not supported on this PC.
From here:
http://www.cpuid.com/sse/PSHUFW.htm
This is what it accomplishes:
mm1[15-0] = ( mm2/m64 >> (imm8[1-0] * 16) )[15-0];
mm1[31-16] = ( mm2/m64 >> (imm8[3-2] * 16) )[15-0];
mm1[47-32] = ( mm2/m64 >> (imm8[5-4] * 16) )[15-0];
mm1[63-48] = ( mm2/m64 >> (imm8[7-6] * 16) )[15-0];
This page took 0.01 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.