🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #2145

Re: Zagadka

#2145
From: Wojciech Muła
Date: Fri, 26 Mar 2010 08:46
57 lines
2791 bytes
Michal Schulz <michal.schulz@onet.eu> wrote:

> > Ten fragment zlicza jedynki w EAX
> > 
> > MACRO VCOUNTONESSTEP MSK, SHFT
> >           MOV  ECX,&MSK
> >           MOV  EDX,EAX
> >           SHR  EAX,&SHFT
> >           AND  EAX,ECX
> >           AND  EDX,ECX
> >           ADD  EAX,EDX
> > ENDM
> > 
> > VCOUNTONESSTEP 055555555H,1
> > VCOUNTONESSTEP 033333333H,2
> > VCOUNTONESSTEP  0F0F0F0FH,4
> > VCOUNTONESSTEP  00FF00FFH,8
> > VCOUNTONESSTEP  0000FFFFH,16
> 
> W tym pojedynku wygral niestety gcc, ktory ten sam kod:
> 
> unsigned long bfcnto(unsigned long v)
> {
>     unsigned long const w = v - ((v >> 1) & 0x55555555);
>     unsigned long const x = (w & 0x33333333) + ((w >> 2) & 0x33333333);
>     unsigned long const c = (((x + (x >> 4)) & 0xF0F0F0F) * 0x1010101)>>24;
> 
>     return c;
> }
> 
> przetworzyl na wersje prawie identyczna z twoja:
> 
>         mov     edx, eax
>         shr     edx
>         and     edx, 0x55555555
>         sub     eax, edx
>         mov     edx, eax
>         and     eax, 0x33333333
>         shr     edx, 2
>         and     edx, 0x33333333
>         add     edx, eax
>         mov     eax, edx
>         shr     eax, 4
>         add     eax, edx
>         and     eax, 0x0f0f0f0f
>         imul    eax, eax, 0x01010101
>         shr     eax, 24

Uprzedziłeś mnie:
http://graphics.stanford.edu/~seander/bithacks.html

> PS. W SSE4.2 byloby jeszcze prosciej :)

W SSSE3 też dość prosto:
http://wm.ite.pl/articles/sse-popcount.html

w.
Technical Details
Message-ID: <20100326094609.c9199b47.wojciech_mula@poczta.null.onet.pl.invalid>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.internetia.pl!news.nask.pl!news.nask.org.pl!news.onet.pl!not-for-mail
References: <hnm094$v7l$1@news.onet.pl> <hnoh5b$3m7$1@inews.gazeta.pl> <hnveer$306$1@news.onet.pl> <20100319114543.3cac8a82.wojciech_mula@poczta.null.onet.pl.invalid> <ho8ca6$tvk$1@news.onet.pl> <20100322194214.69cd904d.wojciech_mula@poczta.null.onet.pl.invalid> <hodubo$aan$1@news.onet.pl> <20100325202642.6eb8bfe8.wojciech_mula@poczta.null.onet.pl.invalid> <hogqkc$bea$1@news.onet.pl> <4215848.3tubPC4RE0@meehow.homeip.net>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.internetia.pl!news.nask.pl!news.nask.org.pl!news.onet.pl!not-for-mail
From: Wojciech Muła
 <wojciech_mula@poczta.null.onet.pl.invalid>
Newsgroups: pl.comp.lang.asm
Subject: Re: Zagadka
Date: Fri, 26 Mar 2010 09:46:09 +0100
Organization: http://onet.pl
Lines: 58
Message-ID: <20100326094609.c9199b47.wojciech_mula@poczta.null.onet.pl.invalid>
References: <hnm094$v7l$1@news.onet.pl> <hnoh5b$3m7$1@inews.gazeta.pl> <hnveer$306$1@news.onet.pl> <20100319114543.3cac8a82.wojciech_mula@poczta.null.onet.pl.invalid> <ho8ca6$tvk$1@news.onet.pl> <20100322194214.69cd904d.wojciech_mula@poczta.null.onet.pl.invalid> <hodubo$aan$1@news.onet.pl> <20100325202642.6eb8bfe8.wojciech_mula@poczta.null.onet.pl.invalid> <hogqkc$bea$1@news.onet.pl> <4215848.3tubPC4RE0@meehow.homeip.net>
NNTP-Posting-Host: public-gprs2149.centertel.pl
Mime-Version: 1.0
X-Trace: news.onet.pl 1269593185 8143 87.96.8.101 (26 Mar 2010 08:46:25 GMT)
X-Complaints-To: niusy@onet.pl
NNTP-Posting-Date: Fri, 26 Mar 2010 08:46:25 +0000 (UTC)
X-Newsreader: Sylpheed 2.5.0 (GTK+ 2.10.14; i686-pc-mingw32)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit