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.