Author: Dann Corbit
Date: 01:27:16 01/22/03
Go up one level in this thread
On January 22, 2003 at 03:29:05, Matt Taylor wrote: >On January 21, 2003 at 17:03:33, Dann Corbit wrote: > >>On January 21, 2003 at 15:48:57, Sander de Zoete wrote: >> >>>The following instruction I found for the new architecture of Intel Chips >>> >>>BSWAP—Byte Swap >>> >>>Description >>>Reverses the byte order of a 32-bit (destination) register: >>> >>>Operation >>>TEMP ¬ DEST >>>DEST(7..0) ¬ TEMP(31..24) >>>DEST(15..8) ¬ TEMP(23..16) >>>DEST(23..16) ¬ TEMP(15..8) >>>DEST(31..24) ¬ TEMP(7..0) >>>Flags Affected >>>None. >>>Opcode Instruction Description >>>0F C8+ rd BSWAP r32 Reverses the byte order of a 32-bit register. >>> >>>It is only valid for 486 architecture. >>> >>>If this instruction can be used, it should be very easy to reverse Reverse >>>BitBoards into Forward Boards again. Saving a lot of updating in make and unmake >>>move and also be much faster using the bitboards for generating attack >>>board for evaluation purposes, incheck checks etc. >>> >>>The thing left to do is to reverse the bits per byte. >>> >>>I use the following trick, but it doesn't seem to work voor the value 9. Let me >>>show you what I mean: (and ofcourse, can you help me?) >>> >>>In C code, it looks like this: >>> >>>typedef unsigned __int64 BITBOARD; >>> >>>void ReverseBitsPerByte(BITBOARD bitboard) >>>{ >>>// 1. Load the constant, k = 5555555555555555h >>>BITBOARD k = 0x5555555555555555; >>> >>>// 2. x = [(x shl 1) and k] or [(x and k) shr 1] result is: EFCDAB8967452301 >>>bitboard = ((bitboard<<1) & k) | ((bitboard & k)>>1 ); >>>} >>> >>>Initial bitboard: >>>11111110 >>>11011100 >>>10111010 >>>10011000 >>>01110110 >>>01010100 >>>00110010 >>>00010000 >>> >>>Result of ReverseBitsPerByte(bitboard): >>>01111111 >>>00111011 >>>01011101 >>>00011000<--what the ^*&* goes wrong here? Should be 00011001. >>>01101110 >>>00101010 >>>01001100 >>>00001000 >>> >>>Thanks for any help or suggestions. >> ><snip code> > >These are all basically the same algorithm. It's going to take a while to >rearrange everything when you do it bit-by-bit. Sander has the right idea by >first swapping bytes and then trying to reverse the bits within the bytes (8*2 >ops + the swap as opposed to 64*2 ops). The algorithms don't perform identically. They don't require 64 ops. Once you get the "Sander" algorithm completed, compare the two (and also the COBRA algorithm).
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.