Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: ASM/Optimization

Author: Gerd Isenberg

Date: 11:14:55 12/07/05

Go up one level in this thread


On December 07, 2005 at 00:49:53, Russell Reagan wrote:

>On December 06, 2005 at 13:06:01, Zappa wrote:
>
>>Yes, but I have to write it twice :)  That is my problem.
>
>
>You don't have to write it twice if you use templates as generic function
>generators.
>
>
>
>First establish a handful of color-specific operations.
>
>enum Color { white, black };
>
>template <Color c>
>unsigned shift_fwd (unsigned x, unsigned n) {
>    return x << n;
>}
>
>template <>
>unsigned shift_fwd<black> (unsigned x, unsigned n) {
>    return x >> n;
>}
>
>
>
>Then write generic, color-blind code.
>
>// You write one, compiler generates two
>template <Color c>
>unsigned fwd_pawn_moves (unsigned x) {
>    return shift_fwd<c>(x, 8) & empty_squares;
>}
>
>
>
>Now you have two functions, but you only wrote one.
>
>fwd_pawn_moves<white>(x);
>fwd_pawn_moves<black>(x);
>
>
>
>You can propagate the template parameters from a higher level if you want.
>
>template <Color c>
>int eval () {
>    // ...
>
>    x = fwd_pawn_moves<c>(y);
>
>    // ...
>}
>
>
>
>For something this trivial, it may not be worth it. That's up to you, but
>there's the idea he was going for. At some level you'd have to have an if-else,
>switch statement, or whatever, but you'd do that anyway if you wrote two
>functions, and you only have to do it once in your program and let the rest
>propagate.
>
>if (side == white)
>    return eval<white>();
>else
>    return eval<black>();
>
>
>
>Personally, I would just use some math and be done with it, as an extra shift
>can't possibly be the bottleneck of your program.
>
>enum { white, black }
>
>unsigned shift_fwd (unsigned x) {
>    return (x << 8) >> (side * 16);
>}

Hi Russell,

yep of course - we had that stuff already some time ago. Nice to remember from
time to time. Yes, the shift is sufficent for pure pawn bitboards where the back
ranks are cleared.

shl ecx, 4 ; side * 16
shl rax, 8
shr rax, cl

Cheers,
Gerd



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.