Indirectly prefetch board[from]
authorMarco Costalba <mcostalba@gmail.com>
Sun, 13 Sep 2009 08:02:20 +0000 (09:02 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sun, 13 Sep 2009 10:35:48 +0000 (11:35 +0100)
commit3863cd191c0bcc554ab17c6cd4642b354cec1403
treee88bb9a84484ac7999cda3dbb00a21470dd503ad
parentf205fe1fe503fe2eae8167225393e0abdd635042
Indirectly prefetch board[from]

One of the most time critical functions is move_is_check()
and in particular the call to type_of_piece_on(from) in the
switch statement.

This call lookups in board[] array and can be slow if board[from]
is not already cached. Few instructions before in the execution stream,
we check the move for legality with pl_move_is_legal().

This patch changes pl_move_is_legal() to use type_of_piece_on(from)
for checking for a king move so that board[from] is automatically
cached in L1 and ready to be used by the near follower move_is_check()

Another advantage is that the call to king_square(us) in pl_move_is_legal()
is avoided most of the times.

Speed up of this nice and tricky patch is 0.7% !

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/position.cpp