🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Zagadka

#2144
From: Michal Schulz
Date: Fri, 26 Mar 2010 06:40
57 lines
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-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>

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