Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Bit counting revisited

Author: Flemming Rodler

Date: 13:09:43 04/20/00

Go up one level in this thread


>>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



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.