Author: Matt Taylor
Date: 00:29:05 01/22/03
Go up one level in this thread
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). -Matt
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.