Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.forth > #13545
| From | mhx@iae.nl (Marcel Hendrix) |
|---|---|
| Subject | Re: Counting bits using masks (riddle) |
| Newsgroups | comp.lang.forth |
| Message-ID | <87051699968435@frunobulax.edu> (permalink) |
| Date | 2012-07-04 19:30 +0200 |
| References | <436a40a1-dac4-484d-bf4d-26464adae02d@s9g2000vbg.googlegroups.com> |
| Organization | Wanadoo |
Alex McDonald <blog@rivadpm.com> writes Re: Counting bits using masks (riddle) > On Jul 4, 12:14 pm, Albert van der Horst <alb...@spenarnc.xs4all.nl> wrote: >> In article <db44c136-f82d-435e-85ec-0ecdd25c6...@h10g2000yqn.googlegroups.com>, > For Intel processors that don't have a POPCNT; > 32bit version > code cntbit ( n -- bits-in-n ) \ population count of bits in eax > 1 1 in/out > mov ecx eax ... > next; CREATE xbits PRIVATE #256 CHARS ALLOT xbits #256 CONST-DATA : #BITS ( u -- #bits ) 0 SWAP BEGIN TUCK WHILE 1+ SWAP DUP 1- AND REPEAT NIP ; : INIT-BITS #256 0 DO I #BITS xbits I + C! LOOP ; INIT-BITS FORGET #BITS 64BIT? [IF] -- Count bits in word : #BITS ( u1 -- u2 ) DUP $FF AND xbits + C@ >R 8 RSHIFT DUP $FF AND xbits + C@ R> + >R 8 RSHIFT DUP $FF AND xbits + C@ R> + >R 8 RSHIFT DUP $FF AND xbits + C@ R> + >R 8 RSHIFT DUP $FF AND xbits + C@ R> + >R 8 RSHIFT DUP $FF AND xbits + C@ R> + >R 8 RSHIFT DUP $FF AND xbits + C@ R> + SWAP 8 RSHIFT $FF AND xbits + C@ + ; [ELSE] : #BITS ( u1 -- u2 ) DUP $FF AND xbits + C@ >R 8 RSHIFT DUP $FF AND xbits + C@ R> + >R 8 RSHIFT DUP $FF AND xbits + C@ R> + SWAP 8 RSHIFT $FF AND xbits + C@ + ; [THEN] : t1 ( u1 -- u2 ) #BITS ; : t2 ( -- u ) 12345 t1 ; : test ( -- ) 1234 t1 t2 + . ; FORTH> see test Flags: ANSI $01248800 : test $0124880A push #11 b# $0124880C jmp .+10 ( $011398A2 ) offset NEAR $01248811 ; Saved a few ANDs there ... -marcel
Back to comp.lang.forth | Previous | Next — Previous in thread | Next in thread | Find similar
Counting bits using masks (riddle) Albert van der Horst <albert@spenarnc.xs4all.nl> - 2012-07-03 21:27 +0000
Re: Counting bits using masks (riddle) "A. K." <akk@nospam.org> - 2012-07-03 23:51 +0200
Re: Counting bits using masks (riddle) Pablo Hugo Reda <pabloreda@gmail.com> - 2012-07-03 15:38 -0700
Re: Counting bits using masks (riddle) Albert van der Horst <albert@spenarnc.xs4all.nl> - 2012-07-04 11:14 +0000
Re: Counting bits using masks (riddle) Alex McDonald <blog@rivadpm.com> - 2012-07-04 04:26 -0700
Re: Counting bits using masks (riddle) mhx@iae.nl (Marcel Hendrix) - 2012-07-04 19:30 +0200
Re: Counting bits using masks (riddle) Alex McDonald <blog@rivadpm.com> - 2012-07-04 12:44 -0700
Re: Counting bits using masks (riddle) Albert van der Horst <albert@spenarnc.xs4all.nl> - 2012-07-04 11:40 +0000
Re: Counting bits using masks (riddle) Mark Wills <markrobertwills@yahoo.co.uk> - 2012-07-04 14:03 -0700
csiph-web