Author: Sander de Zoete
Date: 12:48:57 01/21/03
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. Sander.
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.