Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Bit counting revisited

Author: Bo Persson

Date: 04:30:15 04/21/00

Go up one level in this thread


On April 20, 2000 at 16:09:43, Flemming Rodler wrote:

>>>PS: I still hope someone can show me how to inline assembler under gcc.
>>
>>Hopefully this helps (and works! :) :
>>
>>#define firstone(b) \
>>({ int __value; long long int __arg = (b); \
>>   asm ("bsfl %1,%0\n\t" \
>>	"jnz 1f\n\t" \
>>	"bsfl 4+%1,%0\n\t"\
>>	"jz 2f\n\t" \
>>	"addl $32,%0\n\t" \
>>	"jmp 1f\n\t" \
>>	"2:\n\t" \
>>	"movl $64,%0\n\t" \
>>	"1:\n\t" \
>>	: "=r" (__value) \
>>	: "o"  (__arg) ); \
>>	__value; })
>>
>>best wishes,
>>Andrzej Nagorko
>
>Thanks. I just tried it out, and it seems to work fine. Nice that it returns 64
>if there are no 1's in b. The execution time varies with the postion of the
>first 1. Not only depending in which half of the long long it resides in so the
>bsfl instruction have varying execution times. Maybe it a lookup table is
>faster? I will try later today.
>
>Thanks
>Flemming

The execution time varies becuase you have an AMD processor. On an Intel
PII/PIII, the BSF instruction will run in 1 or 2 clock ticks regardless of the
number of bits set!


Bo Persson
bop@malmo.mail.telia.com




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.