Article View: pl.comp.lang.asm
Article #2144Re: Zagadka
From: Michal Schulz
Date: Fri, 26 Mar 2010 06:40
Date: Fri, 26 Mar 2010 06:40
57 lines
2544 bytes
2544 bytes
Andrzej Grażyński wrote:
>> Podrzuć jeszcze jakieś zadanko, to miło czasem ruszyć głową nad
>> zdałoby się prostym problemem.
>>
>> w.
>>
> 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
PS. W SSE4.2 byloby jeszcze prosciej :)
--
Michal Schulz
Technical Details
Message-ID:
<4215848.3tubPC4RE0@meehow.homeip.net>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.nask.pl!news.nask.org.pl!news.onet.pl!not-for-mailReferences:
<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>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.nask.pl!news.nask.org.pl!news.onet.pl!not-for-mail From: Michal Schulz <michal.schulz@onet.eu> Newsgroups: pl.comp.lang.asm Subject: Re: Zagadka Followup-To: pl.comp.lang.asm Date: Fri, 26 Mar 2010 07:40:54 +0100 Organization: http://onet.pl Lines: 57 Message-ID: <4215848.3tubPC4RE0@meehow.homeip.net> 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> NNTP-Posting-Host: efzn038.efzn.tu-clausthal.de Mime-Version: 1.0 X-Trace: news.onet.pl 1269585655 20264 139.174.65.55 (26 Mar 2010 06:40:55 GMT) X-Complaints-To: niusy@onet.pl NNTP-Posting-Date: Fri, 26 Mar 2010 06:40:55 +0000 (UTC) User-Agent: KNode/4.4.1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit